blob: be3d681f8fff4a2cc875710e86d6cc0787dd849a [file]
;; Test embedding wasm and wat files into JS by replacing existing embedded modules.
;; Existing embedded modules will be replaced:
;; RUN: echo "good1(new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2a]));" > %t.js
;; Non-wasm arrays are ignored:
;; RUN: echo "bad(new Uint8Array([0x00, 0xff, 0x73, 0x6d, 0x01]));" >> %t.js
;; Add a second valid embedded module without new Uint8Array:
;; RUN: echo "good2([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]);" >> %t.js
;; Assemble %t.wat with -g so %t.wasm contains a name custom section that would
;; be stripped if the module were reserialized. Pass %t.wasm as the first input
;; (verifying original binary bytes are preserved) and %t.wat as the second
;; input (verifying WAT is converted to binary before embedding).
;; RUN: echo "(module (func $foo))" > %t.wat
;; RUN: wasm-as %t.wat -g -o %t.wasm
;; RUN: wasm-embed %t.js %t.wasm %t.wat %t.out.js
;; RUN: cat %t.out.js | filecheck %s
;;
;; CHECK: good1(new Uint8Array([
;; CHECK-NEXT: 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x60, 0x00, 0x00, 0x03, 0x02,
;; CHECK-NEXT: 0x01, 0x00, 0x0a, 0x04, 0x01, 0x02, 0x00, 0x0b, 0x00, 0x0d, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x01,
;; CHECK-NEXT: 0x06, 0x01, 0x00, 0x03, 0x66, 0x6f, 0x6f
;; CHECK-NEXT: ]));
;; CHECK-NEXT: bad(new Uint8Array([0x00, 0xff, 0x73, 0x6d, 0x01]));
;; CHECK-NEXT: good2([
;; CHECK-NEXT: 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x60, 0x00, 0x00, 0x03, 0x02,
;; CHECK-NEXT: 0x01, 0x00, 0x0a, 0x04, 0x01, 0x02, 0x00, 0x0b
;; CHECK-NEXT: ]);
;; Verify that invalid WAT text errors out:
;; RUN: echo "not a module" > %t.bad.wat
;; RUN: not wasm-embed %t.js %t.bad.wat %t.wat %t.out.js 2>&1 | filecheck %s --check-prefix=BAD-WAT
;; BAD-WAT: Fatal: 1:0: error: unrecognized module field
;; Verify that malformed binary Wasm errors out:
;; RUN: echo -e '\x00asm\x01' > %t.bad.wasm
;; RUN: not wasm-embed %t.js %t.bad.wasm %t.wat %t.out.js 2>&1 | filecheck %s --check-prefix=BAD-WASM
;; BAD-WASM: Fatal: error parsing wasm
;; Verify that WAT and binary Wasm modules failing WebAssembly validation error out:
;; RUN: echo "(module (func (result i32) (f32.const 0)))" > %t.invalid.wat
;; RUN: wasm-as %t.invalid.wat -v none -o %t.invalid.wasm
;; RUN: not wasm-embed %t.js %t.invalid.wat %t.wat %t.out.js 2>&1 | filecheck %s --check-prefix=INVALID-MOD
;; RUN: not wasm-embed %t.js %t.invalid.wasm %t.wat %t.out.js 2>&1 | filecheck %s --check-prefix=INVALID-MOD
;; INVALID-MOD: Fatal: error validating module