test_objectgrips-16.js (5309B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 /* eslint-disable no-shadow, max-nested-callbacks */ 4 5 "use strict"; 6 7 Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true); 8 registerCleanupFunction(() => { 9 Services.prefs.clearUserPref("security.allow_eval_with_system_principal"); 10 }); 11 12 add_task( 13 threadFrontTest(async ({ threadFront, debuggee }) => { 14 const packet = await executeOnNextTickAndWaitForPause( 15 eval_code, 16 threadFront 17 ); 18 const [grip] = packet.frame.arguments; 19 20 // Checks grip.preview properties. 21 check_preview(grip); 22 23 const objClient = threadFront.pauseGrip(grip); 24 const response = await objClient.getPrototypeAndProperties(); 25 // Checks the result of getPrototypeAndProperties. 26 check_prototype_and_properties(response); 27 28 await threadFront.resume(); 29 30 function eval_code() { 31 debuggee.eval( 32 // These arguments are tested. 33 // eslint-disable-next-line no-unused-vars 34 function stopMe(arg1) { 35 debugger; 36 }.toString() 37 ); 38 debuggee.eval(` 39 stopMe({ 40 [Symbol()]: "first unnamed symbol", 41 [Symbol()]: "second unnamed symbol", 42 [Symbol("named")] : "named symbol", 43 [Symbol.iterator] : function* () { 44 yield 1; 45 yield 2; 46 }, 47 x: 10, 48 }); 49 `); 50 } 51 52 function check_preview(grip) { 53 Assert.equal(grip.class, "Object"); 54 55 const { preview } = grip; 56 Assert.equal(preview.ownProperties.x.configurable, true); 57 Assert.equal(preview.ownProperties.x.enumerable, true); 58 Assert.equal(preview.ownProperties.x.writable, true); 59 Assert.equal(preview.ownProperties.x.value, 10); 60 61 const [ 62 firstUnnamedSymbol, 63 secondUnnamedSymbol, 64 namedSymbol, 65 iteratorSymbol, 66 ] = preview.ownSymbols; 67 68 Assert.equal(firstUnnamedSymbol.name, undefined); 69 Assert.equal(firstUnnamedSymbol.type, "symbol"); 70 Assert.equal(firstUnnamedSymbol.descriptor.configurable, true); 71 Assert.equal(firstUnnamedSymbol.descriptor.enumerable, true); 72 Assert.equal(firstUnnamedSymbol.descriptor.writable, true); 73 Assert.equal(firstUnnamedSymbol.descriptor.value, "first unnamed symbol"); 74 75 Assert.equal(secondUnnamedSymbol.name, undefined); 76 Assert.equal(secondUnnamedSymbol.type, "symbol"); 77 Assert.equal(secondUnnamedSymbol.descriptor.configurable, true); 78 Assert.equal(secondUnnamedSymbol.descriptor.enumerable, true); 79 Assert.equal(secondUnnamedSymbol.descriptor.writable, true); 80 Assert.equal( 81 secondUnnamedSymbol.descriptor.value, 82 "second unnamed symbol" 83 ); 84 85 Assert.equal(namedSymbol.name, "named"); 86 Assert.equal(namedSymbol.type, "symbol"); 87 Assert.equal(namedSymbol.descriptor.configurable, true); 88 Assert.equal(namedSymbol.descriptor.enumerable, true); 89 Assert.equal(namedSymbol.descriptor.writable, true); 90 Assert.equal(namedSymbol.descriptor.value, "named symbol"); 91 92 Assert.equal(iteratorSymbol.name, "Symbol.iterator"); 93 Assert.equal(iteratorSymbol.type, "symbol"); 94 Assert.equal(iteratorSymbol.descriptor.configurable, true); 95 Assert.equal(iteratorSymbol.descriptor.enumerable, true); 96 Assert.equal(iteratorSymbol.descriptor.writable, true); 97 Assert.equal(iteratorSymbol.descriptor.value.class, "Function"); 98 } 99 100 function check_prototype_and_properties(response) { 101 Assert.equal(response.ownProperties.x.configurable, true); 102 Assert.equal(response.ownProperties.x.enumerable, true); 103 Assert.equal(response.ownProperties.x.writable, true); 104 Assert.equal(response.ownProperties.x.value, 10); 105 106 const [ 107 firstUnnamedSymbol, 108 secondUnnamedSymbol, 109 namedSymbol, 110 iteratorSymbol, 111 ] = response.ownSymbols; 112 113 Assert.equal(firstUnnamedSymbol.name, "Symbol()"); 114 Assert.equal(firstUnnamedSymbol.descriptor.configurable, true); 115 Assert.equal(firstUnnamedSymbol.descriptor.enumerable, true); 116 Assert.equal(firstUnnamedSymbol.descriptor.writable, true); 117 Assert.equal(firstUnnamedSymbol.descriptor.value, "first unnamed symbol"); 118 119 Assert.equal(secondUnnamedSymbol.name, "Symbol()"); 120 Assert.equal(secondUnnamedSymbol.descriptor.configurable, true); 121 Assert.equal(secondUnnamedSymbol.descriptor.enumerable, true); 122 Assert.equal(secondUnnamedSymbol.descriptor.writable, true); 123 Assert.equal( 124 secondUnnamedSymbol.descriptor.value, 125 "second unnamed symbol" 126 ); 127 128 Assert.equal(namedSymbol.name, "Symbol(named)"); 129 Assert.equal(namedSymbol.descriptor.configurable, true); 130 Assert.equal(namedSymbol.descriptor.enumerable, true); 131 Assert.equal(namedSymbol.descriptor.writable, true); 132 Assert.equal(namedSymbol.descriptor.value, "named symbol"); 133 134 Assert.equal(iteratorSymbol.name, "Symbol(Symbol.iterator)"); 135 Assert.equal(iteratorSymbol.descriptor.configurable, true); 136 Assert.equal(iteratorSymbol.descriptor.enumerable, true); 137 Assert.equal(iteratorSymbol.descriptor.writable, true); 138 Assert.equal(iteratorSymbol.descriptor.value.class, "Function"); 139 } 140 }) 141 );