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