You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2019/12/05 09:01:43 UTC

[plc4x] 02/02: added parent expressionn

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

sruehl pushed a commit to branch feature/ams_ads_mpsec
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 393e134a4fbf05cb1a32d09921d51c0d0e513fdb
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Dec 5 10:01:09 2019 +0100

    added parent expressionn
---
 .../language/mspec/expression/Expression.g4        |  1 +
 .../mspec/expression/ExpressionStringListener.java | 11 ++++++++
 .../expression/ExpressionStringParserTest.java     |  6 +++++
 .../mspec/parser/MessageFormatParserTest.java      | 11 +++-----
 .../src/test/resources/mspec.example               | 29 +++++++++++-----------
 .../main/resources/protocols/amsads/amsads.mspec   | 26 +++++++++----------
 6 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4 b/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4
index 7e8c288..fcda12a 100644
--- a/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4
+++ b/build-utils/protocol-base-mspec/src/main/antlr4/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/Expression.g4
@@ -52,6 +52,7 @@ expression
  | identifierSegment                                    #identifierExpression
  | String indexes?                                      #stringExpression
  | '(' expression ')' indexes?                          #expressionExpression
+ | '../' expression                                     #parentExpression
  ;
 
 identifierSegment
diff --git a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
index f4ae9e3..eb72be7 100644
--- a/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
+++ b/build-utils/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringListener.java
@@ -187,6 +187,17 @@ public class ExpressionStringListener extends ExpressionBaseListener {
         parserContexts.peek().add(ut);
     }
 
+    @Override
+    public void enterParentExpression(ExpressionParser.ParentExpressionContext ctx) {
+        parserContexts.push(new LinkedList<>());
+    }
+
+    @Override
+    public void exitParentExpression(ExpressionParser.ParentExpressionContext ctx) {
+        UnaryTerm ut = getUnaryTerm("..", parserContexts.pop());
+        parserContexts.peek().add(ut);
+    }
+
     /////////////////////////////////////////////////////////////////////////////////////////
     // Binary Terms
     /////////////////////////////////////////////////////////////////////////////////////////
diff --git a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java
index 71c0222..606885b 100644
--- a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java
+++ b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/expression/ExpressionStringParserTest.java
@@ -141,6 +141,12 @@ class ExpressionStringParserTest {
         );
     }
 
+    @Test
+    void testParentReference() {
+        Term term = SUT.parse(IOUtils.toInputStream("../data.lengthInBytes", Charset.defaultCharset()));
+        assertThat(term, not(nullValue()));
+    }
+
     void assertNumericLiteral(Term term, Number number) {
         assertThat(term, not(nullValue()));
         assertThat(term, instanceOf(NumericLiteral.class));
diff --git a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
index 37b9720..127a2d2 100644
--- a/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
+++ b/build-utils/protocol-base-mspec/src/test/java/org/apache/plc4x/plugins/codegenerator/language/mspec/parser/MessageFormatParserTest.java
@@ -19,12 +19,10 @@
 
 package org.apache.plc4x.plugins.codegenerator.language.mspec.parser;
 
-import org.apache.commons.io.IOUtils;
-import org.junit.jupiter.api.Disabled;
+import org.apache.plc4x.plugins.codegenerator.types.definitions.TypeDefinition;
 import org.junit.jupiter.api.Test;
 
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
+import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
@@ -37,10 +35,9 @@ class MessageFormatParserTest {
         assertThrows(NullPointerException.class, () -> SUT.parse(null));
     }
 
-    @Disabled("mockito broken because of NPE in REAL code")
     @Test
     void parseSomething() {
-        InputStream is = IOUtils.toInputStream("test", StandardCharsets.UTF_8);
-        SUT.parse(is);
+        Map<String, TypeDefinition> parse = SUT.parse(getClass().getResourceAsStream("/mspec.example"));
+        System.out.println(parse);
     }
 }
\ No newline at end of file
diff --git a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec b/build-utils/protocol-base-mspec/src/test/resources/mspec.example
similarity index 73%
copy from protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
copy to build-utils/protocol-base-mspec/src/test/resources/mspec.example
index 0cc973f..963b5d9 100644
--- a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
+++ b/build-utils/protocol-base-mspec/src/test/resources/mspec.example
@@ -22,22 +22,22 @@
 ////////////////////////////////////////////////////////////////
 
 [type 'AMSPacket'
-    [reserved   uint       16   '0x0000'                                      ]
-    [implicit   uint       32   'header.lengthInBytes + data.lengthInBytes'   ]
-    [simple     AMSHeader  'header'                                           ]
-    [simple     ADSData    'data'                                             ]
+    [reserved   uint       16       '0x0000'                                             ]
+    [implicit   uint       32       'length' 'header.lengthInBytes + data.lengthInBytes' ]
+    [simple     AMSHeader  'header'                                                      ]
+    [simple     ADSData    'data'                                                        ]
 ]
 
 [type 'AMSHeader'
-    [simple     AMSNetId        'targetAmsNetId'    ]
-    [simple     uint        16  'targetAmsPort'     ]
-    [simple     AMSNetId        'sourceAmsNetId'    ]
-    [simple     uint        16  'sourceAmsPort'     ]
-    [enum       CommandId       'commandId'         ]
-    [bitmask    State           'state'             ]
-    [simple     uint        32  '../data.lengthInBytes'        ]
-    [simple     uint        32  'errorCode']
-    [simple     byte        32  'invokeId'          ]
+    [simple     AMSNetId        'targetAmsNetId'        ]
+    [simple     uint        16  'targetAmsPort'         ]
+    [simple     AMSNetId        'sourceAmsNetId'        ]
+    [simple     uint        16  'sourceAmsPort'         ]
+    [enum       CommandId       'commandId'             ]
+    [bitmask    State           'state'                 ]
+    [simple     uint        32  '../data.lengthInBytes' ]
+    [simple     uint        32  'errorCode'             ]
+    [simple     byte        32  'invokeId'              ]
 ]
 
 [enum uint 16 'CommandId'
@@ -76,5 +76,6 @@
 
 [type 'ADSData'
    // TODO: implement me..... arrrrrrrggggggggggggg
-   ....
+   //....
+   [simple     uint        8   'random'            ]
 ]
\ No newline at end of file
diff --git a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec b/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
index 0cc973f..8f22167 100644
--- a/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
+++ b/protocols/amsads/src/main/resources/protocols/amsads/amsads.mspec
@@ -22,22 +22,22 @@
 ////////////////////////////////////////////////////////////////
 
 [type 'AMSPacket'
-    [reserved   uint       16   '0x0000'                                      ]
-    [implicit   uint       32   'header.lengthInBytes + data.lengthInBytes'   ]
-    [simple     AMSHeader  'header'                                           ]
-    [simple     ADSData    'data'                                             ]
+    [reserved   uint       16       '0x0000'                                             ]
+    [implicit   uint       32       'length' 'header.lengthInBytes + data.lengthInBytes' ]
+    [simple     AMSHeader  'header'                                                      ]
+    [simple     ADSData    'data'                                                        ]
 ]
 
 [type 'AMSHeader'
-    [simple     AMSNetId        'targetAmsNetId'    ]
-    [simple     uint        16  'targetAmsPort'     ]
-    [simple     AMSNetId        'sourceAmsNetId'    ]
-    [simple     uint        16  'sourceAmsPort'     ]
-    [enum       CommandId       'commandId'         ]
-    [bitmask    State           'state'             ]
-    [simple     uint        32  '../data.lengthInBytes'        ]
-    [simple     uint        32  'errorCode']
-    [simple     byte        32  'invokeId'          ]
+    [simple     AMSNetId        'targetAmsNetId'        ]
+    [simple     uint        16  'targetAmsPort'         ]
+    [simple     AMSNetId        'sourceAmsNetId'        ]
+    [simple     uint        16  'sourceAmsPort'         ]
+    [enum       CommandId       'commandId'             ]
+    [bitmask    State           'state'                 ]
+    [simple     uint        32  '../data.lengthInBytes' ]
+    [simple     uint        32  'errorCode'             ]
+    [simple     byte        32  'invokeId'              ]
 ]
 
 [enum uint 16 'CommandId'