1 description("Test to ensure correct behaviour of prototype caching with dictionary prototypes");
3 function protoTest(o) {
7 var proto = {protoProp: "PASS", propToRemove: "foo"};
8 var o = { __proto__: proto };
10 delete proto.propToRemove;
12 // Prototype lookup caching will attempt to convert proto back to an ordinary structure
16 shouldBe("protoTest(o)", "'PASS'");
17 delete proto.protoProp;
18 proto.fakeProtoProp = "FAIL";
19 shouldBeUndefined("protoTest(o)");
21 function protoTest2(o) {
25 var proto = {a:1, b:"meh", c:2};
26 var o = { __proto__: proto };
35 protoKeys.push(proto[i]);
37 shouldBe("protoKeys", "[1,2,3]");
39 function protoTest3(o) {
43 var proto = {a:1, b:"meh", c:2};
44 var o = { __proto__: proto };
53 protoKeys.push(proto[i]);
55 shouldBe("protoKeys", "[1,2,3]");
57 function testFunction(o) {
61 var proto = { test: true };
62 var subclass1 = { __proto__: proto };
63 var subclass2 = { __proto__: proto };
64 for (var i = 0; i < 500; i++)
65 subclass2["a"+i]="a"+i;
67 testFunction(subclass1);
68 shouldBeTrue("testFunction(subclass1)");
69 shouldBeTrue("testFunction(subclass2)");
71 subclass2.test = true;
72 shouldBeTrue("testFunction(subclass2)");