mirror of
https://github.com/thelounge/thelounge
synced 2024-11-27 22:40:23 +00:00
1dc92d8934
¯\_(ツ)_/¯
393 lines
7.2 KiB
JavaScript
393 lines
7.2 KiB
JavaScript
"use strict";
|
|
|
|
const expect = require("chai").expect;
|
|
const parseStyle = require("../../../../../../client/js/libs/handlebars/ircmessageparser/parseStyle");
|
|
|
|
describe("parseStyle", () => {
|
|
it("should skip control codes", () => {
|
|
const input = "text\x01with\x04control\x05codes";
|
|
const expected = [{
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "textwithcontrolcodes",
|
|
|
|
start: 0,
|
|
end: 20,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should parse bold", () => {
|
|
const input = "\x02bold";
|
|
const expected = [{
|
|
bold: true,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "bold",
|
|
|
|
start: 0,
|
|
end: 4,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should parse textColor", () => {
|
|
const input = "\x038yellowText";
|
|
const expected = [{
|
|
bold: false,
|
|
textColor: 8,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "yellowText",
|
|
|
|
start: 0,
|
|
end: 10,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should parse textColor and background", () => {
|
|
const input = "\x034,8yellowBG redText";
|
|
const expected = [{
|
|
textColor: 4,
|
|
bgColor: 8,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
bold: false,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "yellowBG redText",
|
|
|
|
start: 0,
|
|
end: 16,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should parse italic", () => {
|
|
const input = "\x1ditalic";
|
|
const expected = [{
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: true,
|
|
underline: false,
|
|
text: "italic",
|
|
|
|
start: 0,
|
|
end: 6,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should parse hex colors", () => {
|
|
const input = "test \x04FFFFFFnice \x02\x04RES006 \x0303,04\x04ff00FFcolored\x04eeeaFF,001122 background\x04\x03\x02?";
|
|
const expected = [{
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "test ",
|
|
|
|
start: 0,
|
|
end: 5,
|
|
}, {
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: "FFFFFF",
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "nice ",
|
|
|
|
start: 5,
|
|
end: 10,
|
|
}, {
|
|
bold: true,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "RES006 ",
|
|
|
|
start: 10,
|
|
end: 17,
|
|
}, {
|
|
bold: true,
|
|
textColor: 3,
|
|
bgColor: 4,
|
|
hexColor: "FF00FF",
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "colored",
|
|
|
|
start: 17,
|
|
end: 24,
|
|
}, {
|
|
bold: true,
|
|
textColor: 3,
|
|
bgColor: 4,
|
|
hexColor: "EEEAFF",
|
|
hexBgColor: "001122",
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: " background",
|
|
|
|
start: 24,
|
|
end: 35,
|
|
}, {
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "?",
|
|
|
|
start: 35,
|
|
end: 36,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should carry state correctly forward", () => {
|
|
const input = "\x02bold\x038yellow\x02nonBold\x03default";
|
|
const expected = [{
|
|
bold: true,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "bold",
|
|
|
|
start: 0,
|
|
end: 4,
|
|
}, {
|
|
bold: true,
|
|
textColor: 8,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "yellow",
|
|
|
|
start: 4,
|
|
end: 10,
|
|
}, {
|
|
bold: false,
|
|
textColor: 8,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "nonBold",
|
|
|
|
start: 10,
|
|
end: 17,
|
|
}, {
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "default",
|
|
|
|
start: 17,
|
|
end: 24,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should toggle bold correctly", () => {
|
|
const input = "\x02bold\x02 \x02bold\x02";
|
|
const expected = [{
|
|
bold: true,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "bold",
|
|
|
|
start: 0,
|
|
end: 4,
|
|
}, {
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: " ",
|
|
|
|
start: 4,
|
|
end: 5,
|
|
}, {
|
|
bold: true,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "bold",
|
|
|
|
start: 5,
|
|
end: 9,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should reset all styles", () => {
|
|
const input = "\x02\x034\x16\x1d\x1ffull\x0fnone";
|
|
const expected = [{
|
|
bold: true,
|
|
textColor: 4,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: true,
|
|
italic: true,
|
|
underline: true,
|
|
text: "full",
|
|
|
|
start: 0,
|
|
end: 4,
|
|
}, {
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "none",
|
|
|
|
start: 4,
|
|
end: 8,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should not emit empty fragments", () => {
|
|
const input = "\x031\x031,2\x031\x031,2\x031\x031,2\x03a";
|
|
const expected = [{
|
|
bold: false,
|
|
textColor: undefined,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: "a",
|
|
|
|
start: 0,
|
|
end: 1,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
|
|
it("should optimize fragments", () => {
|
|
const rawString = "oh hi test text";
|
|
const colorCode = "\x0312";
|
|
const input = colorCode + rawString.split("").join(colorCode);
|
|
const expected = [{
|
|
bold: false,
|
|
textColor: 12,
|
|
bgColor: undefined,
|
|
hexColor: undefined,
|
|
hexBgColor: undefined,
|
|
reverse: false,
|
|
italic: false,
|
|
underline: false,
|
|
text: rawString,
|
|
|
|
start: 0,
|
|
end: rawString.length,
|
|
}];
|
|
|
|
const actual = parseStyle(input);
|
|
|
|
expect(actual).to.deep.equal(expected);
|
|
});
|
|
});
|