From c33bf0e0439e6f6bf084c1524d7df8d2b41c515d Mon Sep 17 00:00:00 2001 From: Sam Mikes Date: Fri, 18 Jul 2014 16:22:37 -0600 Subject: tools, harness: support new YAML frontmatter 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) --- website/harness/$FAIL.js | 3 + website/harness/$PRINT.js | 4 ++ website/harness/Test262Error.js | 7 ++ .../accessorPropertyAttributesAreCorrect.js | 74 ++++++++++++++++++++++ website/harness/arrayContains.js | 17 +++++ website/harness/compareArray.js | 19 ++++++ .../harness/dataPropertyAttributesAreCorrect.js | 74 ++++++++++++++++++++++ website/harness/fnExists.js | 7 ++ website/harness/fnGlobalObject.js | 5 ++ website/harness/runTestCase.js | 5 ++ 10 files changed, 215 insertions(+) create mode 100644 website/harness/$FAIL.js create mode 100644 website/harness/$PRINT.js create mode 100644 website/harness/Test262Error.js create mode 100644 website/harness/accessorPropertyAttributesAreCorrect.js create mode 100644 website/harness/arrayContains.js create mode 100644 website/harness/compareArray.js create mode 100644 website/harness/dataPropertyAttributesAreCorrect.js create mode 100644 website/harness/fnExists.js create mode 100644 website/harness/fnGlobalObject.js create mode 100644 website/harness/runTestCase.js (limited to 'website') diff --git a/website/harness/$FAIL.js b/website/harness/$FAIL.js new file mode 100644 index 000000000..64f13f14e --- /dev/null +++ b/website/harness/$FAIL.js @@ -0,0 +1,3 @@ +function $FAIL(message) { + testFailed(message); +} diff --git a/website/harness/$PRINT.js b/website/harness/$PRINT.js new file mode 100644 index 000000000..b9a301503 --- /dev/null +++ b/website/harness/$PRINT.js @@ -0,0 +1,4 @@ +//adaptors for Test262 framework +function $PRINT(message) { + +} diff --git a/website/harness/Test262Error.js b/website/harness/Test262Error.js new file mode 100644 index 000000000..8966c7621 --- /dev/null +++ b/website/harness/Test262Error.js @@ -0,0 +1,7 @@ +//function Test262Error(message) { +// if (message) this.message = message; +//} +// +//Test262Error.prototype.toString = function () { +// return "Test262 Error: " + this.message; +//}; diff --git a/website/harness/accessorPropertyAttributesAreCorrect.js b/website/harness/accessorPropertyAttributesAreCorrect.js new file mode 100644 index 000000000..834393645 --- /dev/null +++ b/website/harness/accessorPropertyAttributesAreCorrect.js @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +//Verify all attributes specified accessor property of given object: +//get, set, enumerable, configurable +//If all attribute values are expected, return true, otherwise, return false +function accessorPropertyAttributesAreCorrect(obj, + name, + get, + set, + setVerifyHelpProp, + enumerable, + configurable) { + var attributesCorrect = true; + + if (get !== undefined) { + if (obj[name] !== get()) { + if (typeof obj[name] === "number" && + isNaN(obj[name]) && + typeof get() === "number" && + isNaN(get())) { + // keep empty + } else { + attributesCorrect = false; + } + } + } else { + if (obj[name] !== undefined) { + attributesCorrect = false; + } + } + + try { + var desc = Object.getOwnPropertyDescriptor(obj, name); + if (typeof desc.set === "undefined") { + if (typeof set !== "undefined") { + attributesCorrect = false; + } + } else { + obj[name] = "toBeSetValue"; + if (obj[setVerifyHelpProp] !== "toBeSetValue") { + attributesCorrect = false; + } + } + } catch (se) { + throw se; + } + + + var enumerated = false; + for (var prop in obj) { + if (obj.hasOwnProperty(prop) && prop === name) { + enumerated = true; + } + } + + if (enumerated !== enumerable) { + attributesCorrect = false; + } + + + var deleted = false; + try { + delete obj[name]; + } catch (de) { + throw de; + } + if (!obj.hasOwnProperty(name)) { + deleted = true; + } + if (deleted !== configurable) { + attributesCorrect = false; + } + + return attributesCorrect; +} diff --git a/website/harness/arrayContains.js b/website/harness/arrayContains.js new file mode 100644 index 000000000..b295de5f3 --- /dev/null +++ b/website/harness/arrayContains.js @@ -0,0 +1,17 @@ +//----------------------------------------------------------------------------- +function arrayContains(arr, expected) { + var found; + for (var i = 0; i < expected.length; i++) { + found = false; + for (var j = 0; j < arr.length; j++) { + if (expected[i] === arr[j]) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + return true; +} diff --git a/website/harness/compareArray.js b/website/harness/compareArray.js new file mode 100644 index 000000000..9b842ed5c --- /dev/null +++ b/website/harness/compareArray.js @@ -0,0 +1,19 @@ + +//----------------------------------------------------------------------------- +function compareArray(aExpected, aActual) { + if (aActual.length != aExpected.length) { + return false; + } + + aExpected.sort(); + aActual.sort(); + + var s; + for (var i = 0; i < aExpected.length; i++) { + if (aActual[i] !== aExpected[i]) { + return false; + } + } + return true; +} + diff --git a/website/harness/dataPropertyAttributesAreCorrect.js b/website/harness/dataPropertyAttributesAreCorrect.js new file mode 100644 index 000000000..201409f90 --- /dev/null +++ b/website/harness/dataPropertyAttributesAreCorrect.js @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +//Verify all attributes specified data property of given object: +//value, writable, enumerable, configurable +//If all attribute values are expected, return true, otherwise, return false +function dataPropertyAttributesAreCorrect(obj, + name, + value, + writable, + enumerable, + configurable) { + var attributesCorrect = true; + + if (obj[name] !== value) { + if (typeof obj[name] === "number" && + isNaN(obj[name]) && + typeof value === "number" && + isNaN(value)) { + // keep empty + } else { + attributesCorrect = false; + } + } + + try { + if (obj[name] === "oldValue") { + obj[name] = "newValue"; + } else { + obj[name] = "OldValue"; + } + } catch (we) { + } + + var overwrited = false; + if (obj[name] !== value) { + if (typeof obj[name] === "number" && + isNaN(obj[name]) && + typeof value === "number" && + isNaN(value)) { + // keep empty + } else { + overwrited = true; + } + } + if (overwrited !== writable) { + attributesCorrect = false; + } + + var enumerated = false; + for (var prop in obj) { + if (obj.hasOwnProperty(prop) && prop === name) { + enumerated = true; + } + } + + if (enumerated !== enumerable) { + attributesCorrect = false; + } + + + var deleted = false; + + try { + delete obj[name]; + } catch (de) { + } + if (!obj.hasOwnProperty(name)) { + deleted = true; + } + if (deleted !== configurable) { + attributesCorrect = false; + } + + return attributesCorrect; +} diff --git a/website/harness/fnExists.js b/website/harness/fnExists.js new file mode 100644 index 000000000..1f283b45d --- /dev/null +++ b/website/harness/fnExists.js @@ -0,0 +1,7 @@ +//----------------------------------------------------------------------------- +function fnExists(/*arguments*/) { + for (var i = 0; i < arguments.length; i++) { + if (typeof (arguments[i]) !== "function") return false; + } + return true; +} diff --git a/website/harness/fnGlobalObject.js b/website/harness/fnGlobalObject.js new file mode 100644 index 000000000..0a68c2da7 --- /dev/null +++ b/website/harness/fnGlobalObject.js @@ -0,0 +1,5 @@ +//----------------------------------------------------------------------------- +var __globalObject = Function("return this;")(); +function fnGlobalObject() { + return __globalObject; +} diff --git a/website/harness/runTestCase.js b/website/harness/runTestCase.js new file mode 100644 index 000000000..8b24a1ca0 --- /dev/null +++ b/website/harness/runTestCase.js @@ -0,0 +1,5 @@ +function runTestCase(testcase) { + if (testcase() !== true) { + $ERROR("Test case returned non-true value!"); + } +} -- cgit v1.2.1