From 390c7a7fdbd31e9571d061f5a5d6ebf4489969b3 Mon Sep 17 00:00:00 2001
From: Leonardo Balter <leonardo.balter@gmail.com>
Date: Thu, 7 Jan 2016 17:23:31 -0500
Subject: [PATCH] Add tests for Subclassing the built-in Error Object

---
 .../Error/message-property-assignment.js      | 36 +++++++++++++++++++
 .../subclassing/Error/regular-subclassing.js  | 22 ++++++++++++
 .../subclassing/Error/super-must-be-called.js | 23 ++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 test/language/subclassing/Error/message-property-assignment.js
 create mode 100644 test/language/subclassing/Error/regular-subclassing.js
 create mode 100644 test/language/subclassing/Error/super-must-be-called.js

diff --git a/test/language/subclassing/Error/message-property-assignment.js b/test/language/subclassing/Error/message-property-assignment.js
new file mode 100644
index 0000000000..6a4c00dc4b
--- /dev/null
+++ b/test/language/subclassing/Error/message-property-assignment.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.5.1.1
+description: >
+  A new instance has the message property if created with a parameter
+info: >
+  19.5.1.1 Error ( message )
+
+  ...
+  4. If message is not undefined, then
+    a. Let msg be ToString(message).
+    b. ReturnIfAbrupt(msg).
+    c. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
+    [[Enumerable]]: false, [[Configurable]]: true}.
+    d. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
+  ...
+includes: [propertyHelper.js]
+
+---*/
+
+class Err extends Error {}
+
+Err.prototype.message = 'custom-error';
+
+var err1 = new Err('foo 42');
+assert.sameValue(err1.message, 'foo 42');
+assert(err1.hasOwnProperty('message'));
+
+verifyWritable(err1, 'message');
+verifyNotEnumerable(err1, 'message');
+verifyConfigurable(err1, 'message');
+
+var err2 = new Err();
+assert.sameValue(err2.hasOwnProperty('message'), false);
+assert.sameValue(err2.message, 'custom-error');
diff --git a/test/language/subclassing/Error/regular-subclassing.js b/test/language/subclassing/Error/regular-subclassing.js
new file mode 100644
index 0000000000..2a073dc7e7
--- /dev/null
+++ b/test/language/subclassing/Error/regular-subclassing.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.5.1
+description: Subclassing the Error object
+info: >
+  19.5.1 The Error Constructor
+
+  ...
+  The Error constructor is designed to be subclassable. It may be used as the
+  alue of an extends clause of a class definition. Subclass constructors that
+  intend to inherit the specified Error behaviour must include a super call to
+  the Error constructor to create and initialize subclass instances with a
+  [[ErrorData]] internal slot.
+---*/
+
+class CustomError extends Error {}
+
+var err = new CustomError('foo 42');
+
+assert.sameValue(err.message, 'foo 42');
+assert.sameValue(err.name, 'Error');
diff --git a/test/language/subclassing/Error/super-must-be-called.js b/test/language/subclassing/Error/super-must-be-called.js
new file mode 100644
index 0000000000..2a83c18607
--- /dev/null
+++ b/test/language/subclassing/Error/super-must-be-called.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.5.1
+description: Super need to be called to initialize internals
+info: >
+  19.5.1 The Error Constructor
+
+  ...
+  The Error constructor is designed to be subclassable. It may be used as the
+  alue of an extends clause of a class definition. Subclass constructors that
+  intend to inherit the specified Error behaviour must include a super call to
+  the Error constructor to create and initialize subclass instances with a
+  [[ErrorData]] internal slot.
+---*/
+
+class CustomError extends Error {
+  constructor() {}
+}
+
+assert.throws(ReferenceError, function() {
+  new CustomError('foo');
+});
-- 
GitLab