UNPKG

chrome-devtools-frontend

Version:
80 lines (73 loc) 3.18 kB
// Copyright 2023 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import type * as Trace from '../../models/trace/trace.js'; import {defaultTraceEvent} from '../../testing/TraceHelpers.js'; import * as Timeline from './timeline.js'; describe('SaveFileFormatter', () => { function assertValidJSON(input: string) { try { JSON.parse(input); } catch { assert.fail('Parsing input as JSON failed'); } } describe('arrayOfObjectsJsonGenerator', () => { it('generates JSON where each event is on its own line', async () => { const eventOne = {...defaultTraceEvent, name: 'event_one'}; const eventTwo = {...defaultTraceEvent, name: 'event_two'}; const formatted = Array.from(Timeline.SaveFileFormatter.arrayOfObjectsJsonGenerator([eventOne, eventTwo])).join(''); assertValidJSON(formatted); assert.strictEqual(formatted, `[ {"name":"event_one","tid":0,"pid":0,"ts":0,"cat":"test","ph":"M"}, {"name":"event_two","tid":0,"pid":0,"ts":0,"cat":"test","ph":"M"} ]`); }); }); describe('traceJsonGenerator', () => { it('contains top level keys for the events and for the metadata', async () => { const eventOne = {...defaultTraceEvent, name: 'event_one'}; const eventTwo = {...defaultTraceEvent, name: 'event_two'}; const events = [eventOne, eventTwo]; const metadata: Trace.Types.File.MetaData = { source: 'DevTools', startTime: '1234', modifications: undefined, // Undefined values are removed within JSON.stringify networkThrottling: '4', cpuThrottling: 1, hardwareConcurrency: 1, enhancedTraceVersion: 1, }; const formatted = Array.from(Timeline.SaveFileFormatter.traceJsonGenerator(events, metadata)).join(''); assertValidJSON(formatted); assert.strictEqual(formatted, `{"metadata": { "enhancedTraceVersion": 1, "source": "DevTools", "startTime": "1234", "networkThrottling": "4", "cpuThrottling": 1, "hardwareConcurrency": 1 }, "traceEvents": [ {"name":"event_one","tid":0,"pid":0,"ts":0,"cat":"test","ph":"M"}, {"name":"event_two","tid":0,"pid":0,"ts":0,"cat":"test","ph":"M"} ]}\n`); // Extra check that enhancedTraceVersion is first, to ensure maximumTraceFileLengthToDetermineEnhancedTraces has no problem. const trace = JSON.parse(formatted); assert.strictEqual(Object.keys(trace.metadata).at(0), 'enhancedTraceVersion'); }); it('will emit {} for the metadata if none is provided', async () => { const eventOne = {...defaultTraceEvent, name: 'event_one'}; const eventTwo = {...defaultTraceEvent, name: 'event_two'}; const events = [eventOne, eventTwo]; const formatted = Array.from(Timeline.SaveFileFormatter.traceJsonGenerator(events, null)).join(''); assertValidJSON(formatted); assert.strictEqual(formatted, `{"metadata": {}, "traceEvents": [ {"name":"event_one","tid":0,"pid":0,"ts":0,"cat":"test","ph":"M"}, {"name":"event_two","tid":0,"pid":0,"ts":0,"cat":"test","ph":"M"} ]}\n`); }); }); });