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

1from . import bindgen 

2from wasmtime import Store 

3 

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""" 

67 

68bindgen("export_resources", module) 

69 

70from .generated.export_resources import Root 

71from .generated.export_resources import my_interface_name 

72 

73 

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 }