From 40c4c8e5420e86d9baac9cbd9438d7584ad9da86 Mon Sep 17 00:00:00 2001 From: Keith Hall Date: Sat, 16 Aug 2025 15:33:30 +0300 Subject: [PATCH] More thorough tests for UTF16LE --- src/input.rs | 22 ++++++++++++++++--- tests/examples/test_UTF-16BE.txt | Bin 0 -> 56 bytes tests/examples/test_UTF-16LE-complicated.txt | Bin 0 -> 50 bytes tests/integration_tests.rs | 20 +++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 tests/examples/test_UTF-16BE.txt create mode 100644 tests/examples/test_UTF-16LE-complicated.txt diff --git a/src/input.rs b/src/input.rs index e5f7e4d6..69b10906 100644 --- a/src/input.rs +++ b/src/input.rs @@ -371,11 +371,13 @@ fn utf16le() { #[test] fn utf16le_issue3367() { - let content = b"\xFF\xFE\x0A\x4E\x00\x4E\x0A\x4F\x00\x52"; + let content = b"\xFF\xFE\x0A\x4E\x00\x4E\x0A\x4F\x00\x52\x0A\x00\ + \x6F\x00\x20\x00\x62\x00\x61\x00\x72\x00\x0A\x00\ + \x68\x00\x65\x00\x6C\x00\x6C\x00\x6F\x00\x20\x00\x77\x00\x6F\x00\x72\x00\x6C\x00\x64\x00"; let mut reader = InputReader::new(&content[..]); assert_eq!( - b"\xFF\xFE\x0A\x4E\x00\x4E\x0A\x4F\x00\x52", + b"\xFF\xFE\x0A\x4E\x00\x4E\x0A\x4F\x00\x52\x0A\x00", &reader.first_line[..] ); @@ -384,10 +386,24 @@ fn utf16le_issue3367() { let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert!(res.unwrap()); - assert_eq!(b"\xFF\xFE\x0A\x4E\x00\x4E\x0A\x4F\x00\x52", &buffer[..]); + assert_eq!(b"\xFF\xFE\x0A\x4E\x00\x4E\x0A\x4F\x00\x52\x0A\x00", &buffer[..]); buffer.clear(); + let res = reader.read_line(&mut buffer); + assert!(res.is_ok()); + assert!(res.unwrap()); + assert_eq!(b"\x6F\x00\x20\x00\x62\x00\x61\x00\x72\x00\x0A\x00", &buffer[..]); + + buffer.clear(); + + let res = reader.read_line(&mut buffer); + assert!(res.is_ok()); + assert!(res.unwrap()); + assert_eq!(b"\x68\x00\x65\x00\x6C\x00\x6C\x00\x6F\x00\x20\x00\x77\x00\x6F\x00\x72\x00\x6C\x00\x64\x00", &buffer[..]); + + buffer.clear(); + let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert!(!res.unwrap()); diff --git a/tests/examples/test_UTF-16BE.txt b/tests/examples/test_UTF-16BE.txt new file mode 100644 index 0000000000000000000000000000000000000000..77a2bf2c42cc13f081dac3623529c7dcb74746c0 GIT binary patch literal 56 xcmezOpCN-Gl_3WR^BEKv%7J7Nke$N7#ZUs2$z&)7ibBXlAgctZwirlq0RVhs3xfav literal 0 HcmV?d00001 diff --git a/tests/examples/test_UTF-16LE-complicated.txt b/tests/examples/test_UTF-16LE-complicated.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2eba9c94e337d573a698625e8ee56abc6d150f9 GIT binary patch literal 50 xcmezWkIRq2kISDSh>IbOAs+}87?Kzg8HyOV7%~`A8FGLSBvuY2i-7DD1^^~r3RnOD literal 0 HcmV?d00001 diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 0f570f89..35a85623 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -1321,6 +1321,26 @@ fn utf16() { .assert() .success() .stdout("hello world\n"); + + bat() + .arg("--plain") + .arg("--decorations=always") + .arg("test_UTF-16BE.txt") + .assert() + .success() + .stdout("hello world\nthis is a test\n"); +} + +#[test] +fn utf16le() { + bat() + .arg("--decorations=always") + .arg("--style=numbers") + .arg("--color=never") + .arg("test_UTF-16LE-complicated.txt") + .assert() + .success() + .stdout(" 1 上一伊刀\n 2 foo bar\n 3 hello world\n"); } // Regression test for https://github.com/sharkdp/bat/issues/1922