damock 0.1.2

Derivable data mocking for tests
Documentation
#![allow(missing_docs)]

use damock::Mock;

#[derive(Debug, Default, PartialEq)]
struct Bar(usize);

impl Mock for Bar {
    fn mock() -> Self {
        Self(10)
    }
}

#[derive(Debug, PartialEq)]
struct Baz(usize);

impl Mock for Baz {
    fn mock() -> Self {
        Self(20)
    }
}

#[test]
fn error_ui() {
    let t = trybuild::TestCases::new();
    t.compile_fail("tests/ui/*.rs");
}

mod structs {
    use super::*;

    #[test]
    fn named() {
        #[derive(Mock, Debug, PartialEq)]
        struct Foo {
            bar: Bar,
            baz: Baz,
        }

        let expected = Foo { bar: Mock::mock(), baz: Mock::mock() };

        assert_eq!(expected, Foo::mock())
    }

    #[test]
    fn named_with_default() {
        #[derive(Mock, Debug, PartialEq)]
        struct Foo {
            #[mock_default]
            bar: Bar,
            baz: Baz,
        }

        let expected = Foo { bar: Default::default(), baz: Mock::mock() };

        assert_eq!(expected, Foo::mock())
    }

    #[test]
    fn tuple() {
        #[derive(Mock, Debug, PartialEq)]
        struct Foo(Bar, Baz);

        let expected = Foo(Mock::mock(), Mock::mock());

        assert_eq!(expected, Foo::mock())
    }

    #[test]
    fn tuple_with_default() {
        #[derive(Mock, Debug, PartialEq)]
        struct Foo(#[mock_default] Bar, Baz);

        let expected = Foo(Default::default(), Mock::mock());

        assert_eq!(expected, Foo::mock())
    }

    #[test]
    fn unit() {
        #[derive(Mock, Debug, PartialEq)]
        struct Foo;

        assert_eq!(Foo, Foo::mock())
    }
}

mod enums {
    use super::*;

    #[test]
    fn named() {
        #[allow(dead_code)]
        #[derive(Debug, PartialEq, Mock)]
        enum Foo {
            Bar,
            #[mock]
            Baz {
                baz: Baz,
            },
        }

        assert_eq!(Foo::Baz { baz: Mock::mock() }, Foo::mock())
    }

    #[test]
    fn named_with_default() {
        #[allow(dead_code)]
        #[derive(Debug, PartialEq, Mock)]
        enum Foo {
            #[mock]
            Buzz {
                #[mock_default]
                bar: Bar,
                baz: Baz,
            },
        }

        assert_eq!(Foo::Buzz { bar: Default::default(), baz: Mock::mock() }, Foo::mock())
    }

    #[test]
    fn unnamed() {
        #[allow(dead_code)]
        #[derive(Debug, PartialEq, Mock)]
        enum Foo {
            #[mock]
            Bar(Bar),
            Baz,
        }

        assert_eq!(Foo::Bar(Mock::mock()), Foo::mock())
    }

    #[test]
    fn unnamed_with_default() {
        #[allow(dead_code)]
        #[derive(Debug, PartialEq, Mock)]
        enum Foo {
            #[mock]
            Buzz(#[mock_default] Bar, Baz),
        }

        assert_eq!(Foo::Buzz(Default::default(), Mock::mock()), Foo::mock())
    }

    #[test]
    fn unit() {
        #[allow(dead_code)]
        #[derive(Debug, PartialEq, Mock)]
        enum Foo {
            #[mock]
            Bar,
            Baz {
                baz: Baz,
            },
        }

        assert_eq!(Foo::Bar, Foo::mock())
    }
}