149 lines
5.3 KiB
HTML
149 lines
5.3 KiB
HTML
<!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.networkManager.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);
|
|
}
|
|
|
|
InspectorTest.expectEqual(WI.cssManager.inspectorStyleSheetsForFrame(mainFrame).length, 0, "Should not have any inspector style sheets for the main frame.");
|
|
|
|
WI.cssManager.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.cssManager.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, "author", `Rule origin should be "author"`);
|
|
|
|
resolve();
|
|
}
|
|
|
|
let externalStyleSheet = null;
|
|
for (let styleSheet of WI.cssManager.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>
|