UNPKG

lighthouse

Version:

> Stops you crashing into the rocks; lights the way

108 lines (96 loc) 3.95 kB
/** * @license * Copyright 2016 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const Audit144 = require('../../../audits/manifest/icons-min-144.js'); const Audit192 = require('../../../audits/manifest/icons-min-192.js'); const assert = require('assert'); const manifestParser = require('../../../helpers/manifest-parser'); /* global describe, it*/ describe('Manifest: icons audits', () => { describe('icons exist check', () => { it('fails when a manifest contains no icons array', () => { const manifestSrc = JSON.stringify({ name: 'NoIconsHere' }); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, false); assert.equal(Audit192.audit({manifest}).value, false); }); it('fails when a manifest contains no icons', () => { const manifestSrc = JSON.stringify({ icons: [] }); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, false); assert.equal(Audit192.audit({manifest}).value, false); }); }); describe('icons at least X size check', () => { it('fails when a manifest contains an icon with no size', () => { const manifestSrc = JSON.stringify({ icons: [{ src: 'icon.png' }] }); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, false); assert.equal(Audit192.audit({manifest}).value, false); }); it('succeeds when a manifest contains icons that are large enough', () => { // stub manifest contains a 192 icon const manifestSrc = JSON.stringify(require('./manifest.json')); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, true); assert.equal(Audit192.audit({manifest}).value, true); }); it('succeeds when there\'s one icon with multiple sizes, and one is valid', () => { const manifestSrc = JSON.stringify({ icons: [{ src: 'icon.png', sizes: '72x72 96x96 128x128 256x256' }] }); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, true); assert.equal(Audit192.audit({manifest}).value, true); }); it('succeeds when there\'s two icons, one without sizes; the other with a valid size', () => { const manifestSrc = JSON.stringify({ icons: [{ src: 'icon.png' }, { src: 'icon2.png', sizes: '256x256' }] }); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, true); assert.equal(Audit192.audit({manifest}).value, true); }); it('fails when an icon has a valid size, though it\'s non-square.', () => { // See also: https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/banners/app_banner_data_fetcher_unittest.cc&sq=package:chromium&type=cs&q=%22Non-square%20is%20okay%22%20file:%5Esrc/chrome/browser/banners/ const manifestSrc = JSON.stringify({ icons: [{ src: 'icon-non-square.png', sizes: '200x220' }] }); const manifest = manifestParser(manifestSrc); assert.equal(Audit144.audit({manifest}).value, false); assert.equal(Audit192.audit({manifest}).value, false); }); }); });