Skip to content

Commit 1af077a

Browse files
chore: increase the test coverage of APM related classes.
1 parent 5cb061f commit 1af077a

File tree

3 files changed

+156
-0
lines changed

3 files changed

+156
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
9+
void main() {
10+
late MockScreenLoadingManager mockScreenLoadingManager;
11+
12+
setUp(() {
13+
mockScreenLoadingManager = MockScreenLoadingManager();
14+
ScreenLoadingManager.setInstance(mockScreenLoadingManager);
15+
});
16+
17+
testWidgets(
18+
'InstabugCaptureScreenLoading starts and reports screen loading trace',
19+
(WidgetTester tester) async {
20+
const screenName = "/TestScreen";
21+
22+
23+
when(mockScreenLoadingManager.sanitizeScreenName(screenName))
24+
.thenReturn(screenName);
25+
when(mockScreenLoadingManager.startScreenLoadingTrace(any)).thenAnswer((_) async {});
26+
when(mockScreenLoadingManager.reportScreenLoading(any)).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))
38+
.called(1);
39+
await tester.pumpAndSettle();
40+
verify(mockScreenLoadingManager.reportScreenLoading(any)).called(1);
41+
});
42+
}
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+
6+
test('ScreenLoadingTrace copyWith method should keep original values when no override happens', () {
7+
final trace = ScreenLoadingTrace(
8+
'TestScreen',
9+
startTimeInMicroseconds: 1000,
10+
startMonotonicTimeInMicroseconds: 2000,
11+
endTimeInMicroseconds: 3000,
12+
duration: 4000,
13+
);
14+
15+
final updatedTrace = trace.copyWith(
16+
17+
);
18+
19+
expect(updatedTrace.screenName, 'TestScreen');
20+
expect(updatedTrace.startTimeInMicroseconds, 1000);
21+
expect(updatedTrace.startMonotonicTimeInMicroseconds, 2000);
22+
expect(updatedTrace.endTimeInMicroseconds, 3000);
23+
expect(updatedTrace.duration, 4000);
24+
});
25+
26+
test('ScreenLoadingTrace copyWith method updates fields correctly', () {
27+
final trace = ScreenLoadingTrace(
28+
'TestScreen',
29+
startTimeInMicroseconds: 1000,
30+
startMonotonicTimeInMicroseconds: 2000,
31+
endTimeInMicroseconds: 3000,
32+
duration: 4000,
33+
);
34+
35+
final updatedTrace = trace.copyWith(
36+
startTimeInMicroseconds: 1500,
37+
startMonotonicTimeInMicroseconds: 2500,
38+
endTimeInMicroseconds: 3500,
39+
duration: 4500,
40+
41+
);
42+
43+
expect(updatedTrace.screenName, 'TestScreen');
44+
expect(updatedTrace.startTimeInMicroseconds, 1500);
45+
expect(updatedTrace.startMonotonicTimeInMicroseconds, 2500);
46+
expect(updatedTrace.endTimeInMicroseconds, 3500);
47+
expect(updatedTrace.duration, 4500);
48+
});
49+
50+
test('ScreenLoadingTrace toString method returns correct format', () {
51+
final trace = ScreenLoadingTrace(
52+
'TestScreen',
53+
startTimeInMicroseconds: 1000,
54+
startMonotonicTimeInMicroseconds: 2000,
55+
endTimeInMicroseconds: 3000,
56+
duration: 4000,
57+
);
58+
59+
expect(trace.toString(),
60+
'ScreenLoadingTrace{screenName: TestScreen, startTimeInMicroseconds: 1000, startMonotonicTimeInMicroseconds: 2000, endTimeInMicroseconds: 3000, duration: 4000}');
61+
});
62+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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(mockRouteMatcher.match(routePath: 'test/path', actualPath: 'MatchingScreen'))
31+
.thenReturn(true);
32+
33+
final trace = UiTrace(
34+
screenName: 'TestScreen',
35+
traceId: 123,
36+
matchingScreenName: 'MatchingScreen',
37+
);
38+
39+
expect(trace.matches('test/path'), isTrue);
40+
});
41+
42+
test('UiTrace toString method returns correct format', () {
43+
final trace = UiTrace(
44+
screenName: 'TestScreen',
45+
traceId: 123,
46+
matchingScreenName: 'MatchingScreen',
47+
);
48+
49+
expect(trace.toString(),
50+
'UiTrace{screenName: TestScreen, traceId: 123, isFirstScreenLoadingReported: false, isFirstScreenLoading: false}');
51+
});
52+
}

0 commit comments

Comments
 (0)