OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 17 matching lines...) Expand all Loading... |
28 // Test aspects of the generator runtime. | 28 // Test aspects of the generator runtime. |
29 | 29 |
30 // See: | 30 // See: |
31 // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorfunction-ob
jects | 31 // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorfunction-ob
jects |
32 | 32 |
33 function f() { "use strict"; } | 33 function f() { "use strict"; } |
34 function* g() { yield 1; } | 34 function* g() { yield 1; } |
35 var GeneratorFunctionPrototype = Object.getPrototypeOf(g); | 35 var GeneratorFunctionPrototype = Object.getPrototypeOf(g); |
36 var GeneratorFunction = GeneratorFunctionPrototype.constructor; | 36 var GeneratorFunction = GeneratorFunctionPrototype.constructor; |
37 var GeneratorObjectPrototype = GeneratorFunctionPrototype.prototype; | 37 var GeneratorObjectPrototype = GeneratorFunctionPrototype.prototype; |
| 38 var IteratorPrototype = Object.getPrototypeOf(GeneratorObjectPrototype); |
38 | 39 |
39 // A generator function should have the same set of properties as any | 40 // A generator function should have the same set of properties as any |
40 // other function. | 41 // other function. |
41 function TestGeneratorFunctionInstance() { | 42 function TestGeneratorFunctionInstance() { |
42 var f_own_property_names = Object.getOwnPropertyNames(f); | 43 var f_own_property_names = Object.getOwnPropertyNames(f); |
43 var g_own_property_names = Object.getOwnPropertyNames(g); | 44 var g_own_property_names = Object.getOwnPropertyNames(g); |
44 | 45 |
45 f_own_property_names.sort(); | 46 f_own_property_names.sort(); |
46 g_own_property_names.sort(); | 47 g_own_property_names.sort(); |
47 | 48 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 assertFalse(prototype_desc.writable); | 94 assertFalse(prototype_desc.writable); |
94 assertFalse(prototype_desc.enumerable); | 95 assertFalse(prototype_desc.enumerable); |
95 assertTrue(prototype_desc.configurable); | 96 assertTrue(prototype_desc.configurable); |
96 } | 97 } |
97 TestGeneratorFunctionPrototype(); | 98 TestGeneratorFunctionPrototype(); |
98 | 99 |
99 | 100 |
100 // Functions that we associate with generator objects are actually defined by | 101 // Functions that we associate with generator objects are actually defined by |
101 // a common prototype. | 102 // a common prototype. |
102 function TestGeneratorObjectPrototype() { | 103 function TestGeneratorObjectPrototype() { |
103 assertSame(Object.prototype, | 104 assertSame(IteratorPrototype, |
104 Object.getPrototypeOf(GeneratorObjectPrototype)); | 105 Object.getPrototypeOf(GeneratorObjectPrototype)); |
105 assertSame(GeneratorObjectPrototype, | 106 assertSame(GeneratorObjectPrototype, |
106 Object.getPrototypeOf((function*(){yield 1}).prototype)); | 107 Object.getPrototypeOf((function*(){yield 1}).prototype)); |
107 | 108 |
108 var expected_property_names = ["next", "throw", "constructor"]; | 109 var expected_property_names = ["next", "throw", "constructor"]; |
109 var found_property_names = | 110 var found_property_names = |
110 Object.getOwnPropertyNames(GeneratorObjectPrototype); | 111 Object.getOwnPropertyNames(GeneratorObjectPrototype); |
111 | 112 |
112 expected_property_names.sort(); | 113 expected_property_names.sort(); |
113 found_property_names.sort(); | 114 found_property_names.sort(); |
(...skipping 13 matching lines...) Expand all Loading... |
127 assertTrue(next_desc.writable); | 128 assertTrue(next_desc.writable); |
128 assertFalse(next_desc.enumerable); | 129 assertFalse(next_desc.enumerable); |
129 assertTrue(next_desc.configurable); | 130 assertTrue(next_desc.configurable); |
130 | 131 |
131 var throw_desc = Object.getOwnPropertyDescriptor(GeneratorObjectPrototype, | 132 var throw_desc = Object.getOwnPropertyDescriptor(GeneratorObjectPrototype, |
132 "throw"); | 133 "throw"); |
133 assertTrue(throw_desc !== undefined); | 134 assertTrue(throw_desc !== undefined); |
134 assertTrue(throw_desc.writable); | 135 assertTrue(throw_desc.writable); |
135 assertFalse(throw_desc.enumerable); | 136 assertFalse(throw_desc.enumerable); |
136 assertTrue(throw_desc.configurable); | 137 assertTrue(throw_desc.configurable); |
137 | |
138 var iterator_desc = Object.getOwnPropertyDescriptor(GeneratorObjectPrototype, | |
139 Symbol.iterator); | |
140 assertTrue(iterator_desc !== undefined); | |
141 assertFalse(iterator_desc.writable); | |
142 assertFalse(iterator_desc.enumerable); | |
143 assertFalse(iterator_desc.configurable); | |
144 | |
145 // The generator object's "iterator" function is just the identity. | |
146 assertSame(iterator_desc.value.call(42), 42); | |
147 } | 138 } |
148 TestGeneratorObjectPrototype(); | 139 TestGeneratorObjectPrototype(); |
149 | 140 |
150 | 141 |
151 // This tests the object that would be called "GeneratorFunction", if it were | 142 // This tests the object that would be called "GeneratorFunction", if it were |
152 // like "Function". | 143 // like "Function". |
153 function TestGeneratorFunction() { | 144 function TestGeneratorFunction() { |
154 assertSame(GeneratorFunctionPrototype, GeneratorFunction.prototype); | 145 assertSame(GeneratorFunctionPrototype, GeneratorFunction.prototype); |
155 assertTrue(g instanceof GeneratorFunction); | 146 assertTrue(g instanceof GeneratorFunction); |
156 | 147 |
(...skipping 15 matching lines...) Expand all Loading... |
172 function TestPerGeneratorPrototype() { | 163 function TestPerGeneratorPrototype() { |
173 assertTrue((function*(){}).prototype !== (function*(){}).prototype); | 164 assertTrue((function*(){}).prototype !== (function*(){}).prototype); |
174 assertTrue((function*(){}).prototype !== g.prototype); | 165 assertTrue((function*(){}).prototype !== g.prototype); |
175 assertSame(GeneratorObjectPrototype, Object.getPrototypeOf(g.prototype)); | 166 assertSame(GeneratorObjectPrototype, Object.getPrototypeOf(g.prototype)); |
176 assertTrue(!(g.prototype instanceof Function)); | 167 assertTrue(!(g.prototype instanceof Function)); |
177 assertSame(typeof (g.prototype), "object"); | 168 assertSame(typeof (g.prototype), "object"); |
178 | 169 |
179 assertArrayEquals([], Object.getOwnPropertyNames(g.prototype)); | 170 assertArrayEquals([], Object.getOwnPropertyNames(g.prototype)); |
180 } | 171 } |
181 TestPerGeneratorPrototype(); | 172 TestPerGeneratorPrototype(); |
OLD | NEW |