134 lines
3.1 KiB
JavaScript
134 lines
3.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const Services = require("Services");
|
|
const {
|
|
EXPAND_TAB,
|
|
TAB_SIZE,
|
|
DETECT_INDENT,
|
|
getIndentationFromPrefs,
|
|
getIndentationFromIteration,
|
|
getIndentationFromString,
|
|
} = require("devtools/shared/indentation");
|
|
|
|
function test_indent_from_prefs() {
|
|
Services.prefs.setBoolPref(DETECT_INDENT, true);
|
|
equal(getIndentationFromPrefs(), false,
|
|
"getIndentationFromPrefs returning false");
|
|
|
|
Services.prefs.setIntPref(TAB_SIZE, 73);
|
|
Services.prefs.setBoolPref(EXPAND_TAB, false);
|
|
Services.prefs.setBoolPref(DETECT_INDENT, false);
|
|
deepEqual(getIndentationFromPrefs(), {indentUnit: 73, indentWithTabs: true},
|
|
"getIndentationFromPrefs basic test");
|
|
}
|
|
|
|
const TESTS = [
|
|
{
|
|
desc: "two spaces",
|
|
input: [
|
|
"/*",
|
|
" * tricky comment block",
|
|
" */",
|
|
"div {",
|
|
" color: red;",
|
|
" background: blue;",
|
|
"}",
|
|
" ",
|
|
"span {",
|
|
" padding-left: 10px;",
|
|
"}"
|
|
],
|
|
expected: {indentUnit: 2, indentWithTabs: false}
|
|
},
|
|
{
|
|
desc: "four spaces",
|
|
input: [
|
|
"var obj = {",
|
|
" addNumbers: function() {",
|
|
" var x = 5;",
|
|
" var y = 18;",
|
|
" return x + y;",
|
|
" },",
|
|
" ",
|
|
" /*",
|
|
" * Do some stuff to two numbers",
|
|
" * ",
|
|
" * @param x",
|
|
" * @param y",
|
|
" * ",
|
|
" * @return the result of doing stuff",
|
|
" */",
|
|
" subtractNumbers: function(x, y) {",
|
|
" var x += 7;",
|
|
" var y += 18;",
|
|
" var result = x - y;",
|
|
" result %= 2;",
|
|
" }",
|
|
"}"
|
|
],
|
|
expected: {indentUnit: 4, indentWithTabs: false}
|
|
},
|
|
{
|
|
desc: "tabs",
|
|
input: [
|
|
"/*",
|
|
" * tricky comment block",
|
|
" */",
|
|
"div {",
|
|
"\tcolor: red;",
|
|
"\tbackground: blue;",
|
|
"}",
|
|
"",
|
|
"span {",
|
|
"\tpadding-left: 10px;",
|
|
"}"
|
|
],
|
|
expected: {indentUnit: 2, indentWithTabs: true}
|
|
},
|
|
{
|
|
desc: "no indent",
|
|
input: [
|
|
"var x = 0;",
|
|
" // stray thing",
|
|
"var y = 9;",
|
|
" ",
|
|
""
|
|
],
|
|
expected: {indentUnit: 2, indentWithTabs: false}
|
|
},
|
|
];
|
|
|
|
function test_indent_detection() {
|
|
Services.prefs.setIntPref(TAB_SIZE, 2);
|
|
Services.prefs.setBoolPref(EXPAND_TAB, true);
|
|
Services.prefs.setBoolPref(DETECT_INDENT, true);
|
|
|
|
for (let test of TESTS) {
|
|
let iterFn = function (start, end, callback) {
|
|
test.input.slice(start, end).forEach(callback);
|
|
};
|
|
|
|
deepEqual(getIndentationFromIteration(iterFn), test.expected,
|
|
"test getIndentationFromIteration " + test.desc);
|
|
}
|
|
|
|
for (let test of TESTS) {
|
|
deepEqual(getIndentationFromString(test.input.join("\n")), test.expected,
|
|
"test getIndentationFromString " + test.desc);
|
|
}
|
|
}
|
|
|
|
function run_test() {
|
|
try {
|
|
test_indent_from_prefs();
|
|
test_indent_detection();
|
|
} finally {
|
|
Services.prefs.clearUserPref(TAB_SIZE);
|
|
Services.prefs.clearUserPref(EXPAND_TAB);
|
|
Services.prefs.clearUserPref(DETECT_INDENT);
|
|
}
|
|
}
|