Skip to content

Commit 299d518

Browse files
cjihrigtargos
authored andcommitted
test: improve WASI start() coverage
This commit adds additional test cases to test-wasi-start-validation.js, which gets the JS test coverage of start() to 100%. PR-URL: #30972 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 5d2ae05 commit 299d518

1 file changed

Lines changed: 66 additions & 1 deletion

File tree

‎test/wasi/test-wasi-start-validation.js‎

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Flags: --experimental-wasi-unstable-preview0
22
'use strict';
33

4-
require('../common');
4+
constcommon=require('../common');
55
constassert=require('assert');
66
const{WASI}=require('wasi');
77

@@ -30,3 +30,68 @@ const fixtures = require('../common/fixtures');
3030
);
3131
})();
3232
}
33+
34+
(async()=>{
35+
constwasi=newWASI();
36+
constbufferSource=fixtures.readSync('simple.wasm');
37+
constwasm=awaitWebAssembly.compile(bufferSource);
38+
constinstance=awaitWebAssembly.instantiate(wasm);
39+
constvalues=[undefined,null,'foo',42,true,false,()=>{}];
40+
letcnt=0;
41+
42+
// Mock instance.exports to trigger start() validation.
43+
Object.defineProperty(instance,'exports',{
44+
get(){returnvalues[cnt++];}
45+
});
46+
47+
values.forEach((val)=>{
48+
assert.throws(
49+
()=>{wasi.start(instance);},
50+
{code: 'ERR_INVALID_ARG_TYPE',message: /\binstance\.exports\b/}
51+
);
52+
});
53+
})();
54+
55+
(async()=>{
56+
constwasi=newWASI();
57+
constbufferSource=fixtures.readSync('simple.wasm');
58+
constwasm=awaitWebAssembly.compile(bufferSource);
59+
constinstance=awaitWebAssembly.instantiate(wasm);
60+
61+
// Mock instance.exports.memory to bypass start() validation.
62+
Object.defineProperty(instance,'exports',{
63+
get(){
64+
return{
65+
memory: newWebAssembly.Memory({initial: 1})
66+
};
67+
}
68+
});
69+
70+
wasi.start(instance);
71+
assert.throws(
72+
()=>{wasi.start(instance);},
73+
{
74+
code: 'ERR_WASI_ALREADY_STARTED',
75+
message: /^WASIinstancehasalreadystarted$/
76+
}
77+
);
78+
})();
79+
80+
(async()=>{
81+
constwasi=newWASI();
82+
constbufferSource=fixtures.readSync('simple.wasm');
83+
constwasm=awaitWebAssembly.compile(bufferSource);
84+
constinstance=awaitWebAssembly.instantiate(wasm);
85+
86+
// Mock instance.exports to bypass start() validation.
87+
Object.defineProperty(instance,'exports',{
88+
get(){
89+
return{
90+
memory: newWebAssembly.Memory({initial: 1}),
91+
__wasi_unstable_reactor_start: common.mustCall()
92+
};
93+
}
94+
});
95+
96+
wasi.start(instance);
97+
})();

0 commit comments

Comments
 (0)