| Index: test/span_test.dart
|
| diff --git a/test/span_test.dart b/test/span_test.dart
|
| index c62753b1a59d66b54c5901deb9cd5155559b068e..0240f87826dc97fdd6afb089f860c0c1ba425619 100644
|
| --- a/test/span_test.dart
|
| +++ b/test/span_test.dart
|
| @@ -9,10 +9,8 @@ import 'package:source_span/src/colors.dart' as colors;
|
| main() {
|
| var span;
|
| setUp(() {
|
| - span = new SourceSpan(
|
| - new SourceLocation(5, sourceUrl: "foo.dart"),
|
| - new SourceLocation(12, sourceUrl: "foo.dart"),
|
| - "foo bar");
|
| + span = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
|
| + new SourceLocation(12, sourceUrl: "foo.dart"), "foo bar");
|
| });
|
|
|
| group('errors', () {
|
| @@ -36,12 +34,27 @@ main() {
|
| });
|
| });
|
|
|
| + group('for new SourceSpanWithContext()', () {
|
| + test('context must contain text', () {
|
| + var start = new SourceLocation(2);
|
| + var end = new SourceLocation(5);
|
| + expect(() => new SourceSpanWithContext(start, end, "abc", "--axc--"),
|
| + throwsArgumentError);
|
| + });
|
| +
|
| + test('text starts at start.column in context', () {
|
| + var start = new SourceLocation(3);
|
| + var end = new SourceLocation(5);
|
| + expect(() => new SourceSpanWithContext(start, end, "abc", "--abc--"),
|
| + throwsArgumentError);
|
| + });
|
| + });
|
| +
|
| group('for union()', () {
|
| test('source URLs must match', () {
|
| var other = new SourceSpan(
|
| new SourceLocation(12, sourceUrl: "bar.dart"),
|
| - new SourceLocation(13, sourceUrl: "bar.dart"),
|
| - "_");
|
| + new SourceLocation(13, sourceUrl: "bar.dart"), "_");
|
|
|
| expect(() => span.union(other), throwsArgumentError);
|
| });
|
| @@ -49,18 +62,15 @@ main() {
|
| test('spans may not be disjoint', () {
|
| var other = new SourceSpan(
|
| new SourceLocation(13, sourceUrl: 'foo.dart'),
|
| - new SourceLocation(14, sourceUrl: 'foo.dart'),
|
| - "_");
|
| + new SourceLocation(14, sourceUrl: 'foo.dart'), "_");
|
|
|
| expect(() => span.union(other), throwsArgumentError);
|
| });
|
| });
|
|
|
| test('for compareTo() source URLs must match', () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(12, sourceUrl: "bar.dart"),
|
| - new SourceLocation(13, sourceUrl: "bar.dart"),
|
| - "_");
|
| + var other = new SourceSpan(new SourceLocation(12, sourceUrl: "bar.dart"),
|
| + new SourceLocation(13, sourceUrl: "bar.dart"), "_");
|
|
|
| expect(() => span.compareTo(other), throwsArgumentError);
|
| });
|
| @@ -75,10 +85,8 @@ main() {
|
|
|
| group("union()", () {
|
| test("works with a preceding adjacent span", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(0, sourceUrl: "foo.dart"),
|
| - new SourceLocation(5, sourceUrl: "foo.dart"),
|
| - "hey, ");
|
| + var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
|
| + new SourceLocation(5, sourceUrl: "foo.dart"), "hey, ");
|
|
|
| var result = span.union(other);
|
| expect(result.start, equals(other.start));
|
| @@ -87,10 +95,8 @@ main() {
|
| });
|
|
|
| test("works with a preceding overlapping span", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(0, sourceUrl: "foo.dart"),
|
| - new SourceLocation(8, sourceUrl: "foo.dart"),
|
| - "hey, foo");
|
| + var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
|
| + new SourceLocation(8, sourceUrl: "foo.dart"), "hey, foo");
|
|
|
| var result = span.union(other);
|
| expect(result.start, equals(other.start));
|
| @@ -99,10 +105,8 @@ main() {
|
| });
|
|
|
| test("works with a following adjacent span", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(12, sourceUrl: "foo.dart"),
|
| - new SourceLocation(16, sourceUrl: "foo.dart"),
|
| - " baz");
|
| + var other = new SourceSpan(new SourceLocation(12, sourceUrl: "foo.dart"),
|
| + new SourceLocation(16, sourceUrl: "foo.dart"), " baz");
|
|
|
| var result = span.union(other);
|
| expect(result.start, equals(span.start));
|
| @@ -111,10 +115,8 @@ main() {
|
| });
|
|
|
| test("works with a following overlapping span", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(9, sourceUrl: "foo.dart"),
|
| - new SourceLocation(16, sourceUrl: "foo.dart"),
|
| - "bar baz");
|
| + var other = new SourceSpan(new SourceLocation(9, sourceUrl: "foo.dart"),
|
| + new SourceLocation(16, sourceUrl: "foo.dart"), "bar baz");
|
|
|
| var result = span.union(other);
|
| expect(result.start, equals(span.start));
|
| @@ -123,19 +125,15 @@ main() {
|
| });
|
|
|
| test("works with an internal overlapping span", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(7, sourceUrl: "foo.dart"),
|
| - new SourceLocation(10, sourceUrl: "foo.dart"),
|
| - "o b");
|
| + var other = new SourceSpan(new SourceLocation(7, sourceUrl: "foo.dart"),
|
| + new SourceLocation(10, sourceUrl: "foo.dart"), "o b");
|
|
|
| expect(span.union(other), equals(span));
|
| });
|
|
|
| test("works with an external overlapping span", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(0, sourceUrl: "foo.dart"),
|
| - new SourceLocation(16, sourceUrl: "foo.dart"),
|
| - "hey, foo bar baz");
|
| + var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
|
| + new SourceLocation(16, sourceUrl: "foo.dart"), "hey, foo bar baz");
|
|
|
| expect(span.union(other), equals(other));
|
| });
|
| @@ -160,11 +158,10 @@ foo bar
|
| });
|
|
|
| test("gracefully handles empty text", () {
|
| - var span = new SourceSpan(
|
| - new SourceLocation(5), new SourceLocation(5), "");
|
| + var span =
|
| + new SourceSpan(new SourceLocation(5), new SourceLocation(5), "");
|
|
|
| - expect(span.message("oh no"),
|
| - equals("line 1, column 6: oh no"));
|
| + expect(span.message("oh no"), equals("line 1, column 6: oh no"));
|
| });
|
|
|
| test("doesn't colorize if color is false", () {
|
| @@ -175,37 +172,49 @@ foo bar
|
| });
|
|
|
| test("colorizes if color is true", () {
|
| - expect(span.message("oh no", color: true),
|
| - equals("""
|
| + expect(span.message("oh no", color: true), equals("""
|
| line 1, column 6 of foo.dart: oh no
|
| -${colors.RED}foo bar
|
| -^^^^^^^${colors.NONE}"""));
|
| +${colors.RED}foo bar${colors.NONE}
|
| +${colors.RED}^^^^^^^${colors.NONE}"""));
|
| });
|
|
|
| test("uses the given color if it's passed", () {
|
| expect(span.message("oh no", color: colors.YELLOW), equals("""
|
| line 1, column 6 of foo.dart: oh no
|
| -${colors.YELLOW}foo bar
|
| -^^^^^^^${colors.NONE}"""));
|
| +${colors.YELLOW}foo bar${colors.NONE}
|
| +${colors.YELLOW}^^^^^^^${colors.NONE}"""));
|
| + });
|
| + });
|
| +
|
| + group("message() with context", () {
|
| + var spanWithContext;
|
| + setUp(() {
|
| + spanWithContext = new SourceSpanWithContext(
|
| + new SourceLocation(5, sourceUrl: "foo.dart"),
|
| + new SourceLocation(12, sourceUrl: "foo.dart"), "foo bar",
|
| + "-----foo bar-----");
|
| + });
|
| +
|
| + test("underlines under the right column", () {
|
| + expect(spanWithContext.message("oh no", color: colors.YELLOW), equals("""
|
| +line 1, column 6 of foo.dart: oh no
|
| +-----${colors.YELLOW}foo bar${colors.NONE}-----
|
| + ${colors.YELLOW}^^^^^^^${colors.NONE}"""));
|
| });
|
| });
|
|
|
| group("compareTo()", () {
|
| test("sorts by start location first", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(6, sourceUrl: "foo.dart"),
|
| - new SourceLocation(14, sourceUrl: "foo.dart"),
|
| - "oo bar b");
|
| + var other = new SourceSpan(new SourceLocation(6, sourceUrl: "foo.dart"),
|
| + new SourceLocation(14, sourceUrl: "foo.dart"), "oo bar b");
|
|
|
| expect(span.compareTo(other), lessThan(0));
|
| expect(other.compareTo(span), greaterThan(0));
|
| });
|
|
|
| test("sorts by length second", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(5, sourceUrl: "foo.dart"),
|
| - new SourceLocation(14, sourceUrl: "foo.dart"),
|
| - "foo bar b");
|
| + var other = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
|
| + new SourceLocation(14, sourceUrl: "foo.dart"), "foo bar b");
|
|
|
| expect(span.compareTo(other), lessThan(0));
|
| expect(other.compareTo(span), greaterThan(0));
|
| @@ -218,37 +227,29 @@ ${colors.YELLOW}foo bar
|
|
|
| group("equality", () {
|
| test("two spans with the same locations are equal", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(5, sourceUrl: "foo.dart"),
|
| - new SourceLocation(12, sourceUrl: "foo.dart"),
|
| - "foo bar");
|
| + var other = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
|
| + new SourceLocation(12, sourceUrl: "foo.dart"), "foo bar");
|
|
|
| expect(span, equals(other));
|
| });
|
|
|
| test("a different start isn't equal", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(0, sourceUrl: "foo.dart"),
|
| - new SourceLocation(12, sourceUrl: "foo.dart"),
|
| - "hey, foo bar");
|
| + var other = new SourceSpan(new SourceLocation(0, sourceUrl: "foo.dart"),
|
| + new SourceLocation(12, sourceUrl: "foo.dart"), "hey, foo bar");
|
|
|
| expect(span, isNot(equals(other)));
|
| });
|
|
|
| test("a different end isn't equal", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(5, sourceUrl: "foo.dart"),
|
| - new SourceLocation(16, sourceUrl: "foo.dart"),
|
| - "foo bar baz");
|
| + var other = new SourceSpan(new SourceLocation(5, sourceUrl: "foo.dart"),
|
| + new SourceLocation(16, sourceUrl: "foo.dart"), "foo bar baz");
|
|
|
| expect(span, isNot(equals(other)));
|
| });
|
|
|
| test("a different source URL isn't equal", () {
|
| - var other = new SourceSpan(
|
| - new SourceLocation(5, sourceUrl: "bar.dart"),
|
| - new SourceLocation(12, sourceUrl: "bar.dart"),
|
| - "foo bar");
|
| + var other = new SourceSpan(new SourceLocation(5, sourceUrl: "bar.dart"),
|
| + new SourceLocation(12, sourceUrl: "bar.dart"), "foo bar");
|
|
|
| expect(span, isNot(equals(other)));
|
| });
|
|
|