• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2023 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4// use this file except in compliance with the License. You may obtain a copy of
5// the License at
6//
7//     https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12// License for the specific language governing permissions and limitations under
13// the License.
14
15import { expect } from '@open-wc/testing';
16import { createLogViewer } from '../src/createLogViewer';
17import { MockLogSource } from '../src/custom/mock-log-source';
18import { LogStore } from '../src/log-store';
19
20// Initialize the log viewer component with a mock log source
21function setUpLogViewer() {
22  const mockLogSource = new MockLogSource();
23  const logStore = new LogStore();
24  const destroyLogViewer = createLogViewer(
25    mockLogSource,
26    document.body,
27    undefined,
28    logStore,
29  );
30  const logViewer = document.querySelector('log-viewer');
31  return { mockLogSource, destroyLogViewer, logViewer, logStore };
32}
33
34// Handle benign ResizeObserver error caused by custom log viewer initialization
35// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver#observation_errors
36function handleResizeObserverError() {
37  const e = window.onerror;
38  window.onerror = function (err) {
39    if (
40      err === 'ResizeObserver loop completed with undelivered notifications.'
41    ) {
42      console.warn(
43        'Ignored: ResizeObserver loop completed with undelivered notifications.',
44      );
45      return false;
46    } else {
47      return e(...arguments);
48    }
49  };
50}
51
52describe('log-store', () => {
53  let mockLogSource;
54  let destroyLogViewer;
55  let logViewer;
56  let logStore;
57
58  beforeEach(() => {
59    window.localStorage.clear();
60    ({ mockLogSource, destroyLogViewer, logViewer, logStore } =
61      setUpLogViewer());
62    handleResizeObserverError();
63  });
64
65  afterEach(() => {
66    mockLogSource.stop();
67    destroyLogViewer();
68  });
69
70  it('should maintain log entries emitted', async () => {
71    const logEntry = mockLogSource.readLogEntryFromHost();
72    mockLogSource.publishLogEntry(logEntry);
73    const logs = logStore.getLogs();
74
75    expect(logs.length).equal(1);
76    expect(logs[0]).equal(logEntry);
77  });
78});
79