xref: /aosp_15_r20/external/pigweed/pw_web/log-viewer/test/log-store.test.js (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1// Copyright 2024 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(mockLogSource, document.body, {
25    logStore,
26  });
27  const logViewer = document.querySelector('log-viewer');
28  return { mockLogSource, destroyLogViewer, logViewer, logStore };
29}
30
31// Handle benign ResizeObserver error caused by custom log viewer initialization
32// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver#observation_errors
33function handleResizeObserverError() {
34  const e = window.onerror;
35  window.onerror = function (err) {
36    if (
37      err === 'ResizeObserver loop completed with undelivered notifications.'
38    ) {
39      console.warn(
40        'Ignored: ResizeObserver loop completed with undelivered notifications.',
41      );
42      return false;
43    } else {
44      return e(...arguments);
45    }
46  };
47}
48
49describe('log-store', () => {
50  let mockLogSource;
51  let destroyLogViewer;
52  let logViewer;
53  let logStore;
54
55  beforeEach(() => {
56    window.localStorage.clear();
57    ({ mockLogSource, destroyLogViewer, logViewer, logStore } =
58      setUpLogViewer());
59    handleResizeObserverError();
60  });
61
62  afterEach(() => {
63    mockLogSource.stop();
64    destroyLogViewer();
65  });
66
67  it('should maintain log entries emitted', async () => {
68    const logEntry = mockLogSource.readLogEntryFromHost();
69    mockLogSource.publishLogEntry(logEntry);
70    const logs = logStore.getLogs();
71
72    expect(logs.length).equal(1);
73    expect(logs[0]).equal(logEntry);
74  });
75});
76