UnitTestUtils#makeEmptyTrace.

Bug: 311643446
Test: npm run test:unit:ci
Change-Id: Ibce051a24a350d4ad67e14d7d10c746adfe26f72
diff --git a/tools/winscope/src/app/components/trace_view_component_test.ts b/tools/winscope/src/app/components/trace_view_component_test.ts
index fbef1cc..6f3d960 100644
--- a/tools/winscope/src/app/components/trace_view_component_test.ts
+++ b/tools/winscope/src/app/components/trace_view_component_test.ts
@@ -39,29 +39,21 @@
 } from 'messaging/winscope_event';
 import {TimestampConverterUtils} from 'test/unit/timestamp_converter_utils';
 import {TraceBuilder} from 'test/unit/trace_builder';
+import {UnitTestUtils} from 'test/unit/utils';
 import {TraceType} from 'trace/trace_type';
 import {Viewer, ViewType} from 'viewers/viewer';
 import {ViewerStub} from 'viewers/viewer_stub';
 import {TraceViewComponent} from './trace_view_component';
 
 describe('TraceViewComponent', () => {
-  const traceSf = new TraceBuilder<object>()
-    .setType(TraceType.SURFACE_FLINGER)
-    .setEntries([])
-    .build();
+  const traceSf = UnitTestUtils.makeEmptyTrace(TraceType.SURFACE_FLINGER);
   const traceWm = new TraceBuilder<object>()
     .setType(TraceType.WINDOW_MANAGER)
     .setEntries([{}])
     .setTimestamps([TimestampConverterUtils.makeZeroTimestamp()])
     .build();
-  const traceSr = new TraceBuilder<object>()
-    .setType(TraceType.SCREEN_RECORDING)
-    .setEntries([])
-    .build();
-  const traceProtolog = new TraceBuilder<object>()
-    .setType(TraceType.PROTO_LOG)
-    .setEntries([])
-    .build();
+  const traceSr = UnitTestUtils.makeEmptyTrace(TraceType.SCREEN_RECORDING);
+  const traceProtolog = UnitTestUtils.makeEmptyTrace(TraceType.PROTO_LOG);
 
   let fixture: ComponentFixture<TestHostComponent>;
   let component: TestHostComponent;
diff --git a/tools/winscope/src/app/timeline_data_test.ts b/tools/winscope/src/app/timeline_data_test.ts
index a6a0a7d..90c83ad 100644
--- a/tools/winscope/src/app/timeline_data_test.ts
+++ b/tools/winscope/src/app/timeline_data_test.ts
@@ -23,6 +23,7 @@
 import {TracesBuilder} from 'test/unit/traces_builder';
 import {TraceBuilder} from 'test/unit/trace_builder';
 import {UserNotifierChecker} from 'test/unit/user_notifier_checker';
+import {UnitTestUtils} from 'test/unit/utils';
 import {Traces} from 'trace/traces';
 import {TracePosition} from 'trace/trace_position';
 import {TraceType} from 'trace/trace_type';
@@ -212,10 +213,7 @@
     expect(success).toBeFalse();
 
     success = timelineData.trySetActiveTrace(
-      new TraceBuilder<{}>()
-        .setType(TraceType.SURFACE_FLINGER)
-        .setEntries([])
-        .build(),
+      UnitTestUtils.makeEmptyTrace(TraceType.SURFACE_FLINGER),
     );
     expect(timelineData.getActiveTrace()).toEqual(traceWm);
     expect(success).toBeFalse();
diff --git a/tools/winscope/src/test/unit/utils.ts b/tools/winscope/src/test/unit/utils.ts
index 38445e1..42eff18 100644
--- a/tools/winscope/src/test/unit/utils.ts
+++ b/tools/winscope/src/test/unit/utils.ts
@@ -346,6 +346,16 @@
     ).toEqual(0);
   }
 
+  static makeEmptyTrace<T extends TraceType>(
+    traceType: T,
+  ): Trace<TraceEntryTypeMap[T]> {
+    return new TraceBuilder<TraceEntryTypeMap[T]>()
+      .setEntries([])
+      .setTimestamps([])
+      .setType(traceType)
+      .build();
+  }
+
   private static testTimestamps(
     timestamp: Timestamp,
     expectedTimestamp: Timestamp,
diff --git a/tools/winscope/src/trace/trace_test.ts b/tools/winscope/src/trace/trace_test.ts
index 4deb6f1..b620063 100644
--- a/tools/winscope/src/trace/trace_test.ts
+++ b/tools/winscope/src/trace/trace_test.ts
@@ -19,9 +19,11 @@
 import {TimestampConverterUtils} from 'test/unit/timestamp_converter_utils';
 import {TraceBuilder} from 'test/unit/trace_builder';
 import {TraceUtils} from 'test/unit/trace_utils';
+import {UnitTestUtils} from 'test/unit/utils';
 import {FrameMapBuilder} from './frame_map_builder';
 import {AbsoluteFrameIndex} from './index_types';
 import {Trace} from './trace';
+import {TraceType} from './trace_type';
 
 describe('Trace', () => {
   let trace: Trace<string>;
@@ -1399,10 +1401,9 @@
   });
 
   it('spansMultipleDates()', () => {
-    const emptyTrace = new TraceBuilder<string>()
-      .setEntries([])
-      .setTimestamps([])
-      .build();
+    const emptyTrace = UnitTestUtils.makeEmptyTrace(
+      TraceType.TEST_TRACE_STRING,
+    );
     expect(emptyTrace.spansMultipleDates()).toBeFalse();
 
     const traceWithElapsedTimestamps = new TraceBuilder<string>()
diff --git a/tools/winscope/src/trace/traces_test.ts b/tools/winscope/src/trace/traces_test.ts
index 5611748..2853ed7 100644
--- a/tools/winscope/src/trace/traces_test.ts
+++ b/tools/winscope/src/trace/traces_test.ts
@@ -21,6 +21,7 @@
 import {TracesUtils} from 'test/unit/traces_utils';
 import {TraceBuilder} from 'test/unit/trace_builder';
 import {TraceUtils} from 'test/unit/trace_utils';
+import {UnitTestUtils} from 'test/unit/utils';
 import {FrameMapBuilder} from './frame_map_builder';
 import {AbsoluteFrameIndex} from './index_types';
 import {Traces} from './traces';
@@ -164,14 +165,8 @@
   });
 
   it('deleteTrace()', () => {
-    const trace0 = new TraceBuilder<string>()
-      .setType(TraceType.TEST_TRACE_STRING)
-      .setEntries([])
-      .build();
-    const trace1 = new TraceBuilder<number>()
-      .setType(TraceType.TEST_TRACE_NUMBER)
-      .setEntries([])
-      .build();
+    const trace0 = UnitTestUtils.makeEmptyTrace(TraceType.TEST_TRACE_STRING);
+    const trace1 = UnitTestUtils.makeEmptyTrace(TraceType.TEST_TRACE_NUMBER);
 
     const traces = new Traces();
     traces.addTrace(trace0);
@@ -190,14 +185,8 @@
   });
 
   it('hasTrace()', () => {
-    const trace0 = new TraceBuilder<string>()
-      .setType(TraceType.TEST_TRACE_STRING)
-      .setEntries([])
-      .build();
-    const trace1 = new TraceBuilder<number>()
-      .setType(TraceType.TEST_TRACE_NUMBER)
-      .setEntries([])
-      .build();
+    const trace0 = UnitTestUtils.makeEmptyTrace(TraceType.TEST_TRACE_STRING);
+    const trace1 = UnitTestUtils.makeEmptyTrace(TraceType.TEST_TRACE_NUMBER);
 
     const traces = new Traces();
     traces.addTrace(trace0);
diff --git a/tools/winscope/src/viewers/common/abstract_presenter_input_method_test.ts b/tools/winscope/src/viewers/common/abstract_presenter_input_method_test.ts
index ee73b2b..0e0a272 100644
--- a/tools/winscope/src/viewers/common/abstract_presenter_input_method_test.ts
+++ b/tools/winscope/src/viewers/common/abstract_presenter_input_method_test.ts
@@ -107,10 +107,7 @@
   override createPresenterWithEmptyTrace(
     callback: NotifyHierarchyViewCallbackType<ImeUiData>,
   ): AbstractPresenterInputMethod {
-    const trace = new TraceBuilder<HierarchyTreeNode>()
-      .setType(this.imeTraceType)
-      .setEntries([])
-      .build();
+    const trace = UnitTestUtils.makeEmptyTrace(this.imeTraceType);
     const traces = new Traces();
     traces.addTrace(trace);
     return new this.PresenterInputMethod(
diff --git a/tools/winscope/src/viewers/common/log_viewer_presenter_test.ts b/tools/winscope/src/viewers/common/log_viewer_presenter_test.ts
index 7fe9ecb..c927c28 100644
--- a/tools/winscope/src/viewers/common/log_viewer_presenter_test.ts
+++ b/tools/winscope/src/viewers/common/log_viewer_presenter_test.ts
@@ -25,6 +25,7 @@
 import {PropertyTreeBuilder} from 'test/unit/property_tree_builder';
 import {TimestampConverterUtils} from 'test/unit/timestamp_converter_utils';
 import {TraceBuilder} from 'test/unit/trace_builder';
+import {UnitTestUtils} from 'test/unit/utils';
 import {Trace} from 'trace/trace';
 import {TracePosition} from 'trace/trace_position';
 import {TraceType} from 'trace/trace_type';
@@ -280,7 +281,9 @@
     expect(listenerSpy).toHaveBeenCalledTimes(2);
 
     await presenter.onAppEvent(
-      new ActiveTraceChanged(new TraceBuilder<object>().setEntries([]).build()),
+      new ActiveTraceChanged(
+        UnitTestUtils.makeEmptyTrace(TraceType.TRANSACTIONS),
+      ),
     );
     pressRightArrowKey();
     expect(listenerSpy).toHaveBeenCalledTimes(3);
@@ -539,11 +542,7 @@
   });
 
   it('is robust to empty trace', async () => {
-    const trace = new TraceBuilder<PropertyTreeNode>()
-      .setType(TraceType.TRANSACTIONS)
-      .setEntries([])
-      .setTimestamps([])
-      .build();
+    const trace = UnitTestUtils.makeEmptyTrace(TraceType.TRANSACTIONS);
     const presenter = new MockPresenter(
       trace,
       new InMemoryStorage(),
diff --git a/tools/winscope/src/viewers/viewer_jank_cujs/presenter_test.ts b/tools/winscope/src/viewers/viewer_jank_cujs/presenter_test.ts
index 70b4233..214a5a4 100644
--- a/tools/winscope/src/viewers/viewer_jank_cujs/presenter_test.ts
+++ b/tools/winscope/src/viewers/viewer_jank_cujs/presenter_test.ts
@@ -84,10 +84,7 @@
   override async createPresenterWithEmptyTrace(
     callback: NotifyLogViewCallbackType<UiData>,
   ): Promise<Presenter> {
-    const trace = new TraceBuilder<PropertyTreeNode>()
-      .setType(TraceType.CUJS)
-      .setEntries([])
-      .build();
+    const trace = UnitTestUtils.makeEmptyTrace(TraceType.CUJS);
     return new Presenter(trace, new InMemoryStorage(), callback);
   }
 
diff --git a/tools/winscope/src/viewers/viewer_protolog/presenter_test.ts b/tools/winscope/src/viewers/viewer_protolog/presenter_test.ts
index 249c5fb..086aebb 100644
--- a/tools/winscope/src/viewers/viewer_protolog/presenter_test.ts
+++ b/tools/winscope/src/viewers/viewer_protolog/presenter_test.ts
@@ -20,6 +20,7 @@
 import {PropertyTreeBuilder} from 'test/unit/property_tree_builder';
 import {TimestampConverterUtils} from 'test/unit/timestamp_converter_utils';
 import {TraceBuilder} from 'test/unit/trace_builder';
+import {UnitTestUtils} from 'test/unit/utils';
 import {Trace} from 'trace/trace';
 import {TraceType} from 'trace/trace_type';
 import {
@@ -163,11 +164,8 @@
   override async createPresenterWithEmptyTrace(
     callback: NotifyLogViewCallbackType<UiData>,
   ): Promise<Presenter> {
-    const emptyTrace = new TraceBuilder<PropertyTreeNode>()
-      .setType(TraceType.PROTO_LOG)
-      .setEntries([])
-      .build();
-    return new Presenter(emptyTrace, callback, new InMemoryStorage());
+    const trace = UnitTestUtils.makeEmptyTrace(TraceType.PROTO_LOG);
+    return new Presenter(trace, callback, new InMemoryStorage());
   }
 
   override async createPresenter(
diff --git a/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts b/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts
index 78606ac..383d75e 100644
--- a/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts
+++ b/tools/winscope/src/viewers/viewer_surface_flinger/presenter_test.ts
@@ -137,10 +137,7 @@
   override createPresenterWithEmptyTrace(
     callback: NotifyHierarchyViewCallbackType<UiData>,
   ): Presenter {
-    const trace = new TraceBuilder<HierarchyTreeNode>()
-      .setType(TraceType.SURFACE_FLINGER)
-      .setEntries([])
-      .build();
+    const trace = UnitTestUtils.makeEmptyTrace(TraceType.SURFACE_FLINGER);
     const traces = new Traces();
     traces.addTrace(trace);
     return new Presenter(trace, traces, new InMemoryStorage(), callback);
diff --git a/tools/winscope/src/viewers/viewer_transactions/presenter_test.ts b/tools/winscope/src/viewers/viewer_transactions/presenter_test.ts
index 416b22e..1d1e605 100644
--- a/tools/winscope/src/viewers/viewer_transactions/presenter_test.ts
+++ b/tools/winscope/src/viewers/viewer_transactions/presenter_test.ts
@@ -172,11 +172,8 @@
   override async createPresenterWithEmptyTrace(
     callback: NotifyLogViewCallbackType<UiData>,
   ): Promise<Presenter> {
-    const emptyTrace = new TraceBuilder<PropertyTreeNode>()
-      .setType(TraceType.TRANSACTIONS)
-      .setEntries([])
-      .build();
-    return new Presenter(emptyTrace, new InMemoryStorage(), callback);
+    const trace = UnitTestUtils.makeEmptyTrace(TraceType.TRANSACTIONS);
+    return new Presenter(trace, new InMemoryStorage(), callback);
   }
 
   override async createPresenter(
diff --git a/tools/winscope/src/viewers/viewer_window_manager/presenter_test.ts b/tools/winscope/src/viewers/viewer_window_manager/presenter_test.ts
index c29af77..5a0596d 100644
--- a/tools/winscope/src/viewers/viewer_window_manager/presenter_test.ts
+++ b/tools/winscope/src/viewers/viewer_window_manager/presenter_test.ts
@@ -114,10 +114,7 @@
   override createPresenterWithEmptyTrace(
     callback: NotifyHierarchyViewCallbackType<UiData>,
   ): Presenter {
-    const trace = new TraceBuilder<HierarchyTreeNode>()
-      .setType(TraceType.WINDOW_MANAGER)
-      .setEntries([])
-      .build();
+    const trace = UnitTestUtils.makeEmptyTrace(TraceType.WINDOW_MANAGER);
     const traces = new Traces();
     traces.addTrace(trace);
     return new Presenter(trace, traces, new InMemoryStorage(), callback);