summaryrefslogtreecommitdiffstats
path: root/node_modules/@webassemblyjs/helper-module-context/test/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@webassemblyjs/helper-module-context/test/index.js')
-rw-r--r--node_modules/@webassemblyjs/helper-module-context/test/index.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/node_modules/@webassemblyjs/helper-module-context/test/index.js b/node_modules/@webassemblyjs/helper-module-context/test/index.js
new file mode 100644
index 0000000..2fbf58c
--- /dev/null
+++ b/node_modules/@webassemblyjs/helper-module-context/test/index.js
@@ -0,0 +1,100 @@
+const { assert } = require("chai");
+const { parse } = require("@webassemblyjs/wast-parser");
+
+const { moduleContextFromModuleAST } = require("../lib");
+
+const contextFromWast = wast => moduleContextFromModuleAST(parse(wast).body[0]);
+
+describe("module context", () => {
+ describe("start segment", () => {
+ it("should return the start function offset", () => {
+ const context = contextFromWast(`
+ (module
+ (func)
+ (func)
+ (start 1)
+ )
+ `);
+
+ assert.isOk(context.getStart());
+ assert.typeOf(context.getStart(), "number");
+ assert.equal(context.getStart(), 1);
+ });
+
+ it("should return null if no start function", () => {
+ const context = contextFromWast(`
+ (module (func))
+ `);
+
+ assert.isNull(context.getStart());
+ });
+
+ it("should retrive the type of implemented functions", () => {
+ const context = contextFromWast(`
+ (module
+ (func (param i32) (result i64))
+ (func (param i64) (result i32))
+ (func (result i64))
+ (func)
+ )
+ `);
+
+ assert.deepEqual(context.getFunction(0), {
+ args: ["i32"],
+ result: ["i64"]
+ });
+ assert.deepEqual(context.getFunction(1), {
+ args: ["i64"],
+ result: ["i32"]
+ });
+ assert.deepEqual(context.getFunction(2), { args: [], result: ["i64"] });
+ assert.deepEqual(context.getFunction(3), { args: [], result: [] });
+ });
+
+ it("should retrive the type of imported functions", () => {
+ const context = contextFromWast(`
+ (module
+ (import "a" "a" (func (param i32) (result i32)))
+ (import "a" "b" (func (result i64)))
+ (import "a" "c" (func))
+ (func (result f32))
+ )
+ `);
+
+ assert.deepEqual(context.getFunction(0), {
+ args: ["i32"],
+ result: ["i32"]
+ });
+ assert.deepEqual(context.getFunction(1), {
+ args: [],
+ result: ["i64"]
+ });
+ assert.deepEqual(context.getFunction(2), { args: [], result: [] });
+ assert.deepEqual(context.getFunction(3), { args: [], result: ["f32"] });
+ });
+
+ it("should retrive the type of functions with type ref", () => {
+ const context = contextFromWast(`
+ (module
+ (type (func (param i32) (result i32)))
+ (type (func (result i64)))
+ (type (func))
+
+ (import "a" "a" (func (type 0)))
+ (import "a" "b" (func (type 1)))
+ (func (type 2))
+ )
+ `);
+
+ assert.deepEqual(context.getFunction(0), {
+ args: ["i32"],
+ result: ["i32"]
+ });
+ assert.deepEqual(context.getFunction(1), {
+ args: [],
+ result: ["i64"]
+ });
+ assert.deepEqual(context.getFunction(2), { args: [], result: [] });
+ });
+ });
+});