lua_test.rs
· 2.3 KiB · Rust
Sin formato
#[tokio::test]
async fn multilua_test() {
let mut vm1 = Lua::new();
vm1.sandbox(false).unwrap();
let mut vm2 = Lua::new();
vm2.sandbox(false).unwrap();
// Set a global variable
let f: LuaFunction = vm1
.load(
r#"
-- My first function
function(args)
for k, v in pairs(args) do
print(k, v)
end
_G.obs = "some text value"
return args["a"]
end
"#,
)
.eval_async()
.await
.unwrap();
let luav = vm1.create_table().unwrap();
luav.set("a", 1).unwrap();
let res: i32 = f.call_async(luav).await.unwrap();
assert_eq!(res, 1);
// _G.obj must persist
let f: LuaFunction = vm1
.load(
r#"
-- If G.obs is set, return arg1
function(args)
for k, v in pairs(args) do
print(k, v)
end
if _G.obs == "some text value" then
return args["arg1"]
end
return 3
end
"#,
)
.eval_async()
.await
.unwrap();
let res: i32 = f
.call_async({
let t = vm1.create_table().unwrap();
t.set("arg1", 5).unwrap();
t
})
.await
.unwrap();
assert_eq!(res, 5);
// But _G.obs must not be set in vm2
// _G.obj must persist
let f: LuaFunction = vm2
.load(
r#"
-- If G.obs is set, return arg1
function(args)
for k, v in pairs(args) do
print(k, v)
end
if _G.obs == "some text value" then
return args["arg1"]
end
return 3
end
"#,
)
.eval_async()
.await
.unwrap();
let res: i32 = f
.call_async({
let t = vm2.create_table().unwrap();
t.set("arg1", 5).unwrap();
t
})
.await
.unwrap();
assert_eq!(res, 3);
}
1 | #[tokio::test] |
2 | async fn multilua_test() { |
3 | let mut vm1 = Lua::new(); |
4 | vm1.sandbox(false).unwrap(); |
5 | let mut vm2 = Lua::new(); |
6 | vm2.sandbox(false).unwrap(); |
7 | |
8 | // Set a global variable |
9 | let f: LuaFunction = vm1 |
10 | .load( |
11 | r#" |
12 | -- My first function |
13 | function(args) |
14 | for k, v in pairs(args) do |
15 | print(k, v) |
16 | end |
17 | _G.obs = "some text value" |
18 | return args["a"] |
19 | end |
20 | "#, |
21 | ) |
22 | .eval_async() |
23 | .await |
24 | .unwrap(); |
25 | |
26 | let luav = vm1.create_table().unwrap(); |
27 | luav.set("a", 1).unwrap(); |
28 | |
29 | let res: i32 = f.call_async(luav).await.unwrap(); |
30 | |
31 | assert_eq!(res, 1); |
32 | |
33 | // _G.obj must persist |
34 | let f: LuaFunction = vm1 |
35 | .load( |
36 | r#" |
37 | -- If G.obs is set, return arg1 |
38 | function(args) |
39 | for k, v in pairs(args) do |
40 | print(k, v) |
41 | end |
42 | |
43 | if _G.obs == "some text value" then |
44 | return args["arg1"] |
45 | end |
46 | |
47 | return 3 |
48 | end |
49 | "#, |
50 | ) |
51 | .eval_async() |
52 | .await |
53 | .unwrap(); |
54 | |
55 | let res: i32 = f |
56 | .call_async({ |
57 | let t = vm1.create_table().unwrap(); |
58 | t.set("arg1", 5).unwrap(); |
59 | t |
60 | }) |
61 | .await |
62 | .unwrap(); |
63 | |
64 | assert_eq!(res, 5); |
65 | |
66 | // But _G.obs must not be set in vm2 |
67 | // _G.obj must persist |
68 | let f: LuaFunction = vm2 |
69 | .load( |
70 | r#" |
71 | -- If G.obs is set, return arg1 |
72 | function(args) |
73 | for k, v in pairs(args) do |
74 | print(k, v) |
75 | end |
76 | |
77 | if _G.obs == "some text value" then |
78 | return args["arg1"] |
79 | end |
80 | |
81 | return 3 |
82 | end |
83 | "#, |
84 | ) |
85 | .eval_async() |
86 | .await |
87 | .unwrap(); |
88 | |
89 | let res: i32 = f |
90 | .call_async({ |
91 | let t = vm2.create_table().unwrap(); |
92 | t.set("arg1", 5).unwrap(); |
93 | t |
94 | }) |
95 | .await |
96 | .unwrap(); |
97 | |
98 | assert_eq!(res, 3); |
99 | } |
100 |