diff options
Diffstat (limited to 'third_party/rust/cstr/tests')
15 files changed, 127 insertions, 0 deletions
diff --git a/third_party/rust/cstr/tests/clippy_lints.rs b/third_party/rust/cstr/tests/clippy_lints.rs new file mode 100644 index 0000000000..47d7f27e2b --- /dev/null +++ b/third_party/rust/cstr/tests/clippy_lints.rs @@ -0,0 +1,10 @@ +use cstr::cstr; +use std::ffi::CStr; + +#[test] +#[deny(clippy::transmute_ptr_to_ref)] +fn deny_transmute_ptr_to_ref() { + let s: &'static CStr = cstr!("foo\u{4e00}bar"); + let expected = b"foo\xe4\xb8\x80bar\0"; + assert_eq!(s, CStr::from_bytes_with_nul(expected).unwrap()); +} diff --git a/third_party/rust/cstr/tests/compile_fail/empty.rs b/third_party/rust/cstr/tests/compile_fail/empty.rs new file mode 100644 index 0000000000..0ac967273e --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/empty.rs @@ -0,0 +1,5 @@ +use cstr::cstr; + +fn main() { + let _foo = cstr!(); +} diff --git a/third_party/rust/cstr/tests/compile_fail/empty.stderr b/third_party/rust/cstr/tests/compile_fail/empty.stderr new file mode 100644 index 0000000000..68bda07fab --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/empty.stderr @@ -0,0 +1,7 @@ +error: unexpected end of input, expected one of: byte string literal, string literal, identifier + --> $DIR/empty.rs:4:16 + | +4 | let _foo = cstr!(); + | ^^^^^^^ + | + = note: this error originates in the macro `cstr` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/third_party/rust/cstr/tests/compile_fail/interior-nul.rs b/third_party/rust/cstr/tests/compile_fail/interior-nul.rs new file mode 100644 index 0000000000..a6876aeb1d --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/interior-nul.rs @@ -0,0 +1,5 @@ +use cstr::cstr; + +fn main() { + let _foo = cstr!("foo\0bar"); +} diff --git a/third_party/rust/cstr/tests/compile_fail/interior-nul.stderr b/third_party/rust/cstr/tests/compile_fail/interior-nul.stderr new file mode 100644 index 0000000000..0c6ced1a45 --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/interior-nul.stderr @@ -0,0 +1,5 @@ +error: nul byte found in the literal + --> $DIR/interior-nul.rs:4:22 + | +4 | let _foo = cstr!("foo\0bar"); + | ^^^^^^^^^^ diff --git a/third_party/rust/cstr/tests/compile_fail/non-str.rs b/third_party/rust/cstr/tests/compile_fail/non-str.rs new file mode 100644 index 0000000000..172b145590 --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/non-str.rs @@ -0,0 +1,7 @@ +use cstr::cstr; + +fn main() { + let _foo = cstr!(1); + let _foo = cstr!(("a")); + let _foo = cstr!(&1); +} diff --git a/third_party/rust/cstr/tests/compile_fail/non-str.stderr b/third_party/rust/cstr/tests/compile_fail/non-str.stderr new file mode 100644 index 0000000000..bbbf7e7169 --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/non-str.stderr @@ -0,0 +1,17 @@ +error: expected one of: byte string literal, string literal, identifier + --> $DIR/non-str.rs:4:22 + | +4 | let _foo = cstr!(1); + | ^ + +error: expected one of: byte string literal, string literal, identifier + --> $DIR/non-str.rs:5:22 + | +5 | let _foo = cstr!(("a")); + | ^^^^^ + +error: expected one of: byte string literal, string literal, identifier + --> $DIR/non-str.rs:6:22 + | +6 | let _foo = cstr!(&1); + | ^ diff --git a/third_party/rust/cstr/tests/compile_fail/trash-after.rs b/third_party/rust/cstr/tests/compile_fail/trash-after.rs new file mode 100644 index 0000000000..5e4f7c3f08 --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/trash-after.rs @@ -0,0 +1,5 @@ +use cstr::cstr; + +fn main() { + let _foo = cstr!("foo" + "bar"); +} diff --git a/third_party/rust/cstr/tests/compile_fail/trash-after.stderr b/third_party/rust/cstr/tests/compile_fail/trash-after.stderr new file mode 100644 index 0000000000..d6bb1530af --- /dev/null +++ b/third_party/rust/cstr/tests/compile_fail/trash-after.stderr @@ -0,0 +1,5 @@ +error: unexpected token + --> $DIR/trash-after.rs:4:28 + | +4 | let _foo = cstr!("foo" + "bar"); + | ^ diff --git a/third_party/rust/cstr/tests/compile_test.rs b/third_party/rust/cstr/tests/compile_test.rs new file mode 100644 index 0000000000..b3b9d9f6ce --- /dev/null +++ b/third_party/rust/cstr/tests/compile_test.rs @@ -0,0 +1,6 @@ +#[test] +fn compile_test() { + let t = trybuild::TestCases::new(); + t.pass("tests/pass/*.rs"); + t.compile_fail("tests/compile_fail/*.rs"); +} diff --git a/third_party/rust/cstr/tests/pass/byte_str_lit.rs b/third_party/rust/cstr/tests/pass/byte_str_lit.rs new file mode 100644 index 0000000000..fd87f176c2 --- /dev/null +++ b/third_party/rust/cstr/tests/pass/byte_str_lit.rs @@ -0,0 +1,7 @@ +use cstr::cstr; +use std::ffi::CStr; + +fn main() { + let foo: &'static CStr = cstr!(b"foo\xffbar"); + assert_eq!(foo, CStr::from_bytes_with_nul(b"foo\xffbar\0").unwrap()); +} diff --git a/third_party/rust/cstr/tests/pass/const.rs b/third_party/rust/cstr/tests/pass/const.rs new file mode 100644 index 0000000000..ae8647b954 --- /dev/null +++ b/third_party/rust/cstr/tests/pass/const.rs @@ -0,0 +1,10 @@ +use cstr::cstr; +use std::ffi::CStr; + +const FOO: &CStr = cstr!(b"foo\xffbar"); +static BAR: &CStr = cstr!("bar"); + +fn main() { + assert_eq!(FOO, CStr::from_bytes_with_nul(b"foo\xffbar\0").unwrap()); + assert_eq!(BAR, CStr::from_bytes_with_nul(b"bar\0").unwrap()); +} diff --git a/third_party/rust/cstr/tests/pass/ident.rs b/third_party/rust/cstr/tests/pass/ident.rs new file mode 100644 index 0000000000..55e41c8621 --- /dev/null +++ b/third_party/rust/cstr/tests/pass/ident.rs @@ -0,0 +1,9 @@ +use cstr::cstr; +use std::ffi::CStr; + +fn main() { + let foo: &'static CStr = cstr!(foobar); + assert_eq!(foo, CStr::from_bytes_with_nul(b"foobar\0").unwrap()); + let foo: &'static CStr = cstr!(r#foobar); + assert_eq!(foo, CStr::from_bytes_with_nul(b"r#foobar\0").unwrap()); +} diff --git a/third_party/rust/cstr/tests/pass/macro.rs b/third_party/rust/cstr/tests/pass/macro.rs new file mode 100644 index 0000000000..e89deac648 --- /dev/null +++ b/third_party/rust/cstr/tests/pass/macro.rs @@ -0,0 +1,21 @@ +use cstr::cstr; +use std::ffi::CStr; + +macro_rules! cstr_expr { + ($s:expr) => { + cstr!($s) + }; +} + +macro_rules! cstr_literal { + ($s:literal) => { + cstr!($s) + }; +} + +fn main() { + let foo: &'static CStr = cstr_expr!("foo"); + assert_eq!(foo, CStr::from_bytes_with_nul(b"foo\0").unwrap()); + let bar: &'static CStr = cstr_literal!("bar"); + assert_eq!(bar, CStr::from_bytes_with_nul(b"bar\0").unwrap()); +} diff --git a/third_party/rust/cstr/tests/pass/str_lit.rs b/third_party/rust/cstr/tests/pass/str_lit.rs new file mode 100644 index 0000000000..d925859a9a --- /dev/null +++ b/third_party/rust/cstr/tests/pass/str_lit.rs @@ -0,0 +1,8 @@ +use cstr::cstr; +use std::ffi::CStr; + +fn main() { + let foo: &'static CStr = cstr!("foo\u{4e00}bar"); + let expected = b"foo\xe4\xb8\x80bar\0"; + assert_eq!(foo, CStr::from_bytes_with_nul(expected).unwrap()); +} |