Finish porting to the `Synom` trait
diff --git a/tests/test_expr.rs b/tests/test_expr.rs
index 6216191..749d50f 100644
--- a/tests/test_expr.rs
+++ b/tests/test_expr.rs
@@ -86,7 +86,7 @@
         }
     "#;
 
-    let actual = parse_crate(raw).unwrap();
+    let actual = raw.parse::<Crate>().unwrap();
 
     assert_eq!(&actual.items[0].ident, "catch");
 
diff --git a/tests/test_generics.rs b/tests/test_generics.rs
index e18d2ef..6c37035 100644
--- a/tests/test_generics.rs
+++ b/tests/test_generics.rs
@@ -93,7 +93,7 @@
 fn test_ty_param_bound() {
     let tokens = quote!('a);
     let expected = TyParamBound::Region(Lifetime::new("'a"));
-    assert_eq!(expected, parse_ty_param_bound(&tokens.to_string()).unwrap());
+    assert_eq!(expected, tokens.to_string().parse().unwrap());
 
     let tokens = quote!(Debug);
     let expected = TyParamBound::Trait(
@@ -102,7 +102,7 @@
             trait_ref: "Debug".into(),
         },
         TraitBoundModifier::None);
-    assert_eq!(expected, parse_ty_param_bound(&tokens.to_string()).unwrap());
+    assert_eq!(expected, tokens.to_string().parse().unwrap());
 
     let tokens = quote!(?Sized);
     let expected = TyParamBound::Trait(
@@ -111,5 +111,5 @@
             trait_ref: "Sized".into(),
         },
         TraitBoundModifier::Maybe(Default::default()));
-    assert_eq!(expected, parse_ty_param_bound(&tokens.to_string()).unwrap());
+    assert_eq!(expected, tokens.to_string().parse().unwrap());
 }
diff --git a/tests/test_macro_input.rs b/tests/test_macro_input.rs
index 9f80f6c..bddf52e 100644
--- a/tests/test_macro_input.rs
+++ b/tests/test_macro_input.rs
@@ -55,7 +55,7 @@
         }),
     };
 
-    assert_eq!(expected, parse_macro_input(raw.parse().unwrap()).unwrap());
+    assert_eq!(expected, raw.parse().unwrap());
 }
 
 #[test]
@@ -140,7 +140,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 
@@ -310,7 +310,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 
@@ -380,7 +380,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 
@@ -423,7 +423,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 
@@ -463,7 +463,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 
@@ -515,7 +515,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 }
@@ -542,7 +542,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 }
@@ -570,7 +570,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 }
@@ -598,7 +598,7 @@
         }),
     };
 
-    let actual = parse_macro_input(raw.parse().unwrap()).unwrap();
+    let actual = raw.parse().unwrap();
 
     assert_eq!(expected, actual);
 }
diff --git a/tests/test_meta_item.rs b/tests/test_meta_item.rs
index acf1710..cbdbb02 100644
--- a/tests/test_meta_item.rs
+++ b/tests/test_meta_item.rs
@@ -1,10 +1,12 @@
 #![cfg(feature = "extra-traits")]
 
 extern crate syn;
+extern crate synom;
 extern crate proc_macro2;
 
+use proc_macro2::{Literal, TokenStream};
 use syn::*;
-use proc_macro2::Literal;
+use synom::IResult;
 
 fn lit<T: Into<Literal>>(t: T) -> Lit {
     Lit {
@@ -93,6 +95,14 @@
 }
 
 fn run_test<T: Into<MetaItem>>(input: &str, expected: T) {
-    let attr = parse_outer_attr(input).unwrap();
+    let tokens = input.parse::<TokenStream>().unwrap();
+    let tokens = tokens.into_iter().collect::<Vec<_>>();
+    let attr = match Attribute::parse_outer(&tokens) {
+        IResult::Done(rest, e) => {
+            assert!(rest.is_empty());
+            e
+        }
+        IResult::Error => panic!("failed to parse"),
+    };
     assert_eq!(expected.into(), attr.meta_item().unwrap());
 }
diff --git a/tests/test_round_trip.rs b/tests/test_round_trip.rs
index 9db4f69..21bc51b 100644
--- a/tests/test_round_trip.rs
+++ b/tests/test_round_trip.rs
@@ -122,7 +122,7 @@
         file.read_to_string(&mut content).unwrap();
 
         let start = Instant::now();
-        let (krate, elapsed) = match syn::parse_crate(&content) {
+        let (krate, elapsed) = match content.parse::<syn::Crate>() {
             Ok(krate) => (krate, start.elapsed()),
             Err(msg) => {
                 errorf!("syn failed to parse\n{:?}\n", msg);
diff --git a/tests/test_token_trees.rs b/tests/test_token_trees.rs
index cacd90e..499581d 100644
--- a/tests/test_token_trees.rs
+++ b/tests/test_token_trees.rs
@@ -4,7 +4,7 @@
 extern crate proc_macro2;
 
 use syn::TokenTree;
-use proc_macro2::{TokenKind, OpKind, Delimiter};
+use proc_macro2::{TokenKind, OpKind, Delimiter, TokenStream};
 use proc_macro2::Delimiter::*;
 
 fn op(c: char) -> TokenTree {
@@ -69,7 +69,10 @@
         ],
     )];
 
-    let result = syn::parse_token_trees(raw.parse().unwrap()).unwrap();
+    let result = raw.parse::<TokenStream>().unwrap()
+                    .into_iter()
+                    .map(TokenTree)
+                    .collect::<Vec<_>>();
     if result != expected {
         panic!("{:#?}\n!=\n{:#?}", result, expected);
     }