Test for shortpathname ':8' extension.
Only for use on Win32 systems!

STARTTEST
:so small.vim
:fun! TestIt(file, bits, expected)
	let res=fnamemodify(a:file,a:bits)
	if a:expected == ''
		echo "'".a:file."'->(".a:bits.")->'".res."'"
	else
		if substitute(res,'/','\\', 'g') != substitute( a:expected, '/','\\', 'g') 
			echo "FAILED: '".a:file."'->(".a:bits.")->'".res."'"
			echo "Expected: '".a:expected."'"
		else
			echo "OK"
		endif
	endif
endfun
:fun! MakeDir( dirname )
	"exe '!mkdir '.substitute(a:dirname,'/','\\','g')
	call system('mkdir '.substitute(a:dirname,'/','\\','g'))
endfun
:fun! RMDir( dirname)
	"exe '!rmdir '.substitute(a:dirname,'/','\\','g')
	call system('rmdir '.substitute(a:dirname,'/','\\','g'))
endfun
:fun! MakeFile( filename)
	"exe '!copy nul '.substitute(a:filename,'/','\\','g')
	call system('copy nul '.substitute(a:filename,'/','\\','g'))
endfun
:fun! TestColonEight()
   redir! >test.out
	" This could change for CygWin to //cygdrive/c
	let dir1='c:/x.x.y'
	if filereadable(dir1) || isdirectory(dir1)
		call confirm( "'".dir1."' exists, cannot run test" )
		return
	endif
	let file1=dir1.'/zz.y.txt'
	let nofile1=dir1.'/z.y.txt'
	let dir2=dir1.'/VimIsTheGreatestSinceSlicedBread'
	let file2=dir2.'/z.txt'
	let nofile2=dir2.'/zz.txt'
	let resdir1='c:/XX2235~1.Y'
	let resfile1=resdir1.'/ZZY~1.TXT'
	let resnofile1=resdir1.'/z.y.txt'
	let resdir2=resdir1.'/VIMIST~1'
	let resfile2=resdir2.'/z.txt'
	let resnofile2=resdir2.'/zz.txt'
	call MakeDir( dir1 )
	call MakeDir( dir2 )
	call MakeFile( file1 )
	call MakeFile( file2 )
	call TestIt(file1, ':p:8', resfile1)
	call TestIt(nofile1, ':p:8', resnofile1)
	call TestIt(file2, ':p:8', resfile2)
	call TestIt(nofile2, ':p:8', resnofile2)
	call TestIt(nofile2, ':p:8:h', fnamemodify(resnofile2,':h'))
	exe 'cd '.dir1
	call TestIt(file1, ':.:8', strpart(resfile1,strlen(resdir1)+1))
	call TestIt(nofile1, ':.:8', strpart(resnofile1,strlen(resdir1)+1))
	call TestIt(file2, ':.:8', strpart(resfile2,strlen(resdir1)+1))
	call TestIt(nofile2, ':.:8', strpart(resnofile2,strlen(resdir1)+1))
	let $HOME=dir1
	call TestIt(file1, ':~:8', '~'.strpart(resfile1,strlen(resdir1)))
	call TestIt(nofile1, ':~:8', '~'.strpart(resnofile1,strlen(resdir1)))
	call TestIt(file2, ':~:8', '~'.strpart(resfile2,strlen(resdir1)))
	call TestIt(nofile2, ':~:8', '~'.strpart(resnofile2,strlen(resdir1)))
	cd c:/
	call delete( file2 )
	call delete( file1 )
	call RMDir( dir2 )
	call RMDir( dir1 )
       echo
   redir END
endfun
:let dir = getcwd()
:call TestColonEight()
:exe "cd " . dir
:edit! test.out
:set ff=dos
:w
:qa!
ENDTEST

