lighthouse 8.0.0-dev.20210709 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/architecture.md +101 -0
- package/docs/authenticated-pages.md +44 -0
- package/docs/bug-labels.md +35 -0
- package/docs/configuration.md +213 -0
- package/docs/emulation.md +32 -0
- package/docs/error-reporting.md +42 -0
- package/docs/hacking-tips.md +55 -0
- package/docs/headless-chrome.md +119 -0
- package/docs/lantern.md +55 -0
- package/docs/new-audits.md +99 -0
- package/docs/performance-budgets.md +187 -0
- package/docs/plugins.md +374 -0
- package/docs/puppeteer.md +95 -0
- package/docs/readme.md +164 -0
- package/docs/recipes/auth/README.md +129 -0
- package/docs/recipes/auth/example-lh-auth.js +81 -0
- package/docs/recipes/auth/package.json +11 -0
- package/docs/recipes/auth/server/public/dashboard-unauthenticated.html +21 -0
- package/docs/recipes/auth/server/public/dashboard.html +25 -0
- package/docs/recipes/auth/server/public/home-unauthenticated.html +27 -0
- package/docs/recipes/auth/server/public/home.html +17 -0
- package/docs/recipes/auth/server/public/unauthenticated.html +22 -0
- package/docs/recipes/auth/server/server.js +85 -0
- package/docs/recipes/custom-audit/custom-config.js +36 -0
- package/docs/recipes/custom-audit/package.json +8 -0
- package/docs/recipes/custom-audit/readme.md +32 -0
- package/docs/recipes/custom-audit/searchable-audit.js +46 -0
- package/docs/recipes/custom-audit/searchable-gatherer.js +32 -0
- package/docs/recipes/custom-gatherer-puppeteer/custom-audit.js +34 -0
- package/{root.js → docs/recipes/custom-gatherer-puppeteer/custom-config.js} +23 -2
- package/docs/recipes/custom-gatherer-puppeteer/custom-gatherer.js +51 -0
- package/docs/recipes/custom-gatherer-puppeteer/package.json +13 -0
- package/docs/recipes/custom-gatherer-puppeteer/readme.md +7 -0
- package/docs/recipes/custom-gatherer-puppeteer/test.sh +9 -0
- package/docs/recipes/gulp/gulpfile.js +79 -0
- package/docs/recipes/gulp/package.json +12 -0
- package/docs/recipes/gulp/public/index.html +22 -0
- package/docs/recipes/gulp/readme.md +6 -0
- package/docs/recipes/integration-test/README.md +14 -0
- package/docs/recipes/integration-test/example-lh-auth.test.js +160 -0
- package/docs/recipes/integration-test/package.json +9 -0
- package/docs/recipes/lighthouse-plugin-example/audits/preload-as.js +46 -0
- package/docs/recipes/lighthouse-plugin-example/package.json +11 -0
- package/docs/recipes/lighthouse-plugin-example/plugin-recipe-screenshot.png +0 -0
- package/docs/recipes/lighthouse-plugin-example/plugin.js +24 -0
- package/docs/recipes/lighthouse-plugin-example/readme.md +53 -0
- package/docs/releasing.md +164 -0
- package/docs/scoring.md +79 -0
- package/docs/throttling.md +150 -0
- package/docs/understanding-results.md +209 -0
- package/docs/v8-perf-faq.md +244 -0
- package/docs/variability.md +150 -0
- package/jest.config.js +0 -3
- package/lighthouse-cli/bin.js +8 -6
- package/lighthouse-core/audits/accessibility/aria-command-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-meter-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-progressbar-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-tooltip-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-treeitem-name.js +1 -1
- package/lighthouse-core/audits/apple-touch-icon.js +0 -1
- package/lighthouse-core/audits/audit.js +3 -3
- package/lighthouse-core/audits/autocomplete.js +2 -2
- package/lighthouse-core/audits/byte-efficiency/byte-efficiency-audit.js +14 -29
- package/lighthouse-core/audits/byte-efficiency/duplicated-javascript.js +2 -3
- package/lighthouse-core/audits/byte-efficiency/efficient-animated-content.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/legacy-javascript.js +2 -3
- package/lighthouse-core/audits/byte-efficiency/modern-image-formats.js +15 -55
- package/lighthouse-core/audits/byte-efficiency/offscreen-images.js +4 -8
- package/lighthouse-core/audits/byte-efficiency/render-blocking-resources.js +8 -15
- package/lighthouse-core/audits/byte-efficiency/total-byte-weight.js +9 -10
- package/lighthouse-core/audits/byte-efficiency/unminified-css.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/unminified-javascript.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/unused-css-rules.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/unused-javascript.js +1 -2
- package/lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js +2 -2
- package/lighthouse-core/audits/byte-efficiency/uses-optimized-images.js +1 -2
- package/lighthouse-core/audits/byte-efficiency/uses-responsive-images.js +24 -46
- package/lighthouse-core/audits/byte-efficiency/uses-text-compression.js +1 -1
- package/lighthouse-core/audits/critical-request-chains.js +0 -1
- package/lighthouse-core/audits/csp-xss.js +1 -1
- package/lighthouse-core/audits/diagnostics.js +0 -1
- package/lighthouse-core/audits/dobetterweb/geolocation-on-start.js +0 -1
- package/lighthouse-core/audits/dobetterweb/inspector-issues.js +1 -1
- package/lighthouse-core/audits/dobetterweb/notification-on-start.js +0 -1
- package/lighthouse-core/audits/dobetterweb/uses-http2.js +0 -1
- package/lighthouse-core/audits/final-screenshot.js +4 -8
- package/lighthouse-core/audits/font-display.js +0 -1
- package/lighthouse-core/audits/installable-manifest.js +3 -4
- package/lighthouse-core/audits/largest-contentful-paint-element.js +0 -1
- package/lighthouse-core/audits/long-tasks.js +1 -1
- package/lighthouse-core/audits/maskable-icon.js +0 -1
- package/lighthouse-core/audits/metrics/first-contentful-paint-3g.js +2 -4
- package/lighthouse-core/audits/metrics/first-contentful-paint.js +2 -4
- package/lighthouse-core/audits/metrics/first-meaningful-paint.js +2 -4
- package/lighthouse-core/audits/metrics/interactive.js +2 -4
- package/lighthouse-core/audits/metrics/largest-contentful-paint.js +2 -4
- package/lighthouse-core/audits/metrics/max-potential-fid.js +2 -4
- package/lighthouse-core/audits/metrics/speed-index.js +2 -4
- package/lighthouse-core/audits/metrics/total-blocking-time.js +2 -10
- package/lighthouse-core/audits/metrics.js +2 -4
- package/lighthouse-core/audits/performance-budget.js +0 -1
- package/lighthouse-core/audits/predictive-perf.js +6 -9
- package/lighthouse-core/audits/preload-fonts.js +1 -11
- package/lighthouse-core/audits/preload-lcp-image.js +5 -18
- package/lighthouse-core/audits/redirects.js +8 -10
- package/lighthouse-core/audits/screenshot-thumbnails.js +13 -28
- package/lighthouse-core/audits/seo/canonical.js +1 -2
- package/lighthouse-core/audits/seo/font-size.js +4 -4
- package/lighthouse-core/audits/seo/hreflang.js +2 -3
- package/lighthouse-core/audits/seo/http-status-code.js +16 -21
- package/lighthouse-core/audits/seo/is-crawlable.js +3 -4
- package/lighthouse-core/audits/seo/robots-txt.js +2 -2
- package/lighthouse-core/audits/seo/tap-targets.js +5 -5
- package/lighthouse-core/audits/server-response-time.js +2 -20
- package/lighthouse-core/audits/splash-screen.js +0 -1
- package/lighthouse-core/audits/themed-omnibox.js +0 -1
- package/lighthouse-core/audits/third-party-facades.js +0 -1
- package/lighthouse-core/audits/third-party-summary.js +3 -1
- package/lighthouse-core/audits/timing-budget.js +2 -4
- package/lighthouse-core/audits/uses-rel-preconnect.js +9 -14
- package/lighthouse-core/audits/uses-rel-preload.js +2 -13
- package/lighthouse-core/computed/main-thread-tasks.js +2 -2
- package/lighthouse-core/computed/metrics/cumulative-layout-shift.js +3 -3
- package/lighthouse-core/computed/metrics/first-contentful-paint-all-frames.js +6 -6
- package/lighthouse-core/computed/metrics/first-contentful-paint.js +8 -9
- package/lighthouse-core/computed/metrics/first-meaningful-paint.js +9 -10
- package/lighthouse-core/computed/metrics/interactive.js +24 -25
- package/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js +6 -6
- package/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js +6 -6
- package/lighthouse-core/computed/metrics/lantern-largest-contentful-paint.js +6 -6
- package/lighthouse-core/computed/metrics/lantern-metric.js +8 -16
- package/lighthouse-core/computed/metrics/largest-contentful-paint-all-frames.js +7 -7
- package/lighthouse-core/computed/metrics/largest-contentful-paint.js +9 -10
- package/lighthouse-core/computed/metrics/max-potential-fid.js +11 -8
- package/lighthouse-core/computed/metrics/metric.js +5 -32
- package/lighthouse-core/computed/metrics/speed-index.js +5 -6
- package/lighthouse-core/computed/metrics/timing-summary.js +45 -55
- package/lighthouse-core/computed/metrics/total-blocking-time.js +29 -36
- package/lighthouse-core/computed/page-dependency-graph.js +14 -14
- package/lighthouse-core/computed/resource-summary.js +7 -3
- package/lighthouse-core/computed/speedline.js +3 -3
- package/lighthouse-core/computed/trace-of-tab.js +86 -15
- package/lighthouse-core/computed/user-timings.js +5 -5
- package/lighthouse-core/config/default-config.js +0 -1
- package/lighthouse-core/fraggle-rock/config/config.js +7 -9
- package/lighthouse-core/fraggle-rock/config/default-config.js +2 -40
- package/lighthouse-core/fraggle-rock/config/filters.js +6 -39
- package/lighthouse-core/fraggle-rock/config/validation.js +4 -4
- package/lighthouse-core/fraggle-rock/gather/base-artifacts.js +19 -54
- package/lighthouse-core/fraggle-rock/gather/navigation-runner.js +10 -21
- package/lighthouse-core/fraggle-rock/gather/runner-helpers.js +2 -2
- package/lighthouse-core/fraggle-rock/gather/snapshot-runner.js +2 -2
- package/lighthouse-core/fraggle-rock/gather/timespan-runner.js +2 -2
- package/lighthouse-core/gather/driver/prepare.js +0 -3
- package/lighthouse-core/gather/fetcher.js +2 -0
- package/lighthouse-core/gather/gather-runner.js +14 -2
- package/lighthouse-core/gather/gatherers/image-elements.js +61 -24
- package/lighthouse-core/gather/gatherers/inspector-issues.js +2 -2
- package/lighthouse-core/gather/gatherers/script-elements.js +12 -45
- package/lighthouse-core/gather/gatherers/seo/font-size.js +5 -5
- package/lighthouse-core/gather/gatherers/seo/tap-targets.js +12 -64
- package/lighthouse-core/gather/gatherers/service-worker.js +3 -20
- package/lighthouse-core/gather/gatherers/trace-compat.js +1 -1
- package/lighthouse-core/gather/gatherers/trace-elements.js +3 -15
- package/lighthouse-core/gather/gatherers/trace.js +4 -13
- package/lighthouse-core/gather/gatherers/viewport-dimensions.js +1 -1
- package/lighthouse-core/lib/dependency-graph/simulator/network-analyzer.js +2 -13
- package/lighthouse-core/lib/emulation.js +2 -0
- package/lighthouse-core/lib/i18n/i18n.js +2 -2
- package/lighthouse-core/lib/i18n/locales/ar-XB.json +141 -141
- package/lighthouse-core/lib/i18n/locales/ar.json +143 -143
- package/lighthouse-core/lib/i18n/locales/bg.json +143 -143
- package/lighthouse-core/lib/i18n/locales/ca.json +141 -141
- package/lighthouse-core/lib/i18n/locales/cs.json +141 -141
- package/lighthouse-core/lib/i18n/locales/da.json +141 -141
- package/lighthouse-core/lib/i18n/locales/de.json +142 -142
- package/lighthouse-core/lib/i18n/locales/el.json +141 -141
- package/lighthouse-core/lib/i18n/locales/en-GB.json +141 -141
- package/lighthouse-core/lib/i18n/locales/en-US.ctc.json +6659 -0
- package/lighthouse-core/lib/i18n/locales/en-US.json +144 -150
- package/lighthouse-core/lib/i18n/locales/en-XA.json +141 -141
- package/lighthouse-core/lib/i18n/locales/en-XL.ctc.json +6628 -0
- package/lighthouse-core/lib/i18n/locales/en-XL.json +144 -150
- package/lighthouse-core/lib/i18n/locales/es-419.json +141 -141
- package/lighthouse-core/lib/i18n/locales/es.json +141 -141
- package/lighthouse-core/lib/i18n/locales/fi.json +143 -143
- package/lighthouse-core/lib/i18n/locales/fil.json +142 -142
- package/lighthouse-core/lib/i18n/locales/fr.json +141 -141
- package/lighthouse-core/lib/i18n/locales/he.json +142 -142
- package/lighthouse-core/lib/i18n/locales/hi.json +143 -143
- package/lighthouse-core/lib/i18n/locales/hr.json +141 -141
- package/lighthouse-core/lib/i18n/locales/hu.json +143 -143
- package/lighthouse-core/lib/i18n/locales/id.json +143 -143
- package/lighthouse-core/lib/i18n/locales/it.json +143 -143
- package/lighthouse-core/lib/i18n/locales/ja.json +143 -143
- package/lighthouse-core/lib/i18n/locales/ko.json +143 -143
- package/lighthouse-core/lib/i18n/locales/lt.json +143 -143
- package/lighthouse-core/lib/i18n/locales/lv.json +143 -143
- package/lighthouse-core/lib/i18n/locales/nl.json +141 -141
- package/lighthouse-core/lib/i18n/locales/no.json +141 -141
- package/lighthouse-core/lib/i18n/locales/pl.json +141 -141
- package/lighthouse-core/lib/i18n/locales/pt-PT.json +141 -141
- package/lighthouse-core/lib/i18n/locales/pt.json +141 -141
- package/lighthouse-core/lib/i18n/locales/ro.json +144 -144
- package/lighthouse-core/lib/i18n/locales/ru.json +143 -143
- package/lighthouse-core/lib/i18n/locales/sk.json +142 -142
- package/lighthouse-core/lib/i18n/locales/sl.json +141 -141
- package/lighthouse-core/lib/i18n/locales/sr-Latn.json +143 -143
- package/lighthouse-core/lib/i18n/locales/sr.json +143 -143
- package/lighthouse-core/lib/i18n/locales/sv.json +142 -142
- package/lighthouse-core/lib/i18n/locales/ta.json +141 -141
- package/lighthouse-core/lib/i18n/locales/te.json +143 -143
- package/lighthouse-core/lib/i18n/locales/th.json +143 -143
- package/lighthouse-core/lib/i18n/locales/tr.json +143 -143
- package/lighthouse-core/lib/i18n/locales/uk.json +141 -141
- package/lighthouse-core/lib/i18n/locales/vi.json +143 -143
- package/lighthouse-core/lib/i18n/locales/zh-HK.json +141 -141
- package/lighthouse-core/lib/i18n/locales/zh-TW.json +143 -143
- package/lighthouse-core/lib/i18n/locales/zh.json +143 -143
- package/lighthouse-core/lib/lh-error.js +2 -2
- package/lighthouse-core/lib/minify-trace.js +1 -1
- package/lighthouse-core/lib/network-request.js +1 -17
- package/lighthouse-core/lib/page-functions.js +5 -6
- package/lighthouse-core/lib/rect-helpers.js +3 -3
- package/lighthouse-core/lib/sd-validation/assets/jsonldcontext.json +7137 -0
- package/lighthouse-core/lib/sd-validation/assets/schema-tree.json +9900 -0
- package/{report/report-assets.js → lighthouse-core/lib/sd-validation/helpers/walk-object.js} +20 -12
- package/lighthouse-core/lib/sd-validation/json-expander.js +56 -0
- package/lighthouse-core/lib/sd-validation/json-linter.js +49 -0
- package/lighthouse-core/lib/sd-validation/jsonld-keyword-validator.js +50 -0
- package/lighthouse-core/lib/sd-validation/line-number-from-jsonld-path.js +60 -0
- package/lighthouse-core/lib/sd-validation/schema-validator.js +146 -0
- package/lighthouse-core/lib/sd-validation/scripts/download-jsonldcontext.js +30 -0
- package/lighthouse-core/lib/sd-validation/scripts/generate-schema-tree.js +97 -0
- package/lighthouse-core/lib/sd-validation/sd-validation.js +77 -0
- package/lighthouse-core/lib/tappable-rects.js +1 -1
- package/lighthouse-core/lib/tracehouse/trace-processor.js +42 -116
- package/lighthouse-core/lib/url-shim.js +2 -29
- package/lighthouse-core/report/html/html-report-assets.js +38 -0
- package/{report/README.md → lighthouse-core/report/html/readme.md} +11 -7
- package/{report → lighthouse-core/report/html}/renderer/category-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/crc-details-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/details-renderer.js +1 -1
- package/{report → lighthouse-core/report/html}/renderer/dom.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/element-screenshot-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/i18n.js +1 -1
- package/{report → lighthouse-core/report/html}/renderer/logger.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/performance-category-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/psi.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/pwa-category-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/report-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/report-ui-features.js +3 -3
- package/{report → lighthouse-core/report/html}/renderer/snippet-renderer.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/text-encoding.js +0 -0
- package/{report → lighthouse-core/report/html}/renderer/util.js +4 -7
- package/{report/assets/styles.css → lighthouse-core/report/html/report-styles.css} +0 -0
- package/{report/assets/standalone-template.html → lighthouse-core/report/html/report-template.html} +41 -1
- package/{report/assets → lighthouse-core/report/html}/templates.html +0 -0
- package/{report → lighthouse-core/report}/report-generator.js +1 -1
- package/lighthouse-core/runner.js +1 -1
- package/package.json +12 -13
- package/readme.md +2 -2
- package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +2 -3
- package/third-party/chromium-synchronization/installability-errors-test.js +2 -2
- package/third-party/download-content-shell/download-content-shell.js +1 -2
- package/third-party/snyk/snapshot.json +1 -1
- package/tsconfig.json +1 -0
- package/types/artifacts.d.ts +21 -41
- package/types/audit.d.ts +0 -2
- package/types/config.d.ts +2 -16
- package/types/externs.d.ts +0 -1
- package/types/gatherer.d.ts +13 -13
- package/types/html-renderer.d.ts +14 -14
- package/types/i18n.d.ts +1 -1
- package/lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js +0 -94
- package/lighthouse-core/computed/image-records.js +0 -62
- package/lighthouse-core/computed/metrics/navigation-metric.js +0 -46
- package/lighthouse-core/computed/processed-navigation.js +0 -21
- package/lighthouse-core/computed/processed-trace.js +0 -21
- package/lighthouse-core/gather/gatherers/gather-context.js +0 -25
- package/lighthouse-core/gather/gatherers/host-form-factor.js +0 -31
- package/lighthouse-core/gather/gatherers/host-user-agent.js +0 -29
- package/lighthouse-core/lib/lh-trace-processor.js +0 -46
- package/report/clients/standalone.js +0 -52
- package/report/test/renderer/category-renderer-test.js +0 -488
- package/report/test/renderer/crc-details-renderer-test.js +0 -115
- package/report/test/renderer/details-renderer-test.js +0 -843
- package/report/test/renderer/dom-test.js +0 -157
- package/report/test/renderer/element-screenshot-renderer-test.js +0 -189
- package/report/test/renderer/i18n-test.js +0 -146
- package/report/test/renderer/performance-category-renderer-test.js +0 -332
- package/report/test/renderer/psi-test.js +0 -152
- package/report/test/renderer/pwa-category-renderer-test.js +0 -303
- package/report/test/renderer/report-renderer-test.js +0 -325
- package/report/test/renderer/report-ui-features-test.js +0 -572
- package/report/test/renderer/snippet-renderer-test.js +0 -291
- package/report/test/renderer/text-encoding-test.js +0 -41
- package/report/test/renderer/util-test.js +0 -388
- package/report/test/report-generator-test.js +0 -145
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright 2019 The Lighthouse Authors. All Rights Reserved.
|
|
3
|
-
* 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
|
|
4
|
-
* 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.
|
|
5
|
-
*/
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
|
-
/* eslint-env jest */
|
|
9
|
-
|
|
10
|
-
const assert = require('assert').strict;
|
|
11
|
-
const jsdom = require('jsdom');
|
|
12
|
-
const reportAssets = require('../../report-assets.js');
|
|
13
|
-
const Util = require('../../renderer/util.js');
|
|
14
|
-
const I18n = require('../../renderer/i18n.js');
|
|
15
|
-
const DOM = require('../../renderer/dom.js');
|
|
16
|
-
const SnippetRenderer = require('../../renderer/snippet-renderer.js');
|
|
17
|
-
|
|
18
|
-
/* Generates a snippet lines array like this (for a single range from 1 to 4):
|
|
19
|
-
[
|
|
20
|
-
{number: 1, content 'L1'},
|
|
21
|
-
{number: 2, content 'L2'},
|
|
22
|
-
{number: 3, content 'L3'},
|
|
23
|
-
{number: 4, content 'L4'}
|
|
24
|
-
];
|
|
25
|
-
*/
|
|
26
|
-
function generateAvailableLinesArray(availableLineRanges) {
|
|
27
|
-
const lines = [];
|
|
28
|
-
availableLineRanges.forEach(({from, to}) => {
|
|
29
|
-
for (let i = from; i <= to; i++) {
|
|
30
|
-
lines.push({
|
|
31
|
-
lineNumber: i,
|
|
32
|
-
content: 'L' + i,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
return lines;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function makeSnippetDetails({
|
|
40
|
-
lineMessages,
|
|
41
|
-
generalMessages,
|
|
42
|
-
lines = null,
|
|
43
|
-
title = 'Snippet',
|
|
44
|
-
lineCount,
|
|
45
|
-
}) {
|
|
46
|
-
return {
|
|
47
|
-
type: 'snippet',
|
|
48
|
-
title: title,
|
|
49
|
-
lines: lines,
|
|
50
|
-
lineMessages,
|
|
51
|
-
generalMessages,
|
|
52
|
-
lineCount,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
describe('DetailsRenderer', () => {
|
|
57
|
-
let dom;
|
|
58
|
-
|
|
59
|
-
beforeAll(() => {
|
|
60
|
-
global.Util = Util;
|
|
61
|
-
global.Util.i18n = new I18n('en', {...Util.UIStrings});
|
|
62
|
-
const {document} = new jsdom.JSDOM(reportAssets.REPORT_TEMPLATES).window;
|
|
63
|
-
dom = new DOM(document);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
afterAll(() => {
|
|
67
|
-
global.Util.i18n = undefined;
|
|
68
|
-
global.Util = undefined;
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
function renderSnippet(details) {
|
|
72
|
-
const el = SnippetRenderer.render(dom, dom.document(), details, {});
|
|
73
|
-
|
|
74
|
-
return {
|
|
75
|
-
el,
|
|
76
|
-
contentLines: el.querySelectorAll('.lh-snippet__line--content'),
|
|
77
|
-
highlightedContentLines: el.querySelectorAll('.lh-snippet__line--content-highlighted'),
|
|
78
|
-
collapsedContentLines: el.querySelectorAll(
|
|
79
|
-
'.lh-snippet__line--content.lh-snippet__show-if-expanded'
|
|
80
|
-
),
|
|
81
|
-
uncollapsedContentLines: el.querySelectorAll(
|
|
82
|
-
'.lh-snippet__line--content:not(.lh-snippet__show-if-expanded)'
|
|
83
|
-
),
|
|
84
|
-
messageLines: el.querySelectorAll('.lh-snippet__line--message'),
|
|
85
|
-
omittedLinesIndicatorsWhenExpanded: el.querySelectorAll(
|
|
86
|
-
'.lh-snippet__line--placeholder:not(.lh-snippet__show-if-collapsed)'
|
|
87
|
-
),
|
|
88
|
-
omittedLinesIndicatorsWhenCollapsed: el.querySelectorAll(
|
|
89
|
-
'.lh-snippet__line--placeholder:not(.lh-snippet__show-if-expanded)'
|
|
90
|
-
),
|
|
91
|
-
title: el.querySelector('.lh-snippet__title'),
|
|
92
|
-
toggleExpandButton: el.querySelector('.lh-snippet__toggle-expand'),
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
it('Renders snippet with a message at the very top', () => {
|
|
97
|
-
const details = makeSnippetDetails({
|
|
98
|
-
lineMessages: [
|
|
99
|
-
{
|
|
100
|
-
lineNumber: 1,
|
|
101
|
-
message: 'Error',
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
generalMessages: [],
|
|
105
|
-
lines: generateAvailableLinesArray([{from: 1, to: 6}]),
|
|
106
|
-
lineCount: 100,
|
|
107
|
-
});
|
|
108
|
-
const {contentLines, messageLines, collapsedContentLines} = renderSnippet(details);
|
|
109
|
-
|
|
110
|
-
// 5 lines are visible, 1 is collapsed
|
|
111
|
-
assert.equal(collapsedContentLines.length, 1);
|
|
112
|
-
// All available lines are shown on expansion
|
|
113
|
-
assert.equal(contentLines.length, 6);
|
|
114
|
-
// 100 lines in total, so lines towards the end won't be shown
|
|
115
|
-
const lastLine = contentLines[contentLines.length - 1];
|
|
116
|
-
assert.equal(lastLine.nextSibling.textContent.trim(), '…');
|
|
117
|
-
|
|
118
|
-
// Shows message for second line
|
|
119
|
-
assert.equal(messageLines[0].textContent.trim(), 'Error');
|
|
120
|
-
assert.equal(messageLines[0].previousSibling.textContent.replace(/\s/g, ''), '1L1');
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('Renders first few lines if there are no messages', () => {
|
|
124
|
-
const details = makeSnippetDetails({
|
|
125
|
-
lineMessages: [],
|
|
126
|
-
generalMessages: [],
|
|
127
|
-
lines: generateAvailableLinesArray([{from: 1, to: 6}]),
|
|
128
|
-
lineCount: 100,
|
|
129
|
-
});
|
|
130
|
-
const {
|
|
131
|
-
uncollapsedContentLines,
|
|
132
|
-
omittedLinesIndicatorsWhenExpanded,
|
|
133
|
-
omittedLinesIndicatorsWhenCollapsed,
|
|
134
|
-
highlightedContentLines,
|
|
135
|
-
} = renderSnippet(details);
|
|
136
|
-
const lastUncollapsedLine = uncollapsedContentLines[uncollapsedContentLines.length - 1];
|
|
137
|
-
|
|
138
|
-
// Shows first 5 visible lines
|
|
139
|
-
assert.equal(lastUncollapsedLine.textContent.replace(/\s/g, ''), '5L5');
|
|
140
|
-
// "..." after the available lines, but only shows in expanded state
|
|
141
|
-
assert.equal(omittedLinesIndicatorsWhenExpanded.length, 1);
|
|
142
|
-
assert.equal(omittedLinesIndicatorsWhenCollapsed.length, 0);
|
|
143
|
-
// nothing is highlighted
|
|
144
|
-
assert.equal(highlightedContentLines.length, 0);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it('Renders first few lines if there are no messages for specific lines', () => {
|
|
148
|
-
const details = makeSnippetDetails({
|
|
149
|
-
lineMessages: [],
|
|
150
|
-
generalMessages: [
|
|
151
|
-
{
|
|
152
|
-
message: 'General error',
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
lines: generateAvailableLinesArray([{from: 1, to: 6}]),
|
|
156
|
-
lineCount: 100,
|
|
157
|
-
});
|
|
158
|
-
const {uncollapsedContentLines, messageLines, highlightedContentLines} = renderSnippet(details);
|
|
159
|
-
const lastUncollapsedLine = uncollapsedContentLines[uncollapsedContentLines.length - 1];
|
|
160
|
-
|
|
161
|
-
// Shows message
|
|
162
|
-
assert.equal(messageLines.length, 1);
|
|
163
|
-
|
|
164
|
-
// Shows first 5 visible lines
|
|
165
|
-
assert.equal(lastUncollapsedLine.textContent.replace(/\s/g, ''), '5L5');
|
|
166
|
-
|
|
167
|
-
// highlight everything (i.e. the 6 lines that are rendered)
|
|
168
|
-
assert.equal(highlightedContentLines.length, 6);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('Renders snippet with multiple messages surrounded by other lines', () => {
|
|
172
|
-
const details = makeSnippetDetails({
|
|
173
|
-
lineMessages: [
|
|
174
|
-
{
|
|
175
|
-
lineNumber: 40,
|
|
176
|
-
message: 'Error 1',
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
lineNumber: 70,
|
|
180
|
-
message: 'Error 2',
|
|
181
|
-
},
|
|
182
|
-
],
|
|
183
|
-
generalMessages: [],
|
|
184
|
-
lines: generateAvailableLinesArray([
|
|
185
|
-
{
|
|
186
|
-
from: 30,
|
|
187
|
-
to: 50,
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
from: 60,
|
|
191
|
-
to: 80,
|
|
192
|
-
},
|
|
193
|
-
]),
|
|
194
|
-
lineCount: 100,
|
|
195
|
-
});
|
|
196
|
-
const {
|
|
197
|
-
collapsedContentLines,
|
|
198
|
-
omittedLinesIndicatorsWhenCollapsed,
|
|
199
|
-
omittedLinesIndicatorsWhenExpanded,
|
|
200
|
-
highlightedContentLines,
|
|
201
|
-
} = renderSnippet(details);
|
|
202
|
-
|
|
203
|
-
// first available line is collapsed
|
|
204
|
-
assert.equal(collapsedContentLines[0].textContent.replace(/\s/g, ''), '30L30');
|
|
205
|
-
|
|
206
|
-
// puts omitted lines placeholder between the two messages
|
|
207
|
-
assert.equal(omittedLinesIndicatorsWhenCollapsed.length, 1);
|
|
208
|
-
// puts omitted lines placeholder between the two messages and around the whole snippet
|
|
209
|
-
assert.equal(omittedLinesIndicatorsWhenExpanded.length, 3);
|
|
210
|
-
|
|
211
|
-
// both lines with messages are highlighted
|
|
212
|
-
assert.equal(highlightedContentLines.length, 2);
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it('Can render both line-specific and non line-specific messages in one snippet', () => {
|
|
216
|
-
const details = makeSnippetDetails({
|
|
217
|
-
lineMessages: [
|
|
218
|
-
{
|
|
219
|
-
lineNumber: 5,
|
|
220
|
-
message: 'Error on line',
|
|
221
|
-
},
|
|
222
|
-
],
|
|
223
|
-
generalMessages: [
|
|
224
|
-
{
|
|
225
|
-
message: 'General error',
|
|
226
|
-
},
|
|
227
|
-
],
|
|
228
|
-
lines: generateAvailableLinesArray([{from: 1, to: 6}]),
|
|
229
|
-
lineCount: 100,
|
|
230
|
-
});
|
|
231
|
-
const {messageLines} = renderSnippet(details);
|
|
232
|
-
|
|
233
|
-
assert.equal(messageLines.length, 2);
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it('Renders a snippet header and allows toggling the expanded state', () => {
|
|
237
|
-
const details = makeSnippetDetails({
|
|
238
|
-
title: 'Test Snippet',
|
|
239
|
-
lineMessages: [],
|
|
240
|
-
generalMessages: [],
|
|
241
|
-
lines: generateAvailableLinesArray([{from: 1, to: 6}]),
|
|
242
|
-
lineCount: 100,
|
|
243
|
-
});
|
|
244
|
-
const {title, toggleExpandButton, el} = renderSnippet(details);
|
|
245
|
-
|
|
246
|
-
// Renders title
|
|
247
|
-
assert.ok(title.textContent.includes('Test Snippet'));
|
|
248
|
-
// Renders toggle button
|
|
249
|
-
assert.ok(toggleExpandButton);
|
|
250
|
-
assert.ok(!el.classList.contains('lh-snippet--expanded'));
|
|
251
|
-
|
|
252
|
-
toggleExpandButton.click();
|
|
253
|
-
assert.ok(el.classList.contains('lh-snippet--expanded'));
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
it('Does not render toggle button if all available lines are already visible', () => {
|
|
257
|
-
const details = makeSnippetDetails({
|
|
258
|
-
title: 'Test Snippet',
|
|
259
|
-
lineMessages: [],
|
|
260
|
-
generalMessages: [],
|
|
261
|
-
// We show all 5 lines by default, so there's nothing to expand
|
|
262
|
-
lines: generateAvailableLinesArray([{from: 1, to: 5}]),
|
|
263
|
-
});
|
|
264
|
-
const {toggleExpandButton} = renderSnippet(details);
|
|
265
|
-
|
|
266
|
-
assert.ok(!toggleExpandButton);
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
it('Adds ... to lines that have been truncated', () => {
|
|
270
|
-
const details = makeSnippetDetails({
|
|
271
|
-
lineMessages: [],
|
|
272
|
-
generalMessages: [],
|
|
273
|
-
lines: [
|
|
274
|
-
{
|
|
275
|
-
content: 'abc',
|
|
276
|
-
lineNumber: 1,
|
|
277
|
-
truncated: true,
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
content: 'xyz',
|
|
281
|
-
lineNumber: 2,
|
|
282
|
-
},
|
|
283
|
-
],
|
|
284
|
-
lineCount: 2,
|
|
285
|
-
});
|
|
286
|
-
const {contentLines} = renderSnippet(details);
|
|
287
|
-
|
|
288
|
-
assert.ok(contentLines[0].textContent.includes('…'));
|
|
289
|
-
assert.ok(!contentLines[1].textContent.includes('…'));
|
|
290
|
-
});
|
|
291
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
|
|
3
|
-
* 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
|
|
4
|
-
* 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.
|
|
5
|
-
*/
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
|
-
const TextEncoding = require('../../renderer/text-encoding.js');
|
|
9
|
-
|
|
10
|
-
/* eslint-env jest */
|
|
11
|
-
|
|
12
|
-
describe('TextEncoding', () => {
|
|
13
|
-
beforeAll(() => {
|
|
14
|
-
global.window = {pako: require('pako')};
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
afterAll(() => {
|
|
18
|
-
global.window = undefined;
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
/** @type {string} */
|
|
22
|
-
async function test(str) {
|
|
23
|
-
for (const gzip of [false, true]) {
|
|
24
|
-
const binary = await TextEncoding.toBase64(str, {gzip});
|
|
25
|
-
const roundtrip = TextEncoding.fromBase64(binary, {gzip});
|
|
26
|
-
expect(roundtrip.length).toEqual(str.length);
|
|
27
|
-
expect(roundtrip).toEqual(str);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
it('works', async () => {
|
|
32
|
-
await test('');
|
|
33
|
-
await test('hello');
|
|
34
|
-
await test('😃');
|
|
35
|
-
await test('{åß∂œ∑´}');
|
|
36
|
-
await test('Some examples of emoji are 😃, 🧘🏻♂️, 🌍, 🍞, 🚗, 📞, 🎉, ♥️, 🍆, and 🏁.');
|
|
37
|
-
await test('.'.repeat(125183));
|
|
38
|
-
await test('😃'.repeat(125183));
|
|
39
|
-
await test(JSON.stringify(require('../../../lighthouse-treemap/app/debug.json')));
|
|
40
|
-
});
|
|
41
|
-
});
|