feat: add a histrical wit-bindgen
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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])
|
||||
Reference in New Issue
Block a user