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