From 7ff404bab52df237606f2018ccab722b05beb955 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 1 Jan 2025 10:56:32 +0000 Subject: Highlight ranges in source description --- .../shedlang/compiler/config/BinConfigTests.java | 2 +- .../compiler/config/ProjectConfigTests.java | 6 +- .../config/json/Json5ObjectWithSourceTests.java | 18 +++--- .../compiler/sources/FileFragmentSourceTests.java | 73 ++++++++++++++++++++++ 4 files changed, 86 insertions(+), 13 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/config/BinConfigTests.java b/src/test/java/org/shedlang/compiler/config/BinConfigTests.java index d909bb84..eb6514d1 100644 --- a/src/test/java/org/shedlang/compiler/config/BinConfigTests.java +++ b/src/test/java/org/shedlang/compiler/config/BinConfigTests.java @@ -52,6 +52,6 @@ public class BinConfigTests { assertThat(error.source().describe(), equalTo(""" :3:20 mainNamespace: "A.B", - ^""")); + ^^^^^""")); } } diff --git a/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java b/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java index f0deac1e..e710dcc6 100644 --- a/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java +++ b/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java @@ -95,7 +95,7 @@ public class ProjectConfigTests { assertThat(error.source().describe(), equalTo(""" :1:8 {bins: true} - ^""" + ^^^^""" )); } @@ -161,7 +161,7 @@ public class ProjectConfigTests { assertThat(error.source().describe(), equalTo(""" :1:12 {examples: true} - ^""" + ^^^^""" )); } @@ -227,7 +227,7 @@ public class ProjectConfigTests { assertThat(error.source().describe(), equalTo(""" :1:12 {profiles: true} - ^""" + ^^^^""" )); } diff --git a/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java b/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java index ad7f7c1c..4dc1a117 100644 --- a/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java +++ b/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java @@ -41,7 +41,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:13 {}, - ^""" + ^^""" )); } @@ -74,7 +74,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:17 {x: true}, - ^""" + ^^^^""" )); } @@ -107,7 +107,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:17 {x: 1.2}, - ^""" + ^^^""" )); } @@ -189,7 +189,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:17 {x: true}, - ^""" + ^^^^""" )); } @@ -247,7 +247,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:13 {}, - ^""" + ^^""" )); } @@ -280,7 +280,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:20 {name: true}, - ^""" + ^^^^""" )); } @@ -311,7 +311,7 @@ public class Json5ObjectWithSourceTests { """ :5:20 {name: "two"}, - ^""" + ^^^^^""" )); } @@ -369,7 +369,7 @@ public class Json5ObjectWithSourceTests { assertThat(error.source().describe(), equalTo(""" :5:20 {name: true}, - ^""" + ^^^^""" )); } @@ -400,7 +400,7 @@ public class Json5ObjectWithSourceTests { """ :5:20 {name: "two"}, - ^""" + ^^^^^""" )); } } diff --git a/src/test/java/org/shedlang/compiler/sources/FileFragmentSourceTests.java b/src/test/java/org/shedlang/compiler/sources/FileFragmentSourceTests.java index c0d7684a..0c1df6ac 100644 --- a/src/test/java/org/shedlang/compiler/sources/FileFragmentSourceTests.java +++ b/src/test/java/org/shedlang/compiler/sources/FileFragmentSourceTests.java @@ -110,6 +110,79 @@ public class FileFragmentSourceTests { })).collect(Collectors.toList()); } + @Test + public void whenSourceIsZeroLengthThenPointerPointsToNextCharacter() { + var source = new FileFragmentSource( + "", + """ + abcdef + ghijkl + mnopqr""", + 9, + 9 + ); + + assertThat(source.describe(), equalTo(""" + :2:3 + ghijkl + ^""")); + } + + @Test + public void whenSourceIsOneCharacterThenPointerPointsToCharacter() { + var source = new FileFragmentSource( + "", + """ + abcdef + ghijkl + mnopqr""", + 9, + 9 + ); + + assertThat(source.describe(), equalTo(""" + :2:3 + ghijkl + ^""")); + } + + @Test + public void whenSourceIsMultipleCharactersOnSameLineThenPointerPointsToAllCharacters() { + var source = new FileFragmentSource( + "", + """ + abcdef + ghijkl + mnopqr""", + 9, + 12 + ); + + assertThat(source.describe(), equalTo(""" + :2:3 + ghijkl + ^^^""")); + } + + @Test + public void whenSourceIsMultipleCharactersOnMultipleLinesThenPointerPointsToFirstCharacter() { + // TODO: show multiple lines + var source = new FileFragmentSource( + "", + """ + abcdef + ghijkl + mnopqr""", + 9, + 14 + ); + + assertThat(source.describe(), equalTo(""" + :2:3 + ghijkl + ^""")); + } + @Test public void atReturnsSubsectionOfCompleteSource() { var source = FileFragmentSource.file("", "abcdefg"); -- cgit v1.2.3