@@ -3,27 +3,156 @@ const common = require('../common');
33const assert = require ( 'assert' ) ;
44const vm = require ( 'vm' ) ;
55
6+ const getSetSymbolReceivingFunction = Symbol ( 'sym-1' ) ;
7+ const getSetSymbolReceivingNumber = Symbol ( 'sym-2' ) ;
8+ const symbolReceivingNumber = Symbol ( 'sym-3' ) ;
9+ const unknownSymbolReceivingNumber = Symbol ( 'sym-4' ) ;
10+
611const window = createWindow ( ) ;
712
8- const descriptor =
9- Object . getOwnPropertyDescriptor ( window . globalProxy , 'onhashchange' ) ;
13+ const descriptor1 = Object . getOwnPropertyDescriptor (
14+ window . globalProxy ,
15+ 'getSetPropReceivingFunction'
16+ ) ;
17+ assert . strictEqual ( typeof descriptor1 . get , 'function' ) ;
18+ assert . strictEqual ( typeof descriptor1 . set , 'function' ) ;
19+ assert . strictEqual ( descriptor1 . configurable , true ) ;
20+
21+ const descriptor2 = Object . getOwnPropertyDescriptor (
22+ window . globalProxy ,
23+ 'getSetPropReceivingNumber'
24+ ) ;
25+ assert . strictEqual ( typeof descriptor2 . get , 'function' ) ;
26+ assert . strictEqual ( typeof descriptor2 . set , 'function' ) ;
27+ assert . strictEqual ( descriptor2 . configurable , true ) ;
28+
29+ const descriptor3 = Object . getOwnPropertyDescriptor (
30+ window . globalProxy ,
31+ 'propReceivingNumber'
32+ ) ;
33+ assert . strictEqual ( descriptor3 . value , 44 ) ;
34+
35+ const descriptor4 = Object . getOwnPropertyDescriptor (
36+ window . globalProxy ,
37+ 'unknownPropReceivingNumber'
38+ ) ;
39+ assert . strictEqual ( descriptor4 , undefined ) ;
40+
41+ const descriptor5 = Object . getOwnPropertyDescriptor (
42+ window . globalProxy ,
43+ getSetSymbolReceivingFunction
44+ ) ;
45+ assert . strictEqual ( typeof descriptor5 . get , 'function' ) ;
46+ assert . strictEqual ( typeof descriptor5 . set , 'function' ) ;
47+ assert . strictEqual ( descriptor5 . configurable , true ) ;
48+
49+ const descriptor6 = Object . getOwnPropertyDescriptor (
50+ window . globalProxy ,
51+ getSetSymbolReceivingNumber
52+ ) ;
53+ assert . strictEqual ( typeof descriptor6 . get , 'function' ) ;
54+ assert . strictEqual ( typeof descriptor6 . set , 'function' ) ;
55+ assert . strictEqual ( descriptor6 . configurable , true ) ;
56+
57+ const descriptor7 = Object . getOwnPropertyDescriptor (
58+ window . globalProxy ,
59+ symbolReceivingNumber
60+ ) ;
61+ assert . strictEqual ( descriptor7 . value , 48 ) ;
1062
11- assert . strictEqual ( typeof descriptor . get , 'function' ) ;
12- assert . strictEqual ( typeof descriptor . set , 'function' ) ;
13- assert . strictEqual ( descriptor . configurable , true ) ;
63+ const descriptor8 = Object . getOwnPropertyDescriptor (
64+ window . globalProxy ,
65+ unknownSymbolReceivingNumber
66+ ) ;
67+ assert . strictEqual ( descriptor8 , undefined ) ;
68+
69+ const descriptor9 = Object . getOwnPropertyDescriptor (
70+ window . globalProxy ,
71+ 'getSetPropThrowing'
72+ ) ;
73+ assert . strictEqual ( typeof descriptor9 . get , 'function' ) ;
74+ assert . strictEqual ( typeof descriptor9 . set , 'function' ) ;
75+ assert . strictEqual ( descriptor9 . configurable , true ) ;
76+
77+ const descriptor10 = Object . getOwnPropertyDescriptor (
78+ window . globalProxy ,
79+ 'nonWritableProp'
80+ ) ;
81+ assert . strictEqual ( descriptor10 . value , 51 ) ;
82+ assert . strictEqual ( descriptor10 . writable , false ) ;
1483
1584// Regression test for GH-42962. This assignment should not throw.
16- window . globalProxy . onhashchange = ( ) => { } ;
85+ window . globalProxy . getSetPropReceivingFunction = ( ) => { } ;
86+ assert . strictEqual ( window . globalProxy . getSetPropReceivingFunction , 42 ) ;
87+
88+ window . globalProxy . getSetPropReceivingNumber = 143 ;
89+ assert . strictEqual ( window . globalProxy . getSetPropReceivingNumber , 43 ) ;
90+
91+ window . globalProxy . propReceivingNumber = 144 ;
92+ assert . strictEqual ( window . globalProxy . propReceivingNumber , 144 ) ;
93+
94+ window . globalProxy . unknownPropReceivingNumber = 145 ;
95+ assert . strictEqual ( window . globalProxy . unknownPropReceivingNumber , 145 ) ;
96+
97+ window . globalProxy [ getSetSymbolReceivingFunction ] = ( ) => { } ;
98+ assert . strictEqual ( window . globalProxy [ getSetSymbolReceivingFunction ] , 46 ) ;
1799
18- assert . strictEqual ( window . globalProxy . onhashchange , 42 ) ;
100+ window . globalProxy [ getSetSymbolReceivingNumber ] = 147 ;
101+ assert . strictEqual ( window . globalProxy [ getSetSymbolReceivingNumber ] , 47 ) ;
102+
103+ window . globalProxy [ symbolReceivingNumber ] = 148 ;
104+ assert . strictEqual ( window . globalProxy [ symbolReceivingNumber ] , 148 ) ;
105+
106+ window . globalProxy [ unknownSymbolReceivingNumber ] = 149 ;
107+ assert . strictEqual ( window . globalProxy [ unknownSymbolReceivingNumber ] , 149 ) ;
108+
109+ assert . throws (
110+ ( ) => ( window . globalProxy . getSetPropThrowing = 150 ) ,
111+ new Error ( 'setter called' )
112+ ) ;
113+ assert . strictEqual ( window . globalProxy . getSetPropThrowing , 50 ) ;
114+
115+ assert . throws (
116+ ( ) => ( window . globalProxy . nonWritableProp = 151 ) ,
117+ new TypeError ( 'Cannot redefine property: nonWritableProp' )
118+ ) ;
119+ assert . strictEqual ( window . globalProxy . nonWritableProp , 51 ) ;
19120
20121function createWindow ( ) {
21122 const obj = { } ;
22123 vm . createContext ( obj ) ;
23- Object . defineProperty ( obj , 'onhashchange ' , {
124+ Object . defineProperty ( obj , 'getSetPropReceivingFunction ' , {
24125 get : common . mustCall ( ( ) => 42 ) ,
25126 set : common . mustCall ( ) ,
26- configurable : true
127+ configurable : true ,
128+ } ) ;
129+ Object . defineProperty ( obj , 'getSetPropReceivingNumber' , {
130+ get : common . mustCall ( ( ) => 43 ) ,
131+ set : common . mustCall ( ) ,
132+ configurable : true ,
133+ } ) ;
134+ obj . propReceivingNumber = 44 ;
135+ Object . defineProperty ( obj , getSetSymbolReceivingFunction , {
136+ get : common . mustCall ( ( ) => 46 ) ,
137+ set : common . mustCall ( ) ,
138+ configurable : true ,
139+ } ) ;
140+ Object . defineProperty ( obj , getSetSymbolReceivingNumber , {
141+ get : common . mustCall ( ( ) => 47 ) ,
142+ set : common . mustCall ( ) ,
143+ configurable : true ,
144+ } ) ;
145+ obj [ symbolReceivingNumber ] = 48 ;
146+ Object . defineProperty ( obj , 'getSetPropThrowing' , {
147+ get : common . mustCall ( ( ) => 50 ) ,
148+ set : common . mustCall ( ( ) => {
149+ throw new Error ( 'setter called' ) ;
150+ } ) ,
151+ configurable : true ,
152+ } ) ;
153+ Object . defineProperty ( obj , 'nonWritableProp' , {
154+ value : 51 ,
155+ writable : false ,
27156 } ) ;
28157
29158 obj . globalProxy = vm . runInContext ( 'this' , obj ) ;
0 commit comments