From 5f1a90ebe7ea3d3102dbffcaabaf8803d650db80 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Mon, 29 Apr 2013 16:25:40 +0200 Subject: [PATCH 1/6] Issue 4391: rustc should not silently skip tests with erroneous signature. --- src/librustc/front/test.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 4506feece2b8f..94eade675e7a7 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -141,7 +141,7 @@ fn fold_item(cx: @mut TestCtxt, i: @ast::item, fld: @fold::ast_fold) debug!("current path: %s", ast_util::path_name_i(copy cx.path, cx.sess.parse_sess.interner)); - if is_test_fn(i) || is_bench_fn(i) { + if is_test_fn(cx, i) || is_bench_fn(i) { match i.node { ast::item_fn(_, purity, _, _, _) if purity == ast::unsafe_fn => { let sess = cx.sess; @@ -169,7 +169,7 @@ fn fold_item(cx: @mut TestCtxt, i: @ast::item, fld: @fold::ast_fold) return res; } -fn is_test_fn(i: @ast::item) -> bool { +fn is_test_fn(cx: @mut TestCtxt, i: @ast::item) -> bool { let has_test_attr = !attr::find_attrs_by_name(i.attrs, ~"test").is_empty(); @@ -188,6 +188,13 @@ fn is_test_fn(i: @ast::item) -> bool { } } + if has_test_attr && !has_test_signature(i) { + let sess = cx.sess; + sess.span_fatal( + i.span, + ~"functions used as tests must have signature fn() -> ()." + ); + } return has_test_attr && has_test_signature(i); } From c14aa7eba88a3d0a26513dbb2a3acdcdcfc5072d Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 30 Apr 2013 13:02:29 +0200 Subject: [PATCH 2/6] mod items need to be marked with `cfg(test)` not `test`. --- src/libcore/hashmap.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index 41f4f34dc1971..9b82a8dad059e 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -833,7 +833,7 @@ pub impl HashSet { } } -#[test] +#[cfg(test)] mod test_map { use container::{Container, Map, Set}; use option::{None, Some}; @@ -1009,7 +1009,7 @@ mod test_map { } } -#[test] +#[cfg(test)] mod test_set { use super::*; use container::{Container, Map, Set}; From 880e300ed7a35de9ecff489d7fc0d24f2e975109 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 30 Apr 2013 14:36:18 +0200 Subject: [PATCH 3/6] mod items need to be marked with `cfg(test)` not `test`. --- src/libcore/task/mod.rs | 2 +- src/libstd/cmp.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index 2a4817727f4cf..0e97c101dc651 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -797,7 +797,7 @@ fn test_run_basic() { po.recv(); } -#[test] +#[cfg(test)] struct Wrapper { mut f: Option> } diff --git a/src/libstd/cmp.rs b/src/libstd/cmp.rs index 5d7f64a7c8fa0..ea3793c137483 100644 --- a/src/libstd/cmp.rs +++ b/src/libstd/cmp.rs @@ -64,7 +64,7 @@ fn test_fuzzy_eq_eps() { assert!(!(&1.5f).fuzzy_eq_eps(&0.9, &0.5)); } -#[test] +#[cfg(test)] mod test_complex{ use cmp::*; From 46c2b5b0458b4c7dc7b28486c2721719fa729996 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Thu, 2 May 2013 01:31:58 +0200 Subject: [PATCH 4/6] Lets see if changing `span_fatal` to `span_err` gets me further through make check. --- src/librustc/front/test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 94eade675e7a7..ddd702e7d697d 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -190,7 +190,7 @@ fn is_test_fn(cx: @mut TestCtxt, i: @ast::item) -> bool { if has_test_attr && !has_test_signature(i) { let sess = cx.sess; - sess.span_fatal( + sess.span_err( i.span, ~"functions used as tests must have signature fn() -> ()." ); From a636f5160a0f186d218e135924b321bb6d4f1ad7 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Thu, 2 May 2013 01:32:37 +0200 Subject: [PATCH 5/6] More cases of [cfg(test)] instead of [test]. --- src/libcore/repr.rs | 2 +- src/libstd/deque.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 03e44e00d8831..29b8400706ce0 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -673,7 +673,7 @@ pub fn write_repr(writer: @Writer, object: &T) { } } -#[test] +#[cfg(test)] struct P {a: int, b: float} #[test] diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 5d52bb7c0810b..8a310a9f52b5e 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -353,7 +353,7 @@ mod tests { assert!(*deq.get(3) == d); } - #[test] + #[cfg(test)] fn test_parameterized(a: T, b: T, c: T, d: T) { let mut deq = Deque::new(); assert!(deq.len() == 0); From 9862cf703b8a867b13e674f892f7059b09fe59e0 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Thu, 2 May 2013 08:50:19 +0200 Subject: [PATCH 6/6] More cases of [cfg(test)] instead of [test]. --- src/libsyntax/parse/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 74e4f562ce5c5..4f1d41a4a7a17 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -418,7 +418,7 @@ mod test { new_parser_from_source_str(ps,~[],~"bogofile",source_str) } - #[test] fn to_json_str>(val: @E) -> ~str { + #[cfg(test)] fn to_json_str>(val: @E) -> ~str { do io::with_str_writer |writer| { val.encode(~std::json::Encoder(writer)); }