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