Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WASM test analyzer #4043

Merged
merged 9 commits into from
Aug 8, 2023
Merged

WASM test analyzer #4043

merged 9 commits into from
Aug 8, 2023

Conversation

Jarred-Sumner
Copy link
Collaborator

@Jarred-Sumner Jarred-Sumner commented Aug 7, 2023

What does this PR do?

This does three things

  1. Get's Bun's transpiler to successfully run in WASM
  2. Creates a small internal abstraction for using bun's transpiler to analyze parsed ASTs
  3. Uses the above abstraction to export a getTests function to WASM which returns an array of test and describe calls in a file along with the name of the tests. It will include tests with test.only, but ignore any other kinds of tests. IT skips if the test does not have a string argument.

@jhmaster2000 this is probably an okay starting point for other cases where you might want to directly use Bun in node-bun

Some notes:

  • WASM build is 1.3 MB with release fast and with release small, it's 800 KB.
  • .tsx only (which also includes .js and .ts)

API example in test/node.mjs in packages/bun-wasm:

import { readFileSync } from "fs";
import { init, getTests } from "../";

const buf = (process.argv.length > 2 ? readFileSync(process.argv.at(-1)) : "") || readFileSync(import.meta.url);
await init(new URL("../bun.wasm", import.meta.url));

console.log(getTests(buf));

If we pass that to ./test/js/node/buffer.test.js

[
  { name: 'isAscii', byteOffset: 258, kind: 'test' },
  { name: 'isUtf8', byteOffset: 625, kind: 'test' },
  { name: 'Buffer global is settable', byteOffset: 1166, kind: 'test' },
  { name: 'length overflow', byteOffset: 1448, kind: 'test' },
  { name: 'truncate input values', byteOffset: 1681, kind: 'test' },
  { name: 'Buffer.allocUnsafe()', byteOffset: 1957, kind: 'test' },
  { name: 'Buffer.from()', byteOffset: 2064, kind: 'test' },
  { name: 'offset properties', byteOffset: 2154, kind: 'test' },
  {
    name: 'creating a Buffer from a Uint32Array',
    byteOffset: 2312,
    kind: 'test'
  },
  {
    name: 'creating a Buffer from a Uint32Array (old constructor)',
    byteOffset: 2530,
    kind: 'test'
  },
  { name: 'invalid encoding', byteOffset: 2757, kind: 'test' },
  { name: 'create 0-length buffers', byteOffset: 3159, kind: 'test' },
  {
    name: 'write() beyond end of buffer',
    byteOffset: 3436,
    kind: 'test'
  },
  ...
]

Note that to add exported functions, you have to:

  • Append to -sEXPORTED_FUNCTIONS in the Makefile
  • export fn ... in Zig
  • Reference the function in a comptime scope
  • Reference the function in emcc_main

Communication between WASM and JS is handled via peechy, using the schema. The heap size is a hardcoded limit you can pass on initialization

@github-actions
Copy link
Contributor

github-actions bot commented Aug 7, 2023

prettier errors have been resolved. Thank you.

#c0b019d22d3e63a8353130f0615553f106628871

@github-actions
Copy link
Contributor

github-actions bot commented Aug 7, 2023

@Jarred-Sumner 3 files with test failures on bun-darwin-aarch64:

  • test/js/bun/spawn/spawn.test.ts
  • test/js/bun/test/test-test.test.ts
  • test/js/node/dns/node-dns.test.js

View test output

#c0b019d22d3e63a8353130f0615553f106628871

@github-actions
Copy link
Contributor

github-actions bot commented Aug 7, 2023

@Jarred-Sumner 2 files with test failures on linux-x64:

  • test/js/bun/test/test-test.test.ts
  • test/js/third_party/prisma/prisma.test.ts

View test output

#c0b019d22d3e63a8353130f0615553f106628871

@github-actions
Copy link
Contributor

github-actions bot commented Aug 7, 2023

@Jarred-Sumner 2 files with test failures on linux-x64-baseline:

  • test/js/bun/test/test-test.test.ts
  • test/js/third_party/prisma/prisma.test.ts

View test output

#c0b019d22d3e63a8353130f0615553f106628871

@github-actions
Copy link
Contributor

github-actions bot commented Aug 7, 2023

@Jarred-Sumner 5 files with test failures on bun-darwin-x64-baseline:

  • test/js/bun/spawn/spawn-streaming-stdin.test.ts
  • test/js/bun/sqlite/sqlite.test.js
  • test/js/bun/test/test-test.test.ts
  • test/js/third_party/webpack/webpack.test.ts
  • test/js/web/timers/setTimeout.test.js

View test output

#c0b019d22d3e63a8353130f0615553f106628871

@jhmaster2000
Copy link
Collaborator

Nice thanks, will look into integrating the polyfills with this later this week, there's a few smaller things I want to get out of the way first.

@Jarred-Sumner Jarred-Sumner merged commit f2f2277 into main Aug 8, 2023
@Jarred-Sumner Jarred-Sumner deleted the jarred/wasm-test-analyzer branch August 8, 2023 01:51
trnxdev pushed a commit to trnxdev/bun that referenced this pull request Aug 9, 2023
* wasm

* WASM test scanner

* Update Makefile

* Update Makefile

* Configurable heap limit

* slightly better error

* Update js_parser.zig

* Update path.test.js

* Update node.mjs

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Jarred-Sumner added a commit that referenced this pull request Aug 9, 2023
Jarred-Sumner added a commit that referenced this pull request Aug 11, 2023
Jarred-Sumner added a commit that referenced this pull request Aug 17, 2023
* Let the debugger to pause/resume the event loop

* Add initial support for Debug Adapter Protocol

* Add progress

* Update Worker.cpp

* Fix require("console") #3820 (#4073)

* Fix #3820

* Add Module (#4074)

* Set exports to {} in user-constructed CommonJSModuleRecords (#4076)

* feat(bun/test): Implement "toSatisfy" & "toIncludeRepeated" (fwup) (#3651)

* Fix merge issues

* oop

* make codegen

* Fix build issues

---------

Co-authored-by: dave caruso <me@paperdave.net>

* worker tests (#4058)

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* feat(bun:test) add support for test.each() and describe.each() (#4047)

* rename callback to func

* update testscope to handle function arguments

* works

* big cleanup

* works in debug, not release

* fix memory issue & update tests

* catch & str test

* write types for each() & switch tests to ts

* rm & typo

* move some code around & support describe

* review changes

* Fix one of the astro segfaults, also fix bun init version (#4079)

* 4->16

* add assertions

* fix version stuff

* Remove unintentional logs from #4043

* Run prettier

* Update main-worker-file.js

* Update SIMDUTF (#4078)

* Fix constructing buffer from a UTF16 string with the Latin1 encoding. (#4086)

Close: #3914

* Add support for `bun --revision` (#4027)

Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local>

* Updates

* Update __global.zig

* remove non-node node-fallbacks (#4082)

* remove non-node node-fallbacks.

* organize the imports

* Fix test

* Sync bun-polyfills branch (#4081)

* bun-polyfills: initial impl. & baseline refactor

* move @types/ws dep from root to /test/

* bun-types: remove ReadableStream.forEach method
(this does not exist, probably added by mistake)

* bun-polyfills: remove extraneous stream utils

* bun-polyfills: add types syncing file

* bun-polyfills: re-arrange global polyfills

* bun-polyfills: fix FileBlob streams types again

* bun-polyfills: sync all of @types/node

* bun-polyfills: typeguard all current polyfills

* bun-polyfills: fix import paths

* bun-polyfills: switch to wasm impl. of farmhash

* bun-polyfills: support default import of bun obj

* bun-polyfills: transpiler placeholder file

* bun-polyfills: loaderless import.meta polyfill

* bun-polyfills: refactor import.meta polyfill

* bun-polyfills: repl entrypoint & todo list index

* bun-types: Add null to return type of Bun.which

* bun-types: match Bun.sha with Bun.hash.SHA512_256

* bun-polyfills: new "repl" package.json script

* bun-polyfills: full refactor of toplevel hashes

* bun-polyfills: these are fixed

* bun-types: NODE_ENV is optional

* bun-polyfills: fix Bun.env types

* bun-types+polyfills: fix HeapSnapshot.version type

* bun-polyfills: fix some web streams type conflicts

* bun-polyfills: update internal FileBlob.slice

* bun-polyfills: fix subproc stdin conversions

* bun-polyfills: better internal fileblob types

* bun-polyfills: try to sync global performance type

* bun-polyfills: working zig wasm polyfills setup

* bun-polyfills: update scripts

* bun-polyfills: fix wasm file location resolution

* bun-polyfills: goodbye farmhash (replaced by zig)

* bun-polyfills: move all Bun.hash polyfills to zig

* bun-polyfills: reimpl. seeding of seeded hashes

* bun-polyfills: impl. undocumented murmur32v2

* bun-polyfills: switch zighash from jsdoc to .d.ts

* bun-types: partial fix of Hash types

* bun-polyfills: documented Hash.murmur32v2

* bun-polyfills: misc updates

* bun-polyfills: enable sourcemaps

* bun-polyfills: handle empty inputs to hash funcs

* bun-types: narrow down hash func types

* bun-polyfills: remove unnecessary bigint casts

* bun-polyfills: impl. Bun.isMainThread

* bun-polyfills: impl. Bun.sleep and fix sleepSync

* bun-polyfills: impl. indexOfLine

* bun-polyfills: impl. Bun.peek.status

* bun-types: fix hashing test

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* Add remix guide

* Fix title

* add util.formatWithOptions (#4090)

* Add formatWithOptions

* tests and tweaks

* adjust

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* bun test: format description of test.each (#4092)

* bun test: format description

* add tests for tests

* only

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>

* Fixes #4062 (#4106)

* Fixes #4062

* Update encoding.zig

* Use faster C++ impl

* Update wtf-bindings.cpp

* undo

* Fixup

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>

* zig fmt

* Update remix guide

* fs.zig: create temp files with 0o700, not 0o007 (#4107)

* Handle thundering herd of setInterval (#4109)

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>

* Fix memory leak in base64url (#4111)

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>

* run files without extensions (#4113)

* run script without extension

* process stdio write fix

* don't check for trailing slash, var stream

* More lazily initialize these static strings

* Remove assertion

* wip

* Add --inspect flag

* Deprecate loading `node_modules.bun`

* realpath

* regenerate schema

* More

* more

* Update cli.zig

* Debugger JS loads

* have fun

* Most of the code

* Its starting to work.

* more progress

* win some, lose some

* Update dap.ts

* Async Context Tracking

* untested websocket

* Emit Console messages

* Error handling

* errors

* Make profiling work better

* [clap] CLI arguments with optional values ignore positional params

In `bun --inspect foo.js`, `foo.js` should not be the value of `--inspect`. It is a positional parameter. `--inspect=foo`

* Support multiple simultaneous clients, automatically unpause on disconnect

* regenerate

* Update Makefile

* Update WebKit

* Update cli.zig

* Update InternalModuleRegistry+createInternalModuleById.h

* BaseURL

* Update WebKit

* Add web-inspector-bun

* Update build.ts

* formatting, mostly

* Update debugger.ts

* Update InternalModuleRegistryConstants.h

* wrap

* Update test

* Update test

---------

Co-authored-by: Ashcon Partovi <ashcon@partovi.net>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Co-authored-by: dave caruso <me@paperdave.net>
Co-authored-by: Tiramify (A.K. Daniel) <94789999+TiranexDev@users.noreply.github.com>
Co-authored-by: Jacques <25390037+jecquas@users.noreply.github.com>
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: Ai Hoshino <ambiguous404@gmail.com>
Co-authored-by: Yash Sharma <yashosharma@gmail.com>
Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local>
Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
Co-authored-by: jhmaster <32803471+jhmaster2000@users.noreply.github.com>
Co-authored-by: Adhityaa Chandrasekar <github@adtac.in>
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants