| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <link rel="stylesheet" href="resources/external.css"> |
| <script> |
| function test() { |
| let nodeStyles = null; |
| |
| let suite = InspectorTest.createAsyncSuite("CSS.addRule"); |
| |
| let mainFrame = WI.frameResourceManager.mainFrame; |
| |
| function stringify(range) { |
| return `${range.startLine}:${range.startColumn},${range.endLine}:${range.endColumn}`; |
| } |
| |
| suite.addTestCase({ |
| name: "CSS.addRule.InNonExistingInspectorStyleSheet", |
| description: "Ensure that an inspector style sheet is created and the rule is added.", |
| test(resolve, reject) { |
| function ruleAdded(error, rulePayload) { |
| if (error) { |
| reject(error); |
| return; |
| } |
| |
| InspectorTest.expectEqual(rulePayload.selectorList.text, "body", `Rule selector should be "body"`); |
| InspectorTest.expectEqual(stringify(rulePayload.selectorList.range), "0:0,0:4", `Rule range should be [0:0,0:4]`); |
| InspectorTest.expectEqual(rulePayload.origin, "inspector", `Rule origin should be "inspector"`); |
| |
| resolve(); |
| } |
| |
| function inspectorStyleSheetAvailable(styleSheet) { |
| if (!styleSheet) { |
| reject("Missing inspector style sheet"); |
| return; |
| } |
| |
| CSSAgent.addRule(styleSheet.id, "body", ruleAdded); |
| } |
| |
| function usedExistingInspectorStylesheet(styleSheet) { |
| reject("Inspector style sheet already exists"); |
| } |
| |
| const doNotCreateIfMissing = true; |
| WI.cssStyleManager.preferredInspectorStyleSheetForFrame(mainFrame, usedExistingInspectorStylesheet, doNotCreateIfMissing); |
| |
| WI.cssStyleManager.preferredInspectorStyleSheetForFrame(mainFrame, inspectorStyleSheetAvailable); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "CSS.addRule.InExistingInspectorStyleSheet", |
| description: "Ensure that a rule is added to the existing inspector style sheet.", |
| test(resolve, reject) { |
| function ruleAdded(error, rulePayload) { |
| if (error) { |
| reject(error); |
| return; |
| } |
| |
| InspectorTest.expectEqual(rulePayload.selectorList.text, "div", `Rule selector should be "div"`); |
| InspectorTest.expectEqual(stringify(rulePayload.selectorList.range), "1:0,1:3", `Rule range should be [1:0,1:3]`); |
| InspectorTest.expectEqual(rulePayload.origin, "inspector", `Rule origin should be "inspector"`); |
| |
| resolve(); |
| } |
| |
| let inspectorStyleSheet = null; |
| for (let styleSheet of WI.cssStyleManager.styleSheets) { |
| if (styleSheet.isInspectorStyleSheet()) { |
| if (inspectorStyleSheet) { |
| reject("There should only be one inspector style sheet"); |
| return; |
| } |
| |
| inspectorStyleSheet = styleSheet; |
| } |
| } |
| |
| if (inspectorStyleSheet) |
| CSSAgent.addRule(inspectorStyleSheet.id, "div", ruleAdded); |
| else |
| reject("Missing inspector style sheet"); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "CSS.addRule.ExternalStyleSheet", |
| description: "Ensure that a rule is added to the external style sheet.", |
| test(resolve, reject) { |
| function ruleAdded(error, rulePayload) { |
| if (error) { |
| reject(error); |
| return; |
| } |
| |
| InspectorTest.expectEqual(rulePayload.selectorList.text, "div", `Rule selector should be "div"`); |
| InspectorTest.expectEqual(stringify(rulePayload.selectorList.range), "2:0,2:3", `Rule range should be [2:0,2:3]`); |
| InspectorTest.expectEqual(rulePayload.origin, "regular", `Rule origin should be "regular"`); |
| |
| resolve(); |
| } |
| |
| let externalStyleSheet = null; |
| for (let styleSheet of WI.cssStyleManager.styleSheets) { |
| if (styleSheet.displayName === "external.css") { |
| if (externalStyleSheet) { |
| reject("There should only be one external style sheet"); |
| return; |
| } |
| |
| externalStyleSheet = styleSheet; |
| } |
| } |
| |
| if (externalStyleSheet) |
| CSSAgent.addRule(externalStyleSheet.id, "div", ruleAdded); |
| else |
| reject("Missing external style sheet"); |
| } |
| }); |
| |
| // ------ |
| |
| suite.addTestCase({ |
| name: "CSS.addRule.BadStyleSheetId", |
| description: "Ensure that adding a rule to a style sheet with an invalid id is handled properly.", |
| test(resolve, reject) { |
| function ruleAdded(error, rulePayload) { |
| if (error) { |
| InspectorTest.pass(error); |
| resolve(); |
| return; |
| } |
| |
| reject(JSON.stringify(rulePayload)); |
| } |
| CSSAgent.addRule("DOES_NOT_EXIST", "div", ruleAdded); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing that CSS.addRule works for all types of stylesheets.</p> |
| </body> |
| </html> |