From 4ea06c03fff3b4efb6516600806e310112dc4831 Mon Sep 17 00:00:00 2001
From: sebastien Curt <curt.sebastien@gmail.com>
Date: Thu, 7 Jan 2021 15:58:05 +0100
Subject: [PATCH] Do not hide unlParser exception

---
 Examples/Issue14.txt                          | 18 +++++++
 .../Convert/ExportUnlDocumentsHandler.java    |  3 +-
 .../parser/UnlGraphImporterFromUnlParser.java | 19 ++++---
 .../unltools/unl/parser/WrapperUnlParser.java |  2 +-
 .../src/test/java/unl2rdf/Unl2RdfTest.java    | 51 +++++++++++--------
 5 files changed, 61 insertions(+), 32 deletions(-)
 create mode 100644 Examples/Issue14.txt
 rename unl-tools-infrastructure/src/{test => main}/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java (98%)

diff --git a/Examples/Issue14.txt b/Examples/Issue14.txt
new file mode 100644
index 0000000..b917e5a
--- /dev/null
+++ b/Examples/Issue14.txt
@@ -0,0 +1,18 @@
+[S:00]
+{org:en}
+For transitions to and from National Operation (STM) the ETCS shall request, an acknowledgement by the driver..
+{/org}
+{unl}
+pur(promise(icl>modal>be,obj>uw,aoj>thing).@entry,transition(icl>change_of_state>thing,equ>passage).@pl)
+mod(transition(icl>change_of_state>thing,equ>passage).@pl,to(icl>how,com>content,obj>thing))
+mod(operation(icl>business_activity>thing).@maiuscul,national(icl>adj,ant>international).@maiuscul)
+obj(to(icl>how,com>content,obj>thing),operation(icl>business_activity>thing).@maiuscul)
+nam(operation(icl>business_activity>thing).@maiuscul,stm.@parenthesis)
+frm(to(icl>how,com>content,obj>thing),)
+aoj(promise(icl>modal>be,obj>uw,aoj>thing).@entry,etcs.@def)
+agt(request(icl>communicate>do,agt>volitional_thing,obj>thing),etcs.@def)
+obj(promise(icl>modal>be,obj>uw,aoj>thing).@entry,request(icl>communicate>do,agt>volitional_thing,obj>thing))
+cnt(promise(icl>modal>be,obj>uw,aoj>thing).@entry,acknowledgement(icl>message>thing,equ>acknowledgment).@indef)
+met(acknowledgement(icl>message>thing,equ>acknowledgment).@indef,driver(icl>operator>thing,ant>nondriver).@def)
+{/unl}
+[/S]
diff --git a/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java
index 5edc94a..5cd1414 100644
--- a/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java
+++ b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java
@@ -18,7 +18,8 @@ public class ExportUnlDocumentsHandler implements CommandHandler<ExportUnlDocume
     public Result handle(ExportUnlDocuments command) {
         try {
             var graphExporter = factory.createGraphExporter(command.getWriter(), command.getExporterName());
-            graphExporter.write(command.getGraphImporter().Import());
+            var importedGraph = command.getGraphImporter().Import();
+            graphExporter.write(importedGraph);
         } catch (IOException | GraphExportException e) {
             return Result.Failure(String.format("Cannot export unl documents to format '%s' (reason: '%s')", command.getExporterName(), e.getMessage()),
                     e);
diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java
index f293807..8ebdab4 100644
--- a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java
+++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java
@@ -8,11 +8,13 @@ import java.io.InputStreamReader;
 import java.util.List;
 
 public class UnlGraphImporterFromUnlParser implements GraphImporter {
-    private List<UnlDocument> documents;
     private BufferedReader bufferedReader;
+    WrapperUnlParser wrapper;
+
 
     public UnlGraphImporterFromUnlParser(BufferedReader bufferedReader) {
         this.bufferedReader = bufferedReader;
+        this.wrapper = null;
     }
 
     public static UnlGraphImporterFromUnlParser FromInputReader(InputStreamReader inputStreamReader) {
@@ -21,13 +23,14 @@ public class UnlGraphImporterFromUnlParser implements GraphImporter {
 
     @Override
     public List<UnlDocument> Import() {
-        if (documents == null) {
-            try {
-                documents = new UnlParser(this.bufferedReader).createUnlDocumentList();
-            } catch (ParseException e) {
-                e.printStackTrace();
-            }
+        if (this.wrapper == null) {
+                this.wrapper = new WrapperUnlParser(this.bufferedReader);
+                this.wrapper.parseUnlSource();
+                if(this.wrapper.hasError()){
+                    var message = String.format("Current error: '%s'", String.join(",", wrapper.getErrors()));
+                    throw new RuntimeException(message);
+                }
         }
-        return documents;
+        return wrapper.getUnlDocumentList();
     }
 }
diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java
similarity index 98%
rename from unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java
rename to unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java
index 50d10a3..7484363 100644
--- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java
+++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java
@@ -26,7 +26,7 @@ public class WrapperUnlParser {
     }
 
     public void parseUnlSource(){
-        parseContentAndRetrieveErrors();
+        parseContentIfNecessary();
     }
 
     /**
diff --git a/unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java b/unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java
index 9f5c58d..459613f 100644
--- a/unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java
+++ b/unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java
@@ -21,27 +21,10 @@ class Unl2RdfTest {
     }
 
     @Tag("integration")
-    @Test
-    public void r1ShouldBeConvertedToRdfFile() {
-        Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/r1.txt", "--output-file", "r1", "--output-type", "rdf"}));
-    }
-
-    @Tag("integration")
-    @Test
-    public void r2ShouldBeConvertedToRdfFile() {
-        Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/r2.txt", "--output-file", "r2", "--output-type", "rdf"}));
-    }
-
-    @Tag("integration")
-    @Test
-    public void catShouldBeConvertedToRdfFile() {
-        Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/cat.txt", "--output-file", "cat", "--output-type", "rdf"}));
-    }
-
-    @Tag("integration")
-    @Test
-    public void exemplesShouldBeConvertedToRdfFile() {
-        Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/exemples_unl.txt", "--output-file", "exemples_unl", "--output-type", "rdf"}));
+    @ParameterizedTest(name = "RuntimeException({index}) ==> Unl2Rdf.main({arguments})")
+    @ArgumentsSource(TestMainShouldNotThrowRuntimeExceptionParameterArgumentProvider.class)
+    public void TestMainShouldNotThrowRuntimeException(String[] args) {
+        Assertions.assertThrows(RuntimeException.class, () -> Unl2Rdf.main(args));
     }
 
     static class TestMainShouldNotThrowOnPartialParameterArgumentProvider implements ArgumentsProvider {
@@ -49,9 +32,33 @@ class Unl2RdfTest {
         @Override
         public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) {
             return Stream.of(
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/cat.txt", "--output-file", "dotOnly", "--output-type", "dot"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/cat.txt", "--output-file", "rdfOnly", "--output-type", "rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/cat.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/exemples_unl.txt", "--output-file", "dotOnly", "--output-type", "dot"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/exemples_unl.txt", "--output-file", "rdfOnly", "--output-type", "rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/exemples_unl.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"}),
                     Arguments.of((Object) new String[]{"--input-file", "../Examples/issue12.txt", "--output-file", "dotOnly", "--output-type", "dot"}),
                     Arguments.of((Object) new String[]{"--input-file", "../Examples/issue12.txt", "--output-file", "rdfOnly", "--output-type", "rdf"}),
-                    Arguments.of((Object) new String[]{"--input-file", "../Examples/issue12.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"})
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/issue12.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/r1.txt", "--output-file", "dotOnly", "--output-type", "dot"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/r1.txt", "--output-file", "rdfOnly", "--output-type", "rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/r1.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/r2.txt", "--output-file", "dotOnly", "--output-type", "dot"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/r2.txt", "--output-file", "rdfOnly", "--output-type", "rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/r2.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"})
+            );
+        }
+    }
+
+    static class TestMainShouldNotThrowRuntimeExceptionParameterArgumentProvider implements ArgumentsProvider {
+
+        @Override
+        public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) {
+            return Stream.of(
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/issue14.txt", "--output-file", "dotOnly", "--output-type", "dot"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/issue14.txt", "--output-file", "rdfOnly", "--output-type", "rdf"}),
+                    Arguments.of((Object) new String[]{"--input-file", "../Examples/issue14.txt", "--output-file", "dotWithRdf", "--output-type", "dot,rdf"})
             );
         }
     }
-- 
GitLab