diff options
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 2 | ||||
-rw-r--r-- | src/testdir/Make_dos.mak | 3 | ||||
-rw-r--r-- | src/testdir/Make_ming.mak | 5 | ||||
-rw-r--r-- | src/testdir/Make_vms.mms | 3 | ||||
-rw-r--r-- | src/testdir/test42.in | bin | 2386 -> 0 bytes | |||
-rw-r--r-- | src/testdir/test42.ok | bin | 409 -> 0 bytes | |||
-rw-r--r-- | src/testdir/test_writefile.vim | 128 | ||||
-rw-r--r-- | src/version.c | 2 |
9 files changed, 133 insertions, 12 deletions
diff --git a/src/Makefile b/src/Makefile index bbf80d326..d34a60891 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2310,7 +2310,7 @@ test_libvterm: # Run individual OLD style test. # These do not depend on the executable, compile it when needed. -test1 test42 test49 test59: +test1 test49 test59: cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) # Run individual NEW style test. diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index a25a480dd..635087cbd 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -11,7 +11,7 @@ NO_INITS = -U NONE $(NO_PLUGINS) SCRIPTS_FIRST = test1.out # Tests that run on all systems. -SCRIPTS_ALL = test42.out +SCRIPTS_ALL = # Tests that run on most systems, but not on Amiga. SCRIPTS_MORE1 = diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak index 0e07ed5c5..f97b3e9bb 100644 --- a/src/testdir/Make_dos.mak +++ b/src/testdir/Make_dos.mak @@ -10,10 +10,7 @@ default: nongui !include Make_all.mak # Omitted: -# test2 "\\tmp" doesn't work. -# test10 'errorformat' is different # test49 fails in various ways -# test97 \{ and \$ are not escaped characters. SCRIPTS = $(SCRIPTS_ALL) $(SCRIPTS_MORE1) $(SCRIPTS_MORE4) diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak index f95f70c88..e1f346749 100644 --- a/src/testdir/Make_ming.mak +++ b/src/testdir/Make_ming.mak @@ -28,11 +28,6 @@ default: vimall include Make_all.mak -# Omitted: -# test2 "\\tmp" doesn't work. -# test10 'errorformat' is different -# test97 \{ and \$ are not escaped characters - SCRIPTS = $(SCRIPTS_ALL) $(SCRIPTS_MORE1) $(SCRIPTS_MORE4) $(SCRIPTS_WIN32) SCRIPTS_BENCH = test_bench_regexp.res diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms index af76f703a..848fca7f5 100644 --- a/src/testdir/Make_vms.mms +++ b/src/testdir/Make_vms.mms @@ -73,8 +73,7 @@ VIMPROG = <->vim.exe .SUFFIXES : .out .in -SCRIPT = test1.out \ - test42.out test49.out test77a.out +SCRIPT = test1.out test49.out test77a.out # Known problems: # diff --git a/src/testdir/test42.in b/src/testdir/test42.in Binary files differdeleted file mode 100644 index 1d9d3ab92..000000000 --- a/src/testdir/test42.in +++ /dev/null diff --git a/src/testdir/test42.ok b/src/testdir/test42.ok Binary files differdeleted file mode 100644 index 183430d71..000000000 --- a/src/testdir/test42.ok +++ /dev/null diff --git a/src/testdir/test_writefile.vim b/src/testdir/test_writefile.vim index d92d6aedb..d6e7e64c1 100644 --- a/src/testdir/test_writefile.vim +++ b/src/testdir/test_writefile.vim @@ -556,4 +556,132 @@ func Test_write_file_encoding() %bw! endfunc +" Test for writing and reading a file starting with a BOM. +" Byte Order Mark (BOM) character for various encodings is below: +" UTF-8 : EF BB BF +" UTF-16 (BE): FE FF +" UTF-16 (LE): FF FE +" UTF-32 (BE): 00 00 FE FF +" UTF-32 (LE): FF FE 00 00 +func Test_readwrite_file_with_bom() + let utf8_bom = "\xEF\xBB\xBF" + let utf16be_bom = "\xFE\xFF" + let utf16le_bom = "\xFF\xFE" + let utf32be_bom = "\n\n\xFE\xFF" + let utf32le_bom = "\xFF\xFE\n\n" + let save_fileencoding = &fileencoding + set cpoptions+=S + + " Check that editing a latin1 file doesn't see a BOM + call writefile(["\xFE\xFElatin-1"], 'Xtest1') + edit Xtest1 + call assert_equal('latin1', &fileencoding) + call assert_equal(0, &bomb) + set fenc=latin1 + write Xfile2 + call assert_equal(["\xFE\xFElatin-1", ''], readfile('Xfile2', 'b')) + set bomb fenc=latin1 + write Xtest3 + call assert_equal(["\xFE\xFElatin-1", ''], readfile('Xtest3', 'b')) + set bomb& + + " Check utf-8 BOM + %bw! + call writefile([utf8_bom .. "utf-8"], 'Xtest1') + edit! Xtest1 + call assert_equal('utf-8', &fileencoding) + call assert_equal(1, &bomb) + call assert_equal('utf-8', getline(1)) + set fenc=latin1 + write! Xfile2 + call assert_equal(['utf-8', ''], readfile('Xfile2', 'b')) + set fenc=utf-8 + w! Xtest3 + call assert_equal([utf8_bom .. "utf-8", ''], readfile('Xtest3', 'b')) + + " Check utf-8 with an error (will fall back to latin-1) + %bw! + call writefile([utf8_bom .. "utf-8\x80err"], 'Xtest1') + edit! Xtest1 + call assert_equal('latin1', &fileencoding) + call assert_equal(0, &bomb) + call assert_equal("\xC3\xAF\xC2\xBB\xC2\xBFutf-8\xC2\x80err", getline(1)) + set fenc=latin1 + write! Xfile2 + call assert_equal([utf8_bom .. "utf-8\x80err", ''], readfile('Xfile2', 'b')) + set fenc=utf-8 + w! Xtest3 + call assert_equal(["\xC3\xAF\xC2\xBB\xC2\xBFutf-8\xC2\x80err", ''], + \ readfile('Xtest3', 'b')) + + " Check ucs-2 BOM + %bw! + call writefile([utf16be_bom .. "\nu\nc\ns\n-\n2\n"], 'Xtest1') + edit! Xtest1 + call assert_equal('utf-16', &fileencoding) + call assert_equal(1, &bomb) + call assert_equal('ucs-2', getline(1)) + set fenc=latin1 + write! Xfile2 + call assert_equal(["ucs-2", ''], readfile('Xfile2', 'b')) + set fenc=ucs-2 + w! Xtest3 + call assert_equal([utf16be_bom .. "\nu\nc\ns\n-\n2\n", ''], + \ readfile('Xtest3', 'b')) + + " Check ucs-2le BOM + %bw! + call writefile([utf16le_bom .. "u\nc\ns\n-\n2\nl\ne\n"], 'Xtest1') + " Need to add a NUL byte after the NL byte + call writefile(0z00, 'Xtest1', 'a') + edit! Xtest1 + call assert_equal('utf-16le', &fileencoding) + call assert_equal(1, &bomb) + call assert_equal('ucs-2le', getline(1)) + set fenc=latin1 + write! Xfile2 + call assert_equal(["ucs-2le", ''], readfile('Xfile2', 'b')) + set fenc=ucs-2le + w! Xtest3 + call assert_equal([utf16le_bom .. "u\nc\ns\n-\n2\nl\ne\n", "\n"], + \ readfile('Xtest3', 'b')) + + " Check ucs-4 BOM + %bw! + call writefile([utf32be_bom .. "\n\n\nu\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\n"], 'Xtest1') + edit! Xtest1 + call assert_equal('ucs-4', &fileencoding) + call assert_equal(1, &bomb) + call assert_equal('ucs-4', getline(1)) + set fenc=latin1 + write! Xfile2 + call assert_equal(["ucs-4", ''], readfile('Xfile2', 'b')) + set fenc=ucs-4 + w! Xtest3 + call assert_equal([utf32be_bom .. "\n\n\nu\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\n", ''], readfile('Xtest3', 'b')) + + " Check ucs-4le BOM + %bw! + call writefile([utf32le_bom .. "u\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\nl\n\n\ne\n\n\n"], 'Xtest1') + " Need to add three NUL bytes after the NL byte + call writefile(0z000000, 'Xtest1', 'a') + edit! Xtest1 + call assert_equal('ucs-4le', &fileencoding) + call assert_equal(1, &bomb) + call assert_equal('ucs-4le', getline(1)) + set fenc=latin1 + write! Xfile2 + call assert_equal(["ucs-4le", ''], readfile('Xfile2', 'b')) + set fenc=ucs-4le + w! Xtest3 + call assert_equal([utf32le_bom .. "u\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\nl\n\n\ne\n\n\n", "\n\n\n"], readfile('Xtest3', 'b')) + + set cpoptions-=S + let &fileencoding = save_fileencoding + call delete('Xtest1') + call delete('Xtest2') + call delete('Xtest3') + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 127166835..045dfbcb7 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1316, +/**/ 1315, /**/ 1314, |