Skip to content

Commit 604ed0a

Browse files
authored
feat(dart_frog_cli): avoid logging empty newlines (#184)
1 parent df50f93 commit 604ed0a

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

packages/dart_frog_cli/lib/src/commands/dev/dev.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,11 @@ class DevCommand extends DartFrogCommand {
130130
});
131131

132132
process.stdout.listen((_) {
133-
final message = utf8.decode(_);
133+
final message = utf8.decode(_).trim();
134134
if (message.contains('[hotreload]')) hotReloadEnabled = true;
135135
if (!hasError) _generatorTarget.cacheLatestSnapshot();
136+
if (message.isNotEmpty) logger.info(message);
136137
hasError = false;
137-
logger.info(message);
138138
});
139139
}
140140

packages/dart_frog_cli/test/src/commands/dev/dev_test.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,56 @@ void main() {
127127
).called(1);
128128
});
129129

130+
test('logs process.stdout', () async {
131+
final generatorHooks = _MockGeneratorHooks();
132+
when(
133+
() => generatorHooks.preGen(
134+
vars: any(named: 'vars'),
135+
workingDirectory: any(named: 'workingDirectory'),
136+
onVarsChanged: any(named: 'onVarsChanged'),
137+
),
138+
).thenAnswer((invocation) async {
139+
(invocation.namedArguments[const Symbol('onVarsChanged')] as Function(
140+
Map<String, dynamic> vars,
141+
))
142+
.call(<String, dynamic>{});
143+
});
144+
when(
145+
() => generator.generate(
146+
any(),
147+
vars: any(named: 'vars'),
148+
fileConflictResolution: FileConflictResolution.overwrite,
149+
),
150+
).thenAnswer((_) async => []);
151+
when(() => generator.hooks).thenReturn(generatorHooks);
152+
when(() => process.stdout).thenAnswer(
153+
(_) => Stream.fromIterable([
154+
utf8.encode(' Message A '),
155+
utf8.encode(''),
156+
utf8.encode(' Message B'),
157+
utf8.encode(' '),
158+
utf8.encode('Message C '),
159+
utf8.encode(' '),
160+
utf8.encode('Message D'),
161+
]),
162+
);
163+
when(() => process.stderr).thenAnswer((_) => const Stream.empty());
164+
when(
165+
() => directoryWatcher.events,
166+
).thenAnswer((_) => const Stream.empty());
167+
168+
command.run().ignore();
169+
170+
await Future<void>.delayed(Duration.zero);
171+
172+
verifyInOrder([
173+
() => logger.info('Message A'),
174+
() => logger.info('Message B'),
175+
() => logger.info('Message C'),
176+
() => logger.info('Message D'),
177+
]);
178+
});
179+
130180
test('runs codegen when changes are made to the public/routes directory',
131181
() async {
132182
final controller = StreamController<WatchEvent>();

0 commit comments

Comments
 (0)