| // 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\nneeds to be wrapped.\n\n' | |
| '${'0123456789' * 5}'; | |
| final _indentedLongLineWithNewlines = | |
| ' This is an indented long line with newlines that\nneeds 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'])); | |
| }); | |
| }); | |
| } |