aboutsummaryrefslogtreecommitdiff
path: root/tests/test_item.rs
diff options
context:
space:
mode:
authorHaibo Huang <hhb@google.com>2020-07-28 01:20:59 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-07-28 01:20:59 +0000
commit02537c8b76504c70a4ccda1e1d64b3673dd20373 (patch)
tree75f1ad89d6cebfb3f52ca64b4bdefb8c004c2453 /tests/test_item.rs
parentc917ccc46a9d39c04345e1f20a7fb43d548c5ae8 (diff)
parentaaf54c66bf0e826b62481ebf972140d7736621d2 (diff)
downloadpaste-02537c8b76504c70a4ccda1e1d64b3673dd20373.tar.gz
Upgrade rust/crates/paste to 1.0.0 am: 4117715894 am: ffccca4fd9 am: e4ed7fa7ff am: aaf0c3e86d am: aaf54c66bf
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/paste/+/1372673 Change-Id: I4cf5bc34d51ce4b0a1d50cba8041e17a82d24f5e
Diffstat (limited to 'tests/test_item.rs')
-rw-r--r--tests/test_item.rs269
1 files changed, 269 insertions, 0 deletions
diff --git a/tests/test_item.rs b/tests/test_item.rs
new file mode 100644
index 0000000..86c98a9
--- /dev/null
+++ b/tests/test_item.rs
@@ -0,0 +1,269 @@
+mod test_basic {
+ use paste::paste;
+
+ struct Struct;
+
+ paste! {
+ impl Struct {
+ fn [<a b c>]() {}
+ }
+ }
+
+ #[test]
+ fn test() {
+ Struct::abc();
+ }
+}
+
+mod test_in_impl {
+ use paste::paste;
+
+ struct Struct;
+
+ impl Struct {
+ paste! {
+ fn [<a b c>]() {}
+ }
+ }
+
+ #[test]
+ fn test() {
+ Struct::abc();
+ }
+}
+
+mod test_none_delimited_single_ident {
+ use paste::paste;
+
+ macro_rules! m {
+ ($id:ident) => {
+ paste! {
+ fn f() -> &'static str {
+ stringify!($id)
+ }
+ }
+ };
+ }
+
+ m!(i32x4);
+
+ #[test]
+ fn test() {
+ assert_eq!(f(), "i32x4");
+ }
+}
+
+mod test_none_delimited_single_lifetime {
+ use paste::paste;
+
+ macro_rules! m {
+ ($life:lifetime) => {
+ paste! {
+ pub struct S;
+ impl<$life> S {
+ fn f() {}
+ }
+ }
+ };
+ }
+
+ m!('a);
+
+ #[test]
+ fn test() {
+ S::f();
+ }
+}
+
+mod test_to_lower {
+ use paste::paste;
+
+ macro_rules! m {
+ ($id:ident) => {
+ paste! {
+ fn [<my_ $id:lower _here>](_arg: u8) -> &'static str {
+ stringify!([<$id:lower>])
+ }
+ }
+ };
+ }
+
+ m!(Test);
+
+ #[test]
+ fn test_to_lower() {
+ assert_eq!(my_test_here(0), "test");
+ }
+}
+
+mod test_to_upper {
+ use paste::paste;
+
+ macro_rules! m {
+ ($id:ident) => {
+ paste! {
+ const [<MY_ $id:upper _HERE>]: &str = stringify!([<$id:upper>]);
+ }
+ };
+ }
+
+ m!(Test);
+
+ #[test]
+ fn test_to_upper() {
+ assert_eq!(MY_TEST_HERE, "TEST");
+ }
+}
+
+mod test_to_snake {
+ use paste::paste;
+
+ macro_rules! m {
+ ($id:ident) => {
+ paste! {
+ const DEFAULT_SNAKE: &str = stringify!([<$id:snake>]);
+ const LOWER_SNAKE: &str = stringify!([<$id:snake:lower>]);
+ const UPPER_SNAKE: &str = stringify!([<$id:snake:upper>]);
+ }
+ };
+ }
+
+ m!(ThisIsButATest);
+
+ #[test]
+ fn test_to_snake() {
+ assert_eq!(DEFAULT_SNAKE, "this_is_but_a_test");
+ assert_eq!(LOWER_SNAKE, "this_is_but_a_test");
+ assert_eq!(UPPER_SNAKE, "THIS_IS_BUT_A_TEST");
+ }
+}
+
+mod test_to_camel {
+ use paste::paste;
+
+ macro_rules! m {
+ ($id:ident) => {
+ paste! {
+ const DEFAULT_CAMEL: &str = stringify!([<$id:camel>]);
+ const LOWER_CAMEL: &str = stringify!([<$id:camel:lower>]);
+ const UPPER_CAMEL: &str = stringify!([<$id:camel:upper>]);
+ }
+ };
+ }
+
+ m!(this_is_but_a_test);
+
+ #[test]
+ fn test_to_camel() {
+ assert_eq!(DEFAULT_CAMEL, "ThisIsButATest");
+ assert_eq!(LOWER_CAMEL, "thisisbutatest");
+ assert_eq!(UPPER_CAMEL, "THISISBUTATEST");
+ }
+}
+
+mod test_doc_expr {
+ // https://github.com/dtolnay/paste/issues/29
+
+ use paste::paste;
+
+ macro_rules! doc_expr {
+ ($doc:expr) => {
+ paste! {
+ #[doc = $doc]
+ pub struct S;
+ }
+ };
+ }
+
+ doc_expr!(stringify!());
+
+ #[test]
+ fn test_doc_expr() {
+ let _: S;
+ }
+}
+
+mod test_type_in_path {
+ // https://github.com/dtolnay/paste/issues/31
+
+ use paste::paste;
+
+ mod keys {
+ #[derive(Default)]
+ pub struct Mib<T = ()>(std::marker::PhantomData<T>);
+ }
+
+ macro_rules! types {
+ ($mib:ty) => {
+ paste! {
+ #[derive(Default)]
+ pub struct S(pub keys::$mib);
+ }
+ };
+ }
+
+ macro_rules! write {
+ ($fn:ident, $field:ty) => {
+ paste! {
+ pub fn $fn() -> $field {
+ $field::default()
+ }
+ }
+ };
+ }
+
+ types! {Mib<[usize; 2]>}
+ write! {get_a, keys::Mib}
+ write! {get_b, usize}
+
+ #[test]
+ fn test_type_in_path() {
+ let _: S;
+ let _ = get_a;
+ let _ = get_b;
+ }
+}
+
+mod test_type_in_fn_arg {
+ // https://github.com/dtolnay/paste/issues/38
+
+ use paste::paste;
+
+ fn _jit_address(_node: ()) {}
+
+ macro_rules! jit_reexport {
+ ($fn:ident, $arg:ident : $typ:ty) => {
+ paste! {
+ pub fn $fn($arg: $typ) {
+ [<_jit_ $fn>]($arg);
+ }
+ }
+ };
+ }
+
+ jit_reexport!(address, node: ());
+
+ #[test]
+ fn test_type_in_fn_arg() {
+ let _ = address;
+ }
+}
+
+mod test_pat_in_expr_position {
+ // https://github.com/xiph/rav1e/pull/2324/files
+
+ use paste::paste;
+
+ macro_rules! rav1e_bad {
+ ($e:pat) => {
+ paste! {
+ #[test]
+ fn test() {
+ let _ = $e;
+ }
+ }
+ };
+ }
+
+ rav1e_bad!(std::fmt::Error);
+}