Skip to content

Commit b00a64f

Browse files
committed
(optional) test: Add a test helper for inspecting logs.
This is inspired by `TestCase.assertLogs`, which is widely adapted in the Zulip server tests. This doesn't address the TODO comment in lib/log.dart, because the feature is not really used for debugging. Signed-off-by: Zixuan James Li <[email protected]>
1 parent 727b9d8 commit b00a64f

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

lib/log.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
import 'package:flutter/foundation.dart';
12

23
/// Whether [debugLog] should do anything.
34
///
45
/// This has an effect only in a debug build.
56
bool debugLogEnabled = false;
67

8+
/// Used for log inspection in tests.
9+
@visibleForTesting
10+
List<String>? debugLogHistory;
11+
712
/// Print a log message, if debug logging is enabled.
813
///
914
/// In a debug build, if [debugLogEnabled] is true, this prints the given
@@ -26,6 +31,7 @@ bool debugLog(String message) {
2631
if (debugLogEnabled) {
2732
print(message); // ignore: avoid_print
2833
}
34+
debugLogHistory?.add(message);
2935
return true;
3036
}());
3137
return true;

test/model/message_test.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import '../api/model/model_checks.dart';
1414
import '../api/model/submessage_checks.dart';
1515
import '../example_data.dart' as eg;
1616
import '../stdlib_checks.dart';
17+
import '../test_log.dart';
1718
import 'message_list_test.dart';
1819
import 'store_checks.dart';
1920
import 'test_store.dart';
@@ -702,15 +703,16 @@ void main() {
702703

703704
test('ignore submessage event with malformed content', () async {
704705
final message = await preparePollMessage(question: 'Old question');
705-
await store.handleEvent(SubmessageEvent(
706+
await checkLogs(() => store.handleEvent(SubmessageEvent(
706707
id: 0, msgType: SubmessageType.widget, submessageId: 123,
707708
messageId: message.id,
708709
senderId: eg.selfUser.userId,
709710
content: jsonEncode({
710711
'type': 'question',
711712
// Invalid type for question
712713
'question': 100,
713-
})));
714+
}))))..length.equals(2)
715+
..last.contains('Malformed submessage event data for poll');
714716
checkNotifiedOnce();
715717
checkPoll(message).question.equals('Old question');
716718
});

test/test_log.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'dart:async';
2+
3+
import 'package:checks/checks.dart';
4+
import 'package:zulip/log.dart';
5+
6+
Future<Subject<List<String>>> checkLogs(FutureOr<void> Function() callback) async {
7+
assert(debugLogHistory == null);
8+
debugLogHistory = [];
9+
try {
10+
await callback();
11+
return check(debugLogHistory!);
12+
} finally {
13+
debugLogHistory = null;
14+
}
15+
}

0 commit comments

Comments
 (0)