87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
from exports.bindings import Exports
|
|
from imports.bindings import add_imports_to_linker, Imports
|
|
from typing import Tuple, List
|
|
import exports.bindings as e
|
|
import imports.bindings as i
|
|
import sys
|
|
import wasmtime
|
|
|
|
class MyImports:
|
|
def list_in_record1(self, a: i.ListInRecord1) -> None:
|
|
pass
|
|
|
|
def list_in_record2(self) -> i.ListInRecord2:
|
|
return i.ListInRecord2('list_in_record2')
|
|
|
|
def list_in_record3(self, a: i.ListInRecord3) -> i.ListInRecord3:
|
|
assert(a.a == 'list_in_record3 input')
|
|
return i.ListInRecord3('list_in_record3 output')
|
|
|
|
def list_in_record4(self, a: i.ListInAlias) -> i.ListInAlias:
|
|
assert(a.a == 'input4')
|
|
return i.ListInRecord4('result4')
|
|
|
|
def list_in_variant1(self, a: i.ListInVariant1V1, b: i.ListInVariant1V2, c: i.ListInVariant1V3) -> None:
|
|
assert(a == 'foo')
|
|
assert(b == i.Err('bar'))
|
|
assert(c == 'baz')
|
|
|
|
def list_in_variant2(self) -> i.ListInVariant2:
|
|
return 'list_in_variant2'
|
|
|
|
def list_in_variant3(self, a: i.ListInVariant3) -> i.ListInVariant3:
|
|
assert(a == 'input3')
|
|
return 'output3'
|
|
|
|
def errno_result(self) -> i.Expected[None, i.MyErrno]:
|
|
return i.Err(i.MyErrno.B)
|
|
|
|
def list_typedefs(self, a: i.ListTypedef, c: i.ListTypedef3) -> Tuple[i.ListTypedef2, i.ListTypedef3]:
|
|
assert(a == 'typedef1')
|
|
assert(c == ['typedef2'])
|
|
return (b'typedef3', ['typedef4'])
|
|
|
|
def list_of_variants(self, a: List[bool], b: List[i.Expected[None, None]], c: List[i.MyErrno]) -> Tuple[List[bool], List[i.Expected[None, None]], List[i.MyErrno]]:
|
|
assert(a == [True, False])
|
|
assert(b == [i.Ok(None), i.Err(None)])
|
|
assert(c == [i.MyErrno.SUCCESS, i.MyErrno.A])
|
|
return (
|
|
[False, True],
|
|
[i.Err(None), i.Ok(None)],
|
|
[i.MyErrno.A, i.MyErrno.B],
|
|
)
|
|
|
|
def run(wasm_file: str) -> None:
|
|
store = wasmtime.Store()
|
|
module = wasmtime.Module.from_file(store.engine, wasm_file)
|
|
linker = wasmtime.Linker(store.engine)
|
|
linker.define_wasi()
|
|
wasi = wasmtime.WasiConfig()
|
|
wasi.inherit_stdout()
|
|
wasi.inherit_stderr()
|
|
store.set_wasi(wasi)
|
|
|
|
imports = MyImports()
|
|
add_imports_to_linker(linker, store, imports)
|
|
wasm = Exports(store, linker, module)
|
|
|
|
wasm.test_imports(store)
|
|
wasm.list_in_record1(store, e.ListInRecord1("list_in_record1"))
|
|
assert(wasm.list_in_record2(store) == e.ListInRecord2(a="list_in_record2"))
|
|
|
|
assert(wasm.list_in_record3(store, e.ListInRecord3("list_in_record3 input")).a == "list_in_record3 output")
|
|
assert(wasm.list_in_record4(store, e.ListInRecord4("input4")).a == "result4")
|
|
|
|
wasm.list_in_variant1(store, "foo", e.Err("bar"), 'baz')
|
|
assert(wasm.list_in_variant2(store) == "list_in_variant2")
|
|
assert(wasm.list_in_variant3(store, "input3") == "output3")
|
|
|
|
assert(isinstance(wasm.errno_result(store), e.Err))
|
|
|
|
r1, r2 = wasm.list_typedefs(store, "typedef1", ["typedef2"])
|
|
assert(r1 == b'typedef3')
|
|
assert(r2 == ['typedef4'])
|
|
|
|
if __name__ == '__main__':
|
|
run(sys.argv[1])
|