Coverage for tests/codegen/test_export_resources.py: 100%
14 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-20 16:25 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-20 16:25 +0000
1from . import bindgen
2from wasmtime import Store
4module = """
5(component
6 (core module $core-mod
7 (import "[export]component:basicresource/my-interface-name" "[resource-drop]demo-resource-class" (func $resource-drop (param i32)))
8 (import "[export]component:basicresource/my-interface-name" "[resource-new]demo-resource-class" (func $resource-new (param i32) (result i32)))
9 (import "[export]component:basicresource/my-interface-name" "[resource-rep]demo-resource-class" (func $resource-rep (param i32) (result i32)))
10 (func $core-create-demo-resource (param i32 i32) (result i32)
11 unreachable
12 )
13 (func $core-demo-resource-greet (param i32 i32 i32) (result i32)
14 unreachable
15 )
16 (func $core-cabi-realloc (param i32 i32 i32 i32) (result i32)
17 unreachable
18 )
19 (memory (;0;) 0)
20 (export "component:basicresource/my-interface-name#[constructor]demo-resource-class" (func $core-create-demo-resource))
21 (export "component:basicresource/my-interface-name#[method]demo-resource-class.greet" (func $core-demo-resource-greet))
22 (export "memory" (memory 0))
23 (export "cabi_realloc" (func $core-cabi-realloc))
24 )
25 (type $demo-resource-type (resource (rep i32)))
26 (core func $core-resource-drop (canon resource.drop $demo-resource-type))
27 (core func $core-resource-rep (canon resource.rep $demo-resource-type))
28 (core func $core-resource-new (canon resource.new $demo-resource-type))
29 (core instance $canon-instance
30 (export "[resource-drop]demo-resource-class" (func $core-resource-drop))
31 (export "[resource-new]demo-resource-class" (func $core-resource-new))
32 (export "[resource-rep]demo-resource-class" (func $core-resource-rep))
33 )
34 (core instance $core-instance (instantiate $core-mod
35 (with "[export]component:basicresource/my-interface-name" (instance $canon-instance))
36 )
37 )
38 (alias core export $core-instance "memory" (core memory (;0;)))
39 (alias core export $core-instance "cabi_realloc" (core func $cabi-realloc))
40 (type $constructor-type (func (param "name" string) (result (own $demo-resource-type))))
41 (alias core export $core-instance "component:basicresource/my-interface-name#[constructor]demo-resource-class" (core func $core-constructor))
42 (func $lift-demo-resource-constructor (type $constructor-type) (canon lift (core func $core-constructor) (memory 0) (realloc $cabi-realloc) string-encoding=utf8))
43 (type $greet-type (func (param "self" (borrow $demo-resource-type)) (param "greeting" string) (result string)))
44 (alias core export $core-instance "component:basicresource/my-interface-name#[method]demo-resource-class.greet" (core func $core-greet))
45 (func $lift-demo-resource-greet (type $greet-type) (canon lift (core func $core-greet) (memory 0) (realloc $cabi-realloc) string-encoding=utf8))
46 (component $comp-api
47 (import "import-type-demo-resource-class" (type $demo-resource (sub resource)))
48 (type $constructor-type (func (param "name" string) (result (own $demo-resource))))
49 (import "import-constructor-demo-resource-class" (func $constructor-import (type $constructor-type)))
50 (type $greet-type (func (param "self" (borrow $demo-resource)) (param "greeting" string) (result string)))
51 (import "import-method-demo-resource-class-greet" (func $greet-import (type $greet-type)))
52 (export $demo-resource-export "demo-resource-class" (type $demo-resource))
53 (type $constructor-type-export (func (param "name" string) (result (own $demo-resource-export))))
54 (export "[constructor]demo-resource-class" (func $constructor-import) (func (type $constructor-type-export)))
55 (type $greet-type-export (func (param "self" (borrow $demo-resource-export)) (param "greeting" string) (result string)))
56 (export "[method]demo-resource-class.greet" (func $greet-import) (func (type $greet-type-export)))
57 )
58 (instance $api-instance (instantiate $comp-api
59 (with "import-constructor-demo-resource-class" (func $lift-demo-resource-constructor))
60 (with "import-method-demo-resource-class-greet" (func $lift-demo-resource-greet))
61 (with "import-type-demo-resource-class" (type $demo-resource-type))
62 )
63 )
64 (export "component:basicresource/my-interface-name" (instance $api-instance))
65)
66"""
68bindgen("export_resources", module)
70from .generated.export_resources import Root
71from .generated.export_resources import my_interface_name
74def test_bindings():
75 store = Store()
76 root = Root(store)
77 interface = root.my_interface_name()
78 # We can't test round tripping until support for resource imports
79 # is added. For now, we can check that the structure of the
80 # generated code looks right.
81 assert hasattr(interface, "DemoResourceClass")
82 assert hasattr(my_interface_name, "DemoResourceClass")
83 resource_cls = my_interface_name.DemoResourceClass
84 assert resource_cls.greet.__annotations__ == {
85 "caller": Store,
86 "greeting": str,
87 "return": str,
88 }