From b1ce298d4b20065bb77f62974a4c4106e9cd91e1 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Wed, 22 Nov 2017 16:21:11 +0100 Subject: [PATCH] Replace compiletest suite by doc-tests with `compile_fail` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit compiletest-rs use internal rustc APIs and is broken in today’s Nightly. rustdoc however is maintained with rustc and so much less fragile. --- Cargo.lock | 54 ++++----- etc/ci/buildbot_steps.yml | 1 - ports/servo/Cargo.toml | 5 +- python/servo/testing_commands.py | 61 ---------- tests/compiletest/helper/lib.rs | 28 ----- tests/compiletest/plugin/Cargo.toml | 16 --- .../arc_rc_must_not_derive_malloc_size_of.rs | 34 ------ .../trustedpromise_mustnot_deriveclone.rs | 15 --- .../plugin/compile-fail/unrooted_must_root.rs | 27 ----- tests/compiletest/plugin/lib.rs | 10 -- tests/unit/deny_public_fields/Cargo.toml | 12 ++ .../deny_public_fields/lib.rs} | 27 ++++- tests/unit/malloc_size_of/Cargo.toml | 13 +++ tests/unit/malloc_size_of/lib.rs | 109 ++++++++++++++++++ tests/unit/script/Cargo.toml | 1 - tests/unit/script/lib.rs | 22 +++- .../helper => unit/script_plugins}/Cargo.toml | 7 +- tests/unit/script_plugins/lib.rs | 63 ++++++++++ 18 files changed, 266 insertions(+), 239 deletions(-) delete mode 100644 tests/compiletest/helper/lib.rs delete mode 100644 tests/compiletest/plugin/Cargo.toml delete mode 100644 tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs delete mode 100644 tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs delete mode 100644 tests/compiletest/plugin/compile-fail/unrooted_must_root.rs delete mode 100644 tests/compiletest/plugin/lib.rs create mode 100644 tests/unit/deny_public_fields/Cargo.toml rename tests/{compiletest/plugin/compile-fail/deny_public_fields.rs => unit/deny_public_fields/lib.rs} (50%) create mode 100644 tests/unit/malloc_size_of/Cargo.toml create mode 100644 tests/unit/malloc_size_of/lib.rs rename tests/{compiletest/helper => unit/script_plugins}/Cargo.toml (55%) create mode 100644 tests/unit/script_plugins/lib.rs diff --git a/Cargo.lock b/Cargo.lock index c4a25f18ba6..d7bedcf730a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -440,22 +440,6 @@ name = "color_quant" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "compiletest_helper" -version = "0.0.1" -dependencies = [ - "compiletest_rs 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "compiletest_rs" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "compositing" version = "0.0.1" @@ -702,6 +686,13 @@ dependencies = [ "synstructure 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "deny_public_fields_tests" +version = "0.0.1" +dependencies = [ + "deny_public_fields 0.0.1", +] + [[package]] name = "device" version = "0.0.1" @@ -1737,6 +1728,14 @@ dependencies = [ "synstructure 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "malloc_size_of_tests" +version = "0.0.1" +dependencies = [ + "malloc_size_of 0.0.1", + "servo_arc 0.0.1", +] + [[package]] name = "markup5ever" version = "0.6.2" @@ -2358,16 +2357,6 @@ dependencies = [ "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "plugin_compiletest" -version = "0.0.1" -dependencies = [ - "compiletest_helper 0.0.1", - "deny_public_fields 0.0.1", - "script 0.0.1", - "script_plugins 0.0.1", -] - [[package]] name = "png" version = "0.11.0" @@ -2728,6 +2717,13 @@ dependencies = [ name = "script_plugins" version = "0.0.1" +[[package]] +name = "script_plugins_tests" +version = "0.0.1" +dependencies = [ + "script_plugins 0.0.1", +] + [[package]] name = "script_tests" version = "0.0.1" @@ -2859,18 +2855,19 @@ dependencies = [ "android_injected_glue 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "backtrace 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "browserhtml 0.1.17 (git+https://github.com/browserhtml/browserhtml?branch=crate)", - "compiletest_helper 0.0.1", + "deny_public_fields_tests 0.0.1", "gfx_tests 0.0.1", "glutin_app 0.0.1", "layout_tests 0.0.1", "libservo 0.0.1", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "malloc_size_of_tests 0.0.1", "metrics_tests 0.0.1", "msg_tests 0.0.1", "net_tests 0.0.1", "net_traits_tests 0.0.1", - "plugin_compiletest 0.0.1", "profile_tests 0.0.1", + "script_plugins_tests 0.0.1", "script_tests 0.0.1", "servo_config_tests 0.0.1", "servo_remutex_tests 0.0.1", @@ -3896,7 +3893,6 @@ dependencies = [ "checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" "checksum cocoa 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac0d785ff4faf0ff23d7b5561346bb50dc7ef9a11cb0e65e07ef776b7752938f" "checksum color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a475fc4af42d83d28adf72968d9bcfaf035a1a9381642d8e85d8a04957767b0d" -"checksum compiletest_rs 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "617b23d0ed4f57b3bcff6b5fe0a78f0010f1efb636298317665a960b6dbc0533" "checksum cookie 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30b3493e12a550c2f96be785088d1da8d93189e7237c8a8d0d871bc9070334c3" "checksum cookie 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "477eb650753e319be2ae77ec368a58c638f9f0c4d941c39bad95e950fb1d1d0d" "checksum core-foundation 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7" diff --git a/etc/ci/buildbot_steps.yml b/etc/ci/buildbot_steps.yml index af0afc3d116..45dc2f39325 100644 --- a/etc/ci/buildbot_steps.yml +++ b/etc/ci/buildbot_steps.yml @@ -80,7 +80,6 @@ linux-dev: - ./mach test-tidy --no-progress --all - ./mach test-tidy --no-progress --self-test - env CC=gcc-5 CXX=g++-5 ./mach build --dev - - env ./mach test-compiletest - env ./mach test-unit - env ./mach package --dev - env ./mach build-cef diff --git a/ports/servo/Cargo.toml b/ports/servo/Cargo.toml index 4cd1b65037c..489b6f63515 100644 --- a/ports/servo/Cargo.toml +++ b/ports/servo/Cargo.toml @@ -14,16 +14,17 @@ test = false bench = false [dev-dependencies] -compiletest_helper = {path = "../../tests/compiletest/helper"} +deny_public_fields_tests = {path = "../../tests/unit/deny_public_fields"} gfx_tests = {path = "../../tests/unit/gfx"} layout_tests = {path = "../../tests/unit/layout"} +malloc_size_of_tests = {path = "../../tests/unit/malloc_size_of"} metrics_tests = {path = "../../tests/unit/metrics"} msg_tests = {path = "../../tests/unit/msg"} net_tests = {path = "../../tests/unit/net"} net_traits_tests = {path = "../../tests/unit/net_traits"} -plugin_compiletest = {path = "../../tests/compiletest/plugin"} profile_tests = {path = "../../tests/unit/profile"} script_tests = {path = "../../tests/unit/script"} +script_plugins_tests = {path = "../../tests/unit/script_plugins"} servo_config_tests = {path = "../../tests/unit/servo_config"} servo_remutex_tests = {path = "../../tests/unit/servo_remutex"} style_tests = {path = "../../tests/unit/style"} diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index 16efbd60b4f..a72b6ef8f70 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -59,9 +59,6 @@ TEST_SUITES = OrderedDict([ ("unit", {"kwargs": {}, "paths": [path.abspath(path.join("tests", "unit"))], "include_arg": "test_name"}), - ("compiletest", {"kwargs": {"release": False}, - "paths": [path.abspath(path.join("tests", "compiletest"))], - "include_arg": "test_name"}) ]) TEST_SUITES_BY_PREFIX = {path: k for k, v in TEST_SUITES.iteritems() if "paths" in v for path in v["paths"]} @@ -117,7 +114,6 @@ class MachCommands(CommandBase): "stylo": False} suites["wpt"]["kwargs"] = {"release": release} suites["unit"]["kwargs"] = {} - suites["compiletest"]["kwargs"] = {"release": release} selected_suites = OrderedDict() @@ -302,63 +298,6 @@ class MachCommands(CommandBase): with cd(path.join("ports", "geckolib")): return call(args, env=env) - @Command('test-compiletest', - description='Run compiletests', - category='testing') - @CommandArgument('--package', '-p', default=None, help="Specific package to test") - @CommandArgument('test_name', nargs=argparse.REMAINDER, - help="Only run tests that match this pattern or file path") - @CommandArgument('--release', default=False, action="store_true", - help="Run with a release build of servo") - def test_compiletest(self, test_name=None, package=None, release=False): - if test_name is None: - test_name = [] - - self.ensure_bootstrapped() - - if package: - packages = {package} - else: - packages = set() - - test_patterns = [] - for test in test_name: - # add package if 'tests/compiletest/' - match = re.search("tests/compiletest/(\\w+)/?$", test) - if match: - packages.add(match.group(1)) - # add package & test if '/', 'tests/compiletest//.rs', or similar - elif re.search("\\w/\\w", test): - tokens = test.split("/") - packages.add(tokens[-2]) - test_prefix = tokens[-1] - if test_prefix.endswith(".rs"): - test_prefix = test_prefix[:-3] - test_prefix += "::" - test_patterns.append(test_prefix) - # add test as-is otherwise - else: - test_patterns.append(test) - - if not packages: - packages = set(os.listdir(path.join(self.context.topdir, "tests", "compiletest"))) - set(['.DS_Store']) - - packages.remove("helper") - - args = ["cargo", "test"] - for crate in packages: - args += ["-p", "%s_compiletest" % crate] - args += test_patterns - - env = self.build_env() - if release: - env["BUILD_MODE"] = "release" - args += ["--release"] - else: - env["BUILD_MODE"] = "debug" - - return call(args, env=env, cwd=self.servo_crate()) - @Command('test-content', description='Run the content tests', category='testing') diff --git a/tests/compiletest/helper/lib.rs b/tests/compiletest/helper/lib.rs deleted file mode 100644 index 7c7b076c1bc..00000000000 --- a/tests/compiletest/helper/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate compiletest_rs as compiletest; - -use std::env; -use std::path::PathBuf; - -pub fn run_mode(mode: &'static str) { - let mut config = compiletest::default_config(); - let cfg_mode = mode.parse().ok().expect("Invalid mode"); - - config.mode = cfg_mode; - config.src_base = PathBuf::from(format!("{}", mode)); - - let mut base_path = env::current_dir().expect("Current directory is invalid"); - base_path.pop(); - base_path.pop(); - base_path.pop(); - - let mode = env::var("BUILD_MODE").expect("BUILD_MODE environment variable must be set"); - let debug_path = base_path.join(PathBuf::from(format!("target/{}", mode))); - let deps_path = base_path.join(PathBuf::from(format!("target/{}/deps", mode))); - - config.target_rustcflags = Some(format!("-L {} -L {}", debug_path.display(), deps_path.display())); - compiletest::run_tests(&config); -} diff --git a/tests/compiletest/plugin/Cargo.toml b/tests/compiletest/plugin/Cargo.toml deleted file mode 100644 index cf5ba72cc44..00000000000 --- a/tests/compiletest/plugin/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "plugin_compiletest" -version = "0.0.1" -authors = ["The Servo Project Developers"] -license = "MPL-2.0" - -[lib] -name = "plugin_compiletest" -path = "lib.rs" -doctest = false - -[dependencies] -compiletest_helper = {path = "../helper"} -deny_public_fields = {path = "../../../components/deny_public_fields"} -script = {path = "../../../components/script"} -script_plugins = {path = "../../../components/script_plugins"} diff --git a/tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs b/tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs deleted file mode 100644 index 72a5eaa1e9c..00000000000 --- a/tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs +++ /dev/null @@ -1,34 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate malloc_size_of; -extern crate servo_arc; - -use malloc_size_of::{MallocShallowSizeOf, MallocSizeOf}; - -fn sizeable() { -} - -fn shallow_sizeable() { -} - -fn main() { - sizeable::<::servo_arc::Arc>(); - //~^ ERROR the trait bound `servo_arc::Arc: malloc_size_of::MallocSizeOf` is not satisfied - - sizeable::<::std::sync::Arc>(); - //~^ ERROR the trait bound `std::sync::Arc: malloc_size_of::MallocSizeOf` is not satisfied - - sizeable::<::std::rc::Rc>(); - //~^ ERROR the trait bound `std::rc::Rc: malloc_size_of::MallocSizeOf` is not satisfied - - shallow_sizeable::<::servo_arc::Arc>(); - //~^ ERROR the trait bound `servo_arc::Arc: malloc_size_of::MallocShallowSizeOf` is not satisfied - - shallow_sizeable::<::std::sync::Arc>(); - //~^ ERROR the trait bound `std::sync::Arc: malloc_size_of::MallocShallowSizeOf` is not satisfied - - shallow_sizeable::<::std::rc::Rc>(); - //~^ ERROR the trait bound `std::rc::Rc: malloc_size_of::MallocShallowSizeOf` is not satisfied -} diff --git a/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs b/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs deleted file mode 100644 index 14ef7bbaa0d..00000000000 --- a/tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs +++ /dev/null @@ -1,15 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate script; - -use script::test::TrustedPromise; - -fn cloneable() { -} - -fn main() { - cloneable::(); - //~^ ERROR the trait bound `script::test::TrustedPromise: std::clone::Clone` is not satisfied -} diff --git a/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs b/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs deleted file mode 100644 index 5fd1960d074..00000000000 --- a/tests/compiletest/plugin/compile-fail/unrooted_must_root.rs +++ /dev/null @@ -1,27 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#![allow(dead_code)] -#![feature(plugin)] -#![plugin(script_plugins)] - -#[must_root] -struct Foo { - v: i32 -} - -struct Bar { - f: Foo - //~^ ERROR Type must be rooted, use #[must_root] on the struct definition to propagate -} - -fn foo1(_: Foo) {} //~ ERROR Type must be rooted - - -fn foo2() -> Foo { //~ ERROR Type must be rooted - Foo { v: 10 } -} - - -fn main() {} diff --git a/tests/compiletest/plugin/lib.rs b/tests/compiletest/plugin/lib.rs deleted file mode 100644 index d3466c57b9b..00000000000 --- a/tests/compiletest/plugin/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -extern crate compiletest_helper; - -#[test] -fn compile_test() { - compiletest_helper::run_mode("compile-fail"); -} diff --git a/tests/unit/deny_public_fields/Cargo.toml b/tests/unit/deny_public_fields/Cargo.toml new file mode 100644 index 00000000000..679069d2c1b --- /dev/null +++ b/tests/unit/deny_public_fields/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "deny_public_fields_tests" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" + +[lib] +path = "lib.rs" +test = false + +[dependencies] +deny_public_fields = {path = "../../../components/deny_public_fields"} diff --git a/tests/compiletest/plugin/compile-fail/deny_public_fields.rs b/tests/unit/deny_public_fields/lib.rs similarity index 50% rename from tests/compiletest/plugin/compile-fail/deny_public_fields.rs rename to tests/unit/deny_public_fields/lib.rs index 622b2c20fe1..1fcb1314cf3 100644 --- a/tests/compiletest/plugin/compile-fail/deny_public_fields.rs +++ b/tests/unit/deny_public_fields/lib.rs @@ -2,17 +2,32 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#![allow(dead_code)] - -#[macro_use] -extern crate deny_public_fields; +/** +```compile_fail +#[macro_use] extern crate deny_public_fields; #[derive(DenyPublicFields)] -//~^ ERROR proc-macro derive panicked -//~| HELP Field `v1` should not be public struct Foo { pub v1: i32, v2: i32 } fn main() {} +``` +*/ +pub fn deny_public_fields_failing() {} + +/** +``` +#[macro_use] extern crate deny_public_fields; + +#[derive(DenyPublicFields)] +struct Foo { + v1: i32, + v2: i32 +} + +fn main() {} +``` +*/ +pub fn deny_public_fields_ok() {} diff --git a/tests/unit/malloc_size_of/Cargo.toml b/tests/unit/malloc_size_of/Cargo.toml new file mode 100644 index 00000000000..80668d5ba61 --- /dev/null +++ b/tests/unit/malloc_size_of/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "malloc_size_of_tests" +version = "0.0.1" +authors = ["The Servo Project Developers"] +license = "MPL-2.0" + +[lib] +path = "lib.rs" +test = false + +[dependencies] +malloc_size_of = {path = "../../../components/malloc_size_of"} +servo_arc = {path = "../../../components/servo_arc"} diff --git a/tests/unit/malloc_size_of/lib.rs b/tests/unit/malloc_size_of/lib.rs new file mode 100644 index 00000000000..8aae5a40310 --- /dev/null +++ b/tests/unit/malloc_size_of/lib.rs @@ -0,0 +1,109 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** +``` +extern crate malloc_size_of; +extern crate servo_arc; + +fn sizeable() {} +fn shallow_sizeable() {} +fn cloneable() {} + +fn main() { + cloneable::>(); + cloneable::>(); + cloneable::>(); +} +``` +*/ +pub fn imports_ok() {} + +pub mod does_not_impl_malloc_size_of { + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + extern crate servo_arc; + + fn sizeable() {} + + fn main() { + sizeable::>(); + } + ``` + */ + pub fn servo_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn sizeable() {} + + fn main() { + sizeable::>(); + } + ``` + */ + pub fn std_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn sizeable() {} + + fn main() { + sizeable::>(); + } + ``` + */ + pub fn rc() {} +} + +pub mod does_not_impl_malloc_shallow_size_of { + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + extern crate servo_arc; + + fn shallow_sizeable() {} + + fn main() { + shallow_sizeable::>(); + } + ``` + */ + pub fn servo_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn shallow_sizeable() {} + + fn main() { + shallow_sizeable::>(); + } + ``` + */ + pub fn std_arc() {} + + + /** + ```compile_fail,E0277 + extern crate malloc_size_of; + + fn shallow_sizeable() {} + + fn main() { + shallow_sizeable::>(); + } + ``` + */ + pub fn rc() {} +} diff --git a/tests/unit/script/Cargo.toml b/tests/unit/script/Cargo.toml index 7785cced6a9..7983d119f38 100644 --- a/tests/unit/script/Cargo.toml +++ b/tests/unit/script/Cargo.toml @@ -7,7 +7,6 @@ license = "MPL-2.0" [lib] name = "script_tests" path = "lib.rs" -doctest = false [dependencies] euclid = "0.15" diff --git a/tests/unit/script/lib.rs b/tests/unit/script/lib.rs index 21b89a304c5..6d724db5358 100644 --- a/tests/unit/script/lib.rs +++ b/tests/unit/script/lib.rs @@ -2,11 +2,11 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -extern crate euclid; -extern crate msg; -extern crate script; -extern crate servo_url; -extern crate style; +#[cfg(test)] extern crate euclid; +#[cfg(test)] extern crate msg; +#[cfg(test)] extern crate script; +#[cfg(test)] extern crate servo_url; +#[cfg(test)] extern crate style; #[cfg(test)] mod origin; #[cfg(all(test, target_pointer_width = "64"))] mod size_of; @@ -15,3 +15,15 @@ extern crate style; #[cfg(test)] mod htmlareaelement; #[cfg(test)] mod htmlimageelement; +/** +```compile_fail,E0277 +extern crate script; + +fn cloneable() {} + +fn main() { + cloneable::(); +} +``` +*/ +pub fn trustedpromise_does_not_impl_clone() {} diff --git a/tests/compiletest/helper/Cargo.toml b/tests/unit/script_plugins/Cargo.toml similarity index 55% rename from tests/compiletest/helper/Cargo.toml rename to tests/unit/script_plugins/Cargo.toml index 01c5816668d..8a41b62aa8f 100644 --- a/tests/compiletest/helper/Cargo.toml +++ b/tests/unit/script_plugins/Cargo.toml @@ -1,13 +1,12 @@ [package] -name = "compiletest_helper" +name = "script_plugins_tests" version = "0.0.1" authors = ["The Servo Project Developers"] license = "MPL-2.0" [lib] -name = "compiletest_helper" path = "lib.rs" -doctest = false +test = false [dependencies] -compiletest_rs = "0.2.0" +script_plugins = {path = "../../../components/script_plugins"} diff --git a/tests/unit/script_plugins/lib.rs b/tests/unit/script_plugins/lib.rs new file mode 100644 index 00000000000..35a1c0dff11 --- /dev/null +++ b/tests/unit/script_plugins/lib.rs @@ -0,0 +1,63 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +pub mod unrooted_must_root { + /** + ``` + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + #[must_root] struct Bar(Foo); + + fn foo1(_: &Foo) {} + fn foo2(_: &()) -> &Foo { unimplemented!() } + + fn main() {} + ``` + */ + pub fn ok() {} + + /** + ```compile_fail + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + struct Bar(Foo); + + fn main() {} + ``` + */ + pub fn struct_field() {} + + /** + ```compile_fail + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + + fn foo1(_: Foo) {} + + fn main() {} + ``` + */ + pub fn parameter() {} + + /** + ```compile_fail + #![feature(plugin)] + #![plugin(script_plugins)] + + #[must_root] struct Foo(i32); + + fn foo2() -> Foo { unimplemented!() } + + fn main() {} + ``` + */ + pub fn return_type() {} + +}