figlet
Version:
Creates ASCII Art from text. A full implementation of the FIGfont spec.
352 lines (322 loc) • 8.48 kB
JavaScript
const figlet = require("../lib/node-figlet"),
grunt = require("grunt"),
fs = require("fs"),
path = require("path"),
async = require("async");
/*
======== A Handy Little Nodeunit Reference ========
https://github.com/caolan/nodeunit
Test methods:
test.expect(numAssertions)
test.done()
Test assertions:
test.ok(value, [message])
test.equal(actual, expected, [message])
test.notEqual(actual, expected, [message])
test.deepEqual(actual, expected, [message])
test.notDeepEqual(actual, expected, [message])
test.strictEqual(actual, expected, [message])
test.notStrictEqual(actual, expected, [message])
test.throws(block, [error], [message])
test.doesNotThrow(block, [error], [message])
test.ifError(value)
*/
exports.figlet = {
setUp: function (done) {
// setup here if necessary
done();
},
standard: function (test) {
test.expect(1);
figlet(
"FIGlet\nFONTS",
{
font: "Standard",
verticalLayout: "fitted",
},
function (err, actual) {
var expected = grunt.file.read("test/expected/standard");
test.equal(
actual,
expected,
'Standard font with a vertical layout of "fitted".'
);
test.done();
}
);
},
standardAsync: async function (test) {
test.expect(1);
const result = await figlet("FIGlet\nFONTS", {
font: "Standard",
verticalLayout: "fitted",
});
var expected = grunt.file.read("test/expected/standard");
test.equal(
result,
expected,
'Standard font with a vertical layout of "fitted".'
);
test.done();
},
standardSync: function (test) {
test.expect(1);
var expected = grunt.file.read("test/expected/standard");
var actual = figlet.textSync("FIGlet\nFONTS", {
font: "Standard",
verticalLayout: "fitted",
});
test.equal(
actual,
expected,
'Standard font with a vertical layout of "fitted".'
);
test.done();
},
standardParse: function (test) {
test.expect(1);
var expected = grunt.file.read("test/expected/standard");
var data = fs.readFileSync(
path.join(__dirname, "../fonts/Standard.flf"),
"utf8"
);
var font = figlet.parseFont("StandardParseFontName", data);
var actual = figlet.textSync("FIGlet\nFONTS", {
font: "StandardParseFontName",
verticalLayout: "fitted",
});
test.equal(
actual,
expected,
'Standard font with a vertical layout of "fitted" loaded using parseFont().'
);
test.done();
},
graffiti: function (test) {
test.expect(1);
figlet.text(
"ABC.123",
{
font: "Graffiti",
horizontalLayout: "fitted",
},
function (err, actual) {
var expected = grunt.file.read("test/expected/graffiti");
test.equal(
actual,
expected,
'Graffiti font with a horizontal layout of "fitted".'
);
test.done();
}
);
},
graffitiSync: function (test) {
test.expect(1);
var expected = grunt.file.read("test/expected/graffiti");
var actual = figlet.textSync("ABC.123", {
font: "Graffiti",
horizontalLayout: "fitted",
});
test.equal(
actual,
expected,
'Graffiti font with a horizontal layout of "fitted".'
);
test.done();
},
wrap: function (test) {
test.expect(4);
var specs = [
{
input: "Hello From The Figlet Library",
expected: grunt.file.read("test/expected/wrapSimple"),
},
{
input: "Hello From The Figlet Library That Wrap Text",
expected: grunt.file.read("test/expected/wrapSimpleThreeLines"),
},
];
(function recur() {
var spec = specs.pop();
if (!spec) {
test.done();
} else {
figlet(
spec.input,
{
font: "Standard",
width: 80,
},
function (err, actual) {
var maxWidth = actual.split("\n").reduce(function (acc, line) {
if (acc < line.length) {
return line.length;
}
return acc;
}, 0);
test.equal(maxWidth <= 80, true);
test.equal(actual, spec.expected, "Standard font with wrap.");
recur();
}
);
}
})();
},
wrapBreakWord: function (test) {
test.expect(10);
var specs = [
{
input: "Hello From The Figlet Library",
expected: grunt.file.read("test/expected/wrapWord"),
width: 80,
},
{
input: "Hello From The Figlet Library That Wrap Text",
expected: grunt.file.read("test/expected/wrapWordThreeLines"),
width: 80,
},
{
input: "Hello From The Figlet Library That Wrap Text",
expected: grunt.file.read("test/expected/wrapWordThreeLines"),
width: 80,
},
{
input: "Hello LongLongLong Word Longerhello",
expected: grunt.file.read("test/expected/wrapWhitespaceBreakWord"),
width: 30,
},
{
input: "xxxxxxxxxxxxxxxxxxxxxxxx",
expected: grunt.file.read("test/expected/wrapWhitespaceLogString"),
width: 30,
},
];
(function recur() {
var spec = specs.pop();
if (!spec) {
test.done();
} else {
var width = spec.width;
figlet(
spec.input,
{
font: "Standard",
width: width,
whitespaceBreak: true,
},
function (err, actual) {
var maxWidth = actual.split("\n").reduce(function (acc, line) {
if (acc < line.length) {
return line.length;
}
return acc;
}, 0);
test.equal(maxWidth <= width, true);
test.equal(actual, spec.expected, "Standard font with word break.");
recur();
}
);
}
})();
},
dancingFont: function (test) {
test.expect(1);
figlet.text(
"pizzapie",
{
font: "Dancing Font",
horizontalLayout: "full",
},
function (err, actual) {
var expected = grunt.file.read("test/expected/dancingFont");
test.equal(
actual,
expected,
'Dancing Font with a horizontal layout of "full".'
);
test.done();
}
);
},
dancingFontSync: function (test) {
test.expect(1);
var expected = grunt.file.read("test/expected/dancingFont");
var actual = figlet.textSync("pizzapie", {
font: "Dancing Font",
horizontalLayout: "full",
});
test.equal(
actual,
expected,
'Dancing Font with a horizontal layout of "full".'
);
test.done();
},
verticalSmushRule2: function (test) {
test.expect(1);
var expected = grunt.file.read("test/expected/verticalSmushRule2");
var actual = figlet.textSync("Terminal\nChess", { font: "Slant" });
test.equal(actual, expected, "Vertical Smush Rule 2 should be followed.");
test.done();
},
printDirection: function (test) {
test.expect(1);
figlet.text(
"pizzapie",
{
font: "Dancing Font",
horizontalLayout: "full",
printDirection: 1,
},
function (err, actual) {
var expected = grunt.file.read("test/expected/dancingFontReverse");
test.equal(
actual,
expected,
"Dancing Font with a reversed print direction."
);
test.done();
}
);
},
/*
This test ensures that all fonts will load without error
*/
loadAll: function (test) {
var errCount = 0;
test.expect(1);
figlet.fonts(function (err, fonts) {
if (err) {
errCount++;
return;
}
async.eachSeries(
fonts,
function (font, next) {
figlet.text(
"abc ABC ...",
{
font: font,
},
function (err, data) {
if (err) {
errCount++;
}
next();
}
);
},
function (err) {
test.equal(
errCount,
0,
"A problem occurred while testing one of the fonts."
);
test.done();
}
);
});
},
};
;