|
|
@@ -0,0 +1,45 @@
|
|
|
+//-------------------------------------------------------------------------------------------------------
|
|
|
+// Copyright (C) Microsoft. All rights reserved.
|
|
|
+// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
|
|
|
+//-------------------------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+// ES7 Object Prototype object has an immutable [[Prototype]] internal slot
|
|
|
+// See: 19.1.3 Properties of the Object Prototype Object
|
|
|
+// See: 9.4.7 Immutable Prototype Exotic Objects
|
|
|
+
|
|
|
+WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
|
|
|
+
|
|
|
+var tests = [
|
|
|
+ {
|
|
|
+ name: "Not okay to set Object.prototype.[[Prototype]] using __proto__",
|
|
|
+ body: function () {
|
|
|
+ var objectPrototypeObject = Object.getPrototypeOf(Object.prototype)
|
|
|
+ var b = Object.create(null)
|
|
|
+
|
|
|
+ assert.throws(function () { Object.prototype.__proto__ = b },
|
|
|
+ TypeError,
|
|
|
+ "It should not be okay to set Object.prototype.[[Prototype]] using __proto__",
|
|
|
+ "Can't set the prototype of this object.")
|
|
|
+
|
|
|
+ assert.areEqual(objectPrototypeObject, Object.prototype.__proto__, "Object.prototype.__proto__ is unchanged")
|
|
|
+ assert.areEqual(objectPrototypeObject, Object.getPrototypeOf(Object.prototype), "Object.getPrototypeOf(Object.prototype) is unchanged")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "Not okay to set Object.prototype.[[Prototype]] using Object.setPrototypeOf",
|
|
|
+ body: function () {
|
|
|
+ var objectPrototypeObject = Object.getPrototypeOf(Object.prototype)
|
|
|
+ var b = Object.create(null)
|
|
|
+
|
|
|
+ assert.throws(function () { Object.setPrototypeOf(Object.prototype, b) },
|
|
|
+ TypeError,
|
|
|
+ "It should not be okay to set Object.prototype.[[Prototype]] using Object.setPrototypeOf",
|
|
|
+ "Can't set the prototype of this object.")
|
|
|
+
|
|
|
+ assert.areEqual(objectPrototypeObject, Object.prototype.__proto__, "Object.prototype.__proto__ is unchanged")
|
|
|
+ assert.areEqual(objectPrototypeObject, Object.getPrototypeOf(Object.prototype), "Object.getPrototypeOf(Object.prototype) is unchanged")
|
|
|
+ }
|
|
|
+ },
|
|
|
+];
|
|
|
+
|
|
|
+testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });
|