Exporting ES tests to a webpage environment?

# Alex Vincent (8 years ago)

I'm wondering how I could test a custom implementation of a ECMAScript standard API in a web browser, against existing test suites that might not run in a browser.

<background tldr="true">

I've been re-exploring implementing a Membrane, which Tom van Cutsem introduced to me through blogs and this mailing list a few years ago. (Thanks, Tom!) So at the moment, I'm working on implementing my own module code based on the latest published and approved standards, which are slightly different than what Tom had to work with.

Along the way, I happily discovered the Reflect object's API matches the ProxyHandler's API. That can't be by accident. I suspect SpiderMonkey's Reflect implementation is probably very close to the standard, given the usual high quality of their work and good number of tests they have in their codebase. [1] That, plus the TC39 tests, [2] give me confidence that the native Reflect implementation I use in a Firefox-derived application will be quite good. Combined with WeakMap, it should make a basic Membrane implementation relatively easy.

With that said, I think I will run into complications when I try to introduce other ideas, such as hiding properties. So I may have to write a custom Reflect implementation. That implementation will in some cases just call the native Reflect API. But in other cases I suspect I will need a little more detailed information, like "Which object in the prototype chain actually implements that named property?"

Plus, I will probably have some debug-logging to do, as Firefox's debugger doesn't like to step through proxy handler code. (I have to look for an existing bug on that, or file one. It's easy to reproduce.)

</background>

The good news is, I suspect I can run a custom Reflect against existing code, loaded in a webpage, by wrapping it in function(Reflect) { ... }. The bad news is, neither test suite linked above makes it obvious how to do so. That's what I'm looking for advice on.

Alex Vincent Hayward, CA, U.S.A.

[1] dxr.mozilla.org/mozilla-esr45/source/js/src/tests/ecma_6/Reflect [2] tc39/test262/tree/master/test/built-ins/Reflect

# Tom Van Cutsem (8 years ago)

Unfortunately I can't give you any advice on how to customize the test suites you referred to, but I can confirm that it is indeed no accident that the Reflect and ProxyHandler APIs are alike. They were designed such that a proxy handler trap can easily perform the "default behavior" of the intercepted operation, by calling the Reflect method with the same name, passing along the same arguments. Indeed, the "double lifting" trick [1] crucially depends on this consistency.

Cheers, Tom

[1] gist.github.com/tvcutsem/6536442

2016-07-27 19:20 GMT+02:00 Alex Vincent <ajvincent at gmail.com>: