1use mlua::Lua;
2
3use runner::*;
4
5// pub fn main() -> Result<(), mlua::Error> {
6// let source = include_str!("../plugin/cargo_test.lua").to_string();
7
8// let module = LuaPlugin::new(source);
9// let mut lua: Lua = Runtime::init(module)?;
10// let runner: TestRunner = lua.as_interface::<TestRunner>().unwrap();
11
12// println!("extracted interface: {:#?}", &runner);
13
14// let contents = runner.run_test(&mut lua, "it_works".into());
15
16// println!("test results:{}", contents.unwrap());
17
18// Ok(())
19// }
20
21// pub fn main() -> mlua::Result<()> {
22// let module = LuaPlugin::new(include_str!("../plugin/cargo_test.lua").to_string());
23// let mut lua: Lua = Runtime::init(module)?;
24// let runner = lua.as_interface::<TestRunner>().unwrap();
25// let test_results = runner.run_test(&mut lua, "it_works".into());
26// Ok(())
27// }
28
29pub fn main() -> anyhow::Result<()> {
30 let plugin = WasmPlugin {
31 source_bytes: include_bytes!(
32 "../plugin/target/wasm32-unknown-unknown/release/cargo_test.wasm"
33 )
34 .to_vec(),
35 store_data: (),
36 };
37
38 let mut wasm: Wasm<()> = Runtime::init(plugin)?;
39 let banana = wasm.as_interface::<Banana>().unwrap();
40 let result = banana.banana(&mut wasm, 420.69);
41
42 dbg!("{}", result);
43
44 Ok(())
45}
46
47struct Banana {
48 banana: Handle,
49}
50
51impl Interface for Banana {
52 fn from_runtime<T: Runtime>(runtime: &mut T) -> Option<Self> {
53 let banana = runtime.handle_for("banana")?;
54 Some(Banana { banana })
55 }
56}
57
58impl Banana {
59 fn banana<T: Runtime>(&self, runtime: &mut T, number: f64) -> Option<f64> {
60 runtime.call(&self.banana, number).ok()
61 }
62}
63
64#[allow(dead_code)]
65#[derive(Debug)]
66struct TestRunner {
67 pub query: String,
68 run_test: Handle,
69}
70
71impl Interface for TestRunner {
72 fn from_runtime<T: Runtime>(runtime: &mut T) -> Option<Self> {
73 let run_test = runtime.handle_for("run_test")?;
74 let query = runtime.handle_for("query")?;
75 let query: String = runtime.constant(&query).ok()?;
76 Some(TestRunner { query, run_test })
77 }
78}
79
80impl TestRunner {
81 pub fn run_test<T: Runtime>(&self, runtime: &mut T, test_name: String) -> Option<String> {
82 runtime.call(&self.run_test, test_name).ok()
83 }
84}
85
86#[test]
87pub fn it_works() {
88 panic!("huh, that was surprising...");
89}