summaryrefslogtreecommitdiffstats
path: root/third_party/rust/syn/tests/test_path.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/syn/tests/test_path.rs')
-rw-r--r--third_party/rust/syn/tests/test_path.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/third_party/rust/syn/tests/test_path.rs b/third_party/rust/syn/tests/test_path.rs
new file mode 100644
index 0000000000..2ce12066f5
--- /dev/null
+++ b/third_party/rust/syn/tests/test_path.rs
@@ -0,0 +1,52 @@
+#[macro_use]
+mod macros;
+
+use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree};
+use quote::quote;
+use std::iter::FromIterator;
+use syn::{Expr, Type};
+
+#[test]
+fn parse_interpolated_leading_component() {
+ // mimics the token stream corresponding to `$mod::rest`
+ let tokens = TokenStream::from_iter(vec![
+ TokenTree::Group(Group::new(Delimiter::None, quote! { first })),
+ TokenTree::Punct(Punct::new(':', Spacing::Joint)),
+ TokenTree::Punct(Punct::new(':', Spacing::Alone)),
+ TokenTree::Ident(Ident::new("rest", Span::call_site())),
+ ]);
+
+ snapshot!(tokens.clone() as Expr, @r###"
+ Expr::Path {
+ path: Path {
+ segments: [
+ PathSegment {
+ ident: "first",
+ arguments: None,
+ },
+ PathSegment {
+ ident: "rest",
+ arguments: None,
+ },
+ ],
+ },
+ }
+ "###);
+
+ snapshot!(tokens as Type, @r###"
+ Type::Path {
+ path: Path {
+ segments: [
+ PathSegment {
+ ident: "first",
+ arguments: None,
+ },
+ PathSegment {
+ ident: "rest",
+ arguments: None,
+ },
+ ],
+ },
+ }
+ "###);
+}