Mypal/devtools/shared/tests/unit/test_indentation.js
2019-03-11 13:26:37 +03:00

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);
}
}