/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ function obj() { var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1}; Object.defineProperty(o, 'nowrite', {writable: false}); Object.defineProperty(o, 'noconfig', {configurable: false}); Object.defineProperty(o, 'noble', {writable: false, configurable: false}); return o; } assertEq(testLenientAndStrict('var o = obj(); o.all = 2; o.all', returns(2), returns(2)), true); assertEq(testLenientAndStrict('var o = obj(); o.nowrite = 2; o.nowrite', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('var o = obj(); o.noconfig = 2; o.noconfig', returns(2), returns(2)), true); assertEq(testLenientAndStrict('var o = obj(); o.noble = 2; o.noble', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('obj().nowrite++', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('++obj().nowrite', returns(2), raisesException(TypeError)), true); assertEq(testLenientAndStrict('obj().nowrite--', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('--obj().nowrite', returns(0), raisesException(TypeError)), true); function arr() { return Object.defineProperties([1, 1, 1, 1], { 1: { writable: false }, 2: { configurable: false }, 3: { writable: false, configurable: false }}); } assertEq(testLenientAndStrict('var a = arr(); a[0] = 2; a[0]', returns(2), returns(2)), true); assertEq(testLenientAndStrict('var a = arr(); a[1] = 2; a[1]', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('var a = arr(); a[2] = 2; a[2]', returns(2), returns(2)), true); assertEq(testLenientAndStrict('var a = arr(); a[3] = 2; a[3]', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('arr()[1]++', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('++arr()[1]', returns(2), raisesException(TypeError)), true); assertEq(testLenientAndStrict('arr()[1]--', returns(1), raisesException(TypeError)), true); assertEq(testLenientAndStrict('--arr()[1]', returns(0), raisesException(TypeError)), true); reportCompare(true, true);