michael@0: /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: * vim: set ts=8 sts=4 et sw=4 tw=99: michael@0: */ 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: #include "jsapi-tests/tests.h" michael@0: michael@0: BEGIN_TEST(testDeepFreeze_bug535703) michael@0: { michael@0: JS::RootedValue v(cx); michael@0: EVAL("var x = {}; x;", &v); michael@0: JS::RootedObject obj(cx, JSVAL_TO_OBJECT(v)); michael@0: CHECK(JS_DeepFreezeObject(cx, obj)); // don't crash michael@0: EVAL("Object.isFrozen(x)", &v); michael@0: CHECK_SAME(v, JSVAL_TRUE); michael@0: return true; michael@0: } michael@0: END_TEST(testDeepFreeze_bug535703) michael@0: michael@0: BEGIN_TEST(testDeepFreeze_deep) michael@0: { michael@0: JS::RootedValue a(cx), o(cx); michael@0: EXEC("var a = {}, o = a;\n" michael@0: "for (var i = 0; i < 5000; i++)\n" michael@0: " a = {x: a, y: a};\n"); michael@0: EVAL("a", &a); michael@0: EVAL("o", &o); michael@0: michael@0: JS::RootedObject aobj(cx, JSVAL_TO_OBJECT(a)); michael@0: CHECK(JS_DeepFreezeObject(cx, aobj)); michael@0: michael@0: JS::RootedValue b(cx); michael@0: EVAL("Object.isFrozen(a)", &b); michael@0: CHECK_SAME(b, JSVAL_TRUE); michael@0: EVAL("Object.isFrozen(o)", &b); michael@0: CHECK_SAME(b, JSVAL_TRUE); michael@0: return true; michael@0: } michael@0: END_TEST(testDeepFreeze_deep) michael@0: michael@0: BEGIN_TEST(testDeepFreeze_loop) michael@0: { michael@0: JS::RootedValue x(cx), y(cx); michael@0: EXEC("var x = [], y = {x: x}; y.y = y; x.push(x, y);"); michael@0: EVAL("x", &x); michael@0: EVAL("y", &y); michael@0: michael@0: JS::RootedObject xobj(cx, JSVAL_TO_OBJECT(x)); michael@0: CHECK(JS_DeepFreezeObject(cx, xobj)); michael@0: michael@0: JS::RootedValue b(cx); michael@0: EVAL("Object.isFrozen(x)", &b); michael@0: CHECK_SAME(b, JSVAL_TRUE); michael@0: EVAL("Object.isFrozen(y)", &b); michael@0: CHECK_SAME(b, JSVAL_TRUE); michael@0: return true; michael@0: } michael@0: END_TEST(testDeepFreeze_loop)