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'