diff --git a/tests/all.rs b/tests/all.rs
new file mode 100644
index 0000000..50d70ee
--- /dev/null
+++ b/tests/all.rs
@@ -0,0 +1,597 @@
+extern crate item;
+
+#[macro_use]
+extern crate quote;
+
+/// These are all of the items from serde_codegen's test suite.
+/// Obnoxious whitespace has been added in an attempt to fool the parser.
+#[test]
+fn test_all() {
+    for s in ITEMS {
+        let ast = item::parse(s);
+        let tokens = quote!(#ast).to_string();
+        assert_eq!(ast, item::parse(&tokens));
+    }
+
+    static ITEMS: &'static [&'static str] = &[
+        r#"
+        # [ derive ( Serialize ) ]
+         #[derive(Deserialize)]
+        struct DefaultStruct <A , B, C, D, E> where C : MyDefault , E: MyDefault {
+            a1 : A,
+            #[serde(default)]
+            a2: B,
+            #[serde(default = "MyDefault::my_default")]
+            a3: C,
+            #[serde(skip_deserializing)]
+            a4: D,
+            #[serde(skip_deserializing, default = "MyDefault::my_default")]
+            a5: E,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        enum DefaultEnum<A, B, C, D, E> where C: MyDefault, E: MyDefault {
+            Struct {
+                a1: A,
+                #[serde(default)]
+                a2: B,
+                #[serde(default = "MyDefault::my_default")]
+                a3: C,
+                #[serde(skip_deserializing)]
+                a4: D,
+                #[serde(skip_deserializing, default = "MyDefault::my_default")]
+                a5: E,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct NoStdDefault(i8);
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct ContainsNoStdDefault <A : MyDefault> {
+            #[serde(default = "MyDefault::my_default")]
+            a: A,
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct ContainsNotDeserialize<A, B, C: DeserializeWith, E: MyDefault> {
+            #[serde(skip_deserializing)]
+            a: A,
+            #[serde(skip_deserializing, default)]
+            b: B,
+            #[serde(deserialize_with = "DeserializeWith::deserialize_with", default)]
+            c: C,
+            #[serde(skip_deserializing, default = "MyDefault::my_default")]
+            e: E,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(deny_unknown_fields)]
+        #[derive(Deserialize)]
+        struct DenyUnknown {
+            a1: i32,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(rename = "Superhero")]
+        #[derive(Deserialize)]
+        struct RenameStruct {
+            a1: i32,
+            #[serde(rename = "a3")]
+            a2: i32,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(rename(serialize = "SuperheroSer", deserialize = "SuperheroDe"))]
+        #[derive(Deserialize)]
+        struct RenameStructSerializeDeserialize {
+            a1: i32,
+            #[serde(rename(serialize = "a4", deserialize = "a5"))]
+            a2: i32,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(rename = "Superhero")]
+        #[derive(Deserialize)]
+        enum RenameEnum {
+
+            #[serde(rename = "bruce_wayne")]
+            Batman ,
+
+            #[serde(rename = "clark_kent")]
+            Superman ( i8 ) ,
+
+            #[serde(rename = "diana_prince")]
+            WonderWoman ( i8 , i8 ) ,
+
+            #[serde(rename = "barry_allan")]
+            Flash {
+                #[serde(rename = "b")]
+                a : i32,
+            } ,
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        #[serde ( rename ( serialize = "SuperheroSer" , deserialize = "SuperheroDe" ) ) ]
+        #[derive(Serialize)]
+        enum RenameEnumSerializeDeserialize<A> {
+
+            #[serde(rename(serialize = "dick_grayson", deserialize = "jason_todd"))]
+            Robin {
+                a: i8,
+                #[serde(rename(serialize = "c"))]
+                #[serde(rename(deserialize = "d"))]
+                b: A,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct SkipSerializingStruct< 'a , B, C> where C : ShouldSkip {
+            a: & 'a i8,
+            #[serde(skip_serializing)]
+            b: B,
+            #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
+            c: C,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        enum SkipSerializingEnum<'a, B, C> where C: ShouldSkip {
+            Struct {
+                a: &'a i8,
+                #[serde(skip_serializing)]
+                _b: B,
+                #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
+                c: C,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct ContainsNotSerialize<'a, B, C, D> where B: 'a , D: SerializeWith {
+            a: &'a Option<i8>,
+            #[serde(skip_serializing)]
+            b: &'a B,
+            #[serde(skip_serializing)]
+            c: Option<C>,
+            #[serde(serialize_with = "SerializeWith::serialize_with")]
+            d: D,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct SerializeWithStruct<'a, B> where B: SerializeWith {
+            a: &'a i8,
+            #[serde(serialize_with = "SerializeWith::serialize_with")]
+            b: B,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        enum SerializeWithEnum<'a, B> where B: SerializeWith {
+            Struct {
+                a: &'a i8,
+                #[serde(serialize_with = "SerializeWith::serialize_with")]
+                b: B,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct DeserializeWithStruct<B> where B: DeserializeWith {
+            a: i8,
+            #[serde(deserialize_with = "DeserializeWith::deserialize_with")]
+            b: B,
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        enum DeserializeWithEnum<B> where B: DeserializeWith {
+            Struct {
+                a: i8,
+                #[serde(deserialize_with = "DeserializeWith::deserialize_with")]
+                b: B,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        enum InvalidLengthEnum {
+            A(i32, i32, i32),
+            B(
+            #[serde(skip_deserializing)]
+            i32, i32, i32),
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct TupleStruct(i32, i32, i32);
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct Struct {
+            a: i32,
+            b: i32,
+            #[serde(skip_deserializing)]
+            c: i32,
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        enum Enum {
+            Unit,
+            Simple(i32),
+            Seq(i32, i32, i32),
+            Map {
+                a: i32,
+                b: i32,
+                c: i32,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct IgnoreBase {
+            a: i32,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct With<T> {
+            t: T,
+            #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+            x: X,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct WithRef<'a, T: 'a> {
+            #[serde(skip_deserializing)]
+            t: Option<&'a T>,
+            #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+            x: X,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct PhantomX {
+            x: PhantomData<X>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct PhantomT<T> {
+            t: PhantomData<T>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct NoBounds<T> {
+            t: T,
+            option: Option<T>,
+            boxed: Box<T>,
+            option_boxed: Option<Box<T>>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        enum EnumWith<T> {
+            Unit,
+            Newtype(
+                    #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+                    X),
+            Tuple(T,
+                #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+                X),
+            Struct {
+                t: T,
+                #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+                x: X,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct MultipleRef<'a, 'b, 'c, T> where T: 'c, 'c: 'b, 'b: 'a {
+            t: T,
+            rrrt: &'a &'b &'c T,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct Newtype(
+                    #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+                    X);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct Tuple<T>(T,
+                        #[serde(serialize_with = "ser_x", deserialize_with = "de_x")]
+                        X);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        enum TreeNode<D> {
+            Split {
+                left: Box<TreeNode<D>>,
+                right: Box<TreeNode<D>>,
+            },
+            Leaf {
+                data: D,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct ListNode<D> {
+            data: D,
+            next: Box<ListNode<D>>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct RecursiveA {
+            b: Box<RecursiveB>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        enum RecursiveB { A(RecursiveA), }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct RecursiveGenericA<T> {
+            t: T,
+            b: Box<RecursiveGenericB<T>>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        enum RecursiveGenericB<T> { T(T), A(RecursiveGenericA<T>), }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct OptionStatic<'a> {
+            a: Option<&'a str>,
+            b: Option<&'static str>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(bound = "D: SerializeWith + DeserializeWith")]
+        #[derive(Deserialize)]
+        struct WithTraits1<D, E> {
+            #[serde(serialize_with = "SerializeWith::serialize_with",
+                    deserialize_with = "DeserializeWith::deserialize_with")]
+            d: D,
+            #[serde(serialize_with = "SerializeWith::serialize_with",
+                    deserialize_with = "DeserializeWith::deserialize_with",
+                    bound = "E: SerializeWith + DeserializeWith")]
+            e: E,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(bound(serialize = "D: SerializeWith",
+                    deserialize = "D: DeserializeWith"))]
+        #[derive(Deserialize)]
+        struct WithTraits2<D, E> {
+            #[serde(serialize_with = "SerializeWith::serialize_with",
+                    deserialize_with = "DeserializeWith::deserialize_with")]
+            d: D,
+            #[serde(serialize_with = "SerializeWith::serialize_with",
+                    bound(serialize = "E: SerializeWith"))]
+            #[serde(deserialize_with = "DeserializeWith::deserialize_with",
+                    bound(deserialize = "E: DeserializeWith"))]
+            e: E,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct CowStr<'a>(Cow<'a, str>);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[serde(bound(deserialize = "T::Owned: Deserialize"))]
+        #[derive(Deserialize)]
+        struct CowT < 'a , T : ? Sized + 'a + ToOwned > ( Cow < 'a , T > ) ;
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct SerNamedTuple<'a, 'b, A: 'a, B: 'b, C>(&'a A, &'b mut B, C);
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct DeNamedTuple<A, B, C>(A, B, C);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct SerNamedMap<'a, 'b, A: 'a, B: 'b, C> {
+            a: &'a A,
+            b: &'b mut B,
+            c: C,
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        struct DeNamedMap<A, B, C> {
+            a: A,
+            b: < Vec < T > as a :: b :: Trait > :: AssociatedItem,
+            c: < Vec < T > > :: AssociatedItem,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        enum SerEnum<'a, B: 'a, C: 'a, D> where for < 'a > D: 'a {
+            Unit,
+            Seq(i8, B, &'a C, &'a mut D),
+            Map {
+                a: i8,
+                b: B,
+                c: &'a C,
+                d: &'a mut D,
+            },
+            _Unit2,
+            _Seq2(i8, B, &'a C, &'a mut D),
+            _Map2 {
+                a: i8,
+                b: B,
+                c: &'a C,
+                d: &'a mut D,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        enum DeEnum<B, C, D> {
+            Unit,
+            Seq(i8, B, C, D),
+            Map {
+                a: i8,
+                b: B,
+                c: C,
+                d: D,
+            },
+            _Unit2,
+            _Seq2(i8, B, C, D),
+            _Map2 {
+                a: i8,
+                b: B,
+                c: C,
+                d: D,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        enum Lifetimes<'a> {
+            LifetimeSeq(&'a i32),
+            NoLifetimeSeq(i32),
+            LifetimeMap {
+                a: &'a i32,
+            },
+            NoLifetimeMap {
+                a: i32,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        pub struct GenericStruct<T> {
+            x: T,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        pub struct GenericNewTypeStruct<T>(T);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        pub struct GenericTupleStruct<T, U>(T, U);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        pub enum GenericEnum<T, U: for < 'a > F<'a>> {
+            Unit,
+            NewType(T),
+            Seq(T, U),
+            Map {
+                x: T,
+                y: U,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct DefaultTyParam<T: AssociatedType<X = i32> = i32> {
+            phantom: std :: marker :: PhantomData<T>,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct UnitStruct;
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct TupleStruct(i32, i32, i32);
+        "#,
+        r#"
+        #[derive(Serialize)]
+        struct Struct {
+            a: i32,
+            b: i32,
+            c: i32,
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        enum Enum {
+            Unit,
+            One(i32),
+            Seq(i32, i32),
+            Map {
+                a: i32,
+                b: i32,
+            },
+        }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct Bounds<T: Serialize + Deserialize> {
+            t: T,
+            option: Option<T>,
+            boxed: Box<T>,
+            option_boxed: Option<Box<T>>,
+        }
+        "#,
+        r#"
+        #[derive(Deserialize)]
+        #[rustc_copy_clone_marker]
+        struct UnitStruct;
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[allow(dead_code)]
+        #[deny(unused_variables)]
+        enum Void { }
+        "#,
+        r#"
+        #[derive(Serialize)]
+        #[derive(Deserialize)]
+        struct NamedUnit;
+        "#,
+    ];
+}
