blob: 50a4f9fe9fc73e25380ca70c82b155b22758a8f3 [file] [log] [blame]
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:args/src/utils.dart';
import 'package:test/test.dart';
const _lineLength = 40;
const _longLine = 'This is a long line that needs to be wrapped.';
final _longLineWithNewlines = 'This is a long line with newlines that\n'
'needs to be wrapped.\n\n' +
'0123456789' * 5;
final _indentedLongLineWithNewlines =
' This is an indented long line with newlines that\n'
'needs to be wrapped.\n\tAnd preserves tabs.\n \n ' +
'0123456789' * 5;
const _shortLine = 'Short line.';
const _indentedLongLine = ' This is an indented long line that needs to be '
'wrapped and indentation preserved.';
void main() {
group('padding', () {
test('can pad on the right.', () {
expect(padRight('foo', 6), equals('foo '));
});
});
group('text wrapping', () {
test("doesn't wrap short lines.", () {
expect(wrapText(_shortLine, length: _lineLength), equals(_shortLine));
});
test("doesn't wrap at all if not given a length", () {
expect(wrapText(_longLine), equals(_longLine));
});
test('able to wrap long lines', () {
expect(wrapText(_longLine, length: _lineLength), equals('''
This is a long line that needs to be
wrapped.'''));
});
test('wrap long lines with no whitespace', () {
expect(wrapText('0123456789' * 5, length: _lineLength), equals('''
0123456789012345678901234567890123456789
0123456789'''));
});
test('refuses to wrap to a column smaller than 10 characters', () {
expect(wrapText('$_longLine ' + '0123456789' * 4, length: 1), equals('''
This is a
long line
that needs
to be
wrapped.
0123456789
0123456789
0123456789
0123456789'''));
});
test('preserves indentation', () {
expect(wrapText(_indentedLongLine, length: _lineLength), equals('''
This is an indented long line that
needs to be wrapped and indentation
preserved.'''));
});
test('preserves indentation and stripping trailing whitespace', () {
expect(wrapText('$_indentedLongLine ', length: _lineLength), equals('''
This is an indented long line that
needs to be wrapped and indentation
preserved.'''));
});
test('wraps text with newlines', () {
expect(wrapText(_longLineWithNewlines, length: _lineLength), equals('''
This is a long line with newlines that
needs to be wrapped.
0123456789012345678901234567890123456789
0123456789'''));
});
test('preserves indentation in the presence of newlines', () {
expect(wrapText(_indentedLongLineWithNewlines, length: _lineLength),
equals('''
This is an indented long line with
newlines that
needs to be wrapped.
\tAnd preserves tabs.
01234567890123456789012345678901234567
890123456789'''));
});
test('removes trailing whitespace when wrapping', () {
expect(wrapText('$_longLine \t', length: _lineLength), equals('''
This is a long line that needs to be
wrapped.'''));
});
test('preserves trailing whitespace when not wrapping', () {
expect(wrapText('$_longLine \t'), equals('$_longLine \t'));
});
test('honors hangingIndent parameter', () {
expect(
wrapText(_longLine, length: _lineLength, hangingIndent: 6), equals('''
This is a long line that needs to be
wrapped.'''));
});
test('handles hangingIndent with a single unwrapped line.', () {
expect(wrapText(_shortLine, length: _lineLength, hangingIndent: 6),
equals('''
Short line.'''));
});
test(
'handles hangingIndent with two unwrapped lines and the second is empty.',
() {
expect(wrapText('$_shortLine\n', length: _lineLength, hangingIndent: 6),
equals('''
Short line.
'''));
});
test('honors hangingIndent parameter on already indented line.', () {
expect(wrapText(_indentedLongLine, length: _lineLength, hangingIndent: 6),
equals('''
This is an indented long line that
needs to be wrapped and
indentation preserved.'''));
});
test('honors hangingIndent parameter on already indented line.', () {
expect(
wrapText(_indentedLongLineWithNewlines,
length: _lineLength, hangingIndent: 6),
equals('''
This is an indented long line with
newlines that
needs to be wrapped.
And preserves tabs.
01234567890123456789012345678901234567
890123456789'''));
});
});
group('text wrapping as lines', () {
test("doesn't wrap short lines.", () {
expect(wrapTextAsLines(_shortLine, length: _lineLength),
equals([_shortLine]));
});
test("doesn't wrap at all if not given a length", () {
expect(wrapTextAsLines(_longLine), equals([_longLine]));
});
test('able to wrap long lines', () {
expect(wrapTextAsLines(_longLine, length: _lineLength),
equals(['This is a long line that needs to be', 'wrapped.']));
});
test('wrap long lines with no whitespace', () {
expect(wrapTextAsLines('0123456789' * 5, length: _lineLength),
equals(['0123456789012345678901234567890123456789', '0123456789']));
});
test('refuses to wrap to a column smaller than 10 characters', () {
expect(
wrapTextAsLines('$_longLine ' + '0123456789' * 4, length: 1),
equals([
'This is a',
'long line',
'that needs',
'to be',
'wrapped.',
'0123456789',
'0123456789',
'0123456789',
'0123456789'
]));
});
test("doesn't preserve indentation", () {
expect(
wrapTextAsLines(_indentedLongLine, length: _lineLength),
equals([
'This is an indented long line that needs',
'to be wrapped and indentation preserved.'
]));
});
test('strips trailing whitespace', () {
expect(
wrapTextAsLines('$_indentedLongLine ', length: _lineLength),
equals([
'This is an indented long line that needs',
'to be wrapped and indentation preserved.'
]));
});
test('splits text with newlines properly', () {
expect(
wrapTextAsLines(_longLineWithNewlines, length: _lineLength),
equals([
'This is a long line with newlines that',
'needs to be wrapped.',
'',
'0123456789012345678901234567890123456789',
'0123456789'
]));
});
test('does not preserves indentation in the presence of newlines', () {
expect(
wrapTextAsLines(_indentedLongLineWithNewlines, length: _lineLength),
equals([
'This is an indented long line with',
'newlines that',
'needs to be wrapped.',
'And preserves tabs.',
'',
'0123456789012345678901234567890123456789',
'0123456789'
]));
});
test('removes trailing whitespace when wrapping', () {
expect(wrapTextAsLines('$_longLine \t', length: _lineLength),
equals(['This is a long line that needs to be', 'wrapped.']));
});
test('preserves trailing whitespace when not wrapping', () {
expect(
wrapTextAsLines('$_longLine \t'), equals(['$_longLine \t']));
});
});
}