From 49039979c83ea6e458a8dd7eda75f69996f333a9 Mon Sep 17 00:00:00 2001
From: Kevin Gibbons <kevin@shapesecurity.com>
Date: Mon, 9 Apr 2018 12:02:22 -0700
Subject: [PATCH] Add test for double super for proposal-class-fields#92

---
 .../class/fields-run-once-on-double-super.js  | 41 +++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 test/language/expressions/class/fields-run-once-on-double-super.js

diff --git a/test/language/expressions/class/fields-run-once-on-double-super.js b/test/language/expressions/class/fields-run-once-on-double-super.js
new file mode 100644
index 0000000000..e01de58ca8
--- /dev/null
+++ b/test/language/expressions/class/fields-run-once-on-double-super.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-super-keyword-runtime-semantics-evaluation
+description: >
+    when calling `super()` for a second time in a derived class, the super constructor is run twice but the field initializers are only run once
+info: |
+    [...]
+    6. Let result be ? Construct(func, argList, newTarget).
+    [...]
+    10. Perform ? thisER.BindThisValue(result).
+    11. Perform ? InitializeInstanceFields(result, F).
+    [...]
+features: [class-fields-public]
+---*/
+
+
+var baseCtorCalled = 0;
+var fieldInitCalled = 0;
+class Base {
+  constructor() {
+    ++baseCtorCalled;
+  }
+}
+
+var C = class extends Base {
+  field = ++fieldInitCalled;
+  constructor() {
+    assert.sameValue(baseCtorCalled, 0);
+    assert.sameValue(fieldInitCalled, 0);
+    super();
+    assert.sameValue(baseCtorCalled, 1);
+    assert.sameValue(fieldInitCalled, 1);
+    assert.throws(ReferenceError, () => super());
+  }
+};
+
+new C();
+
+assert.sameValue(baseCtorCalled, 2);
+assert.sameValue(fieldInitCalled, 1);
-- 
GitLab