michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * Date: 03 September 2001 michael@0: * michael@0: * SUMMARY: Double quotes should be escaped in uneval(new Error('""')) michael@0: * See http://bugzilla.mozilla.org/show_bug.cgi?id=96284 michael@0: * michael@0: * The real point here is this: we should be able to reconstruct an object michael@0: * obj from uneval(obj). We'll test this on various types of objects. michael@0: * michael@0: * Method: define obj2 = eval(uneval(obj1)) and verify that michael@0: * obj2.toSource() == obj1.toSource(). michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var UBound = 0; michael@0: var BUGNUMBER = 96284; michael@0: var summary = 'Double quotes should be escaped in Error.prototype.toSource()'; michael@0: var status = ''; michael@0: var statusitems = []; michael@0: var actual = ''; michael@0: var actualvalues = []; michael@0: var expect= ''; michael@0: var expectedvalues = []; michael@0: var obj1 = {}; michael@0: var obj2 = {}; michael@0: var cnTestString = '"This is a \" STUPID \" test string!!!"\\'; michael@0: michael@0: michael@0: // various NativeError objects - michael@0: status = inSection(1); michael@0: obj1 = Error(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(2); michael@0: obj1 = EvalError(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(3); michael@0: obj1 = RangeError(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(4); michael@0: obj1 = ReferenceError(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(5); michael@0: obj1 = SyntaxError(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(6); michael@0: obj1 = TypeError(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(7); michael@0: obj1 = URIError(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: michael@0: // other types of objects - michael@0: status = inSection(8); michael@0: obj1 = new String(cnTestString); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(9); michael@0: obj1 = {color:'red', texture:cnTestString, hasOwnProperty:42}; michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(10); michael@0: obj1 = function(x) {function g(y){return y+1;} return g(x);}; michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(11); michael@0: obj1 = new Number(eval('6')); michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: status = inSection(12); michael@0: obj1 = /ad;(lf)kj(2309\/\/)\/\//; michael@0: obj2 = eval(uneval(obj1)); michael@0: actual = obj2.toSource(); michael@0: expect = obj1.toSource(); michael@0: addThis(); michael@0: michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: michael@0: function addThis() michael@0: { michael@0: statusitems[UBound] = status; michael@0: actualvalues[UBound] = actual; michael@0: expectedvalues[UBound] = expect; michael@0: UBound++; michael@0: } michael@0: michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: michael@0: for (var i = 0; i < UBound; i++) michael@0: { michael@0: reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); michael@0: } michael@0: michael@0: exitFunc ('test'); michael@0: }