Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions packages/talker/lib/src/talker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,11 @@ class Talker {
final key = data.key;
if (key != null) {
data.title = settings.getTitleByKey(key);
pen = settings.getPenByKey(key, fallbackPen: data.pen);
data.pen = pen;
// Only use the key's default color if user didn't provide a custom pen
if (pen == null) {
pen = settings.getPenByKey(key);
data.pen = pen;
}
}

_observer.onLog(data);
Expand Down
48 changes: 48 additions & 0 deletions packages/talker/test/talker_custom_log_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,54 @@ void main() {
expect(log.stackTrace, null);
expect(log.time, isNotNull);
});

test('custom pen should override default key color', () {
// This test verifies the fix for:
// https://github.com/Frezyx/talker/issues/313
// When a TalkerLog has both a custom pen and a key that matches
// a default log type (like 'debug'), the custom pen should be used.
final customPen = AnsiPen()..xterm(46);
final message = 'WITH A KEY';
final talkerLog = TalkerLog(
message,
pen: customPen,
key: TalkerKey.debug, // Uses a key that has a default color
);

talker.configure(
settings: TalkerSettings(
useConsoleLogs: false,
),
);
talker.logCustom(talkerLog);
final log = talker.history.last;

expect(log.message, message);
expect(log.key, TalkerKey.debug);
// The custom pen should be preserved, not overridden by the debug key's default color
expect(log.pen, customPen);
});

test('default key color is used when no custom pen provided', () {
final message = 'WITHOUT A PEN';
final talkerLog = TalkerLog(
message,
key: TalkerKey.debug, // Uses a key that has a default color
);

talker.configure(
settings: TalkerSettings(
useConsoleLogs: false,
),
);
talker.logCustom(talkerLog);
final log = talker.history.last;

expect(log.message, message);
expect(log.key, TalkerKey.debug);
// When no custom pen is provided, should use the default color for debug key
expect(log.pen, isNotNull);
});
});
});
}