mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Add infrastructure for compiletests
Also adds compilefail tests for some lints, closes #5646.
This commit is contained in:
parent
46b3eb6535
commit
dfdbcabc2e
13 changed files with 257 additions and 1 deletions
12
tests/compiletest/helper/Cargo.toml
Normal file
12
tests/compiletest/helper/Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "compiletest_helper"
|
||||
version = "0.0.1"
|
||||
authors = ["The Servo Project Developers"]
|
||||
|
||||
[lib]
|
||||
name = "compiletest_helper"
|
||||
path = "lib.rs"
|
||||
doctest = false
|
||||
|
||||
[dependencies.compiletest_rs]
|
||||
compiletest_rs = "0.11"
|
29
tests/compiletest/helper/lib.rs
Normal file
29
tests/compiletest/helper/lib.rs
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* 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);
|
||||
}
|
15
tests/compiletest/plugin/Cargo.toml
Normal file
15
tests/compiletest/plugin/Cargo.toml
Normal file
|
@ -0,0 +1,15 @@
|
|||
[package]
|
||||
name = "plugin_compiletest"
|
||||
version = "0.0.1"
|
||||
authors = ["The Servo Project Developers"]
|
||||
|
||||
[lib]
|
||||
name = "plugin_compiletest"
|
||||
path = "lib.rs"
|
||||
doctest = false
|
||||
|
||||
[dependencies.compiletest_helper]
|
||||
path = "../helper"
|
||||
|
||||
[dependencies.plugins]
|
||||
path = "../../../components/plugins"
|
18
tests/compiletest/plugin/compile-fail/ban.rs
Normal file
18
tests/compiletest/plugin/compile-fail/ban.rs
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* 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/. */
|
||||
|
||||
#![feature(plugin)]
|
||||
#![plugin(plugins)]
|
||||
|
||||
extern crate js;
|
||||
|
||||
use js::jsval::JSVal;
|
||||
use std::cell::Cell;
|
||||
|
||||
struct Foo {
|
||||
bar: Cell<JSVal>
|
||||
//~^ ERROR Banned type Cell<JSVal> detected. Use MutHeap<JSVal> instead,
|
||||
}
|
||||
|
||||
fn main() {}
|
16
tests/compiletest/plugin/compile-fail/privatize.rs
Normal file
16
tests/compiletest/plugin/compile-fail/privatize.rs
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* 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/. */
|
||||
|
||||
#![feature(plugin, custom_attribute)]
|
||||
#![plugin(plugins)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[privatize]
|
||||
struct Foo {
|
||||
pub v1: i32,
|
||||
//~^ ERROR Field v1 is public where only private fields are allowed
|
||||
v2: i32
|
||||
}
|
||||
|
||||
fn main() {}
|
16
tests/compiletest/plugin/compile-fail/str_to_string.rs
Normal file
16
tests/compiletest/plugin/compile-fail/str_to_string.rs
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* 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/. */
|
||||
|
||||
#![feature(plugin)]
|
||||
#![plugin(plugins)]
|
||||
|
||||
|
||||
fn main() {
|
||||
let x = "foo".to_string();
|
||||
//~^ ERROR str.to_owned() is more efficient than str.to_string()
|
||||
|
||||
let x = &x[..];
|
||||
x.to_string();
|
||||
//~^ ERROR str.to_owned() is more efficient than str.to_string()
|
||||
}
|
19
tests/compiletest/plugin/compile-fail/transmute_type.rs
Normal file
19
tests/compiletest/plugin/compile-fail/transmute_type.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* 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/. */
|
||||
|
||||
#![feature(plugin)]
|
||||
#![plugin(plugins)]
|
||||
#![allow(dead_code)]
|
||||
#![deny(transmute_type_lint)]
|
||||
|
||||
use std::mem::{self, transmute};
|
||||
|
||||
|
||||
fn main() {
|
||||
let _: &[u8] = unsafe { transmute("Rust") };
|
||||
//~^ ERROR Transmute to &[u8] from &'static str detected
|
||||
|
||||
let _: &[u8] = unsafe { mem::transmute("Rust") };
|
||||
//~^ ERROR Transmute to &[u8] from &'static str detected
|
||||
}
|
27
tests/compiletest/plugin/compile-fail/unrooted_must_root.rs
Normal file
27
tests/compiletest/plugin/compile-fail/unrooted_must_root.rs
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* 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/. */
|
||||
|
||||
#![feature(plugin)]
|
||||
#![plugin(plugins)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[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() {}
|
10
tests/compiletest/plugin/lib.rs
Normal file
10
tests/compiletest/plugin/lib.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* 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");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue