DOMException should be constructible
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / WebIDL / ecmascript-binding / es-exceptions / DOMException-constructor.html
1 <!doctype html>
2 <meta charset=utf-8>
3 <title>DOMException constructor</title>
4 <link rel=help href="https://heycam.github.io/webidl/#es-DOMException-constructor-object">
5 <link rel=help href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-error.prototype.message">
6 <link rel=help href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-error.prototype.name">
7 <script src="/resources/testharness.js"></script>
8 <script src="/resources/testharnessreport.js"></script>
9 <div id="log"></div>
10 <script>
11 test(function() {
12   var ex = new DOMException();
13   assert_equals(ex.name, "Error",
14                 "Not passing a name should end up with 'Error' as the name");
15   assert_equals(ex.message, "",
16                 "Not passing a message should end up with empty string as the message");
17 }, 'new DOMException()');
18
19 test(function() {
20   var ex = new DOMException();
21   assert_false(ex.hasOwnProperty("name"),
22                "The name property should be inherited");
23   assert_false(ex.hasOwnProperty("message"),
24                "The message property should be inherited");
25 }, 'new DOMException(): own-ness');
26
27 test(function() {
28   var ex = new DOMException(null);
29   assert_equals(ex.name, "Error",
30                 "Not passing a name should end up with 'Error' as the name");
31   assert_equals(ex.message, "null",
32                 "Passing null as message should end up with stringified 'null' as the message");
33 }, 'new DOMException(null)');
34
35 test(function() {
36   var ex = new DOMException(undefined);
37   assert_equals(ex.name, "Error",
38                 "Not passing a name should end up with 'Error' as the name");
39   assert_equals(ex.message, "",
40                 "Not passing a message should end up with empty string as the message");
41 }, 'new DOMException(undefined)');
42
43 test(function() {
44   var ex = new DOMException(undefined);
45   assert_false(ex.hasOwnProperty("name"),
46                "The name property should be inherited");
47   assert_false(ex.hasOwnProperty("message"),
48                "The message property should be inherited");
49 }, 'new DOMException(undefined): own-ness');
50
51 test(function() {
52   var ex = new DOMException("foo");
53   assert_equals(ex.name, "Error",
54                 "Not passing a name should still end up with 'Error' as the name");
55   assert_equals(ex.message, "foo", "Should be using passed-in message");
56 }, 'new DOMException("foo")');
57
58 test(function() {
59   var ex = new DOMException("foo");
60   assert_false(ex.hasOwnProperty("name"),
61                "The name property should be inherited");
62   assert_true(ex.hasOwnProperty("message"),
63               "The message property should be own");
64 }, 'new DOMException("foo"): own-ness');
65
66 test(function() {
67   var ex = new DOMException("bar", undefined);
68   assert_equals(ex.name, "Error",
69                 "Passing undefined for name should end up with 'Error' as the name");
70   assert_equals(ex.message, "bar", "Should still be using passed-in message");
71 }, 'new DOMException("bar", undefined)');
72
73 test(function() {
74   var ex = new DOMException("bar", "NotSupportedError");
75   assert_equals(ex.name, "NotSupportedError", "Should be using the passed-in name");
76   assert_equals(ex.message, "bar", "Should still be using passed-in message");
77   assert_equals(ex.code, DOMException.NOT_SUPPORTED_ERR,
78                 "Should have the right exception code");
79 }, 'new DOMException("bar", "NotSupportedError")');
80
81 test(function() {
82   var ex = new DOMException("bar", "NotSupportedError");
83   assert_true(ex.hasOwnProperty("name"),
84               "The name property should be own");
85   assert_true(ex.hasOwnProperty("message"),
86               "The message property should be own");
87 }, 'new DOMException("bar", "NotSupportedError"): own-ness');
88
89 test(function() {
90   var ex = new DOMException("bar", "foo");
91   assert_equals(ex.name, "foo", "Should be using the passed-in name");
92   assert_equals(ex.message, "bar", "Should still be using passed-in message");
93   assert_equals(ex.code, 0,
94                 "Should have 0 for code for a name not in the exception names table");
95 }, 'new DOMException("bar", "foo")');
96
97 [
98   {name: "IndexSizeError", code: 1},
99   {name: "HierarchyRequestError", code: 3},
100   {name: "WrongDocumentError", code: 4},
101   {name: "InvalidCharacterError", code: 5},
102   {name: "NoModificationAllowedError", code: 7},
103   {name: "NotFoundError", code: 8},
104   {name: "NotSupportedError", code: 9},
105   {name: "InUseAttributeError", code: 10},
106   {name: "InvalidStateError", code: 11},
107   {name: "SyntaxError", code: 12},
108   {name: "InvalidModificationError", code: 13},
109   {name: "NamespaceError", code: 14},
110   {name: "InvalidAccessError", code: 15},
111   {name: "SecurityError", code: 18},
112   {name: "NetworkError", code: 19},
113   {name: "AbortError", code: 20},
114   {name: "URLMismatchError", code: 21},
115   {name: "QuotaExceededError", code: 22},
116   {name: "TimeoutError", code: 23},
117   {name: "InvalidNodeTypeError", code: 24},
118   {name: "DataCloneError", code: 25}
119 ].forEach(function(test_case) {
120   test(function() {
121     var ex = new DOMException("msg", test_case.name);
122     assert_equals(ex.name, test_case.name,
123                   "Should be using the passed-in name");
124     assert_equals(ex.message, "msg",
125                   "Should be using the passed-in message");
126     assert_equals(ex.code, test_case.code,
127                   "Should have matching legacy code from error names table");
128   },'new DOMexception("msg", "' + test_case.name + '")');
129 });
130
131 test(function() {
132   var ex = new DOMException("bar", "UnknownError");
133   assert_equals(ex.name, "UnknownError", "Should be using the passed-in name");
134   assert_equals(ex.message, "bar", "Should still be using passed-in message");
135   assert_equals(ex.code, 0,
136                 "Should have 0 for code for a name in the exception names table with no legacy code");
137 }, 'new DOMException("bar", "UnknownError")');
138
139 </script>