Unreview, fix test to have a try-catch.
[WebKit-https.git] / JSTests / modules / namespace.js
1 import changeCappuccino, * as namespace from "./namespace/drink.js"
2 import { shouldBe, shouldThrow } from "./resources/assert.js";
3
4 shouldBe(typeof namespace, 'object');
5 shouldBe(typeof changeCappuccino, 'function');
6 shouldBe(namespace.Cocoa, 'Cocoa');
7 shouldBe(namespace.Cappuccino, 'Cappuccino');
8 shouldBe(namespace.Matcha, 'Matcha');
9 shouldBe(namespace.Mocha, 'Mocha');
10 shouldBe(namespace.default, changeCappuccino);
11
12 changeCappuccino('Cocoa');
13 shouldBe(namespace.Cocoa, 'Cocoa');
14 shouldBe(namespace.Cappuccino, 'Cocoa');
15 shouldBe(namespace.Matcha, 'Matcha');
16 shouldBe(namespace.Mocha, 'Mocha');
17 shouldBe(namespace.default, changeCappuccino);
18
19 shouldBe('Cocoa' in namespace, true);
20 shouldBe('Cappuccino' in namespace, true);
21 shouldBe('Matcha' in namespace, true);
22 shouldBe('Mocha' in namespace, true);
23 shouldBe('default' in namespace, true);
24 shouldBe(Symbol.iterator in namespace, false);
25 shouldBe('Tea' in namespace, false);
26
27 shouldBe(namespace.__proto__, undefined);
28 shouldBe(Reflect.isExtensible(namespace), false);
29
30 shouldBe(Reflect.set(namespace, 'Extended', 42), false);
31 shouldBe('Extended' in namespace, false);
32
33 shouldBe(Reflect.set(namespace, 42, 42), false);
34 shouldBe(42 in namespace, false);
35
36 shouldThrow(() => {
37     namespace.value = 20;
38 }, `TypeError: Attempted to assign to readonly property.`);
39
40 shouldThrow(() => {
41     namespace[20] = 20;
42 }, `TypeError: Attempted to assign to readonly property.`);
43
44 shouldThrow(() => {
45     namespace[Symbol.unscopables] = 20;
46 }, `TypeError: Attempted to assign to readonly property.`);
47
48 shouldThrow(() => {
49     Object.defineProperty(namespace, 'Cookie', {
50         value: 42
51     });
52 }, `TypeError: Attempting to define property on object that is not extensible.`);
53
54 shouldThrow(() => {
55     namespace.__proto__ = Object.prototype;
56 }, `TypeError: Attempted to assign to readonly property.`);
57
58 shouldBe(Reflect.setPrototypeOf(namespace, Object.prototype), false);
59 shouldBe(namespace.__proto__, undefined);
60 shouldBe(Reflect.getPrototypeOf(namespace), null);
61
62 // These names should be shown in the code point order.
63 shouldBe(JSON.stringify(Object.getOwnPropertyNames(namespace)), `["Cappuccino","Cocoa","Matcha","Mocha","default"]`);
64 shouldBe(Object.getOwnPropertySymbols(namespace).length, 1);
65 shouldBe(Object.getOwnPropertySymbols(namespace)[0], Symbol.toStringTag);
66
67 // The imported binding properties of the namespace object seen as writable, but, it does not mean that it is writable by users.
68 shouldBe(JSON.stringify(Reflect.getOwnPropertyDescriptor(namespace, "Cocoa")), `{"value":"Cocoa","writable":true,"enumerable":true,"configurable":false}`);
69 shouldBe(JSON.stringify(Reflect.getOwnPropertyDescriptor(namespace, "Matcha")), `{"value":"Matcha","writable":true,"enumerable":true,"configurable":false}`);
70 shouldBe(JSON.stringify(Reflect.getOwnPropertyDescriptor(namespace, "Mocha")), `{"value":"Mocha","writable":true,"enumerable":true,"configurable":false}`);
71 shouldThrow(() => {
72     // Throw an error even if the same value.
73     namespace.Cocoa = 'Cocoa';
74 }, `TypeError: Attempted to assign to readonly property.`);
75
76 shouldBe(JSON.stringify(Reflect.getOwnPropertyDescriptor(namespace, Symbol.toStringTag)), `{"value":"Module","writable":false,"enumerable":false,"configurable":false}`);
77 shouldThrow(() => {
78     namespace[Symbol.toStringTag] = 42;
79 }, `TypeError: Attempted to assign to readonly property.`);
80
81 shouldBe(Reflect.deleteProperty(namespace, Symbol.toStringTag), false);