/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict" ;
const {
getRuleText,
} = require(
"resource://devtools/server/actors/utils/style-utils.js");
const TEST_DATA = [
{
desc:
"Empty input" ,
input:
"" ,
line: 1,
column: 1,
throws :
true ,
},
{
desc:
"Null input" ,
input:
null ,
line: 1,
column: 1,
throws :
true ,
},
{
desc:
"Missing loc" ,
input:
"#id{color:red;background:yellow;}" ,
throws :
true ,
},
{
desc:
"No opening bracket" ,
input:
"/* hey */",
line: 1,
column: 1,
throws :
true ,
},
{
desc:
"Simplest test case" ,
input:
"#id{color:red;background:yellow;}" ,
line: 1,
column: 1,
expected:
"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:
" position:absolute; line-height: 45px" ,
},
{
desc:
"Unclosed rule" ,
input:
"#id{color:red;background:yellow;" ,
line: 1,
column: 1,
expected:
"color:red;background:yellow;" ,
},
{
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:
"\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:
"\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:
"border:1px solid red;content: '}';color:red;" ,
},
{
desc:
"Attribute selector containing a { character" ,
input: `div[data-x=
"{" ]{color: gold}`,
line: 1,
column: 1,
expected:
"color: gold" ,
},
{
desc:
"Rule contains no tokens" ,
input:
"div{}" ,
line: 1,
column: 1,
expected:
"" ,
},
{
desc:
"Rule contains invalid declaration" ,
input: `#id{color;}`,
line: 1,
column: 1,
expected:
"color;" ,
},
{
desc:
"Rule contains invalid declaration" ,
input: `#id{-}`,
line: 1,
column: 1,
expected:
"-" ,
},
{
desc:
"Rule contains nested rule" ,
input: `#id{background: gold; .nested{color:blue;} color: tomato; }`,
line: 1,
column: 1,
expected:
"background: gold; .nested{color:blue;} color: tomato; " ,
},
{
desc:
"Rule contains nested rule with invalid declaration" ,
input: `#id{.nested{color;}}`,
line: 1,
column: 1,
expected:
".nested{color;}" ,
},
{
desc:
"Rule contains unicode chars" ,
input: `#id
/**/ {content: "☃️";}`,
line: 1,
column: 1,
expected: `content:
"☃️" ;`,
},
];
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) {
Assert .equal(output, test.expected);
}
}
}
Messung V0.5 C=88 H=98 G=93
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland