Skip to content

Commit 01c9374

Browse files
Merge pull request #554 from Instabug/chore/increase-apm-test-coverage
Increase apm test coverage
2 parents 5cb061f + 14f24b6 commit 01c9374

File tree

3 files changed

+161
-0
lines changed

3 files changed

+161
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
import 'package:instabug_flutter/instabug_flutter.dart';
4+
import 'package:instabug_flutter/src/utils/screen_loading/screen_loading_manager.dart';
5+
import 'package:mockito/mockito.dart';
6+
import '../instabug_navigator_observer_test.mocks.dart';
7+
8+
void main() {
9+
late MockScreenLoadingManager mockScreenLoadingManager;
10+
11+
setUp(() {
12+
mockScreenLoadingManager = MockScreenLoadingManager();
13+
ScreenLoadingManager.setInstance(mockScreenLoadingManager);
14+
});
15+
16+
testWidgets(
17+
'InstabugCaptureScreenLoading starts and reports screen loading trace',
18+
(WidgetTester tester) async {
19+
const screenName = "/TestScreen";
20+
21+
when(mockScreenLoadingManager.sanitizeScreenName(screenName))
22+
.thenReturn(screenName);
23+
when(mockScreenLoadingManager.startScreenLoadingTrace(any))
24+
.thenAnswer((_) async {});
25+
when(mockScreenLoadingManager.reportScreenLoading(any))
26+
.thenAnswer((_) async {});
27+
28+
await tester.pumpWidget(
29+
MaterialApp(
30+
home: InstabugCaptureScreenLoading(
31+
screenName: screenName,
32+
child: Container(),
33+
),
34+
),
35+
);
36+
37+
verify(mockScreenLoadingManager.startScreenLoadingTrace(any)).called(1);
38+
await tester.pumpAndSettle();
39+
verify(mockScreenLoadingManager.reportScreenLoading(any)).called(1);
40+
});
41+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:instabug_flutter/src/utils/screen_loading/screen_loading_trace.dart';
3+
4+
void main() {
5+
test(
6+
'ScreenLoadingTrace copyWith method should keep original values when no override happens',
7+
() {
8+
final trace = ScreenLoadingTrace(
9+
'TestScreen',
10+
startTimeInMicroseconds: 1000,
11+
startMonotonicTimeInMicroseconds: 2000,
12+
endTimeInMicroseconds: 3000,
13+
duration: 4000,
14+
);
15+
16+
final updatedTrace = trace.copyWith();
17+
18+
expect(updatedTrace.screenName, 'TestScreen');
19+
expect(updatedTrace.startTimeInMicroseconds, 1000);
20+
expect(updatedTrace.startMonotonicTimeInMicroseconds, 2000);
21+
expect(updatedTrace.endTimeInMicroseconds, 3000);
22+
expect(updatedTrace.duration, 4000);
23+
});
24+
25+
test('ScreenLoadingTrace copyWith method updates fields correctly', () {
26+
final trace = ScreenLoadingTrace(
27+
'TestScreen',
28+
startTimeInMicroseconds: 1000,
29+
startMonotonicTimeInMicroseconds: 2000,
30+
endTimeInMicroseconds: 3000,
31+
duration: 4000,
32+
);
33+
34+
final updatedTrace = trace.copyWith(
35+
startTimeInMicroseconds: 1500,
36+
startMonotonicTimeInMicroseconds: 2500,
37+
endTimeInMicroseconds: 3500,
38+
duration: 4500,
39+
);
40+
41+
expect(updatedTrace.screenName, 'TestScreen');
42+
expect(updatedTrace.startTimeInMicroseconds, 1500);
43+
expect(updatedTrace.startMonotonicTimeInMicroseconds, 2500);
44+
expect(updatedTrace.endTimeInMicroseconds, 3500);
45+
expect(updatedTrace.duration, 4500);
46+
});
47+
48+
test('ScreenLoadingTrace toString method returns correct format', () {
49+
final trace = ScreenLoadingTrace(
50+
'TestScreen',
51+
startTimeInMicroseconds: 1000,
52+
startMonotonicTimeInMicroseconds: 2000,
53+
endTimeInMicroseconds: 3000,
54+
duration: 4000,
55+
);
56+
57+
expect(
58+
trace.toString(),
59+
'ScreenLoadingTrace{screenName: TestScreen, startTimeInMicroseconds: 1000, startMonotonicTimeInMicroseconds: 2000, endTimeInMicroseconds: 3000, duration: 4000}',
60+
);
61+
});
62+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:instabug_flutter/instabug_flutter.dart';
3+
import 'package:instabug_flutter/src/utils/screen_loading/ui_trace.dart';
4+
import 'package:mockito/annotations.dart';
5+
import 'package:mockito/mockito.dart';
6+
7+
import 'screen_loading_manager_test.mocks.dart';
8+
9+
@GenerateMocks([RouteMatcher])
10+
void main() {
11+
test('UiTrace copyWith method updates fields correctly', () {
12+
final trace = UiTrace(
13+
screenName: 'TestScreen',
14+
traceId: 123,
15+
matchingScreenName: 'MatchingScreen',
16+
);
17+
18+
final updatedTrace = trace.copyWith(
19+
screenName: 'UpdatedScreen',
20+
traceId: 456,
21+
);
22+
23+
expect(updatedTrace.screenName, 'UpdatedScreen');
24+
expect(updatedTrace.traceId, 456);
25+
});
26+
27+
test('UiTrace matches method returns correct result', () {
28+
final mockRouteMatcher = MockRouteMatcher();
29+
RouteMatcher.setInstance(mockRouteMatcher);
30+
when(
31+
mockRouteMatcher.match(
32+
routePath: 'test/path',
33+
actualPath: 'MatchingScreen',
34+
),
35+
).thenReturn(true);
36+
37+
final trace = UiTrace(
38+
screenName: 'TestScreen',
39+
traceId: 123,
40+
matchingScreenName: 'MatchingScreen',
41+
);
42+
43+
expect(trace.matches('test/path'), isTrue);
44+
});
45+
46+
test('UiTrace toString method returns correct format', () {
47+
final trace = UiTrace(
48+
screenName: 'TestScreen',
49+
traceId: 123,
50+
matchingScreenName: 'MatchingScreen',
51+
);
52+
53+
expect(
54+
trace.toString(),
55+
'UiTrace{screenName: TestScreen, traceId: 123, isFirstScreenLoadingReported: false, isFirstScreenLoading: false}',
56+
);
57+
});
58+
}

0 commit comments

Comments
 (0)