diff --git a/test/language/destructuring/binding/initialization-requires-object-coercible-null.js b/test/language/destructuring/binding/initialization-requires-object-coercible-null.js
new file mode 100644
index 0000000000000000000000000000000000000000..7397f490a263cfcd9a2b0b7b8b8ac5c0292cbfff
--- /dev/null
+++ b/test/language/destructuring/binding/initialization-requires-object-coercible-null.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3.5
+description: >
+  Cannot convert null argument value to object
+info: >
+  13.3.3.5 Runtime Semantics: BindingInitialization
+
+  BindingPattern : ObjectBindingPattern
+
+  1. Let valid be RequireObjectCoercible(value).
+  2. ReturnIfAbrupt(valid).
+---*/
+
+function fn({}) {}
+
+assert.throws(TypeError, function() {
+  fn(null);
+});
diff --git a/test/language/destructuring/binding/initialization-requires-object-coercible-undefined.js b/test/language/destructuring/binding/initialization-requires-object-coercible-undefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..58c6c58e4e7d411cd090b4179d17767f29574b2f
--- /dev/null
+++ b/test/language/destructuring/binding/initialization-requires-object-coercible-undefined.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3.5
+description: >
+  Cannot convert undefined argument value to object
+info: >
+  13.3.3.5 Runtime Semantics: BindingInitialization
+
+  BindingPattern : ObjectBindingPattern
+
+  1. Let valid be RequireObjectCoercible(value).
+  2. ReturnIfAbrupt(valid).
+---*/
+
+function fn({}) {}
+
+assert.throws(TypeError, function() {
+  fn();
+});
diff --git a/test/language/destructuring/binding/initialization-returns-normal-completion-for-empty-objects.js b/test/language/destructuring/binding/initialization-returns-normal-completion-for-empty-objects.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ac7fb1d7672f9f5284a79951c7c065cb0f8ab52
--- /dev/null
+++ b/test/language/destructuring/binding/initialization-returns-normal-completion-for-empty-objects.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3.5
+description: >
+  Normal completion when initializing an empty ObjectBindingPattern
+info: >
+  13.3.3.5 Runtime Semantics: BindingInitialization
+
+  BindingPattern : ObjectBindingPattern
+
+  ...
+  3. Return the result of performing BindingInitialization for
+  ObjectBindingPattern using value and environment as arguments.
+
+  ObjectBindingPattern : { }
+
+  1. Return NormalCompletion(empty).
+
+---*/
+
+function fn({}) { return true; }
+
+assert(fn(0));
+assert(fn(NaN));
+assert(fn(''));
+assert(fn(false));
+assert(fn({}));
+assert(fn([]));
diff --git a/test/language/destructuring/binding/syntax/array-elements-with-initializer.js b/test/language/destructuring/binding/syntax/array-elements-with-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..25f551f23cf22c9e8c89446236263f4762765b03
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/array-elements-with-initializer.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ArrayBindingPattern with an element list with initializers
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ArrayBindingPattern[Yield] :
+    [ Elisionopt BindingRestElement[?Yield]opt ]
+    [ BindingElementList[?Yield] ]
+    [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+
+  BindingElementList[Yield] :
+    BindingElisionElement[?Yield]
+    BindingElementList[?Yield] , BindingElisionElement[?Yield]
+
+  BindingElisionElement[Yield] :
+    Elisionopt BindingElement[?Yield]
+
+  BindingElement[Yield ] :
+    SingleNameBinding[?Yield]
+    BindingPattern[?Yield] Initializer[In, ?Yield]opt
+---*/
+
+function fn1([a, b = 42]) {}
+
+function fn2([a = 42, b,]) {}
+
+function fn3([a,, b = a, c = 42]) {}
diff --git a/test/language/destructuring/binding/syntax/array-elements-with-object-patterns.js b/test/language/destructuring/binding/syntax/array-elements-with-object-patterns.js
new file mode 100644
index 0000000000000000000000000000000000000000..8bf0df93ec409e793192333b64ca6d1c0c95196f
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/array-elements-with-object-patterns.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ArrayBindingPattern with Object patterns on the element list
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ArrayBindingPattern[Yield] :
+    [ Elisionopt BindingRestElement[?Yield]opt ]
+    [ BindingElementList[?Yield] ]
+    [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+
+  BindingElementList[Yield] :
+    BindingElisionElement[?Yield]
+    BindingElementList[?Yield] , BindingElisionElement[?Yield]
+
+  BindingElisionElement[Yield] :
+    Elisionopt BindingElement[?Yield]
+
+  BindingElement[Yield ] :
+    SingleNameBinding[?Yield]
+    BindingPattern[?Yield] Initializer[In, ?Yield]opt
+---*/
+
+function fn1([{}]) {}
+
+function fn2([{} = 42]) {}
+
+function fn3([a, {b: c}]) {}
+
+function fn4([a, {b: []}]) {}
diff --git a/test/language/destructuring/binding/syntax/array-elements-without-initializer.js b/test/language/destructuring/binding/syntax/array-elements-without-initializer.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e0c4cc2bd6e633dbadfb8159279af9f9fb353f3
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/array-elements-without-initializer.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ArrayBindingPattern with an element list without initializers
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ArrayBindingPattern[Yield] :
+    [ Elisionopt BindingRestElement[?Yield]opt ]
+    [ BindingElementList[?Yield] ]
+    [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+
+  BindingElementList[Yield] :
+    BindingElisionElement[?Yield]
+    BindingElementList[?Yield] , BindingElisionElement[?Yield]
+
+  BindingElisionElement[Yield] :
+    Elisionopt BindingElement[?Yield]
+
+  BindingElement[Yield ] :
+    SingleNameBinding[?Yield]
+    BindingPattern[?Yield] Initializer[In, ?Yield]opt
+---*/
+
+function fn1([a, b]) {}
+
+function fn2([a, b,]) {}
+
+function fn3([a,, b,]) {}
diff --git a/test/language/destructuring/binding/syntax/array-pattern-with-elisions.js b/test/language/destructuring/binding/syntax/array-pattern-with-elisions.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2f86f7d2ceff43884600edb613f6bd461f911ea
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/array-pattern-with-elisions.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ArrayBindingPattern with elisions only
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ArrayBindingPattern[Yield] :
+    [ Elisionopt BindingRestElement[?Yield]opt ]
+    [ BindingElementList[?Yield] ]
+    [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+
+function fn1([,]) {}
+function fn2([,,]) {}
diff --git a/test/language/destructuring/binding/syntax/array-pattern-with-no-elements.js b/test/language/destructuring/binding/syntax/array-pattern-with-no-elements.js
new file mode 100644
index 0000000000000000000000000000000000000000..32d5af920ab72985eb8558cae344f1c868b2de1f
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/array-pattern-with-no-elements.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ArrayBindingPattern with no elements
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ArrayBindingPattern[Yield] :
+    [ Elisionopt BindingRestElement[?Yield]opt ]
+    [ BindingElementList[?Yield] ]
+    [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+---*/
+
+function fn([]) {}
diff --git a/test/language/destructuring/binding/syntax/array-rest-elements.js b/test/language/destructuring/binding/syntax/array-rest-elements.js
new file mode 100644
index 0000000000000000000000000000000000000000..a40fac6dcc4db15e1e72a2438c84b96ea0842d32
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/array-rest-elements.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  Array Binding Pattern with Rest Element
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ArrayBindingPattern[Yield] :
+    [ Elisionopt BindingRestElement[?Yield]opt ]
+    [ BindingElementList[?Yield] ]
+    [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ]
+
+  BindingRestElement[Yield] :
+    ... BindingIdentifier[?Yield]
+---*/
+
+function fn1([...args]) {}
+
+function fn2([,,,,,,,...args]) {}
+
+function fn3([x, {y}, ...z]) {}
+
+function fn4([,x, {y}, , ...z]) {}
+
+function fn5({x: [...y]}) {}
diff --git a/test/language/destructuring/binding/syntax/object-pattern-with-no-property-list.js b/test/language/destructuring/binding/syntax/object-pattern-with-no-property-list.js
new file mode 100644
index 0000000000000000000000000000000000000000..5299f26cb6d69e6e1cb290d1fb4ca58a366b4ba8
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/object-pattern-with-no-property-list.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ObjectBindingPattern can be `{ }`
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ObjectBindingPattern[Yield] :
+    { }
+    { BindingPropertyList[?Yield] }
+    { BindingPropertyList[?Yield] , }
+
+---*/
+
+function fn({}) {}
diff --git a/test/language/destructuring/binding/syntax/property-list-bindings-elements.js b/test/language/destructuring/binding/syntax/property-list-bindings-elements.js
new file mode 100644
index 0000000000000000000000000000000000000000..87a21d1938962f790e6e26b81f6d625ce651fd8d
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/property-list-bindings-elements.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ObjectBindingPattern with binding elements
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ObjectBindingPattern[Yield] :
+    { }
+    { BindingPropertyList[?Yield] }
+    { BindingPropertyList[?Yield] , }
+
+  BindingPropertyList[Yield] :
+    BindingProperty[?Yield]
+    BindingPropertyList[?Yield] , BindingProperty[?Yield]
+
+  BindingProperty[Yield] :
+    SingleNameBinding[?Yield]
+    PropertyName[?Yield] : BindingElement[?Yield]
+
+  BindingElement[Yield ] :
+    SingleNameBinding[?Yield]
+    BindingPattern[?Yield] Initializer[In, ?Yield]opt
+
+  SingleNameBinding[Yield] :
+    BindingIdentifier[?Yield] Initializer[In, ?Yield]opt
+
+---*/
+
+// BindingElement w/ SingleNameBinding
+function fna({x: y}) {}
+
+// BindingElement w/ SingleNameBinding with initializer
+function fnb({x: y = 42}) {}
+
+// BindingElement w/ BindingPattern
+function fnc({x: {}}) {}
+function fnd({x: {y}}) {}
+
+// BindingElement w/ BindingPattern w/ initializer
+function fne({x: {} = 42}) {}
+function fnf({x: {y} = 42}) {}
diff --git a/test/language/destructuring/binding/syntax/property-list-followed-by-a-single-comma.js b/test/language/destructuring/binding/syntax/property-list-followed-by-a-single-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5fa12ea697d0d18b03a359f3c3522ff88488cf4
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/property-list-followed-by-a-single-comma.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The Binding Property List followed by a single comma is a valid syntax
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ObjectBindingPattern[Yield] :
+    { }
+    { BindingPropertyList[?Yield] }
+    { BindingPropertyList[?Yield] , }
+
+---*/
+
+function fn1({x,}) {}
+
+function fn2({a: {p: q, }, }) {}
+
+function fn3({x,,}) {}
+
+function fn4({x,,,,,,,}) {}
diff --git a/test/language/destructuring/binding/syntax/property-list-single-name-bindings.js b/test/language/destructuring/binding/syntax/property-list-single-name-bindings.js
new file mode 100644
index 0000000000000000000000000000000000000000..69c745bb3d7014e0a5648962fa5caa1b50daa2ca
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/property-list-single-name-bindings.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ObjectBindingPattern with a simple property list and single name binding
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ObjectBindingPattern[Yield] :
+    { }
+    { BindingPropertyList[?Yield] }
+    { BindingPropertyList[?Yield] , }
+
+  BindingPropertyList[Yield] :
+    BindingProperty[?Yield]
+    BindingPropertyList[?Yield] , BindingProperty[?Yield]
+
+  BindingProperty[Yield] :
+    SingleNameBinding[?Yield]
+    PropertyName[?Yield] : BindingElement[?Yield]
+
+  SingleNameBinding[Yield] :
+    BindingIdentifier[?Yield] Initializer[In, ?Yield]opt
+
+---*/
+
+function fna({x}) {}
+function fnb({x, y}) {}
+function fnc({x = 42}) {}
+function fnd({x, y = 42}) {}
\ No newline at end of file
diff --git a/test/language/destructuring/binding/syntax/property-list-with-property-list.js b/test/language/destructuring/binding/syntax/property-list-with-property-list.js
new file mode 100644
index 0000000000000000000000000000000000000000..d421e12c07c47055192146c936a01f34109dd582
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/property-list-with-property-list.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  The ObjectBindingPattern with deep binding property lists
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  ObjectBindingPattern[Yield] :
+    { }
+    { BindingPropertyList[?Yield] }
+    { BindingPropertyList[?Yield] , }
+
+  BindingPropertyList[Yield] :
+    BindingProperty[?Yield]
+    BindingPropertyList[?Yield] , BindingProperty[?Yield]
+
+---*/
+
+function fn1({a: {p: q}, b: {r}, c: {s = 0}, d: {}}) {}
+
+function fn2(x, {a: r, b: s, c: t}, y) {}
+
+function fn3({x: {y: {z: {} = 42}}}) {}
diff --git a/test/language/destructuring/binding/syntax/recursive-array-and-object-patterns.js b/test/language/destructuring/binding/syntax/recursive-array-and-object-patterns.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c3289f609a0ddf7597df2693ff4afaaa928fe6f
--- /dev/null
+++ b/test/language/destructuring/binding/syntax/recursive-array-and-object-patterns.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 13.3.3
+description: >
+  Recursive array and object binding patterns
+info: >
+  Destructuring Binding Patterns - Syntax
+
+  BindingPattern[Yield] :
+    ObjectBindingPattern[?Yield]
+    ArrayBindingPattern[?Yield]
+---*/
+
+function fn1([{}]) {}
+
+function fn2([{a: [{}]}]) {}
+
+function fn3({a: [,,,] = 42}) {}
+
+function fn4([], [[]], [[[[[[[[[x]]]]]]]]]) {}
+
+function fn4([[x, y, ...z]]) {}