aboutsummaryrefslogtreecommitdiff
path: root/tests/test_item.rs
diff options
context:
space:
mode:
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);
+}