Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object.html

Issue 2832923003: v8binding: Don't allow author script to define indexed accessor prop. (Closed)
Patch Set: Added the test expectation. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object-expected.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <title>Legacy platform objects</title>
4 <link rel="help" href="https://heycam.github.io/webidl/#es-legacy-platform-objec ts">
5 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
7 <script>
8 function assert_prop_desc_equals(object, property_key, expected) {
9 let actual = Object.getOwnPropertyDescriptor(object, property_key);
10 if (expected === undefined) {
11 assert_equals(
12 actual, undefined,
13 "(assert_prop_desc_equals: no property descriptor expected)");
14 return;
15 }
16 for (p in actual) {
17 assert_true(
18 expected.hasOwnProperty(p),
19 "(assert_prop_desc_equals: property '" + p + "' is not expected)");
20 assert_equals(
21 actual[p], expected[p],
22 "(assert_prop_desc_equals: property '" + p + "')");
23 }
24 for (p in expected) {
25 assert_true(
26 actual.hasOwnProperty(p),
27 "(assert_prop_desc_equals: expected property '" + p + "' missing)");
28 }
29 }
30
31 // https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty
32 // 3.9.3. [[DefineOwnProperty]]
33
34 test(function() {
35 let span = document.createElement("span");
36 span.className = "foo";
37 // DOMTokenList supports an indexed property getter but not a setter.
38 let domTokenList = span.classList;
39 // Confirm the test settings.
40 assert_equals(domTokenList.length, 1);
41 assert_prop_desc_equals(domTokenList, "0",
42 {value: "foo", writable: false, enumerable: true,
43 configurable: true});
44 assert_prop_desc_equals(domTokenList, "1", undefined);
45 // Actual test
46 assert_throws(new TypeError(), () =>
47 Object.defineProperty(domTokenList, "0", {value: true, writable: true}));
48 assert_throws(new TypeError(), () =>
49 Object.defineProperty(domTokenList, "1", {value: true, writable: true}));
50 assert_throws(new TypeError(), () =>
51 Object.defineProperty(domTokenList, "0", {get: () => {}}));
52 assert_throws(new TypeError(), () =>
53 Object.defineProperty(domTokenList, "0", {set: () => {}}));
54 assert_throws(new TypeError(), () =>
55 Object.defineProperty(domTokenList, "1", {get: () => {}}));
56 assert_throws(new TypeError(), () =>
57 Object.defineProperty(domTokenList, "1", {set: () => {}}));
58 assert_equals(domTokenList[0], "foo");
59 assert_equals(domTokenList[1], undefined);
60 domTokenList[0] = "bar";
61 domTokenList[1] = "bar";
62 assert_equals(domTokenList[0], "foo");
63 assert_equals(domTokenList[1], undefined);
64 assert_throws(new TypeError(), () => {
65 "use strict";
66 domTokenList[0] = "bar";
67 });
68 assert_throws(new TypeError(), () => {
69 "use strict";
70 domTokenList[1] = "bar";
71 });
72 // Nothing must change after all.
73 assert_equals(domTokenList.length, 1);
74 assert_prop_desc_equals(domTokenList, "0",
75 {value: "foo", writable: false, enumerable: true,
76 configurable: true});
77 assert_prop_desc_equals(domTokenList, "1", undefined);
78 }, "Test [[DefineOwnProperty]] with no indexed property setter support.");
79
80 test(function() {
81 // HTMLSelectElement supports an indexed property setter.
82 let select = document.createElement("select");
83 let option0 = document.createElement("option");
84 let option1 = document.createElement("option");
85 // Confirm the test settings.
86 assert_equals(select.length, 0);
87 assert_prop_desc_equals(select, "0", undefined);
88 // Try to define an accessor property with non supported property index.
89 assert_throws(new TypeError(), () =>
90 Object.defineProperty(select, "0", {get: () => {}}));
91 assert_throws(new TypeError(), () =>
92 Object.defineProperty(select, "0", {set: () => {}}));
93 assert_prop_desc_equals(select, "0", undefined);
94 // writable, enumerable, configurable will be ignored.
95 Object.defineProperty(select, "0", {value: option0, writable: false,
96 enumerable: false, configurable: false});
97 assert_prop_desc_equals(select, "0",
98 {value: option0, writable: true, enumerable: true,
99 configurable: true});
100 select[1] = option1;
101 assert_prop_desc_equals(select, "1",
102 {value: option1, writable: true, enumerable: true,
103 configurable: true});
104 // Try to define an accessor property with a supported property index.
105 assert_throws(new TypeError(), () =>
106 Object.defineProperty(select, "0", {get: () => {}}));
107 assert_throws(new TypeError(), () =>
108 Object.defineProperty(select, "0", {set: () => {}}));
109 assert_prop_desc_equals(select, "0",
110 {value: option0, writable: true, enumerable: true,
111 configurable: true});
112 }, "Test [[DefineOwnProperty]] with indexed property setter support.");
113 </script>
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/external/wpt/WebIDL/ecmascript-binding/legacy-platform-object-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698