Skip to content

Commit 12c52ce

Browse files
committed
#42 All integration tests now are in rstest too. rstest now handle all
errors like parametrize
1 parent d16f2a3 commit 12c52ce

19 files changed

+656
-31
lines changed
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use rstest::rstest;
2+
3+
#[cfg(test)]
4+
#[rstest(a, b, case(42), case(1, 2), case(43))]
5+
fn error_less_arguments(a: u32, b: u32) {}
6+
7+
#[cfg(test)]
8+
#[rstest(a, case(42, 43), case(12), case(24, 34))]
9+
fn error_too_much_arguments(a: u32) {}
10+

resources/rstest/description.rs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use rstest::rstest;
2+
3+
#[rstest(
4+
expected,
5+
case::user_test_description(true),
6+
case(true),
7+
case::user_test_description_fail(false)
8+
)]
9+
fn description(expected: bool) {
10+
assert!(expected);
11+
}

resources/rstest/dump_debug.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use rstest::rstest;
2+
3+
#[rstest(u, s, t,
4+
case(42, "str", ("ss", -12)),
5+
case(24, "trs", ("tt", -24))
6+
::trace
7+
)]
8+
fn should_fail(u: u32, s: &str, t: (&str, i32)) {
9+
assert!(false);
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use rstest::rstest;
2+
3+
struct A;
4+
#[derive(Debug)]
5+
struct D;
6+
7+
#[rstest(u,a,d,
8+
case(42, A{}, D{})
9+
::trace::notrace(a))
10+
]
11+
fn should_fail(u: u32, a: A, d: D) {
12+
assert!(false);
13+
}

resources/rstest/dump_not_debug.rs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use rstest::rstest;
2+
3+
struct S;
4+
5+
#[rstest(s,
6+
case(Unwrap("S{}"))
7+
::trace
8+
)]
9+
fn test_function(s: S) {}

resources/rstest/errors.rs

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use rstest::*;
2+
#[fixture]
3+
pub fn fixture() -> u32 { 42 }
4+
5+
#[rstest(f, case(42))]
6+
fn error_inner(f: i32) {
7+
let a: u32 = "";
8+
}
9+
10+
#[rstest(f, case(42))]
11+
fn error_cannot_resolve_fixture(no_fixture: u32, f: u32) {}
12+
13+
#[rstest(f, case(42))]
14+
fn error_fixture_wrong_type(fixture: String, f: u32) {}
15+
16+
#[rstest(f, case(42))]
17+
fn error_param_wrong_type(f: &str) {}
18+
19+
#[rstest(condition,
20+
case(vec![1,2,3].contains(2)))
21+
]
22+
fn error_in_arbitrary_rust_code(condition: bool) {
23+
assert!(condition)
24+
}
25+
26+
#[rstest(f, case(42), not_a_fixture(24))]
27+
fn error_inject_an_invalid_fixture(f: u32) {
28+
}
29+
30+
#[fixture]
31+
fn n() -> u32 {
32+
24
33+
}
34+
35+
#[fixture]
36+
fn f(n: u32) -> u32 {
37+
2*n
38+
}
39+
40+
#[rstest(f, f(42), case(12))]
41+
fn error_inject_a_fixture_that_is_already_a_case(f: u32) {
42+
}
43+
44+
#[rstest(f(42), f, case(12))]
45+
fn error_define_case_that_is_already_an_injected_fixture(f: u32) {
46+
}
47+
48+
#[rstest(v, f(42), f(42), case(12))]
49+
fn error_inject_a_fixture_more_than_once(v: u32, f: u32) {
50+
}

resources/rstest/generic.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use rstest::rstest;
2+
3+
#[rstest(
4+
expected, input,
5+
case(4, String::from("ciao")),
6+
case(3, "Foo")
7+
)]
8+
fn strlen_test<S: AsRef<str>>(expected: usize, input: S) {
9+
assert_eq!(expected, input.as_ref().len());
10+
}

resources/rstest/impl_param.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use rstest::rstest;
2+
3+
#[rstest(
4+
expected, input,
5+
case(4, String::from("ciao")),
6+
case(3, "Foo")
7+
)]
8+
fn strlen_test(expected: usize, input: impl AsRef<str>) {
9+
assert_eq!(expected, input.as_ref().len());
10+
}

resources/rstest/missed_argument.rs

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
use rstest::rstest;
2+
3+
#[cfg(test)]
4+
#[rstest(f, case(42), case(24))]
5+
fn error_param_not_exist() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
use rstest::rstest;
2+
3+
#[cfg(test)]
4+
#[rstest(a,b,c, case(1,2,3), case(3,2,1))]
5+
fn error_param_not_exist(b: u32) {}

resources/rstest/mut.rs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use rstest::rstest;
2+
3+
#[rstest(
4+
expected, val,
5+
case(4, 3),
6+
case(3, 2)
7+
)]
8+
fn add_test(expected: u32, mut val: u32) {
9+
val += 1;
10+
11+
assert_eq!(expected, val);
12+
}

resources/rstest/panic.rs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use rstest::rstest;
2+
3+
#[rstest(
4+
expected, input,
5+
case(4, 5),
6+
case(3, 2),
7+
case(3, 3)
8+
)]
9+
#[should_panic]
10+
fn fail(expected: i32, input: i32) {
11+
assert_eq!(expected, input);
12+
}

resources/rstest/partial.rs

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use rstest::*;
2+
3+
#[fixture]
4+
fn f1() -> u32 { 0 }
5+
#[fixture]
6+
fn f2() -> u32 { 0 }
7+
#[fixture]
8+
fn f3() -> u32 { 0 }
9+
10+
#[fixture]
11+
fn fixture(f1: u32, f2: u32, f3: u32) -> u32 { f1 + 10 * f2 + 100 * f3 }
12+
13+
#[rstest(expected, case(0), case(1000))]
14+
fn default(fixture: u32, expected: u32) {
15+
assert_eq!(fixture, expected);
16+
}
17+
18+
#[rstest(fixture(7), expected, case(7), case(1000))]
19+
fn partial_1(fixture: u32, expected: u32) {
20+
assert_eq!(fixture, expected);
21+
}
22+
23+
#[rstest(fixture(2, 4), expected, case(42), case(1000))]
24+
fn partial_2(fixture: u32, expected: u32) {
25+
assert_eq!(fixture, expected);
26+
}
27+
28+
#[rstest(fixture(2, 4, 5), expected, case(542), case(1000))]
29+
fn complete(fixture: u32, expected: u32) {
30+
assert_eq!(fixture, expected);
31+
}

resources/rstest/return_result.rs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use rstest::rstest;
2+
3+
#[rstest(ret,
4+
case::should_success(Ok(())),
5+
case::should_fail(Err("Return Error"))
6+
)]
7+
fn return_type(ret: Result<(), &'static str>) -> Result<(), &'static str> {
8+
ret
9+
}

resources/rstest/simple.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use rstest::rstest;
2+
3+
#[rstest(
4+
expected, input,
5+
case(4, "ciao"),
6+
case(3, "Foo")
7+
)]
8+
fn strlen_test(expected: usize, input: &str) {
9+
assert_eq!(expected, input.len());
10+
}

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,7 @@ fn errors_in_matrix(test: &ItemFn, info: &parse::matrix::MatrixInfo) -> TokenStr
660660
fn errors_in_rstest(test: &ItemFn, info: &parse::rstest::RsTestInfo) -> TokenStream{
661661
missed_arguments_errors(test, info.data.items.iter())
662662
.chain(duplicate_arguments_errors(info.data.items.iter()))
663+
.chain(invalid_case_errors(&info.data))
663664
.map(|e| e.to_compile_error())
664665
.collect()
665666
}

src/parse/testcase.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ mod should {
6767
}
6868

6969
#[test]
70-
fn raw_code() {
70+
fn accept_arbitrary_rust_code() {
7171
let test_case = parse_test_case(r#"case(vec![1,2,3])"#);
7272
let args = test_case.args();
7373

@@ -76,12 +76,12 @@ mod should {
7676

7777
#[test]
7878
#[should_panic]
79-
fn raw_code_with_parsing_error() {
79+
fn raise_error_on_invalid_rust_code() {
8080
parse_test_case(r#"case(some:<>(1,2,3))"#);
8181
}
8282

8383
#[test]
84-
fn should_read_test_description_if_any() {
84+
fn get_description_if_any() {
8585
let test_case = parse_test_case(r#"case::this_test_description(42)"#);
8686
let args = test_case.args();
8787

@@ -90,7 +90,7 @@ mod should {
9090
}
9191

9292
#[test]
93-
fn should_read_test_description_also_with_more_args() {
93+
fn get_description_also_with_more_args() {
9494
let test_case = parse_test_case(r#"case :: this_test_description (42, 24)"#);
9595
let args = test_case.args();
9696

@@ -99,7 +99,7 @@ mod should {
9999
}
100100

101101
#[test]
102-
fn should_parse_arbitrary_rust_code_as_expression() {
102+
fn parse_arbitrary_rust_code_as_expression() {
103103
let test_case = parse_test_case(r##"
104104
case(42, -42,
105105
pippo("pluto"),

tests/integration.rs

+2-26
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,8 @@ mod framework;
88
/// Single's integration tests
99
mod single;
1010

11-
/// Single's integration tests
12-
mod rstest {
13-
use std::path::Path;
14-
use crate::utils::*;
15-
16-
fn prj(res: &str) -> crate::prj::Project {
17-
let path = Path::new("rstest").join(res);
18-
crate::prj().set_code_file(resources(path))
19-
}
20-
21-
fn run_test(res: &str) -> (std::process::Output, String) {
22-
let prj = prj(res);
23-
(prj.run_tests().unwrap(), prj.get_name().to_owned().to_string())
24-
}
25-
26-
27-
#[test]
28-
fn happy_path_cases() {
29-
let (output, _) = run_test("happy_path_cases.rs");
30-
31-
TestResults::new()
32-
.ok("strlen_test::case_1")
33-
.ok("strlen_test::case_2")
34-
.assert(output);
35-
}
36-
}
11+
/// Rstest integration tests
12+
mod rstest;
3713

3814
/// Parametrize's integration tests
3915
mod parametrize;

0 commit comments

Comments
 (0)