@@ -5,18 +5,23 @@ import 'package:instabug_flutter/instabug_flutter.dart';
5
5
import 'package:instabug_flutter/src/generated/instabug.api.g.dart' ;
6
6
import 'package:instabug_flutter/src/utils/screen_loading/screen_loading_manager.dart' ;
7
7
import 'package:instabug_flutter/src/utils/screen_name_masker.dart' ;
8
+ import 'package:instabug_flutter/src/utils/screen_rendering/instabug_screen_render_manager.dart' ;
8
9
import 'package:mockito/annotations.dart' ;
9
10
import 'package:mockito/mockito.dart' ;
10
11
11
12
import 'instabug_navigator_observer_test.mocks.dart' ;
12
13
13
- @GenerateMocks ([InstabugHostApi ])
14
- @GenerateNiceMocks ([MockSpec <ScreenLoadingManager >()])
14
+ @GenerateMocks ([
15
+ InstabugHostApi ,
16
+ ScreenLoadingManager ,
17
+ InstabugScreenRenderManager ,
18
+ ])
15
19
void main () {
16
20
TestWidgetsFlutterBinding .ensureInitialized ();
17
21
18
22
final mHost = MockInstabugHostApi ();
19
23
final mScreenLoadingManager = MockScreenLoadingManager ();
24
+ final mScreenRenderManager = MockInstabugScreenRenderManager ();
20
25
21
26
late InstabugNavigatorObserver observer;
22
27
const screen = '/screen' ;
@@ -35,6 +40,7 @@ void main() {
35
40
previousRoute = createRoute (previousScreen);
36
41
37
42
ScreenNameMasker .I .setMaskingCallback (null );
43
+ when (mScreenRenderManager.screenRenderEnabled).thenReturn (false );
38
44
});
39
45
40
46
test ('should report screen change when a route is pushed' , () {
@@ -57,6 +63,9 @@ void main() {
57
63
'should report screen change when a route is popped and previous is known' ,
58
64
() {
59
65
fakeAsync ((async ) {
66
+ when (mScreenLoadingManager.startUiTrace (previousScreen, previousScreen))
67
+ .thenAnswer ((realInvocation) async => null );
68
+
60
69
observer.didPop (route, previousRoute);
61
70
62
71
async .elapse (const Duration (milliseconds: 1000 ));
@@ -94,6 +103,9 @@ void main() {
94
103
final route = createRoute ('' );
95
104
const fallback = 'N/A' ;
96
105
106
+ when (mScreenLoadingManager.startUiTrace (fallback, fallback))
107
+ .thenAnswer ((realInvocation) async => null );
108
+
97
109
observer.didPush (route, previousRoute);
98
110
99
111
async .elapse (const Duration (milliseconds: 1000 ));
@@ -111,6 +123,9 @@ void main() {
111
123
test ('should mask screen name when masking callback is set' , () {
112
124
const maskedScreen = 'maskedScreen' ;
113
125
126
+ when (mScreenLoadingManager.startUiTrace (maskedScreen, screen))
127
+ .thenAnswer ((realInvocation) async => null );
128
+
114
129
ScreenNameMasker .I .setMaskingCallback ((_) => maskedScreen);
115
130
116
131
fakeAsync ((async ) {
@@ -127,6 +142,62 @@ void main() {
127
142
).called (1 );
128
143
});
129
144
});
145
+
146
+ test ('should start new screen render collector when a route is pushed' , () {
147
+ fakeAsync ((async ) async {
148
+ const traceID = 123 ;
149
+
150
+ when (mScreenLoadingManager.startUiTrace (screen, screen))
151
+ .thenAnswer ((_) async => traceID);
152
+ when (mScreenRenderManager.screenRenderEnabled).thenReturn (true );
153
+
154
+ observer.didPush (route, previousRoute);
155
+
156
+ async .elapse (const Duration (milliseconds: 1000 ));
157
+
158
+ verify (
159
+ mScreenRenderManager.startScreenRenderCollectorForTraceId (traceID),
160
+ ).called (1 );
161
+ });
162
+ });
163
+
164
+ test (
165
+ 'should not start new screen render collector when a route is pushed and [traceID] is null' ,
166
+ () {
167
+ fakeAsync ((async ) async {
168
+ when (mScreenLoadingManager.startUiTrace (screen, screen))
169
+ .thenAnswer ((_) async => null );
170
+
171
+ when (mScreenRenderManager.screenRenderEnabled).thenReturn (true );
172
+
173
+ observer.didPush (route, previousRoute);
174
+
175
+ async .elapse (const Duration (milliseconds: 1000 ));
176
+
177
+ verifyNever (
178
+ mScreenRenderManager.startScreenRenderCollectorForTraceId (any),
179
+ );
180
+ });
181
+ });
182
+
183
+ test (
184
+ 'should not start new screen render collector when a route is pushed and [mScreenRenderManager.screenRenderEnabled] is false' ,
185
+ () {
186
+ fakeAsync ((async ) async {
187
+ when (mScreenLoadingManager.startUiTrace (screen, screen))
188
+ .thenAnswer ((_) async => 123 );
189
+
190
+ when (mScreenRenderManager.screenRenderEnabled).thenReturn (false );
191
+
192
+ observer.didPush (route, previousRoute);
193
+
194
+ async .elapse (const Duration (milliseconds: 1000 ));
195
+
196
+ verifyNever (
197
+ mScreenRenderManager.startScreenRenderCollectorForTraceId (any),
198
+ );
199
+ });
200
+ });
130
201
}
131
202
132
203
Route createRoute (String ? name) {
0 commit comments