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)
		echo "FATAL: '".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'
	call MakeDir( dir1 )
	let resdir1 = substitute(fnamemodify(dir1, ':p:8'), '\\$', '', '')
	if resdir1 !~ '\V\^c:/XX\x\x\x\x~1.Y\$'
		echo "FATAL: unexpected short name: " . resdir1
		echo "INFO: please report your OS to vim-dev"
		return
	endif
	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( 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

