207 lines
4.8 KiB
JavaScript
207 lines
4.8 KiB
JavaScript
import assert from "assert";
|
|
import chalk from "chalk";
|
|
import codeFrame from "..";
|
|
|
|
describe("babel-code-frame", function () {
|
|
it("basic usage", function () {
|
|
const rawLines = [
|
|
"class Foo {",
|
|
" constructor()",
|
|
"};",
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 2, 16), [
|
|
" 1 | class Foo {",
|
|
"> 2 | constructor()",
|
|
" | ^",
|
|
" 3 | };",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("optional column number", function () {
|
|
const rawLines = [
|
|
"class Foo {",
|
|
" constructor()",
|
|
"};",
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 2, null), [
|
|
" 1 | class Foo {",
|
|
"> 2 | constructor()",
|
|
" 3 | };",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("optional column number", function () {
|
|
const rawLines = [
|
|
"class Foo {",
|
|
" constructor()",
|
|
"};",
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 2, null), [
|
|
" 1 | class Foo {",
|
|
"> 2 | constructor()",
|
|
" 3 | };",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("maximum context lines and padding", function () {
|
|
const rawLines = [
|
|
"/**",
|
|
" * Sums two numbers.",
|
|
" *",
|
|
" * @param a Number",
|
|
" * @param b Number",
|
|
" * @returns Number",
|
|
" */",
|
|
"",
|
|
"function sum(a, b) {",
|
|
" return a + b",
|
|
"}"
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 7, 2), [
|
|
" 5 | * @param b Number",
|
|
" 6 | * @returns Number",
|
|
"> 7 | */",
|
|
" | ^",
|
|
" 8 | ",
|
|
" 9 | function sum(a, b) {",
|
|
" 10 | return a + b",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("no unnecessary padding due to one-off errors", function () {
|
|
const rawLines = [
|
|
"/**",
|
|
" * Sums two numbers.",
|
|
" *",
|
|
" * @param a Number",
|
|
" * @param b Number",
|
|
" * @returns Number",
|
|
" */",
|
|
"",
|
|
"function sum(a, b) {",
|
|
" return a + b",
|
|
"}"
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 6, 2), [
|
|
" 4 | * @param a Number",
|
|
" 5 | * @param b Number",
|
|
"> 6 | * @returns Number",
|
|
" | ^",
|
|
" 7 | */",
|
|
" 8 | ",
|
|
" 9 | function sum(a, b) {",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("tabs", function () {
|
|
const rawLines = [
|
|
"\tclass Foo {",
|
|
"\t \t\t constructor\t(\t)",
|
|
"\t};",
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 2, 25), [
|
|
" 1 | \tclass Foo {",
|
|
"> 2 | \t \t\t constructor\t(\t)",
|
|
" | \t \t\t \t \t ^",
|
|
" 3 | \t};",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("opts.highlightCode", function () {
|
|
const rawLines = "console.log('babel')";
|
|
const result = codeFrame(rawLines, 1, 9, { highlightCode: true });
|
|
const stripped = chalk.stripColor(result);
|
|
assert.ok(result.length > stripped.length);
|
|
assert.equal(stripped, [
|
|
"> 1 | console.log('babel')",
|
|
" | ^",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("opts.linesAbove", function () {
|
|
const rawLines = [
|
|
"/**",
|
|
" * Sums two numbers.",
|
|
" *",
|
|
" * @param a Number",
|
|
" * @param b Number",
|
|
" * @returns Number",
|
|
" */",
|
|
"",
|
|
"function sum(a, b) {",
|
|
" return a + b",
|
|
"}"
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 7, 2, { linesAbove: 1 }), [
|
|
" 6 | * @returns Number",
|
|
"> 7 | */",
|
|
" | ^",
|
|
" 8 | ",
|
|
" 9 | function sum(a, b) {",
|
|
" 10 | return a + b",
|
|
].join("\n"));
|
|
});
|
|
|
|
it("opts.linesBelow", function () {
|
|
const rawLines = [
|
|
"/**",
|
|
" * Sums two numbers.",
|
|
" *",
|
|
" * @param a Number",
|
|
" * @param b Number",
|
|
" * @returns Number",
|
|
" */",
|
|
"",
|
|
"function sum(a, b) {",
|
|
" return a + b",
|
|
"}"
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 7, 2, { linesBelow: 1 }), [
|
|
" 5 | * @param b Number",
|
|
" 6 | * @returns Number",
|
|
"> 7 | */",
|
|
" | ^",
|
|
" 8 | "
|
|
].join("\n"));
|
|
});
|
|
|
|
it("opts.linesAbove and opts.linesBelow", function () {
|
|
const rawLines = [
|
|
"/**",
|
|
" * Sums two numbers.",
|
|
" *",
|
|
" * @param a Number",
|
|
" * @param b Number",
|
|
" * @returns Number",
|
|
" */",
|
|
"",
|
|
"function sum(a, b) {",
|
|
" return a + b",
|
|
"}"
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 7, 2, { linesAbove: 1, linesBelow: 1 }), [
|
|
" 6 | * @returns Number",
|
|
"> 7 | */",
|
|
" | ^",
|
|
" 8 | "
|
|
].join("\n"));
|
|
});
|
|
|
|
it("opts.forceColor", function() {
|
|
const marker = chalk.red.bold;
|
|
const gutter = chalk.grey;
|
|
|
|
const rawLines = [
|
|
"",
|
|
"",
|
|
"",
|
|
""
|
|
].join("\n");
|
|
assert.equal(codeFrame(rawLines, 3, null, { linesAbove: 1, linesBelow: 1, forceColor: true }), chalk.reset([
|
|
" " + gutter(" 2 | "),
|
|
marker(">") + gutter(" 3 | "),
|
|
" " + gutter(" 4 | ")
|
|
].join("\n")));
|
|
});
|
|
});
|