Skip to content

Commit 7e3c1c7

Browse files
committed
- Address comments
- Use different expected test file now that the output is different. -
1 parent a3433a8 commit 7e3c1c7

File tree

4 files changed

+183
-17
lines changed

4 files changed

+183
-17
lines changed

test/other/embind_tsgen.ts renamed to test/other/embind_tsgen_main.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
// Example TS program that consumes the emscripten-generated module to to
2+
// illustrate how the type definitions are used and test they are workings as
3+
// expected.
4+
import moduleFactory from './embind_tsgen.mjs';
15

2-
import moduleLoader from './embind_tsgen.mjs';
3-
4-
const module = await moduleLoader();
6+
const module = await moduleFactory();
57

68
// Test a few variations of passing value_objects with strings.
79
module.setValObj({
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
// TypeScript bindings for emscripten-generated code. Automatically generated at compile time.
2+
declare namespace RuntimeExports {
3+
let HEAPF32: any;
4+
let HEAPF64: any;
5+
let HEAP_DATA_VIEW: any;
6+
let HEAP8: any;
7+
let HEAPU8: any;
8+
let HEAP16: any;
9+
let HEAPU16: any;
10+
let HEAP32: any;
11+
let HEAPU32: any;
12+
let HEAP64: any;
13+
let HEAPU64: any;
14+
}
15+
interface WasmModule {
16+
_main(_0: number, _1: number): number;
17+
}
18+
19+
type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string;
20+
export interface Test {
21+
x: number;
22+
readonly y: number;
23+
get stringProperty(): string;
24+
set stringProperty(value: EmbindString);
25+
functionOne(_0: number, _1: number): number;
26+
functionTwo(_0: number, _1: number): number;
27+
functionFour(_0: boolean): number;
28+
functionFive(x: number, y: number): number;
29+
constFn(): number;
30+
longFn(_0: number): number;
31+
functionThree(_0: EmbindString): number;
32+
functionSix(str: EmbindString): number;
33+
delete(): void;
34+
}
35+
36+
export interface Obj {
37+
delete(): void;
38+
}
39+
40+
export interface BarValue<T extends number> {
41+
value: T;
42+
}
43+
export type Bar = BarValue<0>|BarValue<1>|BarValue<2>;
44+
45+
export interface EmptyEnumValue<T extends number> {
46+
value: T;
47+
}
48+
export type EmptyEnum = never/* Empty Enumerator */;
49+
50+
export type ValArrIx = [ Bar, Bar, Bar, Bar ];
51+
52+
export interface IntVec {
53+
push_back(_0: number): void;
54+
resize(_0: number, _1: number): void;
55+
size(): number;
56+
get(_0: number): number | undefined;
57+
set(_0: number, _1: number): boolean;
58+
delete(): void;
59+
}
60+
61+
export interface MapIntInt {
62+
keys(): IntVec;
63+
get(_0: number): number | undefined;
64+
set(_0: number, _1: number): void;
65+
size(): number;
66+
delete(): void;
67+
}
68+
69+
export interface Foo {
70+
process(_0: Test): void;
71+
delete(): void;
72+
}
73+
74+
export interface ClassWithConstructor {
75+
fn(_0: number): number;
76+
delete(): void;
77+
}
78+
79+
export interface ClassWithTwoConstructors {
80+
delete(): void;
81+
}
82+
83+
export interface ClassWithSmartPtrConstructor {
84+
fn(_0: number): number;
85+
delete(): void;
86+
}
87+
88+
export interface BaseClass {
89+
fn(_0: number): number;
90+
delete(): void;
91+
}
92+
93+
export interface DerivedClass extends BaseClass {
94+
fn2(_0: number): number;
95+
delete(): void;
96+
}
97+
98+
export interface Interface {
99+
invoke(_0: EmbindString): void;
100+
delete(): void;
101+
}
102+
103+
export interface InterfaceWrapper extends Interface {
104+
notifyOnDestruction(): void;
105+
delete(): void;
106+
}
107+
108+
export type ValArr = [ number, number, number ];
109+
110+
export type ValObj = {
111+
string: EmbindString,
112+
bar: Bar,
113+
callback: (message: string) => void
114+
};
115+
116+
interface EmbindModule {
117+
Test: {
118+
staticFunction(_0: number): number;
119+
staticFunctionWithParam(x: number): number;
120+
staticProperty: number;
121+
get staticStringProperty(): string;
122+
set staticStringProperty(value: EmbindString);
123+
};
124+
class_returning_fn(): Test;
125+
class_unique_ptr_returning_fn(): Test;
126+
Obj: {};
127+
getPointer(_0: Obj | null): Obj | null;
128+
getNonnullPointer(): Obj;
129+
a_class_instance: Test;
130+
an_enum: Bar;
131+
Bar: {valueOne: BarValue<0>, valueTwo: BarValue<1>, valueThree: BarValue<2>};
132+
EmptyEnum: {};
133+
enum_returning_fn(): Bar;
134+
IntVec: {
135+
new(): IntVec;
136+
};
137+
MapIntInt: {
138+
new(): MapIntInt;
139+
};
140+
Foo: {};
141+
ClassWithConstructor: {
142+
new(_0: number, _1: ValArr): ClassWithConstructor;
143+
};
144+
ClassWithTwoConstructors: {
145+
new(): ClassWithTwoConstructors;
146+
new(_0: number): ClassWithTwoConstructors;
147+
};
148+
ClassWithSmartPtrConstructor: {
149+
new(_0: number, _1: ValArr): ClassWithSmartPtrConstructor;
150+
};
151+
BaseClass: {};
152+
DerivedClass: {};
153+
Interface: {
154+
implement(_0: any): InterfaceWrapper;
155+
extend(_0: EmbindString, _1: any): any;
156+
};
157+
InterfaceWrapper: {};
158+
a_bool: boolean;
159+
an_int: number;
160+
optional_test(_0?: Foo): number | undefined;
161+
global_fn(_0: number, _1: number): number;
162+
optional_and_nonoptional_test(_0: Foo | undefined, _1: number): number | undefined;
163+
smart_ptr_function(_0: ClassWithSmartPtrConstructor | null): number;
164+
smart_ptr_function_with_params(foo: ClassWithSmartPtrConstructor | null): number;
165+
function_with_callback_param(_0: (message: string) => void): number;
166+
getValObj(): ValObj;
167+
setValObj(_0: ValObj): void;
168+
string_test(_0: EmbindString): string;
169+
wstring_test(_0: string): string;
170+
}
171+
172+
export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule;
173+
export default function MainModuleFactory (options?: unknown): Promise<MainModule>;
Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,3 @@
11
{
2-
"name": "index",
3-
"version": "1.0.0",
4-
"description": "",
5-
"main": "main.js",
6-
"type": "module",
7-
"scripts": {
8-
"test": "echo \"Error: no test specified\" && exit 1"
9-
},
10-
"keywords": [],
11-
"author": "",
12-
"license": ""
2+
"type": "module"
133
}

test/test_other.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3369,15 +3369,16 @@ def test_embind_tsgen(self, opts):
33693369
['-o', 'embind_tsgen.mjs', '-lembind', '--emit-tsd', 'embind_tsgen.d.ts'] + opts)
33703370

33713371
# Test that the output compiles with a TS file that uses the defintions.
3372-
shutil.copyfile(test_file('other/embind_tsgen.ts'), 'main.ts')
3373-
# A package file with type=module is needed to allow top level await in TS.
3372+
shutil.copyfile(test_file('other/embind_tsgen_main.ts'), 'main.ts')
3373+
# A package file with type=module is needed to tell the TSC that we're
3374+
# using modules.
33743375
shutil.copyfile(test_file('other/embind_tsgen_package.json'), 'package.json')
33753376
cmd = shared.get_npm_cmd('tsc') + ['embind_tsgen.d.ts', 'main.ts', '--module', 'NodeNext', '--moduleResolution', 'nodenext']
33763377
shared.check_call(cmd)
33773378
self.assertContained('main ran\nts ran', self.run_js('main.js'))
33783379

33793380
actual = read_file('embind_tsgen.d.ts')
3380-
self.assertFileContents(test_file('other/embind_tsgen.d.ts'), actual)
3381+
self.assertFileContents(test_file('other/embind_tsgen_module.d.ts'), actual)
33813382

33823383
def test_embind_tsgen_ignore(self):
33833384
create_file('fail.js', 'assert(false);')

0 commit comments

Comments
 (0)