diff --git a/test/built-ins/ThrowTypeError/extensible.js b/test/built-ins/ThrowTypeError/extensible.js
new file mode 100755
index 0000000000000000000000000000000000000000..907181662b1f9c476b3f22f03365fdc5cea5b349
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/extensible.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% is not extensible.
+info: >
+  %ThrowTypeError% ( )
+
+  The value of the [[Extensible]] internal slot of a %ThrowTypeError%
+  function is false.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(Object.isExtensible(ThrowTypeError), false);
diff --git a/test/built-ins/ThrowTypeError/forbidden-arguments.js b/test/built-ins/ThrowTypeError/forbidden-arguments.js
new file mode 100755
index 0000000000000000000000000000000000000000..133bac47338bd9eee22b8720cfff81671728b72e
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/forbidden-arguments.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% does not have an own "arguments" property.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each realm.
+
+  16.2 Forbidden Extensions
+
+    Other than as defined in this specification, ECMAScript Function
+    objects defined using syntactic constructors in strict mode code
+    must not be created with own properties named "caller" or
+    "arguments" other than those that are created by applying the
+    AddRestrictedFunctionProperties abstract operation (9.2.7) to
+    the function. [...] Built-in functions, strict mode functions
+    created using the Function constructor, generator functions
+    created using the Generator constructor, and functions created
+    using the bind method also must not be created with such own
+    properties.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(Object.prototype.hasOwnProperty.call(ThrowTypeError, "arguments"), false);
diff --git a/test/built-ins/ThrowTypeError/forbidden-caller.js b/test/built-ins/ThrowTypeError/forbidden-caller.js
new file mode 100755
index 0000000000000000000000000000000000000000..5f895ede93bffed522350ab8c720d9b7b3aef9e5
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/forbidden-caller.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% does not have an own "caller" property.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each realm.
+
+  16.2 Forbidden Extensions
+
+    Other than as defined in this specification, ECMAScript Function
+    objects defined using syntactic constructors in strict mode code
+    must not be created with own properties named "caller" or
+    "arguments" other than those that are created by applying the
+    AddRestrictedFunctionProperties abstract operation (9.2.7) to
+    the function. [...] Built-in functions, strict mode functions
+    created using the Function constructor, generator functions
+    created using the Generator constructor, and functions created
+    using the bind method also must not be created with such own
+    properties.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(Object.prototype.hasOwnProperty.call(ThrowTypeError, "caller"), false);
diff --git a/test/built-ins/ThrowTypeError/frozen.js b/test/built-ins/ThrowTypeError/frozen.js
new file mode 100755
index 0000000000000000000000000000000000000000..79537e650f2dbdfd66242001a1a379595de4772f
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/frozen.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  The integrity level of %ThrowTypeError% is "frozen".
+info: >
+  %ThrowTypeError% ( )
+
+  The value of the [[Extensible]] internal slot of a %ThrowTypeError%
+  function is false.
+  The length property of a %ThrowTypeError% function has the attributes
+  { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(Object.isFrozen(ThrowTypeError), true);
diff --git a/test/built-ins/ThrowTypeError/is-function.js b/test/built-ins/ThrowTypeError/is-function.js
new file mode 100755
index 0000000000000000000000000000000000000000..158cc197c08811ff5f703188e426d368bbc0454e
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/is-function.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% is a function object.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each realm.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(typeof ThrowTypeError, "function");
diff --git a/test/built-ins/ThrowTypeError/length.js b/test/built-ins/ThrowTypeError/length.js
new file mode 100755
index 0000000000000000000000000000000000000000..2b95e56a60bb9f10677a30aae77ee5cd586c021a
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/length.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError%.length is 0.
+info: >
+  %ThrowTypeError% ( )
+
+  The length property of a %ThrowTypeError% function has the attributes
+  { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
+includes: [propertyHelper.js]
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(ThrowTypeError.length, 0);
+
+verifyNotEnumerable(ThrowTypeError, "length");
+verifyNotWritable(ThrowTypeError, "length");
+verifyNotConfigurable(ThrowTypeError, "length");
diff --git a/test/built-ins/ThrowTypeError/name.js b/test/built-ins/ThrowTypeError/name.js
new file mode 100755
index 0000000000000000000000000000000000000000..4c92ed0ae475dbeedab6258af6d0c1ca3bb9c1a9
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/name.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% is an anonymous function.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each Realm.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(Object.prototype.hasOwnProperty.call(ThrowTypeError, "name"), false);
diff --git a/test/built-ins/ThrowTypeError/prototype.js b/test/built-ins/ThrowTypeError/prototype.js
new file mode 100755
index 0000000000000000000000000000000000000000..829adf95b072b57596fca36b10969e52b8923283
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/prototype.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  The value of the [[Prototype]] internal slot of %ThrowTypeError% is the
+  intrinsic object %FunctionPrototype%.
+info: >
+  8.2.2 CreateIntrinsics ( realmRec )
+
+  ...
+  6. Let thrower be CreateBuiltinFunction(realmRec, throwerSteps, null).
+  7. Set intrinsics.[[%ThrowTypeError%]] to thrower.
+  8. Let noSteps be an empty sequence of algorithm steps.
+  9. Let funcProto be CreateBuiltinFunction(realmRec, noSteps, objProto).
+  10. Set intrinsics.[[%FunctionPrototype%]] to funcProto.
+  11. Call thrower.[[SetPrototypeOf]](funcProto).
+  ...
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.sameValue(Object.getPrototypeOf(ThrowTypeError), Function.prototype);
diff --git a/test/built-ins/ThrowTypeError/throws-type-error.js b/test/built-ins/ThrowTypeError/throws-type-error.js
new file mode 100755
index 0000000000000000000000000000000000000000..59bed1e27718cfe44393c8a8c5fb439d2ff84a39
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/throws-type-error.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% throws a TypeError when called.
+info: >
+  %ThrowTypeError% ( )
+
+  When %ThrowTypeError% is called it performs the following steps:
+
+    1. Throw a TypeError exception.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+assert.throws(TypeError, function() {
+  ThrowTypeError();
+});
diff --git a/test/built-ins/ThrowTypeError/unique-per-realm-function-proto.js b/test/built-ins/ThrowTypeError/unique-per-realm-function-proto.js
new file mode 100755
index 0000000000000000000000000000000000000000..149bac434c016c29a4c38fa5dbb465265d27900f
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/unique-per-realm-function-proto.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% is defined once for each realm.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each realm.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+// Test with Function.prototype.arguments and Function.prototype.caller properties.
+var argumentsDesc = Object.getOwnPropertyDescriptor(Function.prototype, "arguments");
+var callerDesc = Object.getOwnPropertyDescriptor(Function.prototype, "caller");
+
+assert.sameValue(ThrowTypeError, argumentsDesc.get, "arguments.get");
+assert.sameValue(ThrowTypeError, argumentsDesc.set, "arguments.set");
+assert.sameValue(ThrowTypeError, callerDesc.set, "caller.set");
+assert.sameValue(ThrowTypeError, callerDesc.get, "caller.get");
diff --git a/test/built-ins/ThrowTypeError/unique-per-realm-non-simple.js b/test/built-ins/ThrowTypeError/unique-per-realm-non-simple.js
new file mode 100755
index 0000000000000000000000000000000000000000..8566c0e41295dc5e75dac71c939f11a7a9e71606
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/unique-per-realm-non-simple.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% is defined once for each realm.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each realm.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+// Test with unmapped arguments object from function with non-simple parameters list.
+function nonSimple(a = 0) {
+  return arguments;
+}
+var unmappedCalleeDesc = Object.getOwnPropertyDescriptor(nonSimple(), "callee");
+var unmappedCallerDesc = Object.getOwnPropertyDescriptor(nonSimple(), "caller");
+
+assert.sameValue(ThrowTypeError, unmappedCalleeDesc.get, "callee.get");
+assert.sameValue(ThrowTypeError, unmappedCalleeDesc.set, "callee.set");
+assert.sameValue(ThrowTypeError, unmappedCallerDesc.get, "caller.get");
+assert.sameValue(ThrowTypeError, unmappedCallerDesc.set, "caller.set");
diff --git a/test/built-ins/ThrowTypeError/unique-per-realm-unmapped-args.js b/test/built-ins/ThrowTypeError/unique-per-realm-unmapped-args.js
new file mode 100755
index 0000000000000000000000000000000000000000..2640da55fda0248825ec4df304122bda4c352227
--- /dev/null
+++ b/test/built-ins/ThrowTypeError/unique-per-realm-unmapped-args.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-%throwtypeerror%
+description: >
+  %ThrowTypeError% is defined once for each realm.
+info: >
+  %ThrowTypeError% ( )
+
+  The %ThrowTypeError% intrinsic is an anonymous built-in function
+  object that is defined once for each realm.
+---*/
+
+var ThrowTypeError = Object.getOwnPropertyDescriptor(function(){ "use strict"; return arguments; }(), "callee").get;
+
+// Test with unmapped arguments object from strict-mode function.
+function strictFn() {
+  "use strict";
+  return arguments;
+}
+var unmappedCalleeDesc = Object.getOwnPropertyDescriptor(strictFn(), "callee");
+var unmappedCallerDesc = Object.getOwnPropertyDescriptor(strictFn(), "caller");
+
+assert.sameValue(ThrowTypeError, unmappedCalleeDesc.get, "callee.get");
+assert.sameValue(ThrowTypeError, unmappedCalleeDesc.set, "callee.set");
+assert.sameValue(ThrowTypeError, unmappedCallerDesc.get, "caller.get");
+assert.sameValue(ThrowTypeError, unmappedCallerDesc.set, "caller.set");
diff --git a/test/language/statements/class/subclass/default-constructor-spread-override.js b/test/language/statements/class/subclass/default-constructor-spread-override.js
new file mode 100755
index 0000000000000000000000000000000000000000..f8388169166101be435a6260a285a732a0cea520
--- /dev/null
+++ b/test/language/statements/class/subclass/default-constructor-spread-override.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2016 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-runtime-semantics-classdefinitionevaluation
+description: >
+  Default class constructor uses standard iterator spread semantics.
+info: >
+  14.5.14 Runtime Semantics: ClassDefinitionEvaluation
+    ...
+    10. If constructor is empty, then
+      a. If ClassHeritageopt is present, then
+          i Let constructor be the result of parsing the source text
+              constructor(...args){ super(...args); }
+            using the syntactic grammar with the goal symbol MethodDefinition.
+    ...
+
+  14.1.19 Runtime Semantics: IteratorBindingInitialization
+    `FunctionRestParameter : BindingRestElement`
+    ...
+    9. Let result be the result of performing IteratorBindingInitialization for BindingRestElement using iteratorRecord and environment as the arguments.
+    ...
+
+  13.3.3.6 Runtime Semantics: IteratorBindingInitialization
+    `BindingRestElement : ...BindingIdentifier`
+    ...
+    2. Let A be ArrayCreate(0).
+    ...
+
+  12.3.6.1 Runtime Semantics: ArgumentListEvaluation
+    `ArgumentList : ArgumentList , ...AssignmentExpression`
+    ...
+    3. Let iterator be ? GetIterator(? GetValue(spreadRef)).
+    ...
+features: [Symbol.iterator]
+---*/
+
+var arrayIterator = Array.prototype[Symbol.iterator];
+
+// Redefine Array iterator to change the result of spreading `args` in `super(...args)`.
+Array.prototype[Symbol.iterator] = function() {
+  return arrayIterator.call(["spread-value"]);
+};
+
+var receivedValue;
+
+class Base {
+  constructor(value) {
+    receivedValue = value;
+  }
+}
+
+class Derived extends Base {}
+
+new Derived();
+
+assert.sameValue(receivedValue, "spread-value");