Index: test/webkit/cyclic-prototypes.js |
diff --git a/test/webkit/concat-while-having-a-bad-time.js b/test/webkit/cyclic-prototypes.js |
similarity index 70% |
copy from test/webkit/concat-while-having-a-bad-time.js |
copy to test/webkit/cyclic-prototypes.js |
index dfda1e08a0b36194b787a44ee12a9693acd8aeaf..35f57756717a6d620bbb2371b5cc92cb95a7bfe7 100644 |
--- a/test/webkit/concat-while-having-a-bad-time.js |
+++ b/test/webkit/cyclic-prototypes.js |
@@ -21,11 +21,21 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-description( |
-"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating." |
-); |
+description("This test makes sure we don't hang when setting cyclic prototype values: http://bugs.webkit.org/show_bug.cgi?id=6985") |
-Object.defineProperty(Array.prototype, 0, { writable: false }); |
-shouldBe("[42].concat()", "[42]"); |
+var o1 = { p1: 1 }; |
+var o2 = { p2: 2 }; |
+o2.__proto__ = o1; |
+var o3 = { p3: 3 }; |
+o3.__proto__ = o2; |
+// Try to create a cyclical prototype chain. |
+shouldThrow("o1.__proto__ = o3;"); |
+// This changes behaviour, since __proto__ is an accessor on Object.prototype. |
+o1.__proto__ = null; |
+ |
+shouldBeFalse("({}).hasOwnProperty.call(o1, '__proto__')"); |
+o1.__proto__ = o3; |
+shouldBeTrue("({}).hasOwnProperty.call(o1, '__proto__')"); |
+shouldBe("Object.getPrototypeOf(o1)", "null"); |