diff --git a/app/src/__tests__/angular-native-view.test.ts b/app/src/__tests__/angular-native-view.test.ts index 3a0948ab..8ceed4d2 100644 --- a/app/src/__tests__/angular-native-view.test.ts +++ b/app/src/__tests__/angular-native-view.test.ts @@ -113,7 +113,15 @@ describe('Angular Native view', () => { report({ web1: browser, an42: native }); await settle(fixture); - expect(tabNames(fixture)).toEqual(['Components', 'Signals', 'Injectors', 'Store', 'Pipes']); + expect(tabNames(fixture)).toEqual([ + 'Components', + 'Signals', + 'Injectors', + 'Store', + 'Queries', + 'Pipes', + 'Errors', + ]); expect(host(fixture).querySelector('nav button.active')?.textContent).toContain('Components'); expect(host(fixture).textContent).not.toContain('No Angular Native app is connected'); expect(hostPageId()).toBe('an42'); diff --git a/app/src/__tests__/native-controls.test.ts b/app/src/__tests__/native-controls.test.ts index 41776b83..95a82bee 100644 --- a/app/src/__tests__/native-controls.test.ts +++ b/app/src/__tests__/native-controls.test.ts @@ -100,18 +100,27 @@ describe('browser-only controls', () => { }); it.each(['angular-native', 'nativescript'])( - 'hides them for a %s page and keeps the tree', + 'hides the picker and the live views for a %s page, and keeps recording and the tree', async (platform) => { const fixture = await render(platform); const host = fixture.nativeElement as HTMLElement; expect(buttons(fixture)).not.toContain('Pick component on page'); - expect(buttons(fixture)).not.toContain('Record'); - expect(host.querySelector('#cd-heading')).toBeNull(); + expect(buttons(fixture)).toContain('Record'); + expect(host.querySelector('#cd-heading')).not.toBeNull(); + expect(buttons(fixture)).not.toContain('Flash checks'); + expect(buttons(fixture)).not.toContain('Performance track'); + expect(host.textContent).toContain('An app on a device has no DOM'); expect(host.textContent).toContain('App'); expect(host.querySelector('input[type="search"]')).not.toBeNull(); }, ); + it('shows the live views for a browser page', async () => { + const fixture = await render(); + expect(buttons(fixture)).toContain('Flash checks'); + expect(buttons(fixture)).toContain('Performance track'); + }); + it('cancels a pick on its own page when the dropdown shows another page', async () => { const { client, calls } = liveClient({ p1: page('p1'), p2: page('p2') }); const fixture = TestBed.createComponent(ComponentTree); diff --git a/app/src/app.ts b/app/src/app.ts index 66f878bb..74aeee11 100644 --- a/app/src/app.ts +++ b/app/src/app.ts @@ -107,7 +107,7 @@ const TAB_VIEW: Partial> = { capacitor: 'capacitor', }; const VIEW_TABS: Partial> = { - 'angular-native': ['components', 'signals', 'injectors', 'store', 'pipes'], + 'angular-native': ['components', 'signals', 'injectors', 'store', 'queries', 'pipes', 'errors'], }; const NATIVESCRIPT_SETUP: ComingSoonInfo = { diff --git a/app/src/pages/cd-recording.ts b/app/src/pages/cd-recording.ts index 63c5d716..5c511689 100644 --- a/app/src/pages/cd-recording.ts +++ b/app/src/pages/cd-recording.ts @@ -71,11 +71,14 @@ const SHOWN_CYCLES = 30; often each instance was checked. Times come from a development build. While it records, the page also wraps Angular's scheduler, adds a signal write hook and watches DOM updates; all of it stops with the recording. + @if (native()) { + An app on a device has no DOM, so checks that changed nothing are not counted there. + }

@if (page()?.supported === false) { } - @if (!imported()) { + @if (!imported() && !native()) {
Live views