You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2023/01/25 18:42:46 UTC

[sling-org-apache-sling-repoinit-parser] branch master updated: SLING-11758 expose line and column in RepoInitParsingException (#29)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-repoinit-parser.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ad19ef  SLING-11758 expose line and column in RepoInitParsingException (#29)
1ad19ef is described below

commit 1ad19efb4556051c63fe72447af274bfca23441c
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Wed Jan 25 19:42:40 2023 +0100

    SLING-11758 expose line and column in RepoInitParsingException (#29)
---
 .../repoinit/parser/RepoInitParsingException.java  | 34 ++++++++++++++++++++++
 .../parser/impl/RepoInitParserService.java         |  8 +++--
 .../apache/sling/repoinit/parser/package-info.java |  2 +-
 .../repoinit/parser/test/ParserServiceTest.java    | 27 ++++++++++++++---
 .../repoinit/parser/test/ParsingErrorsTest.java    |  2 +-
 5 files changed, 64 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/sling/repoinit/parser/RepoInitParsingException.java b/src/main/java/org/apache/sling/repoinit/parser/RepoInitParsingException.java
index fa40e52..451a5be 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/RepoInitParsingException.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/RepoInitParsingException.java
@@ -18,10 +18,44 @@
  */
 package org.apache.sling.repoinit.parser;
 
+import org.osgi.annotation.versioning.ProviderType;
+
+@ProviderType
 public class RepoInitParsingException extends Exception {
     private static final long serialVersionUID = 1L;
 
+    private final int line;
+    private final int column;
+
     public RepoInitParsingException(String reason, Throwable cause) {
         super(reason, cause);
+        this.line = -1;
+        this.column = -1;
+    }
+
+    public RepoInitParsingException(Throwable cause) {
+        this(cause, -1, -1);
+    }
+    
+    public RepoInitParsingException(Throwable cause, int line, int column) {
+        super(cause);
+        this.line = line;
+        this.column = column;
+    }
+
+    /**
+     * 
+     * @return the line where the issue occurred or -1 if not known
+     */
+    public int getLine() {
+        return line;
+    }
+    
+    /**
+     * 
+     * @return the column where the issue occurred or -1 if not known
+     */
+    public int getColumn() {
+        return column;
     }
 }
diff --git a/src/main/java/org/apache/sling/repoinit/parser/impl/RepoInitParserService.java b/src/main/java/org/apache/sling/repoinit/parser/impl/RepoInitParserService.java
index d6ae70a..ca454b3 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/impl/RepoInitParserService.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/impl/RepoInitParserService.java
@@ -41,9 +41,11 @@ public class RepoInitParserService implements RepoInitParser {
         // in order to avoid parsing problems with trailing comments we add a line feed at the end
         try (final Reader readerWrapper = new AddTailingLinefeedFilterReader(r)) {
             return new RepoInitParserImpl(readerWrapper).parse();
-        } catch ( final IOException | TokenMgrError | ParseException e ) {
-            throw new RepoInitParsingException(e.getMessage(), e);
-        }
+        } catch (ParseException e) {
+            throw new RepoInitParsingException(e, e.currentToken.next.beginLine, e.currentToken.next.beginColumn);
+        } catch (final IOException | TokenMgrError e ) {
+            throw new RepoInitParsingException(e);
+        } 
     }
     
     private static final class AddTailingLinefeedFilterReader extends FilterReader {
diff --git a/src/main/java/org/apache/sling/repoinit/parser/package-info.java b/src/main/java/org/apache/sling/repoinit/parser/package-info.java
index 06ef5f6..252776b 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/package-info.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/package-info.java
@@ -15,6 +15,6 @@
  * limitations under the License.
  ******************************************************************************/
 
-@org.osgi.annotation.versioning.Version("1.0.2")
+@org.osgi.annotation.versioning.Version("1.1.0")
 package org.apache.sling.repoinit.parser;
 
diff --git a/src/test/java/org/apache/sling/repoinit/parser/test/ParserServiceTest.java b/src/test/java/org/apache/sling/repoinit/parser/test/ParserServiceTest.java
index 1d7e9f7..21ee7d9 100644
--- a/src/test/java/org/apache/sling/repoinit/parser/test/ParserServiceTest.java
+++ b/src/test/java/org/apache/sling/repoinit/parser/test/ParserServiceTest.java
@@ -18,6 +18,7 @@
 package org.apache.sling.repoinit.parser.test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
 
 import java.io.Reader;
 import java.io.StringReader;
@@ -27,20 +28,38 @@ import org.apache.sling.repoinit.parser.RepoInitParsingException;
 import org.apache.sling.repoinit.parser.impl.RepoInitParserService;
 import org.apache.sling.repoinit.parser.operations.CreateServiceUser;
 import org.apache.sling.repoinit.parser.operations.Operation;
+import org.junit.Before;
 import org.junit.Test;
 
 public class ParserServiceTest {
+    private RepoInitParserService service;
+
+    @Before
+    public void setUp() {
+        service = new RepoInitParserService();
+    }
+
     @Test
     public void noErrors() throws RepoInitParsingException {
         final Reader r = new StringReader("create service user foo");
-        List<Operation> operations = new RepoInitParserService().parse(r);
+        List<Operation> operations = service.parse(r);
         assertEquals(1, operations.size());
         assertEquals(CreateServiceUser.class, operations.get(0).getClass());
     }
-    
-    @Test(expected = RepoInitParsingException.class)
+
+    @Test
     public void syntaxError() throws RepoInitParsingException {
         final Reader r = new StringReader("not a valid statement");
-        new RepoInitParserService().parse(r);
+        RepoInitParsingException exception = assertThrows(RepoInitParsingException.class, () -> service.parse(r));
+        assertEquals(1, exception.getLine());
+        assertEquals(1, exception.getColumn());
+    }
+
+    @Test
+    public void syntaxErrorInSecondLine() throws RepoInitParsingException {
+        final Reader r = new StringReader("create service user foo\n  not a valid statement");
+        RepoInitParsingException exception = assertThrows(RepoInitParsingException.class, () -> service.parse(r));
+        assertEquals(2, exception.getLine());
+        assertEquals(3, exception.getColumn());
     }
 }
diff --git a/src/test/java/org/apache/sling/repoinit/parser/test/ParsingErrorsTest.java b/src/test/java/org/apache/sling/repoinit/parser/test/ParsingErrorsTest.java
index 7e63c14..f319901 100644
--- a/src/test/java/org/apache/sling/repoinit/parser/test/ParsingErrorsTest.java
+++ b/src/test/java/org/apache/sling/repoinit/parser/test/ParsingErrorsTest.java
@@ -42,7 +42,7 @@ public class ParsingErrorsTest {
     private final String input;
     private final Class<? extends Throwable> expected;
     
-    @Parameters
+    @Parameters(name="{0}")
     public static Collection<Object[]> data() {
         @SuppressWarnings("serial")
         final List<Object []> result = new ArrayList<Object []>() {{