Stabilize unit tests with non-() return type

This commit is contained in:
dylan_DPC 2018-06-02 17:27:37 +05:30
parent 2954cb5119
commit b78457f0fb
6 changed files with 10 additions and 60 deletions

View File

@ -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! (

View File

@ -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

View File

@ -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(())
}
}

View File

@ -10,7 +10,6 @@
// compile-flags: --test
#![feature(termination_trait_test)]
#![feature(test)]
extern crate test;

View File

@ -11,7 +11,6 @@
// compile-flags: --test
// run-pass
#![feature(termination_trait_test)]
#![feature(test)]
extern crate test;

View File

@ -10,8 +10,6 @@
// compile-flags: --test
#![feature(termination_trait_test)]
use std::num::ParseIntError;
#[test]