Skip to content

Commit

Permalink
feat(mason_cli): search separator length uses terminalColumns (#678)
Browse files Browse the repository at this point in the history
  • Loading branch information
felangel committed Dec 23, 2022
1 parent 05baddb commit 9a37e37
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 1 deletion.
14 changes: 13 additions & 1 deletion packages/mason_cli/lib/src/commands/search.dart
@@ -1,3 +1,6 @@
import 'dart:io';
import 'dart:math';

import 'package:mason/mason.dart' hide packageVersion, Brick;
import 'package:mason_api/mason_api.dart';
import 'package:mason_cli/src/command.dart';
Expand Down Expand Up @@ -52,7 +55,7 @@ class SearchCommand extends MasonCommand {
)
..info(brick.description)
..info(brickLink)
..info(darkGray.wrap('-' * 80));
..info(darkGray.wrap('-' * _separatorLength()));
}
return ExitCode.success.code;
} catch (error) {
Expand All @@ -62,3 +65,12 @@ class SearchCommand extends MasonCommand {
}
}
}

int _separatorLength() {
const maxSeparatorLength = 80;
try {
return min(stdout.terminalColumns, maxSeparatorLength);
} catch (_) {
return maxSeparatorLength;
}
}
66 changes: 66 additions & 0 deletions packages/mason_cli/test/commands/search_test.dart
@@ -1,3 +1,5 @@
import 'dart:io';

import 'package:args/args.dart';
import 'package:args/command_runner.dart';
import 'package:mason/mason.dart' hide Brick;
Expand All @@ -16,13 +18,16 @@ class MockProgress extends Mock implements Progress {}

class MockArgResults extends Mock implements ArgResults {}

class MockStdout extends Mock implements Stdout {}

void main() {
group('SearchCommand', () {
late Logger logger;
late MasonApi masonApi;
late SearchCommand searchCommand;
late ArgResults argResults;
late BrickSearchResult brick;
late Stdout stdout;

setUp(() {
brick = BrickSearchResult(
Expand All @@ -36,6 +41,7 @@ void main() {
logger = MockLogger();
masonApi = MockMasonApi();
argResults = MockArgResults();
stdout = MockStdout();
searchCommand = SearchCommand(logger: logger, masonApi: masonApi)
..testArgResults = argResults;

Expand Down Expand Up @@ -154,5 +160,65 @@ void main() {
).called(1);
verify(() => logger.err('$exception')).called(1);
});

test('separator length is 80 when terminal is not available', () async {
final progress = MockProgress();
when(() => progress.complete(any())).thenAnswer((_) {});
when(() => logger.progress(any())).thenReturn(progress);
when(() => argResults.rest).thenReturn(['query']);
when(
() => masonApi.search(query: 'query'),
).thenAnswer((_) async => [brick]);

final result = await searchCommand.run();

expect(result, ExitCode.success.code);

verify(() => logger.info(darkGray.wrap('-' * 80))).called(1);
});

test('separator length is 80 when terminalColumns > 80', () async {
final progress = MockProgress();
when(() => progress.complete(any())).thenAnswer((_) {});
when(() => logger.progress(any())).thenReturn(progress);
when(() => argResults.rest).thenReturn(['query']);
when(
() => masonApi.search(query: 'query'),
).thenAnswer((_) async => [brick]);
when(() => stdout.hasTerminal).thenReturn(true);
when(() => stdout.terminalColumns).thenReturn(100);
when(() => stdout.supportsAnsiEscapes).thenReturn(true);
final result = await IOOverrides.runZoned(
() => searchCommand.run(),
stdout: () => stdout,
);

expect(result, ExitCode.success.code);

verify(() => logger.info(darkGray.wrap('-' * 80))).called(1);
});

test(
'separator length is terminalColumns '
'when terminalColumns < 80', () async {
final progress = MockProgress();
when(() => progress.complete(any())).thenAnswer((_) {});
when(() => logger.progress(any())).thenReturn(progress);
when(() => argResults.rest).thenReturn(['query']);
when(
() => masonApi.search(query: 'query'),
).thenAnswer((_) async => [brick]);
when(() => stdout.hasTerminal).thenReturn(true);
when(() => stdout.terminalColumns).thenReturn(42);
when(() => stdout.supportsAnsiEscapes).thenReturn(true);
final result = await IOOverrides.runZoned(
() => searchCommand.run(),
stdout: () => stdout,
);

expect(result, ExitCode.success.code);

verify(() => logger.info(darkGray.wrap('-' * 42))).called(1);
});
});
}

0 comments on commit 9a37e37

Please sign in to comment.