gecko-dev/devtools/server/tests/xpcshell/test_getRuleText.js
Julian Descottes 51323f232a Bug 1674362 - [devtools] Extract PageStyle and StyleRule actors to individual files r=rcaliman
The actors/styles.js file contained two actors.
This change moves each actor in its own file.
A shared actors/utils/style-utils file is also created to host shared helpers.

Differential Revision: https://phabricator.services.mozilla.com/D95297
2020-11-02 17:14:55 +00:00

143 lines
3.2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { getRuleText } = require("devtools/server/actors/utils/style-utils");
const TEST_DATA = [
{
desc: "Empty input",
input: "",
line: 1,
column: 1,
throws: true,
},
{
desc: "Simplest test case",
input: "#id{color:red;background:yellow;}",
line: 1,
column: 1,
expected: { offset: 4, text: "color:red;background:yellow;" },
},
{
desc: "Multiple rules test case",
input:
"#id{color:red;background:yellow;}.class-one .class-two " +
"{ position:absolute; line-height: 45px}",
line: 1,
column: 34,
expected: { offset: 56, text: " position:absolute; line-height: 45px" },
},
{
desc: "Unclosed rule",
input: "#id{color:red;background:yellow;",
line: 1,
column: 1,
expected: { offset: 4, text: "color:red;background:yellow;" },
},
{
desc: "Null input",
input: null,
line: 1,
column: 1,
throws: true,
},
{
desc: "Missing loc",
input: "#id{color:red;background:yellow;}",
throws: true,
},
{
desc: "Multi-lines CSS",
input: [
"/* this is a multi line css */",
"body {",
" color: green;",
" background-repeat: no-repeat",
"}",
" /*something else here */",
"* {",
" color: purple;",
"}",
].join("\n"),
line: 7,
column: 1,
expected: { offset: 116, text: "\n color: purple;\n" },
},
{
desc: "Multi-lines CSS and multi-line rule",
input: [
"/* ",
"* some comments",
"*/",
"",
"body {",
" margin: 0;",
" padding: 15px 15px 2px 15px;",
" color: red;",
"}",
"",
"#header .btn, #header .txt {",
" font-size: 100%;",
"}",
"",
"#header #information {",
" color: #dddddd;",
" font-size: small;",
"}",
].join("\n"),
line: 5,
column: 1,
expected: {
offset: 30,
text:
"\n margin: 0;\n padding: 15px 15px 2px 15px;\n color: red;\n",
},
},
{
desc: "Content string containing a } character",
input: " #id{border:1px solid red;content: '}';color:red;}",
line: 1,
column: 4,
expected: {
offset: 7,
text: "border:1px solid red;content: '}';color:red;",
},
},
{
desc: "Rule contains no tokens",
input: "div{}",
line: 1,
column: 1,
expected: { offset: 4, text: "" },
},
];
function run_test() {
for (const test of TEST_DATA) {
info("Starting test: " + test.desc);
info("Input string " + test.input);
let output;
try {
output = getRuleText(test.input, test.line, test.column);
if (test.throws) {
info("Test should have thrown");
Assert.ok(false);
}
} catch (e) {
info("getRuleText threw an exception with the given input string");
if (test.throws) {
info("Exception expected");
Assert.ok(true);
} else {
info("Exception unexpected\n" + e);
Assert.ok(false);
}
}
if (output) {
deepEqual(output, test.expected);
}
}
}