blob: 035289e8a9e7e9014a15b14c37c4c6677dfec36d [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"]));
});
});
}