2010-03-17 12:56:49 -07:00
|
|
|
var cyclicalObject = {};
|
|
|
|
cyclicalObject.foo = cyclicalObject;
|
|
|
|
|
|
|
|
var cyclicalArray = [];
|
|
|
|
cyclicalArray.push(cyclicalArray);
|
|
|
|
|
|
|
|
function makeCrazyNested(obj, count) {
|
|
|
|
var innermostobj;
|
|
|
|
for (var i = 0; i < count; i++) {
|
|
|
|
obj.foo = { bar: 5 }
|
|
|
|
innermostobj = obj.foo;
|
|
|
|
obj = innermostobj;
|
|
|
|
}
|
|
|
|
return innermostobj;
|
|
|
|
}
|
|
|
|
|
|
|
|
var crazyNestedObject = {};
|
|
|
|
makeCrazyNested(crazyNestedObject, 100);
|
|
|
|
|
|
|
|
var crazyCyclicalObject = {};
|
|
|
|
var innermost = makeCrazyNested(crazyCyclicalObject, 1000);
|
|
|
|
innermost.baz = crazyCyclicalObject;
|
|
|
|
|
|
|
|
var objectWithSaneGetter = { };
|
|
|
|
objectWithSaneGetter.__defineGetter__("foo", function() { return 5; });
|
|
|
|
|
|
|
|
// We don't walk prototype chains for cloning so this won't actually do much...
|
|
|
|
function objectWithSaneGetter2() { }
|
|
|
|
objectWithSaneGetter2.prototype = {
|
|
|
|
get foo() {
|
|
|
|
return 5;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var objectWithThrowingGetter = { };
|
|
|
|
objectWithThrowingGetter.__defineGetter__("foo", function() { throw "bad"; });
|
|
|
|
|
2008-12-07 16:15:49 -08:00
|
|
|
var messages = [
|
|
|
|
{
|
|
|
|
type: "object",
|
2010-03-17 12:56:49 -07:00
|
|
|
value: { },
|
|
|
|
jsonValue: '{}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: {foo: "bar"},
|
|
|
|
jsonValue: '{"foo":"bar"}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: {foo: "bar", foo2: {bee: "bop"}},
|
|
|
|
jsonValue: '{"foo":"bar","foo2":{"bee":"bop"}}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: {foo: "bar", foo2: {bee: "bop"}, foo3: "baz"},
|
|
|
|
jsonValue: '{"foo":"bar","foo2":{"bee":"bop"},"foo3":"baz"}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: {foo: "bar", foo2: [1,2,3]},
|
|
|
|
jsonValue: '{"foo":"bar","foo2":[1,2,3]}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: cyclicalObject,
|
|
|
|
exception: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: [null, 2, false, cyclicalObject],
|
|
|
|
exception: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: cyclicalArray,
|
|
|
|
exception: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: {foo: 1, bar: cyclicalArray},
|
|
|
|
exception: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: crazyNestedObject,
|
|
|
|
jsonValue: JSON.stringify(crazyNestedObject)
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: crazyCyclicalObject,
|
|
|
|
exception: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: objectWithSaneGetter,
|
|
|
|
jsonValue: '{"foo":5}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: new objectWithSaneGetter2(),
|
|
|
|
jsonValue: '{}'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
value: objectWithThrowingGetter,
|
|
|
|
exception: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
array: true,
|
|
|
|
value: [9, 8, 7],
|
|
|
|
jsonValue: '[9,8,7]'
|
2008-12-07 16:15:49 -08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
array: true,
|
2010-03-17 12:56:49 -07:00
|
|
|
value: [9, false, 10.5, {foo: "bar"}],
|
|
|
|
jsonValue: '[9,false,10.5,{"foo":"bar"}]'
|
2008-12-07 16:15:49 -08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: null
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "undefined",
|
|
|
|
shouldEqual: true,
|
2010-03-17 12:56:49 -07:00
|
|
|
value: undefined
|
2008-12-07 16:15:49 -08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "string",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: "Hello"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "string",
|
|
|
|
shouldEqual: true,
|
2010-03-17 12:56:49 -07:00
|
|
|
value: JSON.stringify({ foo: "bar" }),
|
|
|
|
compareValue: '{"foo":"bar"}'
|
2008-12-07 16:15:49 -08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: 1
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: 0
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: -1
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: 238573459843702923492399923049
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: -238573459843702923492399923049
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: 0.25
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: -0.25
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "boolean",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "boolean",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: false
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "object",
|
|
|
|
shouldEqual: true,
|
2010-03-17 12:56:49 -07:00
|
|
|
value: function (foo) { return "Bad!"; },
|
2008-12-07 16:15:49 -08:00
|
|
|
compareValue: null
|
|
|
|
},
|
|
|
|
{
|
2010-03-17 12:56:49 -07:00
|
|
|
type: "number",
|
|
|
|
isNaN: true,
|
|
|
|
value: NaN
|
2008-12-07 16:15:49 -08:00
|
|
|
},
|
|
|
|
{
|
2010-03-17 12:56:49 -07:00
|
|
|
type: "number",
|
|
|
|
isInfinity: true,
|
|
|
|
value: Infinity
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "number",
|
|
|
|
isNegativeInfinity: true,
|
|
|
|
value: -Infinity
|
2008-12-07 16:15:49 -08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: "string",
|
|
|
|
shouldEqual: true,
|
|
|
|
value: "testFinished"
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
for (var index = 0; index < messages.length; index++) {
|
|
|
|
var message = messages[index];
|
|
|
|
if (message.hasOwnProperty("compareValue")) {
|
|
|
|
continue;
|
|
|
|
}
|
2010-03-17 12:56:49 -07:00
|
|
|
if (message.hasOwnProperty("shouldEqual") ||
|
|
|
|
message.hasOwnProperty("shouldCompare")) {
|
|
|
|
message.compareValue = message.value;
|
|
|
|
}
|
2008-12-07 16:15:49 -08:00
|
|
|
}
|
|
|
|
|
2010-03-17 12:56:49 -07:00
|
|
|
function onmessage(event) {
|
2008-12-07 16:15:49 -08:00
|
|
|
for (var index = 0; index < messages.length; index++) {
|
2010-03-17 12:56:49 -07:00
|
|
|
var exception = undefined;
|
2008-12-07 16:15:49 -08:00
|
|
|
|
|
|
|
try {
|
|
|
|
postMessage(messages[index].value);
|
|
|
|
}
|
|
|
|
catch (e) {
|
2010-03-17 12:56:49 -07:00
|
|
|
exception = e;
|
2008-12-07 16:15:49 -08:00
|
|
|
}
|
|
|
|
|
2010-03-17 12:56:49 -07:00
|
|
|
if ((exception !== undefined && !messages[index].exception) ||
|
|
|
|
(exception === undefined && messages[index].exception)) {
|
|
|
|
throw "Exception inconsistency [" + index + "]: " + exception;
|
2008-12-07 16:15:49 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|