diff options
author | google-java-format Team <java-team-github-bot@google.com> | 2024-03-06 00:24:37 -0800 |
---|---|---|
committer | google-java-format Team <google-java-format-dev+copybara@google.com> | 2024-03-06 00:25:31 -0800 |
commit | 823d7c99bc61e05e26ec68ede3c42231b6e2e62b (patch) | |
tree | 978e7cfbb57009e0f632d81f26a6df816c66a389 | |
parent | f20d393babf0fb489a90a1d7913d7a43e5f8cff1 (diff) | |
download | google-java-format-823d7c99bc61e05e26ec68ede3c42231b6e2e62b.tar.gz |
Print all known values when an invalid range is given.
For easier root cause analysis when an invalid request is passed.
PiperOrigin-RevId: 613110312
-rw-r--r-- | core/src/main/java/com/google/googlejavaformat/java/JavaInput.java | 6 | ||||
-rw-r--r-- | core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java | 28 |
2 files changed, 27 insertions, 7 deletions
diff --git a/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java b/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java index 7b5eb84..b5290ab 100644 --- a/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java +++ b/core/src/main/java/com/google/googlejavaformat/java/JavaInput.java @@ -573,9 +573,11 @@ public final class JavaInput extends Input { if (characterRange.upperEndpoint() > text.length()) { throw new FormatterException( String.format( - "error: invalid length %d, offset + length (%d) is outside the file", + "error: invalid offset (%d) or length (%d); offset + length (%d) > file length (%d)", + characterRange.lowerEndpoint(), characterRange.upperEndpoint() - characterRange.lowerEndpoint(), - characterRange.upperEndpoint())); + characterRange.upperEndpoint(), + text.length())); } // empty range stands for "format the line under the cursor" Range<Integer> nonEmptyRange = diff --git a/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java b/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java index 9bbca49..b0d7b40 100644 --- a/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java +++ b/core/src/test/java/com/google/googlejavaformat/java/FormatterTest.java @@ -64,7 +64,7 @@ public final class FormatterTest { Path tmpdir = testFolder.newFolder().toPath(); Path path = tmpdir.resolve("A.java"); - Files.write(path, input.getBytes(UTF_8)); + Files.writeString(path, input); StringWriter out = new StringWriter(); StringWriter err = new StringWriter(); @@ -116,7 +116,7 @@ public final class FormatterTest { Path tmpdir = testFolder.newFolder().toPath(); Path path = tmpdir.resolve("Foo.java"); - Files.write(path, input.getBytes(UTF_8)); + Files.writeString(path, input); StringWriter out = new StringWriter(); StringWriter err = new StringWriter(); @@ -133,7 +133,7 @@ public final class FormatterTest { Path tmpdir = testFolder.newFolder().toPath(); Path path = tmpdir.resolve("Foo.java"); - Files.write(path, input.getBytes(UTF_8)); + Files.writeString(path, input); StringWriter out = new StringWriter(); StringWriter err = new StringWriter(); @@ -142,7 +142,25 @@ public final class FormatterTest { String[] args = {"--offset", "0", "--length", "9999", path.toString()}; assertThat(main.format(args)).isEqualTo(1); assertThat(err.toString()) - .contains("error: invalid length 9999, offset + length (9999) is outside the file"); + .contains("error: invalid offset (0) or length (9999); offset + length (9999)"); + } + + @Test + public void testFormatOffsetOutOfRange() throws Exception { + String input = "class Foo{}\n"; + + Path tmpdir = testFolder.newFolder().toPath(); + Path path = tmpdir.resolve("Foo.java"); + Files.writeString(path, input); + + StringWriter out = new StringWriter(); + StringWriter err = new StringWriter(); + + Main main = new Main(new PrintWriter(out, true), new PrintWriter(err, true), System.in); + String[] args = {"--offset", "9998", "--length", "1", path.toString()}; + assertThat(main.format(args)).isEqualTo(1); + assertThat(err.toString()) + .contains("error: invalid offset (9998) or length (1); offset + length (9999)"); } @Test @@ -303,7 +321,7 @@ public final class FormatterTest { String inputResourceName = "com/google/googlejavaformat/java/testimports/A.input"; String input = getResource(inputResourceName); String expectedOutput = getResource(outputResourceName); - Files.write(path, input.getBytes(UTF_8)); + Files.writeString(path, input); StringWriter out = new StringWriter(); StringWriter err = new StringWriter(); |