@realfavicongenerator/check-favicon
Version:
Check the favicon of a website
159 lines (158 loc) • 7.87 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_html_parser_1 = require("node-html-parser");
const types_1 = require("./types");
const touch_icon_1 = require("./touch-icon");
const test_helper_1 = require("./test-helper");
const helper_1 = require("./helper");
const runCheckTouchIconTitleTest = (headFragment_1, output_1, ...args_1) => __awaiter(void 0, [headFragment_1, output_1, ...args_1], void 0, function* (headFragment, output, fetchDatabase = {}) {
const root = headFragment ? (0, node_html_parser_1.parse)(headFragment) : null;
const result = yield (0, touch_icon_1.checkTouchIconTitle)('https://example.com/', root, (0, test_helper_1.testFetcher)(fetchDatabase));
const filteredMessages = result.messages.map(m => ({ status: m.status, id: m.id }));
expect({
messages: filteredMessages,
appTitle: result.appTitle
}).toEqual(output);
});
test('checkTouchIconTitle - noHead', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTitleTest(null, { messages: [{
status: types_1.CheckerStatus.Error,
id: types_1.MessageId.noHead,
}] });
}));
test('checkTouchIconTitle - noTouchWebAppTitle', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTitleTest('<title>Some text</title>', { messages: [{
status: types_1.CheckerStatus.Warning,
id: types_1.MessageId.noTouchWebAppTitle,
}] });
}));
test('checkTouchIconTitle - multipleTouchWebAppTitles', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTitleTest(`
<meta name="apple-mobile-web-app-title" content="First title">
<meta name="apple-mobile-web-app-title" content="Second title">
`, { messages: [{
status: types_1.CheckerStatus.Error,
id: types_1.MessageId.multipleTouchWebAppTitles,
}] });
}));
test('checkTouchIconTitle - touchWebAppTitleDeclared', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTitleTest(`
<meta name="apple-mobile-web-app-title" content="The App Name">
`, { messages: [{
status: types_1.CheckerStatus.Ok,
id: types_1.MessageId.touchWebAppTitleDeclared,
}], appTitle: 'The App Name' });
}));
const runCheckTouchIconTest = (headFragment_2, output_2, ...args_2) => __awaiter(void 0, [headFragment_2, output_2, ...args_2], void 0, function* (headFragment, output, fetchDatabase = {}) {
const root = headFragment ? (0, node_html_parser_1.parse)(headFragment) : null;
const result = yield (0, touch_icon_1.checkTouchIconIcon)('https://example.com/', root, (0, test_helper_1.testFetcher)(fetchDatabase));
const filteredMessages = result.messages.map(m => ({ status: m.status, id: m.id }));
expect({
messages: filteredMessages,
touchIcon: result.touchIcon
}).toEqual(Object.assign(Object.assign({}, output), { touchIcon: output.touchIcon || null }));
});
test('checkTouchIcon - noHead', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTest(null, { messages: [{
status: types_1.CheckerStatus.Error,
id: types_1.MessageId.noHead,
}] });
}));
test('checkTouchIcon - noTouchIcon', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTest('<title>Some text</title>', { messages: [{
status: types_1.CheckerStatus.Error,
id: types_1.MessageId.noTouchIcon,
}] });
}));
test('checkTouchIcon - multipleTouchIcon - no size', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTest(`
<link rel="apple-touch-icon" href="some-icon.png">
<link rel="apple-touch-icon" href="some-other-icon.png">
`, { messages: [{
status: types_1.CheckerStatus.Ok,
id: types_1.MessageId.touchIconDeclared,
}, {
status: types_1.CheckerStatus.Error,
id: types_1.MessageId.duplicatedTouchIconSizes,
}] }, {
'https://example.com/some-icon.png': {
status: 200,
contentType: 'image/png',
readableStream: null
},
'https://example.com/some-other-icon.png': {
status: 200,
contentType: 'image/png',
readableStream: null
}
});
}));
test('checkTouchIcon - multipleTouchIcon - specific size', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTest(`
<link rel="apple-touch-icon" sizes="180x180" href="some-icon.png">
<link rel="apple-touch-icon" sizes="180x180" href="some-other-icon.png">
`, { messages: [{
status: types_1.CheckerStatus.Ok,
id: types_1.MessageId.touchIconDeclared,
}, {
status: types_1.CheckerStatus.Error,
id: types_1.MessageId.duplicatedTouchIconSizes,
}] }, {
'https://example.com/some-icon.png': {
status: 200,
contentType: 'image/png',
readableStream: null
},
'https://example.com/some-other-icon.png': {
status: 200,
contentType: 'image/png',
readableStream: null
}
});
}));
const testIcon = './fixtures/180x180.png';
test('checkTouchIcon - Regular case', () => __awaiter(void 0, void 0, void 0, function* () {
yield runCheckTouchIconTest(`
<link rel="apple-touch-icon" href="some-other-icon.png">
`, { messages: [{
status: types_1.CheckerStatus.Ok,
id: types_1.MessageId.touchIconDeclared,
}, {
status: types_1.CheckerStatus.Ok,
id: types_1.MessageId.touchIconDownloadable,
}, {
status: types_1.CheckerStatus.Ok,
id: types_1.MessageId.touchIconSquare
}], touchIcon: (0, helper_1.bufferToDataUrl)(yield (0, helper_1.readableStreamToBuffer)(yield (0, helper_1.filePathToReadableStream)(testIcon)), 'image/png')
}, {
'https://example.com/some-other-icon.png': {
status: 200,
contentType: 'image/png',
readableStream: yield (0, helper_1.filePathToReadableStream)(testIcon)
}
});
}));
test('getDuplicatedSizes', () => {
// No duplicates
expect((0, touch_icon_1.getDuplicatedSizes)([])).toEqual([]);
expect((0, touch_icon_1.getDuplicatedSizes)([undefined])).toEqual([]);
expect((0, touch_icon_1.getDuplicatedSizes)(['180x180'])).toEqual([]);
expect((0, touch_icon_1.getDuplicatedSizes)([undefined, '180x180'])).toEqual([]);
// Duplicates
expect((0, touch_icon_1.getDuplicatedSizes)(['152x152', '180x180', '180x180'])).toEqual(['180x180']);
expect((0, touch_icon_1.getDuplicatedSizes)([undefined, '180x180', undefined, undefined])).toEqual([undefined]);
expect((0, touch_icon_1.getDuplicatedSizes)([
'152x152', '180x180', '152x152', undefined, '152x152', undefined
])).toEqual([
'152x152', undefined
]);
});