From 823d7c99bc61e05e26ec68ede3c42231b6e2e62b Mon Sep 17 00:00:00 2001 From: google-java-format Team Date: Wed, 6 Mar 2024 00:24:37 -0800 Subject: Print all known values when an invalid range is given. For easier root cause analysis when an invalid request is passed. PiperOrigin-RevId: 613110312 --- .../google/googlejavaformat/java/JavaInput.java | 6 +++-- .../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 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(); -- cgit v1.2.3