diff --git a/test/mjsunit/es6/generators-poisoned-properties.js b/test/mjsunit/es6/generators-poisoned-properties.js
index 44d823a..e861022 100644
--- a/test/mjsunit/es6/generators-poisoned-properties.js
+++ b/test/mjsunit/es6/generators-poisoned-properties.js
@@ -2,39 +2,41 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+(function testRestrictedPropertiesStrict() {
+  function* generator() { "use strict"; }
+  assertFalse(generator.hasOwnProperty("arguments"));
+  assertThrows(function() { return generator.arguments; }, TypeError);
+  assertThrows(function() { return generator.arguments = {}; }, TypeError);
+
+  assertFalse(generator.hasOwnProperty("caller"));
+  assertThrows(function() { return generator.caller; }, TypeError);
+  assertThrows(function() { return generator.caller = {}; }, TypeError);
+})();
+
+
+(function testRestrictedPropertiesSloppy() {
+  function* generator() {}
+  assertFalse(generator.hasOwnProperty("arguments"));
+  assertThrows(function() { return generator.arguments; }, TypeError);
+  assertThrows(function() { return generator.arguments = {}; }, TypeError);
+
+  assertFalse(generator.hasOwnProperty("caller"));
+  assertThrows(function() { return generator.caller; }, TypeError);
+  assertThrows(function() { return generator.caller = {}; }, TypeError);
+})();
+
 function assertIteratorResult(value, done, result) {
   assertEquals({value: value, done: done}, result);
 }
 
-function test(f) {
-  var cdesc = Object.getOwnPropertyDescriptor(f, "caller");
-  var adesc = Object.getOwnPropertyDescriptor(f, "arguments");
 
-  assertFalse(cdesc.enumerable);
-  assertFalse(cdesc.configurable);
+(function testIteratorResultStrict() {
+  function* generator() { "use strict"; }
+  assertIteratorResult(undefined, true, generator().next());
+})();
 
-  assertFalse(adesc.enumerable);
-  assertFalse(adesc.configurable);
 
-  assertSame(cdesc.get, cdesc.set);
-  assertSame(cdesc.get, adesc.get);
-  assertSame(cdesc.get, adesc.set);
-
-  assertTrue(cdesc.get instanceof Function);
-  assertEquals(0, cdesc.get.length);
-  assertThrows(cdesc.get, TypeError);
-
-  assertThrows(function() { return f.caller; }, TypeError);
-  assertThrows(function() { f.caller = 42; }, TypeError);
-  assertThrows(function() { return f.arguments; }, TypeError);
-  assertThrows(function() { f.arguments = 42; }, TypeError);
-}
-
-function *sloppy() { test(sloppy); }
-function *strict() { "use strict"; test(strict); }
-
-test(sloppy);
-test(strict);
-
-assertIteratorResult(undefined, true, sloppy().next());
-assertIteratorResult(undefined, true, strict().next());
+(function testIteratorResultSloppy() {
+  function* generator() {}
+  assertIteratorResult(undefined, true, generator().next());
+})();
