forked from mirrors/gecko-dev
		
	Automatic update from web-platform-tests Merge wasm-constants.js and wasm-module-builder.js. Reviewed upstream: https://github.com/WebAssembly/spec/pull/963. -- wpt-commits: b0af23eb48e143a53505155ae0f85ca3a1355c0f wpt-pr: 16326
		
			
				
	
	
		
			224 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const instanceTestFactory = [
 | 
						|
  [
 | 
						|
    "Empty module without imports argument",
 | 
						|
    function() {
 | 
						|
      return {
 | 
						|
        buffer: emptyModuleBinary,
 | 
						|
        args: [],
 | 
						|
        exports: {},
 | 
						|
        verify: () => {},
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "Empty module with undefined imports argument",
 | 
						|
    function() {
 | 
						|
      return {
 | 
						|
        buffer: emptyModuleBinary,
 | 
						|
        args: [undefined],
 | 
						|
        exports: {},
 | 
						|
        verify: () => {},
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "Empty module with empty imports argument",
 | 
						|
    function() {
 | 
						|
      return {
 | 
						|
        buffer: emptyModuleBinary,
 | 
						|
        args: [{}],
 | 
						|
        exports: {},
 | 
						|
        verify: () => {},
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "getter order for imports object",
 | 
						|
    function() {
 | 
						|
      const builder = new WasmModuleBuilder();
 | 
						|
      builder.addImportedGlobal("module", "global1", kWasmI32);
 | 
						|
      builder.addImportedGlobal("module2", "global3", kWasmI32);
 | 
						|
      builder.addImportedMemory("module", "memory", 0, 128);
 | 
						|
      builder.addImportedGlobal("module", "global2", kWasmI32);
 | 
						|
      const buffer = builder.toBuffer();
 | 
						|
      const order = [];
 | 
						|
 | 
						|
      const imports = {
 | 
						|
        get module() {
 | 
						|
          order.push("module getter");
 | 
						|
          return {
 | 
						|
            get global1() {
 | 
						|
              order.push("global1 getter");
 | 
						|
              return 0;
 | 
						|
            },
 | 
						|
            get global2() {
 | 
						|
              order.push("global2 getter");
 | 
						|
              return 0;
 | 
						|
            },
 | 
						|
            get memory() {
 | 
						|
              order.push("memory getter");
 | 
						|
              return new WebAssembly.Memory({ "initial": 64, maximum: 128 });
 | 
						|
            },
 | 
						|
          }
 | 
						|
        },
 | 
						|
        get module2() {
 | 
						|
          order.push("module2 getter");
 | 
						|
          return {
 | 
						|
            get global3() {
 | 
						|
              order.push("global3 getter");
 | 
						|
              return 0;
 | 
						|
            },
 | 
						|
          }
 | 
						|
        },
 | 
						|
      };
 | 
						|
 | 
						|
      const expected = [
 | 
						|
        "module getter",
 | 
						|
        "global1 getter",
 | 
						|
        "module2 getter",
 | 
						|
        "global3 getter",
 | 
						|
        "module getter",
 | 
						|
        "memory getter",
 | 
						|
        "module getter",
 | 
						|
        "global2 getter",
 | 
						|
      ];
 | 
						|
      return {
 | 
						|
        buffer,
 | 
						|
        args: [imports],
 | 
						|
        exports: {},
 | 
						|
        verify: () => assert_array_equals(order, expected),
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "imports",
 | 
						|
    function() {
 | 
						|
      const builder = new WasmModuleBuilder();
 | 
						|
 | 
						|
      builder.addImport("module", "fn", kSig_v_v);
 | 
						|
      builder.addImportedGlobal("module", "global", kWasmI32);
 | 
						|
      builder.addImportedMemory("module", "memory", 0, 128);
 | 
						|
      builder.addImportedTable("module", "table", 0, 128);
 | 
						|
 | 
						|
      const buffer = builder.toBuffer();
 | 
						|
      const imports = {
 | 
						|
        "module": {
 | 
						|
          "fn": function() {},
 | 
						|
          "global": 0,
 | 
						|
          "memory": new WebAssembly.Memory({ "initial": 64, maximum: 128 }),
 | 
						|
          "table": new WebAssembly.Table({ "element": "anyfunc", "initial": 64, maximum: 128 }),
 | 
						|
        },
 | 
						|
        get "module2"() {
 | 
						|
          assert_unreached("Should not get modules that are not imported");
 | 
						|
        },
 | 
						|
      };
 | 
						|
 | 
						|
      return {
 | 
						|
        buffer,
 | 
						|
        args: [imports],
 | 
						|
        exports: {},
 | 
						|
        verify: () => {},
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "No imports",
 | 
						|
    function() {
 | 
						|
      const builder = new WasmModuleBuilder();
 | 
						|
 | 
						|
      builder
 | 
						|
        .addFunction("fn", kSig_v_d)
 | 
						|
        .addBody([])
 | 
						|
        .exportFunc();
 | 
						|
      builder
 | 
						|
        .addFunction("fn2", kSig_v_v)
 | 
						|
        .addBody([])
 | 
						|
        .exportFunc();
 | 
						|
 | 
						|
      builder.setTableBounds(1);
 | 
						|
      builder.addExportOfKind("table", kExternalTable, 0);
 | 
						|
 | 
						|
      builder.addGlobal(kWasmI32, true)
 | 
						|
        .exportAs("global")
 | 
						|
        .init = 7;
 | 
						|
      builder.addGlobal(kWasmF64, true)
 | 
						|
        .exportAs("global2")
 | 
						|
        .init = 1.2;
 | 
						|
 | 
						|
      builder.addMemory(4, 8, true);
 | 
						|
 | 
						|
      const buffer = builder.toBuffer();
 | 
						|
 | 
						|
      const exports = {
 | 
						|
        "fn": { "kind": "function", "name": "0", "length": 1 },
 | 
						|
        "fn2": { "kind": "function", "name": "1", "length": 0 },
 | 
						|
        "table": { "kind": "table", "length": 1 },
 | 
						|
        "global": { "kind": "global", "value": 7 },
 | 
						|
        "global2": { "kind": "global", "value": 1.2 },
 | 
						|
        "memory": { "kind": "memory", "size": 4 },
 | 
						|
      };
 | 
						|
 | 
						|
      return {
 | 
						|
        buffer,
 | 
						|
        args: [],
 | 
						|
        exports,
 | 
						|
        verify: () => {},
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "exports and imports",
 | 
						|
    function() {
 | 
						|
      const value = 102;
 | 
						|
 | 
						|
      const builder = new WasmModuleBuilder();
 | 
						|
 | 
						|
      const index = builder.addImportedGlobal("module", "global", kWasmI32);
 | 
						|
      builder
 | 
						|
        .addFunction("fn", kSig_i_v)
 | 
						|
        .addBody([
 | 
						|
            kExprGetGlobal,
 | 
						|
            index,
 | 
						|
            kExprReturn,
 | 
						|
        ])
 | 
						|
        .exportFunc();
 | 
						|
 | 
						|
      const buffer = builder.toBuffer();
 | 
						|
 | 
						|
      const imports = {
 | 
						|
        "module": {
 | 
						|
          "global": value,
 | 
						|
        },
 | 
						|
      };
 | 
						|
 | 
						|
      const exports = {
 | 
						|
        "fn": { "kind": "function", "name": "0", "length": 0 },
 | 
						|
      };
 | 
						|
 | 
						|
      return {
 | 
						|
        buffer,
 | 
						|
        args: [imports],
 | 
						|
        exports,
 | 
						|
        verify: instance => assert_equals(instance.exports.fn(), value)
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
 | 
						|
  [
 | 
						|
    "stray argument",
 | 
						|
    function() {
 | 
						|
      return {
 | 
						|
        buffer: emptyModuleBinary,
 | 
						|
        args: [{}, {}],
 | 
						|
        exports: {},
 | 
						|
        verify: () => {}
 | 
						|
      };
 | 
						|
    }
 | 
						|
  ],
 | 
						|
];
 |