Stabilize unit tests with non-()
return type
This commit is contained in:
parent
2954cb5119
commit
b78457f0fb
@ -398,9 +398,6 @@ declare_features! (
|
||||
// `foo.rs` as an alternative to `foo/mod.rs`
|
||||
(active, non_modrs_mods, "1.24.0", Some(44660), Some(Edition::Edition2018)),
|
||||
|
||||
// Termination trait in tests (RFC 1937)
|
||||
(active, termination_trait_test, "1.24.0", Some(48854), Some(Edition::Edition2018)),
|
||||
|
||||
// `extern` in paths
|
||||
(active, extern_in_paths, "1.23.0", Some(44660), None),
|
||||
|
||||
@ -475,6 +472,9 @@ declare_features! (
|
||||
|
||||
// 'a: { break 'a; }
|
||||
(active, label_break_value, "1.28.0", Some(48594), None),
|
||||
|
||||
// Termination trait in tests (RFC 1937)
|
||||
(accepted, termination_trait_test, "1.28.0", Some(48854), Some(Edition::Edition2018)),
|
||||
);
|
||||
|
||||
declare_features! (
|
||||
|
@ -351,15 +351,15 @@ fn is_test_fn(cx: &TestCtxt, i: &ast::Item) -> bool {
|
||||
return No(BadTestSignature::NoArgumentsAllowed);
|
||||
}
|
||||
|
||||
match (has_output, cx.features.termination_trait_test, has_should_panic_attr) {
|
||||
(true, true, true) => No(BadTestSignature::ShouldPanicOnlyWithNoArgs),
|
||||
(true, true, false) => if generics.is_parameterized() {
|
||||
match (has_output, has_should_panic_attr) {
|
||||
(true, true) => No(BadTestSignature::ShouldPanicOnlyWithNoArgs),
|
||||
(true, false) => if generics.is_parameterized() {
|
||||
No(BadTestSignature::WrongTypeSignature)
|
||||
} else {
|
||||
Yes
|
||||
},
|
||||
(true, false, _) => No(BadTestSignature::WrongTypeSignature),
|
||||
(false, _, _) => Yes
|
||||
(true, _) => No(BadTestSignature::WrongTypeSignature),
|
||||
(false, _) => Yes
|
||||
}
|
||||
}
|
||||
_ => No(BadTestSignature::NotEvenAFunction),
|
||||
@ -398,28 +398,9 @@ fn is_bench_fn(cx: &TestCtxt, i: &ast::Item) -> bool {
|
||||
fn has_bench_signature(cx: &TestCtxt, i: &ast::Item) -> bool {
|
||||
match i.node {
|
||||
ast::ItemKind::Fn(ref decl, _, _, _, ref generics, _) => {
|
||||
let input_cnt = decl.inputs.len();
|
||||
|
||||
// If the termination trait is active, the compiler will check that the output
|
||||
// type implements the `Termination` trait as `libtest` enforces that.
|
||||
let output_matches = if cx.features.termination_trait_test {
|
||||
true
|
||||
} else {
|
||||
let no_output = match decl.output {
|
||||
ast::FunctionRetTy::Default(..) => true,
|
||||
ast::FunctionRetTy::Ty(ref t) if t.node == ast::TyKind::Tup(vec![]) => true,
|
||||
_ => false
|
||||
};
|
||||
let tparm_cnt = generics.params.iter()
|
||||
.filter(|param| param.is_type_param())
|
||||
.count();
|
||||
|
||||
no_output && tparm_cnt == 0
|
||||
};
|
||||
|
||||
// NB: inadequate check, but we're running
|
||||
// well before resolve, can't get too deep.
|
||||
input_cnt == 1 && output_matches
|
||||
decl.inputs.len() == 1
|
||||
}
|
||||
_ => false
|
||||
}
|
||||
@ -430,13 +411,8 @@ fn is_bench_fn(cx: &TestCtxt, i: &ast::Item) -> bool {
|
||||
if has_bench_attr && !has_bench_signature {
|
||||
let diag = cx.span_diagnostic;
|
||||
|
||||
if cx.features.termination_trait_test {
|
||||
diag.span_err(i.span, "functions used as benches must have signature \
|
||||
diag.span_err(i.span, "functions used as benches must have signature \
|
||||
`fn(&mut Bencher) -> impl Termination`");
|
||||
} else {
|
||||
diag.span_err(i.span, "functions used as benches must have signature \
|
||||
`fn(&mut Bencher) -> ()`");
|
||||
}
|
||||
}
|
||||
|
||||
has_bench_attr && has_bench_signature
|
||||
|
@ -1,22 +0,0 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// compile-flags: --test
|
||||
|
||||
fn main() {}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn it_works() -> Result<(), ()> {
|
||||
//~^ ERROR functions used as tests must have signature fn() -> ()
|
||||
Ok(())
|
||||
}
|
||||
}
|
@ -10,7 +10,6 @@
|
||||
|
||||
// compile-flags: --test
|
||||
|
||||
#![feature(termination_trait_test)]
|
||||
#![feature(test)]
|
||||
|
||||
extern crate test;
|
||||
|
@ -11,7 +11,6 @@
|
||||
// compile-flags: --test
|
||||
// run-pass
|
||||
|
||||
#![feature(termination_trait_test)]
|
||||
#![feature(test)]
|
||||
|
||||
extern crate test;
|
||||
|
@ -10,8 +10,6 @@
|
||||
|
||||
// compile-flags: --test
|
||||
|
||||
#![feature(termination_trait_test)]
|
||||
|
||||
use std::num::ParseIntError;
|
||||
|
||||
#[test]
|
||||
|
Loading…
x
Reference in New Issue
Block a user