mirror of https://github.com/tc39/test262.git
- split sth.js (simple test harness) into sth.js and sta.js (simple test APIs)
- updated version number for the overall site to 0.3
This commit is contained in:
parent
f301c17e6b
commit
2ec3b287d7
|
@ -0,0 +1,276 @@
|
|||
/// Copyright (c) 2009 Microsoft Corporation
|
||||
///
|
||||
/// Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
/// that the following conditions are met:
|
||||
/// * Redistributions of source code must retain the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer.
|
||||
/// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
/// * Neither the name of Microsoft nor the names of its contributors may be used to
|
||||
/// endorse or promote products derived from this software without specific prior written permission.
|
||||
///
|
||||
/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||
/// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
/// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
/// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
/// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
/// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
//Simple Test APIs
|
||||
var SimpleTestAPIs = []
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
SimpleTestAPIs.append(compareArray);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
SimpleTestAPIs.append(arrayContains);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var supportsArrayIndexGettersOnArrays = undefined;
|
||||
function fnSupportsArrayIndexGettersOnArrays() {
|
||||
if (typeof supportsArrayIndexGettersOnArrays !== "undefined") {
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
|
||||
supportsArrayIndexGettersOnArrays = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var arr = [];
|
||||
Object.defineProperty(arr, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnArrays = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = arr[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
SimpleTestAPIs.append(fnSupportsArrayIndexGettersOnArrays);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var supportsArrayIndexGettersOnObjects = undefined;
|
||||
function fnSupportsArrayIndexGettersOnObjects() {
|
||||
if (typeof supportsArrayIndexGettersOnObjects !== "undefined")
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
|
||||
supportsArrayIndexGettersOnObjects = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var obj = {};
|
||||
Object.defineProperty(obj, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnObjects = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = obj[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
}
|
||||
SimpleTestAPIs.append(fnSupportsArrayIndexGettersOnObjects);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function ConvertToFileUrl(pathStr) {
|
||||
return "file:" + pathStr.replace(/\\/g, "/");
|
||||
}
|
||||
SimpleTestAPIs.append(ConvertToFileUrl);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function fnExists(/*arguments*/) {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
if (typeof (arguments[i]) !== "function") return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
SimpleTestAPIs.append(fnExists);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var supportsStrict = undefined;
|
||||
function fnSupportsStrict() {
|
||||
"use strict";
|
||||
if (supportsStrict !== undefined) {
|
||||
return supportsStrict;
|
||||
}
|
||||
|
||||
try {
|
||||
eval('with ({}) {}');
|
||||
supportsStrict = false;
|
||||
} catch (e) {
|
||||
supportsStrict = true;
|
||||
}
|
||||
return supportsStrict;
|
||||
}
|
||||
SimpleTestAPIs.append(fnSupportsStrict);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function fnGlobalObject() {
|
||||
return (function() { return this }).call(null);
|
||||
}
|
||||
SimpleTestAPIs.append(fnGlobalObject);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//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;
|
||||
}
|
||||
SimpleTestAPIs.append(dataPropertyAttributesAreCorrect);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//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;
|
||||
}
|
||||
SimpleTestAPIs.append(accessorPropertyAttributesAreCorrect);
|
|
@ -298,249 +298,6 @@ function Controller() {
|
|||
|
||||
var controller = new Controller()
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
var supportsArrayIndexGettersOnArrays = undefined;
|
||||
function fnSupportsArrayIndexGettersOnArrays() {
|
||||
if (typeof supportsArrayIndexGettersOnArrays !== "undefined") {
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
|
||||
supportsArrayIndexGettersOnArrays = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var arr = [];
|
||||
Object.defineProperty(arr, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnArrays = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = arr[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
|
||||
var supportsArrayIndexGettersOnObjects = undefined;
|
||||
function fnSupportsArrayIndexGettersOnObjects() {
|
||||
if (typeof supportsArrayIndexGettersOnObjects !== "undefined")
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
|
||||
supportsArrayIndexGettersOnObjects = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var obj = {};
|
||||
Object.defineProperty(obj, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnObjects = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = obj[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------
|
||||
// helpers that unittests can use (typically in
|
||||
// their prereq function).
|
||||
// ----------------------------------------------
|
||||
function ConvertToFileUrl(pathStr) {
|
||||
return "file:" + pathStr.replace(/\\/g, "/");
|
||||
}
|
||||
|
||||
function fnExists(/*arguments*/) {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
if (typeof (arguments[i]) !== "function") return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
var supportsStrict = undefined;
|
||||
function fnSupportsStrict() {
|
||||
"use strict";
|
||||
if (supportsStrict !== undefined) {
|
||||
return supportsStrict;
|
||||
}
|
||||
|
||||
try {
|
||||
eval('with ({}) {}');
|
||||
supportsStrict = false;
|
||||
} catch (e) {
|
||||
supportsStrict = true;
|
||||
}
|
||||
return supportsStrict;
|
||||
}
|
||||
|
||||
function fnGlobalObject() {
|
||||
return (function() { return this }).call(null);
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
|
||||
$(function () {
|
||||
presenter.setup();
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<script type="text/javascript" src="resources/scripts/global/jquery-1.4.2.min.js"></script>
|
||||
<script type="text/javascript" src="resources/scripts/global/sections.js"></script>
|
||||
<script type="text/javascript" src="resources/scripts/global/sth.js"></script>
|
||||
<script type="text/javascript" src="resources/scripts/global/sta.js"></script>
|
||||
<script type="text/javascript" src="resources/scripts/global/jqueryprogressbar.js"></script>
|
||||
<script type="text/javascript" src="resources/scripts/global/helper.js"></script>
|
||||
<script type="text/javascript" src="resources/scripts/global/jquery.base64.js"></script>
|
||||
|
@ -151,7 +152,7 @@
|
|||
<!-- This is the Footer -->
|
||||
<div class="footer">
|
||||
<!--<div class="Links"> <a href="">Privacy</a> | <a href="">Terms of Use</a> </div>-->
|
||||
<div class="links">Ver. 0.2 17-Jan-2011</div>
|
||||
<div class="links">Ver. 0.3 10-Feb-2011</div>
|
||||
<div class="copyright"> © <a href="http://www.ecma-international.org">ECMA International</a> </div>
|
||||
</div>
|
||||
<iframe id="scriptLoader" class="hide"></iframe>
|
||||
|
|
|
@ -0,0 +1,276 @@
|
|||
/// Copyright (c) 2009 Microsoft Corporation
|
||||
///
|
||||
/// Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||
/// that the following conditions are met:
|
||||
/// * Redistributions of source code must retain the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer.
|
||||
/// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||
/// the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
/// * Neither the name of Microsoft nor the names of its contributors may be used to
|
||||
/// endorse or promote products derived from this software without specific prior written permission.
|
||||
///
|
||||
/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||
/// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
/// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
/// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
/// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
/// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
/// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
//Simple Test APIs
|
||||
var SimpleTestAPIs = []
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
SimpleTestAPIs.append(compareArray);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
SimpleTestAPIs.append(arrayContains);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var supportsArrayIndexGettersOnArrays = undefined;
|
||||
function fnSupportsArrayIndexGettersOnArrays() {
|
||||
if (typeof supportsArrayIndexGettersOnArrays !== "undefined") {
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
|
||||
supportsArrayIndexGettersOnArrays = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var arr = [];
|
||||
Object.defineProperty(arr, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnArrays = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = arr[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
SimpleTestAPIs.append(fnSupportsArrayIndexGettersOnArrays);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var supportsArrayIndexGettersOnObjects = undefined;
|
||||
function fnSupportsArrayIndexGettersOnObjects() {
|
||||
if (typeof supportsArrayIndexGettersOnObjects !== "undefined")
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
|
||||
supportsArrayIndexGettersOnObjects = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var obj = {};
|
||||
Object.defineProperty(obj, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnObjects = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = obj[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
}
|
||||
SimpleTestAPIs.append(fnSupportsArrayIndexGettersOnObjects);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function ConvertToFileUrl(pathStr) {
|
||||
return "file:" + pathStr.replace(/\\/g, "/");
|
||||
}
|
||||
SimpleTestAPIs.append(ConvertToFileUrl);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function fnExists(/*arguments*/) {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
if (typeof (arguments[i]) !== "function") return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
SimpleTestAPIs.append(fnExists);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var supportsStrict = undefined;
|
||||
function fnSupportsStrict() {
|
||||
"use strict";
|
||||
if (supportsStrict !== undefined) {
|
||||
return supportsStrict;
|
||||
}
|
||||
|
||||
try {
|
||||
eval('with ({}) {}');
|
||||
supportsStrict = false;
|
||||
} catch (e) {
|
||||
supportsStrict = true;
|
||||
}
|
||||
return supportsStrict;
|
||||
}
|
||||
SimpleTestAPIs.append(fnSupportsStrict);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
function fnGlobalObject() {
|
||||
return (function() { return this }).call(null);
|
||||
}
|
||||
SimpleTestAPIs.append(fnGlobalObject);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//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;
|
||||
}
|
||||
SimpleTestAPIs.append(dataPropertyAttributesAreCorrect);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//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;
|
||||
}
|
||||
SimpleTestAPIs.append(accessorPropertyAttributesAreCorrect);
|
|
@ -298,249 +298,6 @@ function Controller() {
|
|||
|
||||
var controller = new Controller()
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
var supportsArrayIndexGettersOnArrays = undefined;
|
||||
function fnSupportsArrayIndexGettersOnArrays() {
|
||||
if (typeof supportsArrayIndexGettersOnArrays !== "undefined") {
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
|
||||
supportsArrayIndexGettersOnArrays = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var arr = [];
|
||||
Object.defineProperty(arr, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnArrays = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = arr[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnArrays;
|
||||
}
|
||||
|
||||
var supportsArrayIndexGettersOnObjects = undefined;
|
||||
function fnSupportsArrayIndexGettersOnObjects() {
|
||||
if (typeof supportsArrayIndexGettersOnObjects !== "undefined")
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
|
||||
supportsArrayIndexGettersOnObjects = false;
|
||||
|
||||
if (fnExists(Object.defineProperty)) {
|
||||
var obj = {};
|
||||
Object.defineProperty(obj, "0", {
|
||||
get: function() {
|
||||
supportsArrayIndexGettersOnObjects = true;
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
var res = obj[0];
|
||||
}
|
||||
|
||||
return supportsArrayIndexGettersOnObjects;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------
|
||||
// helpers that unittests can use (typically in
|
||||
// their prereq function).
|
||||
// ----------------------------------------------
|
||||
function ConvertToFileUrl(pathStr) {
|
||||
return "file:" + pathStr.replace(/\\/g, "/");
|
||||
}
|
||||
|
||||
function fnExists(/*arguments*/) {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
if (typeof (arguments[i]) !== "function") return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
var supportsStrict = undefined;
|
||||
function fnSupportsStrict() {
|
||||
"use strict";
|
||||
if (supportsStrict !== undefined) {
|
||||
return supportsStrict;
|
||||
}
|
||||
|
||||
try {
|
||||
eval('with ({}) {}');
|
||||
supportsStrict = false;
|
||||
} catch (e) {
|
||||
supportsStrict = true;
|
||||
}
|
||||
return supportsStrict;
|
||||
}
|
||||
|
||||
function fnGlobalObject() {
|
||||
return (function() { return this }).call(null);
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
|
||||
$(function () {
|
||||
presenter.setup();
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<testSuite numTests="8560" version="0.3" date="02/02/2011">
|
||||
<testSuite numTests="8560" version="0.3" date="02/03/2011">
|
||||
<testGroup>resources/scripts/testcases/07_Lexical_Conventions.xml</testGroup>
|
||||
<testGroup>resources/scripts/testcases/08_Types.xml</testGroup>
|
||||
<testGroup>resources/scripts/testcases/09_Type_Conversion.xml</testGroup>
|
||||
|
|
Loading…
Reference in New Issue