@informalsystems/quint
Version:
Core tool for the Quint specification language
148 lines • 6.08 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const mocha_1 = require("mocha");
const chai_1 = require("chai");
const chalk_1 = __importDefault(require("chalk"));
const prettierimp_1 = require("../src/prettierimp");
// define the standard line break to avoid repetition
const br = (0, prettierimp_1.line)('\n', ' ');
(0, mocha_1.describe)('prettierimp', () => {
(0, mocha_1.it)('page 2 tests', () => {
const doc = [(0, prettierimp_1.text)('[begin'), br, (0, prettierimp_1.group)([(0, prettierimp_1.text)('[stmt;'), br, (0, prettierimp_1.text)('stmt;'), br, (0, prettierimp_1.text)('stmt;]')]), br, (0, prettierimp_1.text)('end]')];
const result1 = (0, prettierimp_1.format)(60, 0, doc);
(0, chai_1.expect)(result1).to.equal('[begin [stmt; stmt; stmt;] end]');
const result2 = (0, prettierimp_1.format)(30, 0, doc);
const expected2 = `[begin
[stmt; stmt; stmt;]
end]`;
(0, chai_1.expect)(result2).to.equal(expected2);
const result3 = (0, prettierimp_1.format)(10, 0, doc);
const expected3 = `[begin
[stmt;
stmt;
stmt;]
end]`;
(0, chai_1.expect)(result3).to.equal(expected3);
});
(0, mocha_1.it)('page 3 tests', () => {
const doc = [
(0, prettierimp_1.text)('[begin'),
(0, prettierimp_1.nest)(' ', [br, (0, prettierimp_1.group)([(0, prettierimp_1.text)('[stmt;'), br, (0, prettierimp_1.text)('stmt;'), br, (0, prettierimp_1.text)('stmt;]')])]),
br,
(0, prettierimp_1.text)('end]'),
];
const result1 = (0, prettierimp_1.format)(50, 0, doc);
(0, chai_1.expect)(result1).to.equal('[begin [stmt; stmt; stmt;] end]');
const result2 = (0, prettierimp_1.format)(30, 0, doc);
const expected2 = `[begin
[stmt; stmt; stmt;]
end]`;
(0, chai_1.expect)(result2).to.equal(expected2);
const result3 = (0, prettierimp_1.format)(10, 0, doc);
const expected3 = `[begin
[stmt;
stmt;
stmt;]
end]`;
(0, chai_1.expect)(result3).to.equal(expected3);
});
(0, mocha_1.it)('page 6 tests', () => {
const binop = (left, op, right) => {
return (0, prettierimp_1.group)((0, prettierimp_1.nest)(' ', [(0, prettierimp_1.group)([(0, prettierimp_1.text)(left), br, (0, prettierimp_1.text)(op)]), br, (0, prettierimp_1.text)(right)]));
};
const cond = binop('a', '==', 'b');
const expr1 = binop('a', '<<', '2');
const expr2 = binop('a', '+', 'b');
const ifthen = (c, e1, e2) => {
return (0, prettierimp_1.group)([
(0, prettierimp_1.group)((0, prettierimp_1.nest)(' ', [(0, prettierimp_1.text)('if'), br, c])),
br,
(0, prettierimp_1.group)((0, prettierimp_1.nest)(' ', [(0, prettierimp_1.text)('then'), br, e1])),
br,
(0, prettierimp_1.group)((0, prettierimp_1.nest)(' ', [(0, prettierimp_1.text)('else'), br, e2])),
]);
};
const doc = ifthen(cond, expr1, expr2);
const result32 = (0, prettierimp_1.format)(32, 0, doc);
(0, chai_1.expect)(result32).to.equal('if a == b then a << 2 else a + b');
const result15 = (0, prettierimp_1.format)(15, 0, doc);
const expected15 = `if a == b
then a << 2
else a + b`;
(0, chai_1.expect)(result15).to.equal(expected15);
const result10 = (0, prettierimp_1.format)(10, 0, doc);
const expected10 = `if a == b
then
a << 2
else a + b`;
(0, chai_1.expect)(result10).to.equal(expected10);
const result8 = (0, prettierimp_1.format)(8, 0, doc);
const expected8 = `if
a == b
then
a << 2
else
a + b`;
(0, chai_1.expect)(result8).to.equal(expected8);
const result7 = (0, prettierimp_1.format)(7, 0, doc);
const expected7 = `if
a ==
b
then
a <<
2
else
a + b`;
(0, chai_1.expect)(result7).to.equal(expected7);
const result6 = (0, prettierimp_1.format)(6, 0, doc);
const expected6 = `if
a ==
b
then
a <<
2
else
a +
b`;
(0, chai_1.expect)(result6).to.equal(expected6);
});
(0, mocha_1.it)('page 2 tests with colors', () => {
// check that the color codes do not affect the string length
// when computing the layout
const y = chalk_1.default.yellow;
const b = chalk_1.default.bold;
const doc = [
(0, prettierimp_1.richtext)(y, '[begin'),
br,
(0, prettierimp_1.group)([(0, prettierimp_1.text)('[stmt;'), br, (0, prettierimp_1.richtext)(b, 'stmt;'), br, (0, prettierimp_1.text)('stmt;]')]),
br,
(0, prettierimp_1.richtext)(y, 'end]'),
];
const result1 = (0, prettierimp_1.format)(60, 0, doc);
const expected1 = `${y('[begin')} [stmt; ${b('stmt;')} stmt;] ${y('end]')}`;
(0, chai_1.expect)(result1).to.equal(expected1);
const result2 = (0, prettierimp_1.format)(30, 0, doc);
const expected2 = `${y('[begin')}
[stmt; ${b('stmt;')} stmt;]
${y('end]')}`;
(0, chai_1.expect)(result2).to.equal(expected2);
const result3 = (0, prettierimp_1.format)(10, 0, doc);
const expected3 = `${y('[begin')}
[stmt;
${b('stmt;')}
stmt;]
${y('end]')}`;
(0, chai_1.expect)(result3).to.equal(expected3);
});
(0, mocha_1.it)('parentheses, braces, brackets', () => {
const doc = [(0, prettierimp_1.parens)((0, prettierimp_1.braces)((0, prettierimp_1.brackets)([(0, prettierimp_1.line)(), (0, prettierimp_1.text)('abc'), (0, prettierimp_1.line)()])))];
const result60 = (0, prettierimp_1.format)(60, 0, doc);
(0, chai_1.expect)(result60).to.equal('({[ abc ]})');
const result3 = (0, prettierimp_1.format)(3, 0, doc);
(0, chai_1.expect)(result3).to.equal('({[\nabc\n]})');
});
});
//# sourceMappingURL=prettierimp.test.js.map