Attempt to enable compiletest_rs on nightly on travis

This commit is contained in:
kyren 2018-02-10 00:26:48 -05:00
parent f785a3abe4
commit d4c80d44c8
7 changed files with 91 additions and 56 deletions

View File

@ -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

View File

@ -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"

View File

@ -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();
});
}
*/

20
tests/compile-fail.rs Normal file
View File

@ -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");
}

View File

@ -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)
});
}

View File

@ -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();
});
}

View File

@ -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
}
}