| // 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'])); |
| }); |
| }); |
| } |