about summary refs log tree commit diff
path: root/tests/ui/custom_test_frameworks/full.rs
blob: 57b55e9437bf3846ead3e0e495507f264537daed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//@ run-pass
//@ aux-build:example_runner.rs
//@ compile-flags:--test

#![feature(custom_test_frameworks)]
#![test_runner(example_runner::runner)]
extern crate example_runner;

pub struct IsFoo(&'static str);

impl example_runner::Testable for IsFoo {
    fn name(&self) -> String {
        self.0.to_string()
    }

    fn run(&self) -> Option<String> {
        if self.0 != "foo" {
            return Some(format!("{} != foo", self.0));
        }
        None
    }
}

#[test_case]
const TEST_1: IsFoo = IsFoo("hello");

#[test_case]
static TEST_2: IsFoo = IsFoo("foo");

// FIXME: `test_case` is currently ignored on anything other than
// fn/const/static. This should be an error. Compare this with `#[test]` and
// #[bench] whose expanders emit "error: expected a non-associated function,
// found […]" if applied to invalid items.
#[test_case]
struct _S;

// FIXME: as above.
#[test_case]
impl _S {
    fn _f() {}
}