#![feature(proc_macro)]
extern crate catch;
use catch::*;

#[catch_test]
fn example() {

    let a = 0;
    assert_eq!( a, 0 );

    #[section("first assert succeeds")] {

        let b = 0;
        assert_eq!( a, b );

        #[section("second assert fails")] { assert!( false ); }
    }
    #[section("first assert fails")] {

        let b = 1;
        assert_eq!( a, b );

        #[section("second assert succeeds")] {

            // The parent section fails assert so this never gets executed.
            // Should result in undefined result.
            assert!( true );
        }
    }
}

// OUTPUT:
//
//   Running target/debug/deps/test-d4d1fd68ce8fee8b
//
//   running 5 tests
//   test example ... ok
//   test example_first_assert_fails ... FAILED
//   test example_first_assert_fails_second_assert_succeeds ... FAILED
//   test example_first_assert_succeeds ... ok
//   test example_first_assert_succeeds_second_assert_fails ... FAILED
//