1. use negative regex (instead of ".") to check iframeError
2. make Test262Error.prototype.toString() always include
the string Test262Error (no spaces) so it matches /Test262Error/
3. modify check for supportsWindowOnerror - require that
first argument (message) to onerror() contains the error name
by checking for /Error:/.
Change (3) above forces IE11 onto the !supportsWindowOnerror path.
Test262 tests are run inside an eval() on IE11, and errors are
caught and explicitly have toString() called. Without this,
IE11 passes only the `message` property to onerror(), and regexes
that expect to match error name fail.
sth: revert to simple `onerror` checking
gs: refactor function `$DONE`
refactor logic tree
add support for async test failures
ed.js: crude support for error typing
S8.7.1_A2: cache result of delete
`delete` has a side-effect and its
return value depends on this; cache result of
delete so when reporting result, we are always
reporting the result that made us fail, not the
result of a new delete
[pedantic]
ed: explicitly pass cooked error to $DONE
gs: only let $DONE be called once
sta.js:
slight change to Test262Error() semantics; message property now always set (default "")
make $ERROR a var
set $ERROR to function $ERROR so it can be overridden if needed
remove 2009 copyright in favor of 2012 copyright
REVERTED: remove never-used fn testFailed
testFailed actually used by $FAIL
remove obsolete fn $INCLUDE
ed.js:
remove commented-out obsolete code
test262.py:
remove always-included harness file that provides no functions used by any extant test
add comment line to nonstrict
cth.js: define `print` for node, cscript
use cth (console test harness) to define functions
for console runner. V8, Spidermonkey (js) and JavaScriptCore (jsc)
provide a function `print`. Provide a default `print` for node
and cscript
set print_handle to 'print' by default (can still override)
for cscript: wrap tests in try/catch so we get syntax errors
parseTestRecord: add support for YAML frontmatter
parseTestRecord: initial unit test for test record parser
parseTestRecord: refactor for testing
factor old parsing; add YAML parsing
runner: support "includes" from YAML frontmatter
support frontmatter "includes" in python runner
use test.includes if present instead of scanning test code with regex
harness: factor individual functions out into files
tools: handle YAML errors
tolerate missing keys in dictionary (flags, includes)
report filename when empty frontmatter block
new option --list-includes to test262.py
harness: factor helper functions into separate files
sth: remove extra close-paren (syntax error)
test_common: TDD; failing parse of YAML
common: use parseTestRecord (YAML-aware)
test262.py: only supply async helper scripts when test is async
sth.js: factor out function isAsyncTest()
timer.js: improve workaround for async tests when Promise is defined but setTimeout is noot
timer.js emulates setTimeout using Promise by doing a busy loop that checks
if `timeout` milliseconds have elapsed. Modified check to (timeLeft > 0) instead
of (!timeLeft) to prevent infinite loop when check does not happen to run
at precise millisecond timeout expires.
Because test262.py did not support the $INCLUDE directive, some helper
scripts were added to every test -- notably testIntl, timer, and donePrintHandle
Now that $INCLUDE is supported, these can be dropped, speeding overall test run time
doneprintHandle.js: make $DONE accept any falsy argument as meaning 'pass'
PromiseHelper.js: checkSequence: new helper fn for async tests
.gitignore: port .hgignore to .gitignore syntax
test262.py: support $INCLUDE directive in python test runner
S25.4.4.1*: tests to cover Section 25.4.4.1, Promise.all( iterable )
A1.1: Promise.all is callable
A1.2: Promise.all expects 1 argument
A2.1: Promise.all([]) is a Promise
A2.2: Promise.all([]) is resolved immediately
A2.3: Promise.all([]) is resolved with a new empty array
A3.1: Promise.all expects an iterable argument
- Updated DateTimeFormat tests for new handling of hour12 options property.
- Added a few invalid language tags to test of IsStructurallyValidLanguageTag.
- Added user-defined language tag to test of CanonicalizeLanguageTag.
- Added test for the Intl property of the global object.
- Removed a few old test cases that were redundant with new, more comprehensive ones.
- Added testIntl.js as standard include for all console tests in test262.py – see related bug 574.
- Added .jshintrc file for settings for the JSHint tool.
- Removed some old tests that were redundant with the new tests.
- Added testBuiltInObject.js as standard include for all console tests in test262.py – see related bug 574.
- Added table of contents for ECMA-402.
- Added ability to load the right table of contents into results display.
- Added meaningful text to test402 web page.
- Updated test262 web pages for 5.1 edition of ECMA-262.
- Unified headers of test262/402 web pages to ECMAScript <area> <test>.
- Replaced text logos with styled text.
- Decapitalized some text; fixed a typo; expanded an abbreviation.
- Fixed a few issues found by W3 HTML validator.
- juneDate and decemberDate were both one month off. Fixed
- LocalTZA wasn't actually LocalTZA as defined in ES5. If we were in DST when
this was created, LocalTZA was off by one hour. Fixed
- GetSundayInMonth was completely busted (i.e., arithmetic operations on the 'count'
param which happens to be a string). Fixed(?)
- DaylightSzavingTA was defined incorrectly. It assumed the local time zone adjustment
hadn't been accounted for. This wasn't how UTC was calling it. Fixed(?)
etc, because the substitution logic in test262.py operates on the
source after prepending framework.js.
The plan is to replace sputnikLib.js with framework.js. Also, the
substitution logic in test262.py should probably be fixed to apply the
substitution before prepending.
morning. The rewrite of "function testcase()..." now puts the
assertTrue at the bottom. Preconditions, names, and ids are
removed. And the path in the file is ignored, and is instead set
accurately according to where the file is found.
- a lot of JS harness code written in strings have been moved out to actual physical files
such as ed.js (syntax error detection for globally scoped tests) and gs.js (global scope test
case validator). This change makes it far easier to maintain the test harness code
- reorganized helper.js providing a clear indication which methods are used by external objects,
which are implementation details, and which are unequivocally test262-specific. I've also added,
openErrorWindow, which will be used to open a descriptive error message window for each test case
failure reported on the 'Run' tab
- improved the error message for syntax errors occurring when a test case fails to load
- sta.js no longer tries to pickle all helper functions it contains! Instead, we load the file
directly from sth.js. The performance of fnGlobalObject has been improved. Finally, the ES5Harness
object has been moved from sth.js (in a string) to here
- sth.js now has a browser implementer hook, controller.implementerHook, which allows browser implementers
to handle test case failures in their own way (e.g., log to the filesystem). The 'run' function was
basically re-written
Added 37 new test cases from the "IE Test Center" Build release. There were 14 modifications to
existing test cases as well. Refactored SputnikGlobalScope.js such that test case paths are now used
as indices into the GlobalScopeTests array.
TestCasePackager.py had the concept of templated test harnesses introduced - see templates\runner.test262.html.
Also added support for one HTML test harness per ES5 chapter. Last but not least, TestCasePackagerConfig.py
now has a 'source control' abstraction class which abstracts away source control adds|edits when dynamically
generating *.json and *.html test chapters.
directory next*
SputnikConverter:
- ES5TestCase.cs
* Case of JSON-based property names was wrong. Fixed
* Use the tests' 'id' instead of 'path' as the GlobalScopeTests keys
* Added 'id' and 'path' as Global Scope test metadata. The correct/clean solution here is to simply use 'path'
as the key to GlobalScopeTests, but this refactoring needs to be undertaken later when we can convert the
'normal' test cases over to use 'path' as the key as well
* Turns out we cannot depend on the message received by window.onerror to have some form of "syntax"
contained within it. Instead, we'll just rely on the regular expression ".", matches any one character,
for the short term
- SputnikTestCase.cs
* Same case issue as for ES5TestCases.cs
* Don't trust the Sputnik metadata for the ES5 section name or even test case id to be correct. Instead,
generate this information from the file path of the test case
TestCasePackager.py:
- added a new global, GLOBAL_SCOPE_FILES, which is a list of JS files found directly under test\suite\*.js
which include metadata for so-called globally scoped tests. These files are imported directly by the HTML
test harness
test\suite\*:
- regenerated Sputnik tests based on new converter
default.html:
- import SputnikGlobalScope.js. Really TestCasePackager.py should generate the global scope imports to
default.html automatically...
website\resources\scripts\testcases\*:
- test cases have shuffled from existing *.json files into globalscope.json
"?sitedebug" to the end of the Test262 URL.
There's a mismatch between the Test262 test harness and IE Test Center's harness
which invalidated 15.4.4.17-5-1.js, 15.4.4.18-5-1.js, and 15.4.4.20-5-1.js on Test262.
Essentially what's going on is Test262 uses the 'window' object as 'this' for the test
case functions whereas IE Test Center uses the test case object housing the test case
function as this. This causes problems for test cases pertaining to scoping. I've gone
ahead and adjusted the Test262 tests to expect 'window' to be 'this', and will be updating
IE Test Center's harness to use the 'window' object as well so we don't run into this
problem again.
of the tests. Emit this to the activity bar
test\harness\sta.js: too many years of Python had me thinking JavaScript arrays have an append method:) Fixed.
Also, added a pickled representation of all test helper functions found in this file
test\harness\sth.js: detached most test helper functions from the iframe's document object (as globals) and
inject these into the actual test cases. It's a bit slower and not as elegant, but it is
cleaner from an ES5 purist perspective. Still need to move Sputnik helper functions into
sta.js
Extended Controller such that it now measures overall test execution time. Such a change
is very useful for measuring performance-impact changes such as the aforementioned
improvement
- test\harness\sth.js: fixed a bug spotted by Mark Miller. In short, we were allowing
a test case return value of 'undefined' to be successful WRT IE Test Center tests because
Sputnik tests normally return undefined (successful or not). We now differentiate between
Sputnik/IE Test Center when evaluating return values
website\* out to test\*:
- Removed test\harness\ECMA-262-TOC.xml. The casing on this file was incorrect, but
more importantly it's a static file not generated by the harness
- Populated test\harness with the contents of website\resources\scripts\global\. In
the future, we need to update test\harness\* and propagate these changes out to
website\*
- Test\suite\ietestcenter is now a verbatim copy of the IE Test Center tests that
WERE under website\resources\scripts\testcases\*
- Moved all Sputnik tests from website\resources\scripts\testcases\* out to
test\suite\sputnik_converted
- Moved website\resources\scripts\testcases\excludelist.xml out to test\config\*. This
particular file was only used for the test conversion process to XML, and is not actually
needed by the website as best as I can tell
- Website\resources\scripts\testcases now only contains the XMLized test cases. This is
the right thing to do as the *.js files here weren't actually being used by the website
and the general public can now peruse the test cases directly via Mercurial
- external\contributions\: test contributions to Test262 from external entities such as Microsoft and Google.
This directory consists of the external tests without any modifications
- test\harness\: test harness used to run Test262 tests. Presently web-based
- test\suite\: suite of vendor-neutral ECMAScript test cases conforming to the ES5 spec
- tools\: among other things this includes a set of tools used to convert various external test
contributions to a format the Test262 test harness can consume
- website\: an archived copy of the http://test262.ecmascript.org website