Attempt to enable compiletest_rs on nightly on travis
This commit is contained in:
parent
f785a3abe4
commit
d4c80d44c8
10
.travis.yml
10
.travis.yml
|
@ -1,10 +1,12 @@
|
|||
language: rust
|
||||
rust:
|
||||
- stable
|
||||
- beta
|
||||
- nightly
|
||||
env:
|
||||
- RUSTFLAGS="-D warnings"
|
||||
matrix:
|
||||
include:
|
||||
- rust: stable
|
||||
- rust: beta
|
||||
- rust: nightly
|
||||
script: cargo test --features compiletest_rs
|
||||
matrix:
|
||||
allow_failures:
|
||||
- rust: nightly
|
||||
|
|
|
@ -26,9 +26,11 @@ builtin-lua = ["gcc"]
|
|||
[dependencies]
|
||||
libc = { version = "0.2" }
|
||||
failure = { version = "0.1.1" }
|
||||
compiletest_rs = { version = "0.3", optional = true }
|
||||
|
||||
[build-dependencies]
|
||||
gcc = { version = "0.3.52", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
rustyline = "1.0.0"
|
||||
|
||||
|
|
|
@ -744,55 +744,3 @@ fn too_many_binds() {
|
|||
.is_err()
|
||||
);
|
||||
}
|
||||
|
||||
// TODO: Need to use compiletest-rs or similar to make sure these don't compile.
|
||||
/*
|
||||
#[test]
|
||||
fn should_not_compile() {
|
||||
let lua = Lua::new();
|
||||
let globals = lua.globals();
|
||||
|
||||
// Should not allow userdata borrow to outlive lifetime of AnyUserData handle
|
||||
struct MyUserData;
|
||||
impl UserData for MyUserData {};
|
||||
let userdata_ref;
|
||||
{
|
||||
let touter = globals.get::<_, Table>("touter").unwrap();
|
||||
touter.set("userdata", lua.create_userdata(MyUserData)).unwrap();
|
||||
let userdata = touter.get::<_, AnyUserData>("userdata").unwrap();
|
||||
userdata_ref = userdata.borrow::<MyUserData>();
|
||||
}
|
||||
|
||||
// Should not allow self borrow of lua, it can change addresses
|
||||
globals.set("boom", lua.create_function(|_, _| {
|
||||
lua.eval::<i32>("1 + 1", None)
|
||||
})).unwrap();
|
||||
|
||||
// Should not allow Scope references to leak
|
||||
struct MyUserdata(Rc<()>);
|
||||
impl UserData for MyUserdata {}
|
||||
|
||||
let lua = Lua::new();
|
||||
let mut r = None;
|
||||
lua.scope(|scope| {
|
||||
r = Some(scope.create_userdata(MyUserdata(Rc::new(()))).unwrap());
|
||||
});
|
||||
|
||||
struct Test {
|
||||
field: i32,
|
||||
}
|
||||
|
||||
let lua = Lua::new();
|
||||
lua.scope(|scope| {
|
||||
let mut test = Test { field: 0 };
|
||||
|
||||
let f = scope
|
||||
.create_function(|_, ()| {
|
||||
test.field = 42;
|
||||
Ok(())
|
||||
})
|
||||
.unwrap();
|
||||
lua.globals().set("bad!", f).unwrap();
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
#![cfg(feature = "compiletest_rs")]
|
||||
|
||||
extern crate compiletest_rs as compiletest;
|
||||
|
||||
use std::path::PathBuf;
|
||||
|
||||
fn run_mode(mode: &'static str) {
|
||||
let mut config = compiletest::Config::default();
|
||||
|
||||
config.mode = mode.parse().expect("Invalid mode");
|
||||
config.src_base = PathBuf::from(format!("tests/{}", mode));
|
||||
config.target_rustcflags = Some("-L target/debug -L target/debug/deps".to_string());
|
||||
|
||||
compiletest::run_tests(&config);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compile_test() {
|
||||
run_mode("compile-fail");
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
extern crate rlua;
|
||||
|
||||
use rlua::*;
|
||||
|
||||
fn main() {
|
||||
let lua = Lua::new();
|
||||
struct Test(i32);
|
||||
|
||||
let test = Test(0);
|
||||
|
||||
let func = lua.create_function(|_, ()| -> Result<i32> {
|
||||
//~^ error: closure may outlive the current function, but it borrows `test`, which is owned by the current function
|
||||
Ok(test.0)
|
||||
});
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
extern crate rlua;
|
||||
|
||||
use rlua::*;
|
||||
|
||||
fn main() {
|
||||
struct Test {
|
||||
field: i32,
|
||||
}
|
||||
|
||||
let lua = Lua::new();
|
||||
lua.scope(|scope| {
|
||||
let f = {
|
||||
let mut test = Test { field: 0 };
|
||||
|
||||
scope
|
||||
.create_function_mut(|_, ()| {
|
||||
test.field = 42;
|
||||
//~^ error: `test` does not live long enough
|
||||
Ok(())
|
||||
})
|
||||
.unwrap()
|
||||
};
|
||||
|
||||
f.call::<_, ()>(()).unwrap();
|
||||
});
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
extern crate rlua;
|
||||
|
||||
use rlua::*;
|
||||
|
||||
fn main() {
|
||||
let lua = Lua::new();
|
||||
let globals = lua.globals();
|
||||
|
||||
// Should not allow userdata borrow to outlive lifetime of AnyUserData handle
|
||||
struct MyUserData;
|
||||
impl UserData for MyUserData {};
|
||||
let userdata_ref;
|
||||
{
|
||||
let touter = globals.get::<_, Table>("touter").unwrap();
|
||||
touter
|
||||
.set("userdata", lua.create_userdata(MyUserData).unwrap())
|
||||
.unwrap();
|
||||
let userdata = touter.get::<_, AnyUserData>("userdata").unwrap();
|
||||
userdata_ref = userdata.borrow::<MyUserData>();
|
||||
//~^ error: `userdata` does not live long enough
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue