summaryrefslogtreecommitdiffstats
path: root/third_party/rust/cstr/tests
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/cstr/tests')
-rw-r--r--third_party/rust/cstr/tests/clippy_lints.rs10
-rw-r--r--third_party/rust/cstr/tests/compile_fail/empty.rs5
-rw-r--r--third_party/rust/cstr/tests/compile_fail/empty.stderr7
-rw-r--r--third_party/rust/cstr/tests/compile_fail/interior-nul.rs5
-rw-r--r--third_party/rust/cstr/tests/compile_fail/interior-nul.stderr5
-rw-r--r--third_party/rust/cstr/tests/compile_fail/non-str.rs7
-rw-r--r--third_party/rust/cstr/tests/compile_fail/non-str.stderr17
-rw-r--r--third_party/rust/cstr/tests/compile_fail/trash-after.rs5
-rw-r--r--third_party/rust/cstr/tests/compile_fail/trash-after.stderr5
-rw-r--r--third_party/rust/cstr/tests/compile_test.rs6
-rw-r--r--third_party/rust/cstr/tests/pass/byte_str_lit.rs7
-rw-r--r--third_party/rust/cstr/tests/pass/const.rs10
-rw-r--r--third_party/rust/cstr/tests/pass/ident.rs9
-rw-r--r--third_party/rust/cstr/tests/pass/macro.rs21
-rw-r--r--third_party/rust/cstr/tests/pass/str_lit.rs8
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());
+}