| <!doctype html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| // ------------------------------ |
| // Setup Test Prototype Chain |
| // ------------------------------ |
| |
| function SuperBar() { this._bar = 10; } |
| SuperBar.prototype = { |
| __proto__: Object.prototype, |
| constructor: SuperBar, |
| BAR_CONSTANT: 99, |
| get getterProperty() { return 20; }, |
| get bar() { return this._bar; }, |
| set setterOnly(x) {}, |
| }; |
| |
| function SuperFoo() { SuperBar.call(this); this._foo = 5; } |
| SuperFoo.prototype = { |
| __proto__: SuperBar.prototype, |
| constructor: SuperFoo, |
| get getterProperty() { return 10; }, |
| get foo() { return this._foo; } |
| }; |
| |
| function ClassWithBadGetter() {} |
| ClassWithBadGetter.prototype = { |
| __proto__: Object.prototype, |
| constructor: ClassWithBadGetter, |
| get badGetter() { throw "throw in getter"; } |
| }; |
| |
| |
| // -------------------- |
| // Objects to Debug |
| // -------------------- |
| |
| // window.loadEvent is set inside of <body onload="..."> below. |
| var simpleObject = {a:1, b:"string"}; |
| var simpleArray = [1, "two", /three/]; |
| var arrayProto = [].__proto__; |
| var complexObject = new SuperFoo; |
| var badGetterObject = new ClassWithBadGetter; |
| var unboundFunction = function() { console.log(arguments); } |
| var boundFunction = unboundFunction.bind(document.body, 1, 2, 3); |
| var objectWithSymbolProperties = {prop:1, [Symbol()]:2, [Symbol('sym')]:3, [Symbol('sym')]:4, [Symbol()]: Symbol(), prop2: 5}; |
| |
| // -------- |
| // test |
| // -------- |
| |
| function test() |
| { |
| var currentStepIndex = 0; |
| var steps = [ |
| {expression: "window.simpleObject"}, |
| {expression: "window.simpleArray"}, |
| {expression: "window.arrayProto"}, |
| {expression: "window.loadEvent"}, |
| {expression: "window.complexObject"}, |
| {expression: "window.badGetterObject"}, |
| {expression: "window.unboundFunction"}, |
| {expression: "window.boundFunction"}, |
| {expression: "window.objectWithSymbolProperties"}, |
| {expression: "document.getElementById('my-select').options"}, |
| ] |
| |
| function runNextStep() { |
| if (currentStepIndex >= steps.length) { |
| InspectorTest.log("DONE"); |
| InspectorTest.completeTest(); |
| return; |
| } |
| |
| var step = steps[currentStepIndex++]; |
| InspectorTest.log(""); |
| InspectorTest.log("-----------------------------------------------------"); |
| InspectorTest.log("EXPRESSION: " + step.expression); |
| |
| WI.runtimeManager.evaluateInInspectedWindow(step.expression, {objectGroup: "test", doNotPauseOnExceptionsAndMuteConsole: true}, function(remoteObject, wasThrown) { |
| InspectorTest.assert(remoteObject instanceof WI.RemoteObject); |
| InspectorTest.log("type: " + remoteObject.type); |
| if (remoteObject.subtype) |
| InspectorTest.log("subtype: " + remoteObject.subtype); |
| InspectorTest.log("description: " + remoteObject.description); |
| |
| const options = { |
| ownProperties: true, |
| }; |
| remoteObject.getPropertyDescriptors(function(properties) { |
| InspectorTest.log("\nOWN PROPERTIES:"); |
| for (var property of properties) { |
| InspectorTest.assert(property instanceof WI.PropertyDescriptor); |
| InspectorTest.log(" " + property.name); |
| } |
| }, options); |
| |
| remoteObject.getDisplayablePropertyDescriptors(function(properties) { |
| InspectorTest.log("\nDISPLAYABLE PROPERTIES:"); |
| for (var property of properties) { |
| InspectorTest.assert(property instanceof WI.PropertyDescriptor); |
| InspectorTest.log(" " + property.name); |
| } |
| }); |
| |
| remoteObject.getPropertyDescriptors(function(properties) { |
| InspectorTest.log("\nALL PROPERTIES:"); |
| for (var property of properties) { |
| InspectorTest.assert(property instanceof WI.PropertyDescriptor); |
| InspectorTest.log(" " + property.name); |
| } |
| |
| InspectorTest.log("-----------------------------------------------------"); |
| runNextStep(); |
| }); |
| }); |
| } |
| |
| runNextStep(); |
| } |
| </script> |
| </head> |
| <body onload="window.loadEvent = event; runTest()"> |
| <select id="my-select" style="display: none"> |
| <option name="1" id="attr_1" value="1"></option> |
| </select> |
| </body> |
| </html> |