From 7f6e6d137d189a27408195a04f9c88eb226f998d Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Sat, 28 May 2016 15:44:54 -0400
Subject: [PATCH] [generation] Parse and render new error format

Extend the test generation tool to emit the recently-modified format of
the "negative" meta-data. Update the effected test case files
accordingly.
---
 src/dflt-params/duplicates.case                     |  4 +++-
 src/dflt-params/rest.case                           |  4 +++-
 .../array-elem-init-simple-strict.case              |  4 +++-
 .../array-elem-init-yield-ident-invalid.case        |  4 +++-
 .../array-elem-nested-array-invalid.case            |  4 +++-
 ...array-elem-nested-array-yield-ident-invalid.case |  4 +++-
 .../array-elem-nested-obj-invalid.case              |  4 +++-
 .../array-elem-nested-obj-yield-ident-invalid.case  |  4 +++-
 .../array-elem-target-simple-strict.case            |  4 +++-
 .../array-elem-target-yield-invalid.case            |  4 +++-
 src/dstr-assignment/array-rest-before-element.case  |  4 +++-
 src/dstr-assignment/array-rest-before-elision.case  |  4 +++-
 src/dstr-assignment/array-rest-before-rest.case     |  4 +++-
 src/dstr-assignment/array-rest-elision-invalid.case |  4 +++-
 src/dstr-assignment/array-rest-init.case            |  4 +++-
 .../array-rest-nested-array-invalid.case            |  4 +++-
 ...array-rest-nested-array-yield-ident-invalid.case |  4 +++-
 .../array-rest-nested-obj-invalid.case              |  4 +++-
 .../array-rest-nested-obj-yield-ident-invalid.case  |  4 +++-
 .../array-rest-yield-ident-invalid.case             |  4 +++-
 .../obj-id-identifier-yield-expr.case               |  4 +++-
 .../obj-id-identifier-yield-ident-invalid.case      |  4 +++-
 src/dstr-assignment/obj-id-init-simple-strict.case  |  4 +++-
 .../obj-id-init-yield-ident-invalid.case            |  4 +++-
 src/dstr-assignment/obj-id-simple-strict.case       |  4 +++-
 .../obj-prop-elem-init-yield-ident-invalid.case     |  4 +++-
 .../obj-prop-elem-target-yield-ident-invalid.case   |  4 +++-
 .../obj-prop-nested-array-invalid.case              |  4 +++-
 .../obj-prop-nested-array-yield-ident-invalid.case  |  4 +++-
 .../obj-prop-nested-obj-invalid.case                |  4 +++-
 .../obj-prop-nested-obj-yield-ident-invalid.case    |  4 +++-
 src/dstr-binding/ary-ptrn-rest-init-ary.case        |  4 +++-
 src/dstr-binding/ary-ptrn-rest-init-id.case         |  4 +++-
 src/dstr-binding/ary-ptrn-rest-init-obj.case        |  4 +++-
 src/dstr-binding/ary-ptrn-rest-not-final-ary.case   |  4 +++-
 src/dstr-binding/ary-ptrn-rest-not-final-id.case    |  4 +++-
 src/dstr-binding/ary-ptrn-rest-not-final-obj.case   |  4 +++-
 tools/generation/lib/template.py                    |  5 ++++-
 .../test/expected/negative/negative-negative.js     | 13 +++++++++++++
 tools/generation/test/fixtures/negative.case        | 10 ++++++++++
 .../test/fixtures/negative/negative.template        |  7 +++++++
 tools/generation/test/run.py                        |  5 +++++
 42 files changed, 150 insertions(+), 38 deletions(-)
 create mode 100644 tools/generation/test/expected/negative/negative-negative.js
 create mode 100644 tools/generation/test/fixtures/negative.case
 create mode 100644 tools/generation/test/fixtures/negative/negative.template

diff --git a/src/dflt-params/duplicates.case b/src/dflt-params/duplicates.case
index e2a6e424d0..90ae8bfb75 100644
--- a/src/dflt-params/duplicates.case
+++ b/src/dflt-params/duplicates.case
@@ -5,7 +5,9 @@ desc: >
   It is a Syntax Error if BoundNames of FormalParameters contains any duplicate
   elements.
 template: syntax
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: |
   14.1.2 Static Semantics: Early Errors
 
diff --git a/src/dflt-params/rest.case b/src/dflt-params/rest.case
index e8b7f03e35..cee08eaf12 100644
--- a/src/dflt-params/rest.case
+++ b/src/dflt-params/rest.case
@@ -20,7 +20,9 @@ info: |
 
     ...BindingIdentifier[?Yield]
     ...BindingPattern[?Yield]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- params
diff --git a/src/dstr-assignment/array-elem-init-simple-strict.case b/src/dstr-assignment/array-elem-init-simple-strict.case
index 7158a328b8..3db58d5504 100644
--- a/src/dstr-assignment/array-elem-init-simple-strict.case
+++ b/src/dstr-assignment/array-elem-init-simple-strict.case
@@ -10,7 +10,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.1
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-init-yield-ident-invalid.case b/src/dstr-assignment/array-elem-init-yield-ident-invalid.case
index c67ee2c344..a92e5fc498 100644
--- a/src/dstr-assignment/array-elem-init-yield-ident-invalid.case
+++ b/src/dstr-assignment/array-elem-init-yield-ident-invalid.case
@@ -8,7 +8,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.4
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-nested-array-invalid.case b/src/dstr-assignment/array-elem-nested-array-invalid.case
index 9cceb9f06f..c3d212df05 100644
--- a/src/dstr-assignment/array-elem-nested-array-invalid.case
+++ b/src/dstr-assignment/array-elem-nested-array-invalid.case
@@ -9,7 +9,9 @@ desc: >
     AssignmentPattern as the goal symbol.
 template: syntax
 es6id: 12.14.5.1
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case b/src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case
index 006428417b..67bfe43404 100644
--- a/src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case
+++ b/src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.3
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-nested-obj-invalid.case b/src/dstr-assignment/array-elem-nested-obj-invalid.case
index 3bf2ec0f31..5b486bc48e 100644
--- a/src/dstr-assignment/array-elem-nested-obj-invalid.case
+++ b/src/dstr-assignment/array-elem-nested-obj-invalid.case
@@ -9,7 +9,9 @@ desc: >
     AssignmentPattern as the goal symbol.
 template: syntax
 es6id: 12.14.5.1
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case b/src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case
index ce9db76419..d6a792c8bf 100644
--- a/src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case
+++ b/src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.3
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-target-simple-strict.case b/src/dstr-assignment/array-elem-target-simple-strict.case
index b9a8adf770..a06ccd75d0 100644
--- a/src/dstr-assignment/array-elem-target-simple-strict.case
+++ b/src/dstr-assignment/array-elem-target-simple-strict.case
@@ -10,7 +10,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.1
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-elem-target-yield-invalid.case b/src/dstr-assignment/array-elem-target-yield-invalid.case
index 0ff8247068..71270d5f45 100644
--- a/src/dstr-assignment/array-elem-target-yield-invalid.case
+++ b/src/dstr-assignment/array-elem-target-yield-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.4
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-before-element.case b/src/dstr-assignment/array-rest-before-element.case
index fda8d7721f..cbf87ec138 100644
--- a/src/dstr-assignment/array-rest-before-element.case
+++ b/src/dstr-assignment/array-rest-before-element.case
@@ -7,7 +7,9 @@ desc: >
     AssignmentElementList.
 template: syntax
 es6id: 12.14.5
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-before-elision.case b/src/dstr-assignment/array-rest-before-elision.case
index 501f9ac1e6..d97663df9f 100644
--- a/src/dstr-assignment/array-rest-before-elision.case
+++ b/src/dstr-assignment/array-rest-before-elision.case
@@ -7,7 +7,9 @@ desc: >
     AssignmentElementList.
 template: syntax
 es6id: 12.14.5
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-before-rest.case b/src/dstr-assignment/array-rest-before-rest.case
index a86de5f458..304e0ab487 100644
--- a/src/dstr-assignment/array-rest-before-rest.case
+++ b/src/dstr-assignment/array-rest-before-rest.case
@@ -7,7 +7,9 @@ desc: >
     AssignmentElementList.
 template: syntax
 es6id: 12.14.5
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-elision-invalid.case b/src/dstr-assignment/array-rest-elision-invalid.case
index f002f7169a..019fa58dd5 100644
--- a/src/dstr-assignment/array-rest-elision-invalid.case
+++ b/src/dstr-assignment/array-rest-elision-invalid.case
@@ -7,7 +7,9 @@ desc: >
     AssignmentRestElement in a AssignmentElementList.
 template: syntax
 es6id: 12.14.5
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-init.case b/src/dstr-assignment/array-rest-init.case
index 02c329e209..aaf654fa47 100644
--- a/src/dstr-assignment/array-rest-init.case
+++ b/src/dstr-assignment/array-rest-init.case
@@ -6,7 +6,9 @@ desc: >
     The AssignmentRestElement does not support an initializer.
 template: syntax
 es6id: 12.14.5
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- setup
diff --git a/src/dstr-assignment/array-rest-nested-array-invalid.case b/src/dstr-assignment/array-rest-nested-array-invalid.case
index 08eff54e22..0163c4e004 100644
--- a/src/dstr-assignment/array-rest-nested-array-invalid.case
+++ b/src/dstr-assignment/array-rest-nested-array-invalid.case
@@ -9,7 +9,9 @@ desc: >
     AssignmentPattern as the goal symbol.
 template: syntax
 es6id: 12.14.5.1
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case b/src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case
index 995a7f9ff3..42c334b406 100644
--- a/src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case
+++ b/src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.3
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-nested-obj-invalid.case b/src/dstr-assignment/array-rest-nested-obj-invalid.case
index ee38be20ea..b393f1677d 100644
--- a/src/dstr-assignment/array-rest-nested-obj-invalid.case
+++ b/src/dstr-assignment/array-rest-nested-obj-invalid.case
@@ -9,7 +9,9 @@ desc: >
     AssignmentPattern as the goal symbol.
 template: syntax
 es6id: 12.14.5.1
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case b/src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case
index 9759c626ca..7b88162a66 100644
--- a/src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case
+++ b/src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.3
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/array-rest-yield-ident-invalid.case b/src/dstr-assignment/array-rest-yield-ident-invalid.case
index d635a7c5a6..3dec86f328 100644
--- a/src/dstr-assignment/array-rest-yield-ident-invalid.case
+++ b/src/dstr-assignment/array-rest-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- setup
diff --git a/src/dstr-assignment/obj-id-identifier-yield-expr.case b/src/dstr-assignment/obj-id-identifier-yield-expr.case
index 8dc18230f5..d188630eed 100644
--- a/src/dstr-assignment/obj-id-identifier-yield-expr.case
+++ b/src/dstr-assignment/obj-id-identifier-yield-expr.case
@@ -9,7 +9,9 @@ template: syntax
 es6id: 12.14.5
 flags: [noStrict]
 features: [generators]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- setup
diff --git a/src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case b/src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case
index 83c135da48..e668456de7 100644
--- a/src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case
+++ b/src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case
@@ -8,7 +8,9 @@ desc: >
 template: syntax
 es6id: 12.14.5
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-id-init-simple-strict.case b/src/dstr-assignment/obj-id-init-simple-strict.case
index b2faabe699..c2eebf5204 100644
--- a/src/dstr-assignment/obj-id-init-simple-strict.case
+++ b/src/dstr-assignment/obj-id-init-simple-strict.case
@@ -8,7 +8,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.1
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-id-init-yield-ident-invalid.case b/src/dstr-assignment/obj-id-init-yield-ident-invalid.case
index 3d8d12f933..31ed69b955 100644
--- a/src/dstr-assignment/obj-id-init-yield-ident-invalid.case
+++ b/src/dstr-assignment/obj-id-init-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-id-simple-strict.case b/src/dstr-assignment/obj-id-simple-strict.case
index 19e92bb621..07ee74ad97 100644
--- a/src/dstr-assignment/obj-id-simple-strict.case
+++ b/src/dstr-assignment/obj-id-simple-strict.case
@@ -8,7 +8,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.1
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case b/src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case
index 9c127af0ee..3209b2ae68 100644
--- a/src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case
+++ b/src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.4
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case b/src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case
index 75503db0e8..5499eff41c 100644
--- a/src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case
+++ b/src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.4
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-prop-nested-array-invalid.case b/src/dstr-assignment/obj-prop-nested-array-invalid.case
index b4321822d3..e211a97156 100644
--- a/src/dstr-assignment/obj-prop-nested-array-invalid.case
+++ b/src/dstr-assignment/obj-prop-nested-array-invalid.case
@@ -9,7 +9,9 @@ desc: >
     AssignmentPattern as the goal symbol.
 template: syntax
 es6id: 12.14.5.1
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case b/src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case
index addafc3b40..da89304718 100644
--- a/src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case
+++ b/src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.4
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-prop-nested-obj-invalid.case b/src/dstr-assignment/obj-prop-nested-obj-invalid.case
index 9bf46e92cd..b207859342 100644
--- a/src/dstr-assignment/obj-prop-nested-obj-invalid.case
+++ b/src/dstr-assignment/obj-prop-nested-obj-invalid.case
@@ -10,7 +10,9 @@ desc: >
     the goal symbol.
 template: syntax
 es6id: 12.14.5.1
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case b/src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case
index c37458e46d..a6a02878eb 100644
--- a/src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case
+++ b/src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case
@@ -9,7 +9,9 @@ desc: >
 template: syntax
 es6id: 12.14.5.4
 flags: [onlyStrict]
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 ---*/
 
 //- elems
diff --git a/src/dstr-binding/ary-ptrn-rest-init-ary.case b/src/dstr-binding/ary-ptrn-rest-init-ary.case
index dd8cba348b..ab359ad3f3 100644
--- a/src/dstr-binding/ary-ptrn-rest-init-ary.case
+++ b/src/dstr-binding/ary-ptrn-rest-init-ary.case
@@ -3,7 +3,9 @@
 /*---
 template: default
 desc: Reset element (nested array pattern) does not support initializer
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: >
     13.3.3 Destructuring Binding Patterns
 
diff --git a/src/dstr-binding/ary-ptrn-rest-init-id.case b/src/dstr-binding/ary-ptrn-rest-init-id.case
index 91dd9d4329..e5ab514c08 100644
--- a/src/dstr-binding/ary-ptrn-rest-init-id.case
+++ b/src/dstr-binding/ary-ptrn-rest-init-id.case
@@ -3,7 +3,9 @@
 /*---
 template: default
 desc: Reset element (identifier) does not support initializer
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: >
     13.3.3 Destructuring Binding Patterns
 
diff --git a/src/dstr-binding/ary-ptrn-rest-init-obj.case b/src/dstr-binding/ary-ptrn-rest-init-obj.case
index cfcee7403f..dc3cf7437a 100644
--- a/src/dstr-binding/ary-ptrn-rest-init-obj.case
+++ b/src/dstr-binding/ary-ptrn-rest-init-obj.case
@@ -3,7 +3,9 @@
 /*---
 template: default
 desc: Reset element (nested object pattern) does not support initializer
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: >
     13.3.3 Destructuring Binding Patterns
 
diff --git a/src/dstr-binding/ary-ptrn-rest-not-final-ary.case b/src/dstr-binding/ary-ptrn-rest-not-final-ary.case
index 416826354e..c76c83d0a4 100644
--- a/src/dstr-binding/ary-ptrn-rest-not-final-ary.case
+++ b/src/dstr-binding/ary-ptrn-rest-not-final-ary.case
@@ -3,7 +3,9 @@
 /*---
 template: default
 desc: Rest element (array binding pattern) may not be followed by any element
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: >
     13.3.3 Destructuring Binding Patterns
 
diff --git a/src/dstr-binding/ary-ptrn-rest-not-final-id.case b/src/dstr-binding/ary-ptrn-rest-not-final-id.case
index 9594641608..962733013a 100644
--- a/src/dstr-binding/ary-ptrn-rest-not-final-id.case
+++ b/src/dstr-binding/ary-ptrn-rest-not-final-id.case
@@ -3,7 +3,9 @@
 /*---
 template: default
 desc: Rest element (identifier) may not be followed by any element
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: >
     13.3.3 Destructuring Binding Patterns
 
diff --git a/src/dstr-binding/ary-ptrn-rest-not-final-obj.case b/src/dstr-binding/ary-ptrn-rest-not-final-obj.case
index f5ab82db4b..00c70507ea 100644
--- a/src/dstr-binding/ary-ptrn-rest-not-final-obj.case
+++ b/src/dstr-binding/ary-ptrn-rest-not-final-obj.case
@@ -3,7 +3,9 @@
 /*---
 template: default
 desc: Rest element (object binding pattern) may not be followed by any element
-negative: SyntaxError
+negative:
+  phase: early
+  type: SyntaxError
 info: >
     13.3.3 Destructuring Binding Patterns
 
diff --git a/tools/generation/lib/template.py b/tools/generation/lib/template.py
index 769ec4fb9e..609724b6f3 100644
--- a/tools/generation/lib/template.py
+++ b/tools/generation/lib/template.py
@@ -144,7 +144,10 @@ class Template:
             lines += ['includes: ' + yaml.dump(includes).strip()]
 
         if case_values['meta'].get('negative'):
-            lines += ['negative: ' + case_values['meta'].get('negative')]
+            lines += ['negative:']
+            as_yaml = yaml.dump(case_values['meta'].get('negative'),
+                                default_flow_style=False)
+            lines += indent(as_yaml.strip(), '  ').split('\n')
 
         info = []
 
diff --git a/tools/generation/test/expected/negative/negative-negative.js b/tools/generation/test/expected/negative/negative-negative.js
new file mode 100644
index 0000000000..539d748034
--- /dev/null
+++ b/tools/generation/test/expected/negative/negative-negative.js
@@ -0,0 +1,13 @@
+// This file was procedurally generated from the following sources:
+// - tools/generation/test/fixtures/negative.case
+// - tools/generation/test/fixtures/negative/negative.template
+/*---
+description: foobar (The "negative" field should be emitted in the output files)
+es6id: 1.2.3
+flags: [generated]
+negative:
+  phase: early
+  type: ReferenceError
+info: |
+    case info
+---*/
diff --git a/tools/generation/test/fixtures/negative.case b/tools/generation/test/fixtures/negative.case
new file mode 100644
index 0000000000..9a56ecb4c6
--- /dev/null
+++ b/tools/generation/test/fixtures/negative.case
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+template: negative
+desc: foobar
+info: case info
+negative:
+  phase: early
+  type: ReferenceError
+---*/
diff --git a/tools/generation/test/fixtures/negative/negative.template b/tools/generation/test/fixtures/negative/negative.template
new file mode 100644
index 0000000000..e0ffe20197
--- /dev/null
+++ b/tools/generation/test/fixtures/negative/negative.template
@@ -0,0 +1,7 @@
+// Copyright (C) 2016 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+name: The "negative" field should be emitted in the output files
+path: negative/negative-
+es6id: 1.2.3
+---*/
diff --git a/tools/generation/test/run.py b/tools/generation/test/run.py
index 297815d679..9fc9ee3a1b 100755
--- a/tools/generation/test/run.py
+++ b/tools/generation/test/run.py
@@ -54,5 +54,10 @@ class TestGeneration(unittest.TestCase):
         self.assertEqual(result['returncode'], 0)
         self.compareTrees('normal')
 
+    def test_negative(self):
+        result = self.fixture('negative.case')
+        self.assertEqual(result['returncode'], 0)
+        self.compareTrees('negative')
+
 if __name__ == '__main__':
     unittest.main()
-- 
GitLab