Utoljára aktív 1722236292

lua_test.rs Eredeti
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