michael@0: // This file was written by Andy Wingo and originally michael@0: // contributed to V8 as generators-objects.js, available here: michael@0: // michael@0: // http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js michael@0: michael@0: // Test aspects of the generator runtime. michael@0: michael@0: // Test the properties and prototype of a generator object. michael@0: function TestGeneratorObject() { michael@0: function* g() { yield 1; } michael@0: michael@0: var iter = g(); michael@0: assertEq(Object.getPrototypeOf(iter), g.prototype); michael@0: assertTrue(iter instanceof g); michael@0: assertEq(String(iter), "[object Generator]"); michael@0: assertDeepEq(Object.getOwnPropertyNames(iter), []); michael@0: assertNotEq(g(), iter); michael@0: michael@0: // g() is the same as new g(). michael@0: iter = new g(); michael@0: assertEq(Object.getPrototypeOf(iter), g.prototype); michael@0: assertTrue(iter instanceof g); michael@0: assertEq(String(iter), "[object Generator]"); michael@0: assertDeepEq(Object.getOwnPropertyNames(iter), []); michael@0: assertNotEq(new g(), iter); michael@0: } michael@0: TestGeneratorObject(); michael@0: michael@0: michael@0: // Test the methods of generator objects. michael@0: function TestGeneratorObjectMethods() { michael@0: function* g() { yield 1; } michael@0: var iter = g(); michael@0: michael@0: function TestNonGenerator(non_generator) { michael@0: assertThrowsInstanceOf(function() { iter.next.call(non_generator); }, TypeError); michael@0: assertThrowsInstanceOf(function() { iter.next.call(non_generator, 1); }, TypeError); michael@0: assertThrowsInstanceOf(function() { iter.throw.call(non_generator, 1); }, TypeError); michael@0: assertThrowsInstanceOf(function() { iter.close.call(non_generator); }, TypeError); michael@0: } michael@0: michael@0: TestNonGenerator(1); michael@0: TestNonGenerator({}); michael@0: TestNonGenerator(function(){}); michael@0: TestNonGenerator(g); michael@0: TestNonGenerator(g.prototype); michael@0: } michael@0: TestGeneratorObjectMethods(); michael@0: michael@0: michael@0: if (typeof reportCompare == "function") michael@0: reportCompare(true, true);