aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock54
-rw-r--r--etc/ci/buildbot_steps.yml1
-rw-r--r--ports/servo/Cargo.toml5
-rw-r--r--python/servo/testing_commands.py61
-rw-r--r--tests/compiletest/helper/lib.rs28
-rw-r--r--tests/compiletest/plugin/Cargo.toml16
-rw-r--r--tests/compiletest/plugin/compile-fail/arc_rc_must_not_derive_malloc_size_of.rs34
-rw-r--r--tests/compiletest/plugin/compile-fail/trustedpromise_mustnot_deriveclone.rs15
-rw-r--r--tests/compiletest/plugin/compile-fail/unrooted_must_root.rs27
-rw-r--r--tests/compiletest/plugin/lib.rs10
-rw-r--r--tests/unit/deny_public_fields/Cargo.toml12
-rw-r--r--tests/unit/deny_public_fields/lib.rs (renamed from tests/compiletest/plugin/compile-fail/deny_public_fields.rs)27
-rw-r--r--tests/unit/malloc_size_of/Cargo.toml13
-rw-r--r--tests/unit/malloc_size_of/lib.rs109
-rw-r--r--tests/unit/script/Cargo.toml1
-rw-r--r--tests/unit/script/lib.rs22
-rw-r--r--tests/unit/script_plugins/Cargo.toml (renamed from tests/compiletest/helper/Cargo.toml)7
-rw-r--r--tests/unit/script_plugins/lib.rs63
18 files changed, 266 insertions, 239 deletions
diff --git a/Cargo.lock b/Cargo.lock
index c4a25f18ba6..d7bedcf730a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -441,22 +441,6 @@ 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"
dependencies = [
@@ -703,6 +687,13 @@ dependencies = [
]
[[package]]
+name = "deny_public_fields_tests"
+version = "0.0.1"
+dependencies = [
+ "deny_public_fields 0.0.1",
+]
+
+[[package]]
name = "device"
version = "0.0.1"
source = "git+https://github.com/servo/devices#c3b012b0ac4fbc47d1ebc9bd3fc308f599be4ee4"
@@ -1738,6 +1729,14 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2359,16 +2358,6 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2729,6 +2718,13 @@ 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"
dependencies = [
@@ -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/<package>'
- match = re.search("tests/compiletest/(\\w+)/?$", test)
- if match:
- packages.add(match.group(1))
- # add package & test if '<package>/<test>', 'tests/compiletest/<package>/<test>.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<T: MallocSizeOf>() {
-}
-
-fn shallow_sizeable<T: MallocShallowSizeOf>() {
-}
-
-fn main() {
- sizeable::<::servo_arc::Arc<i32>>();
- //~^ ERROR the trait bound `servo_arc::Arc<i32>: malloc_size_of::MallocSizeOf` is not satisfied
-
- sizeable::<::std::sync::Arc<i32>>();
- //~^ ERROR the trait bound `std::sync::Arc<i32>: malloc_size_of::MallocSizeOf` is not satisfied
-
- sizeable::<::std::rc::Rc<i32>>();
- //~^ ERROR the trait bound `std::rc::Rc<i32>: malloc_size_of::MallocSizeOf` is not satisfied
-
- shallow_sizeable::<::servo_arc::Arc<i32>>();
- //~^ ERROR the trait bound `servo_arc::Arc<i32>: malloc_size_of::MallocShallowSizeOf` is not satisfied
-
- shallow_sizeable::<::std::sync::Arc<i32>>();
- //~^ ERROR the trait bound `std::sync::Arc<i32>: malloc_size_of::MallocShallowSizeOf` is not satisfied
-
- shallow_sizeable::<::std::rc::Rc<i32>>();
- //~^ ERROR the trait bound `std::rc::Rc<i32>: 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<T: Clone>() {
-}
-
-fn main() {
- cloneable::<TrustedPromise>();
- //~^ 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
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<T: malloc_size_of::MallocSizeOf>() {}
+fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {}
+fn cloneable<T: Clone>() {}
+
+fn main() {
+ cloneable::<servo_arc::Arc<i32>>();
+ cloneable::<std::sync::Arc<i32>>();
+ cloneable::<std::rc::Rc<i32>>();
+}
+```
+*/
+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<T: malloc_size_of::MallocSizeOf>() {}
+
+ fn main() {
+ sizeable::<servo_arc::Arc<i32>>();
+ }
+ ```
+ */
+ pub fn servo_arc() {}
+
+
+ /**
+ ```compile_fail,E0277
+ extern crate malloc_size_of;
+
+ fn sizeable<T: malloc_size_of::MallocSizeOf>() {}
+
+ fn main() {
+ sizeable::<std::sync::Arc<i32>>();
+ }
+ ```
+ */
+ pub fn std_arc() {}
+
+
+ /**
+ ```compile_fail,E0277
+ extern crate malloc_size_of;
+
+ fn sizeable<T: malloc_size_of::MallocSizeOf>() {}
+
+ fn main() {
+ sizeable::<std::rc::Rc<i32>>();
+ }
+ ```
+ */
+ 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<T: malloc_size_of::MallocShallowSizeOf>() {}
+
+ fn main() {
+ shallow_sizeable::<servo_arc::Arc<i32>>();
+ }
+ ```
+ */
+ pub fn servo_arc() {}
+
+
+ /**
+ ```compile_fail,E0277
+ extern crate malloc_size_of;
+
+ fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {}
+
+ fn main() {
+ shallow_sizeable::<std::sync::Arc<i32>>();
+ }
+ ```
+ */
+ pub fn std_arc() {}
+
+
+ /**
+ ```compile_fail,E0277
+ extern crate malloc_size_of;
+
+ fn shallow_sizeable<T: malloc_size_of::MallocShallowSizeOf>() {}
+
+ fn main() {
+ shallow_sizeable::<std::rc::Rc<i32>>();
+ }
+ ```
+ */
+ 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<T: Clone>() {}
+
+fn main() {
+ cloneable::<script::test::TrustedPromise>();
+}
+```
+*/
+pub fn trustedpromise_does_not_impl_clone() {}
diff --git a/tests/compiletest/helper/Cargo.toml b/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() {}
+
+}