123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
- /* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
- "use strict";
- const {getRuleText} = require("devtools/server/actors/styles");
- 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 (let test of TEST_DATA) {
- do_print("Starting test: " + test.desc);
- do_print("Input string " + test.input);
- let output;
- try {
- output = getRuleText(test.input, test.line, test.column);
- if (test.throws) {
- do_print("Test should have thrown");
- do_check_true(false);
- }
- } catch (e) {
- do_print("getRuleText threw an exception with the given input string");
- if (test.throws) {
- do_print("Exception expected");
- do_check_true(true);
- } else {
- do_print("Exception unexpected\n" + e);
- do_check_true(false);
- }
- }
- if (output) {
- deepEqual(output, test.expected);
- }
- }
- }
|