From ed8d059d8d49491b736ea88edd8f2b57a866c44a Mon Sep 17 00:00:00 2001 From: Aaron Turon <aturon@mozilla.com> Date: Wed, 30 Dec 2015 15:25:31 -0800 Subject: [PATCH] Adjust tests for feature gate, and add tests for the gate itself --- src/test/auxiliary/go_trait.rs | 2 ++ .../auxiliary/specialization_cross_crate.rs | 2 ++ .../specialization-default-projection.rs | 2 ++ .../specialization-default-types.rs | 2 ++ .../specialization-feature-gate-default.rs | 19 +++++++++++++++ .../specialization-feature-gate-overlap.rs | 23 +++++++++++++++++++ .../specialization-negative-impl.rs | 1 + .../compile-fail/specialization-no-default.rs | 2 ++ .../specialization-overlap-negative.rs | 1 + .../compile-fail/specialization-overlap.rs | 2 ++ .../specialization-allowed-cross-crate.rs | 2 ++ src/test/run-pass/specialization-assoc-fns.rs | 2 ++ src/test/run-pass/specialization-basics.rs | 2 ++ .../run-pass/specialization-cross-crate.rs | 2 ++ .../specialization-default-methods.rs | 2 ++ .../run-pass/specialization-on-projection.rs | 2 ++ .../run-pass/specialization-projection.rs | 2 ++ .../run-pass/specialization-super-traits.rs | 2 ++ ...ation-translate-projections-with-params.rs | 2 ++ .../specialization-translate-projections.rs | 2 ++ 20 files changed, 76 insertions(+) create mode 100644 src/test/compile-fail/specialization-feature-gate-default.rs create mode 100644 src/test/compile-fail/specialization-feature-gate-overlap.rs diff --git a/src/test/auxiliary/go_trait.rs b/src/test/auxiliary/go_trait.rs index ab1051c5650..044bb606b40 100644 --- a/src/test/auxiliary/go_trait.rs +++ b/src/test/auxiliary/go_trait.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + // Common code used for tests that model the Fn/FnMut/FnOnce hierarchy. pub trait Go { diff --git a/src/test/auxiliary/specialization_cross_crate.rs b/src/test/auxiliary/specialization_cross_crate.rs index 92c985a3e1d..1d235336de8 100644 --- a/src/test/auxiliary/specialization_cross_crate.rs +++ b/src/test/auxiliary/specialization_cross_crate.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + pub trait Foo { fn foo(&self) -> &'static str; } diff --git a/src/test/compile-fail/specialization-default-projection.rs b/src/test/compile-fail/specialization-default-projection.rs index b85dba126e6..3f85a503f62 100644 --- a/src/test/compile-fail/specialization-default-projection.rs +++ b/src/test/compile-fail/specialization-default-projection.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + // Make sure we can't project defaulted associated types trait Foo { diff --git a/src/test/compile-fail/specialization-default-types.rs b/src/test/compile-fail/specialization-default-types.rs index f6b2dd46efc..dce1db06a92 100644 --- a/src/test/compile-fail/specialization-default-types.rs +++ b/src/test/compile-fail/specialization-default-types.rs @@ -12,6 +12,8 @@ // associated type in the impl defining it -- otherwise, what happens // if it's overridden? +#![feature(specialization)] + trait Example { type Output; fn generate(self) -> Self::Output; diff --git a/src/test/compile-fail/specialization-feature-gate-default.rs b/src/test/compile-fail/specialization-feature-gate-default.rs new file mode 100644 index 00000000000..caac21278d4 --- /dev/null +++ b/src/test/compile-fail/specialization-feature-gate-default.rs @@ -0,0 +1,19 @@ +// Copyright 2015 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. + +trait Foo { + fn foo(&self); +} + +impl<T> Foo for T { + default fn foo(&self) {} //~ ERROR +} + +fn main() {} diff --git a/src/test/compile-fail/specialization-feature-gate-overlap.rs b/src/test/compile-fail/specialization-feature-gate-overlap.rs new file mode 100644 index 00000000000..a7918e4426d --- /dev/null +++ b/src/test/compile-fail/specialization-feature-gate-overlap.rs @@ -0,0 +1,23 @@ +// Copyright 2015 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. + +trait Foo { + fn foo(&self); +} + +impl<T> Foo for T { + fn foo(&self) {} +} + +impl Foo for u8 { //~ ERROR + fn foo(&self) {} +} + +fn main() {} diff --git a/src/test/compile-fail/specialization-negative-impl.rs b/src/test/compile-fail/specialization-negative-impl.rs index d0d698d12e0..3a907dc3b8e 100644 --- a/src/test/compile-fail/specialization-negative-impl.rs +++ b/src/test/compile-fail/specialization-negative-impl.rs @@ -9,6 +9,7 @@ // except according to those terms. #![feature(optin_builtin_traits)] +#![feature(specialization)] struct TestType<T>(T); diff --git a/src/test/compile-fail/specialization-no-default.rs b/src/test/compile-fail/specialization-no-default.rs index 3e23c6e06ea..143c6f0e858 100644 --- a/src/test/compile-fail/specialization-no-default.rs +++ b/src/test/compile-fail/specialization-no-default.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + trait Foo { fn foo(&self); fn bar(&self); diff --git a/src/test/compile-fail/specialization-overlap-negative.rs b/src/test/compile-fail/specialization-overlap-negative.rs index cc427b4fed2..62a6d8d9b50 100644 --- a/src/test/compile-fail/specialization-overlap-negative.rs +++ b/src/test/compile-fail/specialization-overlap-negative.rs @@ -9,6 +9,7 @@ // except according to those terms. #![feature(optin_builtin_traits)] +#![feature(specialization)] trait MyTrait {} diff --git a/src/test/compile-fail/specialization-overlap.rs b/src/test/compile-fail/specialization-overlap.rs index 7d14e85fba8..57529d2ae42 100644 --- a/src/test/compile-fail/specialization-overlap.rs +++ b/src/test/compile-fail/specialization-overlap.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + trait Foo {} impl<T: Clone> Foo for T {} impl<T> Foo for Vec<T> {} //~ ERROR E0119 diff --git a/src/test/run-pass/specialization-allowed-cross-crate.rs b/src/test/run-pass/specialization-allowed-cross-crate.rs index 139c63d3cdb..6b999f38358 100644 --- a/src/test/run-pass/specialization-allowed-cross-crate.rs +++ b/src/test/run-pass/specialization-allowed-cross-crate.rs @@ -10,6 +10,8 @@ // aux-build:go_trait.rs +#![feature(specialization)] + extern crate go_trait; use go_trait::{Go,GoMut}; diff --git a/src/test/run-pass/specialization-assoc-fns.rs b/src/test/run-pass/specialization-assoc-fns.rs index 750581ffe92..683e0d55dc9 100644 --- a/src/test/run-pass/specialization-assoc-fns.rs +++ b/src/test/run-pass/specialization-assoc-fns.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + trait Foo { fn mk() -> Self; } diff --git a/src/test/run-pass/specialization-basics.rs b/src/test/run-pass/specialization-basics.rs index e585c8e2353..b11495e9edf 100644 --- a/src/test/run-pass/specialization-basics.rs +++ b/src/test/run-pass/specialization-basics.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + // Tests a variety of basic specialization scenarios and method // dispatch for them. diff --git a/src/test/run-pass/specialization-cross-crate.rs b/src/test/run-pass/specialization-cross-crate.rs index c74b1f2e49e..7593ac4fb1d 100644 --- a/src/test/run-pass/specialization-cross-crate.rs +++ b/src/test/run-pass/specialization-cross-crate.rs @@ -10,6 +10,8 @@ // aux-build:specialization_cross_crate.rs +#![feature(specialization)] + extern crate specialization_cross_crate; use specialization_cross_crate::*; diff --git a/src/test/run-pass/specialization-default-methods.rs b/src/test/run-pass/specialization-default-methods.rs index 7482d3acbc1..9c52ceb5247 100644 --- a/src/test/run-pass/specialization-default-methods.rs +++ b/src/test/run-pass/specialization-default-methods.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + // First, test only use of explicit `default` items: trait Foo { diff --git a/src/test/run-pass/specialization-on-projection.rs b/src/test/run-pass/specialization-on-projection.rs index f2061532662..65cbb31d221 100644 --- a/src/test/run-pass/specialization-on-projection.rs +++ b/src/test/run-pass/specialization-on-projection.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + trait Foo<T> {} trait Assoc { diff --git a/src/test/run-pass/specialization-projection.rs b/src/test/run-pass/specialization-projection.rs index 86fcab1fdc2..d26d59896a5 100644 --- a/src/test/run-pass/specialization-projection.rs +++ b/src/test/run-pass/specialization-projection.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + // Make sure we *can* project non-defaulted associated types // cf compile-fail/specialization-default-projection.rs diff --git a/src/test/run-pass/specialization-super-traits.rs b/src/test/run-pass/specialization-super-traits.rs index 4a30e6bcd25..a9b3bfca53d 100644 --- a/src/test/run-pass/specialization-super-traits.rs +++ b/src/test/run-pass/specialization-super-traits.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + // Test that you can specialize via an explicit trait hierarchy // FIXME: this doesn't work yet... diff --git a/src/test/run-pass/specialization-translate-projections-with-params.rs b/src/test/run-pass/specialization-translate-projections-with-params.rs index 6bca8939d82..3d90bc56f42 100644 --- a/src/test/run-pass/specialization-translate-projections-with-params.rs +++ b/src/test/run-pass/specialization-translate-projections-with-params.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + trait Trait<T> { fn convert(&self) -> T; } diff --git a/src/test/run-pass/specialization-translate-projections.rs b/src/test/run-pass/specialization-translate-projections.rs index 7f41729a527..d224efe8c31 100644 --- a/src/test/run-pass/specialization-translate-projections.rs +++ b/src/test/run-pass/specialization-translate-projections.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(specialization)] + use std::convert::Into; trait Trait {