diff --git a/ragconnect.base/src/main/jastadd/Analysis.jrag b/ragconnect.base/src/main/jastadd/Analysis.jrag index f3724eab6217b2e76472ee57f8f341ab31730861..f686d3af0009baa0382e8ec3ba2d548b797e85a6 100644 --- a/ragconnect.base/src/main/jastadd/Analysis.jrag +++ b/ragconnect.base/src/main/jastadd/Analysis.jrag @@ -62,6 +62,8 @@ aspect Analysis { } syn String JavaTypeUse.primitivePrettyPrint() { switch(getName()) { + case "boolean": + case "Boolean": return "boolean"; case "int": case "Integer": return "int"; case "short": diff --git a/ragconnect.base/src/main/jastadd/intermediate/Mappings.jrag b/ragconnect.base/src/main/jastadd/intermediate/Mappings.jrag index 1ef7d167efd07d06d9dbea7ca8d37ba3a30e1186..3479f11728195a2480109343e05292ccb1c6a45e 100644 --- a/ragconnect.base/src/main/jastadd/intermediate/Mappings.jrag +++ b/ragconnect.base/src/main/jastadd/intermediate/Mappings.jrag @@ -20,6 +20,8 @@ aspect DefaultMappings { return result; } + syn nta DefaultMappingDefinition RagConnect.defaultBytesToBooleanMapping() = baseDefaultMappingDefinition( + "byte[]", "boolean", "return input[0] == (byte) 1;"); syn nta DefaultMappingDefinition RagConnect.defaultBytesToIntMapping() = baseDefaultMappingDefinition( "byte[]", "int", "return java.nio.ByteBuffer.wrap(input).getInt();"); syn nta DefaultMappingDefinition RagConnect.defaultBytesToShortMapping() = baseDefaultMappingDefinition( @@ -35,6 +37,8 @@ aspect DefaultMappings { syn nta DefaultMappingDefinition RagConnect.defaultBytesToStringMapping() = baseDefaultMappingDefinition( "byte[]", "String", "return new String(input);"); + syn nta DefaultMappingDefinition RagConnect.defaultBooleanToBytesMapping() = baseDefaultMappingDefinition( + "boolean", "byte[]", "return java.nio.ByteBuffer.allocate(1).put((byte) (input ? 1 : 0)).array();"); syn nta DefaultMappingDefinition RagConnect.defaultIntToBytesMapping() = baseDefaultMappingDefinition( "int", "byte[]", "return java.nio.ByteBuffer.allocate(Integer.BYTES).putInt(input).array();"); syn nta DefaultMappingDefinition RagConnect.defaultShortToBytesMapping() = baseDefaultMappingDefinition( @@ -50,6 +54,8 @@ aspect DefaultMappings { syn nta DefaultMappingDefinition RagConnect.defaultStringToBytesMapping() = baseDefaultMappingDefinition( "String", "byte[]", "return input.getBytes();"); + syn nta DefaultMappingDefinition RagConnect.defaultStringToBooleanMapping() = baseDefaultMappingDefinition( + "String", "boolean", "return Boolean.parseBoolean(input);"); syn nta DefaultMappingDefinition RagConnect.defaultStringToIntMapping() = baseDefaultMappingDefinition( "String", "int", "return Integer.parseInt(input);"); syn nta DefaultMappingDefinition RagConnect.defaultStringToShortMapping() = baseDefaultMappingDefinition( @@ -63,6 +69,8 @@ aspect DefaultMappings { syn nta DefaultMappingDefinition RagConnect.defaultStringToCharMapping() = baseDefaultMappingDefinition( "String", "char", "return input.charAt(0);"); + syn nta DefaultMappingDefinition RagConnect.defaultBooleanToStringMapping() = baseDefaultMappingDefinition( + "boolean", "String", "return String.valueOf(input);"); syn nta DefaultMappingDefinition RagConnect.defaultIntToStringMapping() = baseDefaultMappingDefinition( "int", "String", "return String.valueOf(input);"); syn nta DefaultMappingDefinition RagConnect.defaultShortToStringMapping() = baseDefaultMappingDefinition( @@ -111,6 +119,7 @@ aspect Mappings { syn boolean JavaTypeUse.isPrimitiveType() = false; eq SimpleJavaTypeUse.isPrimitiveType() { switch(getName()) { + case "boolean": case "int": case "short": case "long": @@ -131,6 +140,8 @@ aspect Mappings { // --- suitableReceiveDefaultMapping --- syn DefaultMappingDefinition EndpointDefinition.suitableReceiveDefaultMapping() { switch (targetTypeName()) { + case "boolean": + case "Boolean": return ragconnect().defaultBytesToBooleanMapping(); case "int": case "Integer": return ragconnect().defaultBytesToIntMapping(); case "short": @@ -150,6 +161,8 @@ aspect Mappings { // --- suitableSendDefaultMapping --- syn DefaultMappingDefinition EndpointDefinition.suitableSendDefaultMapping() { switch (targetTypeName()) { + case "boolean": + case "Boolean": return ragconnect().defaultBooleanToBytesMapping(); case "int": case "Integer": return ragconnect().defaultIntToBytesMapping(); case "short": @@ -240,6 +253,7 @@ aspect Mappings { java.util.List<MappingDefinition> result = new java.util.ArrayList<>(); getMappingDefinitionList().iterator().forEachRemaining(result::add); // byte[] conversion + result.add(defaultBytesToBooleanMapping()); result.add(defaultBytesToIntMapping()); result.add(defaultBytesToShortMapping()); result.add(defaultBytesToLongMapping()); @@ -247,6 +261,7 @@ aspect Mappings { result.add(defaultBytesToDoubleMapping()); result.add(defaultBytesToCharMapping()); result.add(defaultBytesToStringMapping()); + result.add(defaultBooleanToBytesMapping()); result.add(defaultIntToBytesMapping()); result.add(defaultShortToBytesMapping()); result.add(defaultLongToBytesMapping()); @@ -255,12 +270,14 @@ aspect Mappings { result.add(defaultCharToBytesMapping()); result.add(defaultStringToBytesMapping()); // // string conversion +// result.add(defaultStringToBooleanMapping()); // result.add(defaultStringToIntMapping()); // result.add(defaultStringToShortMapping()); // result.add(defaultStringToLongMapping()); // result.add(defaultStringToFloatMapping()); // result.add(defaultStringToDoubleMapping()); // result.add(defaultStringToCharMapping()); +// result.add(defaultBooleanToStringMapping()); // result.add(defaultIntToStringMapping()); // result.add(defaultShortToStringMapping()); // result.add(defaultLongToStringMapping()); diff --git a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java index c7879cf20250fa47aa418da03797aeb71d4e19c1..95e08da36c6f2f3becf3f9f009aec443a3c4d5fa 100644 --- a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java +++ b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java @@ -206,7 +206,7 @@ public class Compiler extends AbstractCompiler { atLeastOneRagConnect = true; break; default: - throw new CompilerException("Unknown file extension in " + filename); + throw new CompilerException("Unknown file extension " + extension + " in " + filename); } } if (!atLeastOneGrammar) { @@ -218,14 +218,19 @@ public class Compiler extends AbstractCompiler { if (!atLeastOneGrammar && !atLeastOneRagConnect) { System.exit(1); } + + // here, the program subtree is also flushed and resolved ragConnect.flushTreeCache(); ragConnect.treeResolveAll(); + ragConnect.additionalRelations().forEach(ragConnectGrammarPart::addDeclaration); ASTNode.loggingEnabledForReads = optionLogReads.value(); ASTNode.loggingEnabledForWrites = optionLogWrites.value(); + // reuse "--incremental" option of JastAdd ASTNode.incrementalOptionActive = getConfiguration().incremental() && getConfiguration().traceFlush(); printMessage("ASTNode.incrementalOptionActive = " + ASTNode.incrementalOptionActive); + ASTNode.usesMqtt = optionProtocols.hasValue(OPTION_PROTOCOL_MQTT); ASTNode.usesRest = optionProtocols.hasValue(OPTION_PROTOCOL_REST); return ragConnect; @@ -240,7 +245,6 @@ public class Compiler extends AbstractCompiler { grammarFile.dumpTree(System.out); } program.addGrammarFile(grammarFile); - grammarFile.treeResolveAll(); grammarFile.setFileName(toBaseName(filename)); } catch (IOException | Parser.Exception e) { throw new CompilerException("Could not parse grammar file " + filename, e); diff --git a/ragconnect.tests/build.gradle b/ragconnect.tests/build.gradle index 1ff5652f946d8a8c7f8b88d03b3e10fa171e00e7..9dd51b5ea7e55128426d5eb25c9c91481d89d427 100644 --- a/ragconnect.tests/build.gradle +++ b/ragconnect.tests/build.gradle @@ -84,7 +84,7 @@ task specificTest(type: Test, dependsOn: testClasses) { group = 'verification' useJUnitPlatform { - includeTags 'NewTest' + includeTags 'SpecificTest' } } diff --git a/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.connect b/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.connect index 475d91614073a4a3e8211a5e9e7362c6c832f0e0..69a2165b1dc0ace787a1dbe8143807c90b3197c8 100644 --- a/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.connect +++ b/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.connect @@ -1,4 +1,5 @@ // --- update definitions --- +receive NativeTypes.BooleanValue; receive NativeTypes.IntValue; receive NativeTypes.ShortValue; receive NativeTypes.LongValue; @@ -7,6 +8,7 @@ receive NativeTypes.DoubleValue; receive NativeTypes.CharValue; receive NativeTypes.StringValue; +receive NativeTypes.BooleanValueTransformed using BooleanTransformation; receive NativeTypes.IntValueTransformed using IntTransformation; receive NativeTypes.ShortValueTransformed using ShortTransformation; receive NativeTypes.LongValueTransformed using LongTransformation; @@ -15,6 +17,7 @@ receive NativeTypes.DoubleValueTransformed using DoubleTransformation; receive NativeTypes.CharValueTransformed using CharTransformation; receive NativeTypes.StringValueTransformed using StringTransformation; +receive BoxedTypes.BooleanValue; receive BoxedTypes.IntValue; receive BoxedTypes.ShortValue; receive BoxedTypes.LongValue; @@ -22,6 +25,7 @@ receive BoxedTypes.FloatValue; receive BoxedTypes.DoubleValue; receive BoxedTypes.CharValue; +receive BoxedTypes.BooleanValueTransformed using BooleanTransformation; receive BoxedTypes.IntValueTransformed using IntTransformation; receive BoxedTypes.ShortValueTransformed using ShortTransformation; receive BoxedTypes.LongValueTransformed using LongTransformation; @@ -29,6 +33,9 @@ receive BoxedTypes.FloatValueTransformed using FloatTransformation; receive BoxedTypes.DoubleValueTransformed using DoubleTransformation; receive BoxedTypes.CharValueTransformed using CharTransformation; +BooleanTransformation maps boolean b to boolean {: + return b; +:} IntTransformation maps int i to int {: return i; :} diff --git a/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.relast b/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.relast index 750dc0795e39ae42eb10d9ed733ea9a01fc05c26..060d5a5c16e793a20c79d99a267e58833b0c8ac1 100644 --- a/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.relast +++ b/ragconnect.tests/src/test/01-input/defaultOnlyRead/Test.relast @@ -1,3 +1,3 @@ A ::= NativeTypes* BoxedTypes* ; -NativeTypes ::= <IntValue:int> <ShortValue:short> <LongValue:long> <FloatValue:float> <DoubleValue:double> <CharValue:char> <StringValue:String> <IntValueTransformed:int> <ShortValueTransformed:short> <LongValueTransformed:long> <FloatValueTransformed:float> <DoubleValueTransformed:double> <CharValueTransformed:char> <StringValueTransformed:String> ; -BoxedTypes ::= <IntValue:Integer> <ShortValue:Short> <LongValue:Long> <FloatValue:Float> <DoubleValue:Double> <CharValue:Character> <IntValueTransformed:Integer> <ShortValueTransformed:Short> <LongValueTransformed:Long> <FloatValueTransformed:Float> <DoubleValueTransformed:Double> <CharValueTransformed:Character> ; +NativeTypes ::= <BooleanValue:boolean> <IntValue:int> <ShortValue:short> <LongValue:long> <FloatValue:float> <DoubleValue:double> <CharValue:char> <StringValue:String> <BooleanValueTransformed:boolean> <IntValueTransformed:int> <ShortValueTransformed:short> <LongValueTransformed:long> <FloatValueTransformed:float> <DoubleValueTransformed:double> <CharValueTransformed:char> <StringValueTransformed:String> ; +BoxedTypes ::= <BooleanValue:Boolean> <IntValue:Integer> <ShortValue:Short> <LongValue:Long> <FloatValue:Float> <DoubleValue:Double> <CharValue:Character> <BooleanValueTransformed:Boolean> <IntValueTransformed:Integer> <ShortValueTransformed:Short> <LongValueTransformed:Long> <FloatValueTransformed:Float> <DoubleValueTransformed:Double> <CharValueTransformed:Character> ; diff --git a/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.connect b/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.connect index 076809cf16de0b52b809856e0d17ac0010c8f21f..44ca4ba05574a67b29268a1b4ff61185a30ea15f 100644 --- a/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.connect +++ b/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.connect @@ -1,5 +1,6 @@ // --- update definitions --- // native types, synthesized +send NativeTypesSyn.BooleanValue; send NativeTypesSyn.IntValue; send NativeTypesSyn.ShortValue; send NativeTypesSyn.LongValue; @@ -9,6 +10,7 @@ send NativeTypesSyn.CharValue; send NativeTypesSyn.StringValue; // native types, synthesized, transformed +send NativeTypesSyn.BooleanValueTransformed using BooleanTransformation; send NativeTypesSyn.IntValueTransformed using IntTransformation; send NativeTypesSyn.ShortValueTransformed using ShortTransformation; send NativeTypesSyn.LongValueTransformed using LongTransformation; @@ -18,6 +20,7 @@ send NativeTypesSyn.CharValueTransformed using CharTransformation; send NativeTypesSyn.StringValueTransformed using StringTransformation; // boxed types, synthesized +send BoxedTypesSyn.BooleanValue; send BoxedTypesSyn.IntValue; send BoxedTypesSyn.ShortValue; send BoxedTypesSyn.LongValue; @@ -26,6 +29,7 @@ send BoxedTypesSyn.DoubleValue; send BoxedTypesSyn.CharValue; // boxed types, synthesized, transformed +send BoxedTypesSyn.BooleanValueTransformed using BooleanTransformation; send BoxedTypesSyn.IntValueTransformed using IntTransformation; send BoxedTypesSyn.ShortValueTransformed using ShortTransformation; send BoxedTypesSyn.LongValueTransformed using LongTransformation; @@ -34,6 +38,7 @@ send BoxedTypesSyn.DoubleValueTransformed using DoubleTransformation; send BoxedTypesSyn.CharValueTransformed using CharTransformation; // --- dependency definitions --- +NativeTypesSyn.BooleanValue canDependOn NativeTypesSyn.DriverSyn as nativeBooleanDependency; NativeTypesSyn.IntValue canDependOn NativeTypesSyn.DriverSyn as nativeIntDependency; NativeTypesSyn.ShortValue canDependOn NativeTypesSyn.DriverSyn as nativeShortDependency; NativeTypesSyn.LongValue canDependOn NativeTypesSyn.DriverSyn as nativeLongDependency; @@ -41,6 +46,8 @@ NativeTypesSyn.FloatValue canDependOn NativeTypesSyn.DriverSyn as nativeFloatDep NativeTypesSyn.DoubleValue canDependOn NativeTypesSyn.DriverSyn as nativeDoubleDependency; NativeTypesSyn.CharValue canDependOn NativeTypesSyn.DriverSyn as nativeCharDependency; NativeTypesSyn.StringValue canDependOn NativeTypesSyn.DriverSyn as nativeStringDependency; + +BoxedTypesSyn.BooleanValue canDependOn BoxedTypesSyn.DriverSyn as boxedBooleanDependency; BoxedTypesSyn.IntValue canDependOn BoxedTypesSyn.DriverSyn as boxedIntDependency; BoxedTypesSyn.ShortValue canDependOn BoxedTypesSyn.DriverSyn as boxedShortDependency; BoxedTypesSyn.LongValue canDependOn BoxedTypesSyn.DriverSyn as boxedLongDependency; @@ -48,6 +55,7 @@ BoxedTypesSyn.FloatValue canDependOn BoxedTypesSyn.DriverSyn as boxedFloatDepend BoxedTypesSyn.DoubleValue canDependOn BoxedTypesSyn.DriverSyn as boxedDoubleDependency; BoxedTypesSyn.CharValue canDependOn BoxedTypesSyn.DriverSyn as boxedCharDependency; +NativeTypesSyn.BooleanValueTransformed canDependOn NativeTypesSyn.DriverSyn as nativeBooleanTransformedDependency; NativeTypesSyn.IntValueTransformed canDependOn NativeTypesSyn.DriverSyn as nativeIntTransformedDependency; NativeTypesSyn.ShortValueTransformed canDependOn NativeTypesSyn.DriverSyn as nativeShortTransformedDependency; NativeTypesSyn.LongValueTransformed canDependOn NativeTypesSyn.DriverSyn as nativeLongTransformedDependency; @@ -56,6 +64,7 @@ NativeTypesSyn.DoubleValueTransformed canDependOn NativeTypesSyn.DriverSyn as na NativeTypesSyn.CharValueTransformed canDependOn NativeTypesSyn.DriverSyn as nativeCharTransformedDependency; NativeTypesSyn.StringValueTransformed canDependOn NativeTypesSyn.DriverSyn as nativeStringTransformedDependency; +BoxedTypesSyn.BooleanValueTransformed canDependOn BoxedTypesSyn.DriverSyn as boxedBooleanTransformedDependency; BoxedTypesSyn.IntValueTransformed canDependOn BoxedTypesSyn.DriverSyn as boxedIntTransformedDependency; BoxedTypesSyn.ShortValueTransformed canDependOn BoxedTypesSyn.DriverSyn as boxedShortTransformedDependency; BoxedTypesSyn.LongValueTransformed canDependOn BoxedTypesSyn.DriverSyn as boxedLongTransformedDependency; @@ -82,6 +91,9 @@ BoxedTypesSyn.CharValueTransformed canDependOn BoxedTypesSyn.DriverSyn as boxedC //send BoxedTypesInh.DoubleValue; //send BoxedTypesInh.CharValue; +BooleanTransformation maps boolean b to boolean {: + return b; +:} IntTransformation maps int i to int {: return i; :} diff --git a/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.jadd b/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.jadd index 1692609251ba21e58d41049a58eadd1efdf4753c..76f3f159b673f1b03c1001a2d7a251bc9ca54dfa 100644 --- a/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.jadd +++ b/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.jadd @@ -1,5 +1,6 @@ aspect Computation { // native types, synthesized + syn boolean NativeTypesSyn.getBooleanValue() = Integer.parseInt(getDriverSyn()) > 1; syn int NativeTypesSyn.getIntValue() = Integer.parseInt(getDriverSyn()); syn short NativeTypesSyn.getShortValue() = Short.parseShort(getDriverSyn()); syn long NativeTypesSyn.getLongValue() = Long.parseLong(getDriverSyn()); @@ -7,6 +8,8 @@ aspect Computation { syn double NativeTypesSyn.getDoubleValue() = Double.parseDouble(getDriverSyn()); syn char NativeTypesSyn.getCharValue() = getDriverSyn().charAt(0); syn String NativeTypesSyn.getStringValue() = new String(getDriverSyn()); + + syn boolean NativeTypesSyn.getBooleanValueTransformed() = Integer.parseInt(getDriverSyn()) > 1; syn int NativeTypesSyn.getIntValueTransformed() = Integer.parseInt(getDriverSyn()); syn short NativeTypesSyn.getShortValueTransformed() = Short.parseShort(getDriverSyn()); syn long NativeTypesSyn.getLongValueTransformed() = Long.parseLong(getDriverSyn()); @@ -16,12 +19,15 @@ aspect Computation { syn String NativeTypesSyn.getStringValueTransformed() = new String(getDriverSyn()); // boxed types, synthesized + syn Boolean BoxedTypesSyn.getBooleanValue() = Integer.parseInt(getDriverSyn()) > 1; syn Integer BoxedTypesSyn.getIntValue() = Integer.valueOf(getDriverSyn()); syn Short BoxedTypesSyn.getShortValue() = Short.valueOf(getDriverSyn()); syn Long BoxedTypesSyn.getLongValue() = Long.valueOf(getDriverSyn()); syn Float BoxedTypesSyn.getFloatValue() = Float.valueOf(getDriverSyn()); syn Double BoxedTypesSyn.getDoubleValue() = Double.valueOf(getDriverSyn()); syn Character BoxedTypesSyn.getCharValue() = getDriverSyn().charAt(0); + + syn Boolean BoxedTypesSyn.getBooleanValueTransformed() = Integer.parseInt(getDriverSyn()) > 1; syn Integer BoxedTypesSyn.getIntValueTransformed() = Integer.valueOf(getDriverSyn()); syn Short BoxedTypesSyn.getShortValueTransformed() = Short.valueOf(getDriverSyn()); syn Long BoxedTypesSyn.getLongValueTransformed() = Long.valueOf(getDriverSyn()); diff --git a/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.relast b/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.relast index 56452539efeeec9cdd67f5e17a61bb0e41061a57..b9203c6ac13736308216c42326551e60dcd6c84c 100644 --- a/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.relast +++ b/ragconnect.tests/src/test/01-input/defaultOnlyWrite/Test.relast @@ -1,8 +1,8 @@ A ::= NativeTypesSyn* BoxedTypesSyn* <DriverInh:String>; // native types, synthesized -NativeTypesSyn ::= <DriverSyn:String> /<IntValue:int>/ /<ShortValue:short>/ /<LongValue:long>/ /<FloatValue:float>/ /<DoubleValue:double>/ /<CharValue:char>/ /<StringValue:String>/ /<IntValueTransformed:int>/ /<ShortValueTransformed:short>/ /<LongValueTransformed:long>/ /<FloatValueTransformed:float>/ /<DoubleValueTransformed:double>/ /<CharValueTransformed:char>/ /<StringValueTransformed:String>/ ; +NativeTypesSyn ::= <DriverSyn:String> /<BooleanValue:boolean>/ /<IntValue:int>/ /<ShortValue:short>/ /<LongValue:long>/ /<FloatValue:float>/ /<DoubleValue:double>/ /<CharValue:char>/ /<StringValue:String>/ /<BooleanValueTransformed:boolean>/ /<IntValueTransformed:int>/ /<ShortValueTransformed:short>/ /<LongValueTransformed:long>/ /<FloatValueTransformed:float>/ /<DoubleValueTransformed:double>/ /<CharValueTransformed:char>/ /<StringValueTransformed:String>/ ; // boxed types, synthesized -BoxedTypesSyn ::= <DriverSyn:String> /<IntValue:Integer>/ /<ShortValue:Short>/ /<LongValue:Long>/ /<FloatValue:Float>/ /<DoubleValue:Double>/ /<CharValue:Character>/ /<IntValueTransformed:Integer>/ /<ShortValueTransformed:Short>/ /<LongValueTransformed:Long>/ /<FloatValueTransformed:Float>/ /<DoubleValueTransformed:Double>/ /<CharValueTransformed:Character>/ ; +BoxedTypesSyn ::= <DriverSyn:String> /<BooleanValue:Boolean>/ /<IntValue:Integer>/ /<ShortValue:Short>/ /<LongValue:Long>/ /<FloatValue:Float>/ /<DoubleValue:Double>/ /<CharValue:Character>/ /<BooleanValueTransformed:Boolean>/ /<IntValueTransformed:Integer>/ /<ShortValueTransformed:Short>/ /<LongValueTransformed:Long>/ /<FloatValueTransformed:Float>/ /<DoubleValueTransformed:Double>/ /<CharValueTransformed:Character>/ ; // --- inherited attributes not supported --- //// native types, inherited diff --git a/ragconnect.tests/src/test/01-input/mapping/Test.connect b/ragconnect.tests/src/test/01-input/mapping/Test.connect index 1b38714a1a61afe69d0b494f0e163e8621d08aab..10f7c839afa6742ed20484e92c1108c6b6d3c1ca 100644 --- a/ragconnect.tests/src/test/01-input/mapping/Test.connect +++ b/ragconnect.tests/src/test/01-input/mapping/Test.connect @@ -4,6 +4,7 @@ receive NativeTypes.LongValue using String2Int, Int2Short, Short2Long ; receive NativeTypes.FloatValue using String2Int, Int2Short, Short2Long, Long2Float ; receive NativeTypes.DoubleValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double ; receive NativeTypes.CharValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char ; +receive NativeTypes.BooleanValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char, Char2Boolean ; send NativeTypes.WriteIntValue using String2Int ; send NativeTypes.WriteShortValue using String2Int, Int2Short ; @@ -11,6 +12,7 @@ send NativeTypes.WriteLongValue using String2Int, Int2Short, Short2Long ; send NativeTypes.WriteFloatValue using String2Int, Int2Short, Short2Long, Long2Float ; send NativeTypes.WriteDoubleValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double ; send NativeTypes.WriteCharValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char ; +send NativeTypes.WriteBooleanValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char, Char2Boolean ; receive BoxedTypes.IntValue using String2Int ; receive BoxedTypes.ShortValue using String2Int, Int2Short ; @@ -18,6 +20,7 @@ receive BoxedTypes.LongValue using String2Int, Int2Short, Short2Long ; receive BoxedTypes.FloatValue using String2Int, Int2Short, Short2Long, Long2Float ; receive BoxedTypes.DoubleValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double ; receive BoxedTypes.CharValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char ; +receive BoxedTypes.BooleanValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char, Char2Boolean ; String2Int maps String s to int {: return Integer.parseInt(s); @@ -37,6 +40,9 @@ Float2Double maps float f to double {: Double2Char maps double d to char {: return (char) ((int) d); :} +Char2Boolean maps char c to boolean {: + return c > 21; +:} NativeTypes.WriteIntValue canDependOn NativeTypes.Driver as nativeIntDependency; NativeTypes.WriteShortValue canDependOn NativeTypes.Driver as nativeShortDependency; @@ -44,3 +50,4 @@ NativeTypes.WriteLongValue canDependOn NativeTypes.Driver as nativeLongDependenc NativeTypes.WriteFloatValue canDependOn NativeTypes.Driver as nativeFloatDependency; NativeTypes.WriteDoubleValue canDependOn NativeTypes.Driver as nativeDoubleDependency; NativeTypes.WriteCharValue canDependOn NativeTypes.Driver as nativeCharDependency; +NativeTypes.WriteBooleanValue canDependOn NativeTypes.Driver as nativeBooleanDependency; diff --git a/ragconnect.tests/src/test/01-input/mapping/Test.jadd b/ragconnect.tests/src/test/01-input/mapping/Test.jadd index 7837d7dc7328b0b2ec1563e163383fb242190f5b..1ac351565b5f370453e431847f3c42237ec93861 100644 --- a/ragconnect.tests/src/test/01-input/mapping/Test.jadd +++ b/ragconnect.tests/src/test/01-input/mapping/Test.jadd @@ -6,4 +6,5 @@ aspect Computation { syn String NativeTypes.getWriteFloatValue() = getDriver(); syn String NativeTypes.getWriteDoubleValue() = getDriver(); syn String NativeTypes.getWriteCharValue() = getDriver(); + syn String NativeTypes.getWriteBooleanValue() = getDriver(); } diff --git a/ragconnect.tests/src/test/01-input/mapping/Test.relast b/ragconnect.tests/src/test/01-input/mapping/Test.relast index c15991d5029b783f96b1d0f77fb6c242f0883bf3..718d16768e344af165efc4cfcd1653f9a92f6b02 100644 --- a/ragconnect.tests/src/test/01-input/mapping/Test.relast +++ b/ragconnect.tests/src/test/01-input/mapping/Test.relast @@ -1,3 +1,3 @@ A ::= NativeTypes BoxedTypes ; -NativeTypes ::= <IntValue:int> <ShortValue:short> <LongValue:long> <FloatValue:float> <DoubleValue:double> <CharValue:char> <Driver:String> /<WriteIntValue:String>/ /<WriteShortValue:String>/ /<WriteLongValue:String>/ /<WriteFloatValue:String>/ /<WriteDoubleValue:String>/ /<WriteCharValue:String>/; -BoxedTypes ::= <IntValue:Integer> <ShortValue:Short> <LongValue:Long> <FloatValue:Float> <DoubleValue:Double> <CharValue:Character> ; +NativeTypes ::= <IntValue:int> <ShortValue:short> <LongValue:long> <FloatValue:float> <DoubleValue:double> <CharValue:char> <BooleanValue:boolean> <Driver:String> /<WriteIntValue:String>/ /<WriteShortValue:String>/ /<WriteLongValue:String>/ /<WriteFloatValue:String>/ /<WriteDoubleValue:String>/ /<WriteCharValue:String>/ /<WriteBooleanValue:String>/; +BoxedTypes ::= <IntValue:Integer> <ShortValue:Short> <LongValue:Long> <FloatValue:Float> <DoubleValue:Double> <CharValue:Character> <BooleanValue:Boolean> ; diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyReadTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyReadTest.java index 14b26799670088f7b3acf16bb7f6d1946ae8f914..844f35d61b64364aa271a82fe770401f7ab8ba5f 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyReadTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyReadTest.java @@ -6,7 +6,6 @@ import defaultOnlyRead.ast.MqttHandler; import defaultOnlyRead.ast.NativeTypes; import java.io.IOException; -import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; import static org.jastadd.ragconnect.tests.TestUtils.mqttUri; @@ -20,7 +19,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; */ public class DefaultOnlyReadTest extends AbstractMqttTest { - private static final String TOPIC_NATIVE_INT = "native/int"; + private static final String TOPIC_NATIVE_INT = "native/boolean"; + private static final String TOPIC_NATIVE_BOOLEAN = "native/int"; private static final String TOPIC_NATIVE_SHORT = "native/short"; private static final String TOPIC_NATIVE_LONG = "native/long"; private static final String TOPIC_NATIVE_FLOAT = "native/float"; @@ -28,6 +28,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { private static final String TOPIC_NATIVE_CHAR = "native/char"; private static final String TOPIC_NATIVE_STRING = "native/string"; + private static final String TOPIC_BOXED_BOOLEAN = "boxed/boolean"; private static final String TOPIC_BOXED_INTEGER = "boxed/Integer"; private static final String TOPIC_BOXED_SHORT = "boxed/Short"; private static final String TOPIC_BOXED_LONG = "boxed/Long"; @@ -59,6 +60,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { protected void setupReceiverAndConnect(boolean writeCurrentValue) throws IOException { model.ragconnectSetupMqttWaitUntilReady(2, TimeUnit.SECONDS); + integers.connectBooleanValue(mqttUri(TOPIC_NATIVE_BOOLEAN)); integers.connectIntValue(mqttUri(TOPIC_NATIVE_INT)); integers.connectShortValue(mqttUri(TOPIC_NATIVE_SHORT)); integers.connectLongValue(mqttUri(TOPIC_NATIVE_LONG)); @@ -67,6 +69,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { chars.connectCharValue(mqttUri(TOPIC_NATIVE_CHAR)); chars.connectStringValue(mqttUri(TOPIC_NATIVE_STRING)); + integers.connectBooleanValueTransformed(mqttUri(TOPIC_NATIVE_BOOLEAN)); integers.connectIntValueTransformed(mqttUri(TOPIC_NATIVE_INT)); integers.connectShortValueTransformed(mqttUri(TOPIC_NATIVE_SHORT)); integers.connectLongValueTransformed(mqttUri(TOPIC_NATIVE_LONG)); @@ -75,6 +78,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { chars.connectCharValueTransformed(mqttUri(TOPIC_NATIVE_CHAR)); chars.connectStringValueTransformed(mqttUri(TOPIC_NATIVE_STRING)); + allBoxed.connectBooleanValue(mqttUri(TOPIC_BOXED_BOOLEAN)); allBoxed.connectIntValue(mqttUri(TOPIC_BOXED_INTEGER)); allBoxed.connectShortValue(mqttUri(TOPIC_BOXED_SHORT)); allBoxed.connectLongValue(mqttUri(TOPIC_BOXED_LONG)); @@ -82,6 +86,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { allBoxed.connectDoubleValue(mqttUri(TOPIC_BOXED_DOUBLE)); allBoxed.connectCharValue(mqttUri(TOPIC_BOXED_CHARACTER)); + allBoxed.connectBooleanValueTransformed(mqttUri(TOPIC_BOXED_BOOLEAN)); allBoxed.connectIntValueTransformed(mqttUri(TOPIC_BOXED_INTEGER)); allBoxed.connectShortValueTransformed(mqttUri(TOPIC_BOXED_SHORT)); allBoxed.connectLongValueTransformed(mqttUri(TOPIC_BOXED_LONG)); @@ -100,6 +105,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { @Override protected void communicateOnlyUpdatedValue() throws InterruptedException { + final boolean expectedBooleanValue = true; final int expectedIntValue = 1; final short expectedShortValue = 2; final long expectedLongValue = 3L; @@ -108,23 +114,26 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { final char expectedCharValue = 'c'; final String expectedStringValue = "6.3"; - sender.publish(TOPIC_NATIVE_INT, ByteBuffer.allocate(4).putInt(expectedIntValue).array()); - sender.publish(TOPIC_NATIVE_SHORT, ByteBuffer.allocate(2).putShort(expectedShortValue).array()); - sender.publish(TOPIC_NATIVE_LONG, ByteBuffer.allocate(8).putLong(expectedLongValue).array()); - sender.publish(TOPIC_NATIVE_FLOAT, ByteBuffer.allocate(4).putFloat(expectedFloatValue).array()); - sender.publish(TOPIC_NATIVE_DOUBLE, ByteBuffer.allocate(8).putDouble(expectedDoubleValue).array()); - sender.publish(TOPIC_NATIVE_CHAR, ByteBuffer.allocate(2).putChar(expectedCharValue).array()); - sender.publish(TOPIC_NATIVE_STRING, expectedStringValue.getBytes()); - - sender.publish(TOPIC_BOXED_INTEGER, ByteBuffer.allocate(4).putInt(expectedIntValue).array()); - sender.publish(TOPIC_BOXED_SHORT, ByteBuffer.allocate(2).putShort(expectedShortValue).array()); - sender.publish(TOPIC_BOXED_LONG, ByteBuffer.allocate(8).putLong(expectedLongValue).array()); - sender.publish(TOPIC_BOXED_FLOAT, ByteBuffer.allocate(4).putFloat(expectedFloatValue).array()); - sender.publish(TOPIC_BOXED_DOUBLE, ByteBuffer.allocate(8).putDouble(expectedDoubleValue).array()); - sender.publish(TOPIC_BOXED_CHARACTER, ByteBuffer.allocate(2).putChar(expectedCharValue).array()); + sender.publish(TOPIC_NATIVE_BOOLEAN, TestUtils.DefaultMappings.BoolToBytes(expectedBooleanValue)); + sender.publish(TOPIC_NATIVE_INT, TestUtils.DefaultMappings.IntToBytes(expectedIntValue)); + sender.publish(TOPIC_NATIVE_SHORT, TestUtils.DefaultMappings.ShortToBytes(expectedShortValue)); + sender.publish(TOPIC_NATIVE_LONG, TestUtils.DefaultMappings.LongToBytes(expectedLongValue)); + sender.publish(TOPIC_NATIVE_FLOAT, TestUtils.DefaultMappings.FloatToBytes(expectedFloatValue)); + sender.publish(TOPIC_NATIVE_DOUBLE, TestUtils.DefaultMappings.DoubleToBytes(expectedDoubleValue)); + sender.publish(TOPIC_NATIVE_CHAR, TestUtils.DefaultMappings.CharToBytes(expectedCharValue)); + sender.publish(TOPIC_NATIVE_STRING, TestUtils.DefaultMappings.StringToBytes(expectedStringValue)); + + sender.publish(TOPIC_BOXED_BOOLEAN, TestUtils.DefaultMappings.BoolToBytes(expectedBooleanValue)); + sender.publish(TOPIC_BOXED_INTEGER, TestUtils.DefaultMappings.IntToBytes(expectedIntValue)); + sender.publish(TOPIC_BOXED_SHORT, TestUtils.DefaultMappings.ShortToBytes(expectedShortValue)); + sender.publish(TOPIC_BOXED_LONG, TestUtils.DefaultMappings.LongToBytes(expectedLongValue)); + sender.publish(TOPIC_BOXED_FLOAT, TestUtils.DefaultMappings.FloatToBytes(expectedFloatValue)); + sender.publish(TOPIC_BOXED_DOUBLE, TestUtils.DefaultMappings.DoubleToBytes(expectedDoubleValue)); + sender.publish(TOPIC_BOXED_CHARACTER, TestUtils.DefaultMappings.CharToBytes(expectedCharValue)); TestUtils.waitForMqtt(); + assertEquals(expectedBooleanValue, integers.getBooleanValue()); assertEquals(expectedIntValue, integers.getIntValue()); assertEquals(expectedShortValue, integers.getShortValue()); assertEquals(expectedLongValue, integers.getLongValue()); @@ -133,6 +142,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { assertEquals(expectedCharValue, chars.getCharValue()); assertEquals(expectedStringValue, chars.getStringValue()); + assertEquals(expectedBooleanValue, integers.getBooleanValueTransformed()); assertEquals(expectedIntValue, integers.getIntValueTransformed()); assertEquals(expectedShortValue, integers.getShortValueTransformed()); assertEquals(expectedLongValue, integers.getLongValueTransformed()); @@ -141,6 +151,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { assertEquals(expectedCharValue, chars.getCharValueTransformed()); assertEquals(expectedStringValue, chars.getStringValueTransformed()); + assertEquals(expectedBooleanValue, allBoxed.getBooleanValue()); assertEquals(expectedIntValue, allBoxed.getIntValue().intValue()); assertEquals(expectedShortValue, allBoxed.getShortValue().shortValue()); assertEquals(expectedLongValue, allBoxed.getLongValue().longValue()); @@ -148,6 +159,7 @@ public class DefaultOnlyReadTest extends AbstractMqttTest { assertEquals(expectedDoubleValue, allBoxed.getDoubleValue(), TestUtils.DELTA); assertEquals(expectedCharValue, allBoxed.getCharValue().charValue()); + assertEquals(expectedBooleanValue, allBoxed.getBooleanValueTransformed()); assertEquals(expectedIntValue, allBoxed.getIntValueTransformed().intValue()); assertEquals(expectedShortValue, allBoxed.getShortValueTransformed().shortValue()); assertEquals(expectedLongValue, allBoxed.getLongValueTransformed().longValue()); diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyWriteTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyWriteTest.java index 3044bb53504018a2586552d60a3c21d0b192f0e2..a5d20afb5a2b98ee5e9aef0fac0102ecced2b15a 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyWriteTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/DefaultOnlyWriteTest.java @@ -18,6 +18,7 @@ import static org.junit.jupiter.api.Assertions.*; */ public class DefaultOnlyWriteTest extends AbstractMqttTest { + private static final String TOPIC_NATIVE_BOOLEAN = "native/boolean"; private static final String TOPIC_NATIVE_INT = "native/int"; private static final String TOPIC_NATIVE_SHORT = "native/short"; private static final String TOPIC_NATIVE_LONG = "native/long"; @@ -26,6 +27,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { private static final String TOPIC_NATIVE_CHAR = "native/char"; private static final String TOPIC_NATIVE_STRING = "native/string"; + private static final String TOPIC_NATIVE_BOOLEAN_TRANSFORMED = "native/boolean/t"; private static final String TOPIC_NATIVE_INT_TRANSFORMED = "native/int/t"; private static final String TOPIC_NATIVE_SHORT_TRANSFORMED = "native/short/t"; private static final String TOPIC_NATIVE_LONG_TRANSFORMED = "native/long/t"; @@ -34,6 +36,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { private static final String TOPIC_NATIVE_CHAR_TRANSFORMED = "native/char/t"; private static final String TOPIC_NATIVE_STRING_TRANSFORMED = "native/string/t"; + private static final String TOPIC_BOXED_BOOLEAN = "boxed/Boolean"; private static final String TOPIC_BOXED_INTEGER = "boxed/Integer"; private static final String TOPIC_BOXED_SHORT = "boxed/Short"; private static final String TOPIC_BOXED_LONG = "boxed/Long"; @@ -41,6 +44,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { private static final String TOPIC_BOXED_DOUBLE = "boxed/Double"; private static final String TOPIC_BOXED_CHARACTER = "boxed/Character"; + private static final String TOPIC_BOXED_BOOLEAN_TRANSFORMED = "boxed/Boolean/t"; private static final String TOPIC_BOXED_INTEGER_TRANSFORMED = "boxed/Integer/t"; private static final String TOPIC_BOXED_SHORT_TRANSFORMED = "boxed/Short/t"; private static final String TOPIC_BOXED_LONG_TRANSFORMED = "boxed/Long/t"; @@ -87,6 +91,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { receiver = new MqttHandler().dontSendWelcomeMessage().setHost(TestUtils.getMqttHost()); assertTrue(receiver.waitUntilReady(2, TimeUnit.SECONDS)); + nativeIntegers.addNativeBooleanDependency(nativeIntegers); nativeIntegers.addNativeIntDependency(nativeIntegers); nativeIntegers.addNativeShortDependency(nativeIntegers); nativeIntegers.addNativeLongDependency(nativeIntegers); @@ -95,6 +100,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { nativeChars.addNativeCharDependency(nativeChars); nativeChars.addNativeStringDependency(nativeChars); + nativeIntegers.addNativeBooleanTransformedDependency(nativeIntegers); nativeIntegers.addNativeIntTransformedDependency(nativeIntegers); nativeIntegers.addNativeShortTransformedDependency(nativeIntegers); nativeIntegers.addNativeLongTransformedDependency(nativeIntegers); @@ -103,6 +109,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { nativeChars.addNativeCharTransformedDependency(nativeChars); nativeChars.addNativeStringTransformedDependency(nativeChars); + boxedIntegers.addBoxedBooleanDependency(boxedIntegers); boxedIntegers.addBoxedIntDependency(boxedIntegers); boxedIntegers.addBoxedShortDependency(boxedIntegers); boxedIntegers.addBoxedLongDependency(boxedIntegers); @@ -110,6 +117,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { boxedFloats.addBoxedDoubleDependency(boxedFloats); boxedChars.addBoxedCharDependency(boxedChars); + boxedIntegers.addBoxedBooleanTransformedDependency(boxedIntegers); boxedIntegers.addBoxedIntTransformedDependency(boxedIntegers); boxedIntegers.addBoxedShortTransformedDependency(boxedIntegers); boxedIntegers.addBoxedLongTransformedDependency(boxedIntegers); @@ -120,6 +128,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { dataNormal = createReceiver(false); dataTransformed = createReceiver(true); + nativeIntegers.connectBooleanValue(mqttUri(TOPIC_NATIVE_BOOLEAN), writeCurrentValue); nativeIntegers.connectIntValue(mqttUri(TOPIC_NATIVE_INT), writeCurrentValue); nativeIntegers.connectShortValue(mqttUri(TOPIC_NATIVE_SHORT), writeCurrentValue); nativeIntegers.connectLongValue(mqttUri(TOPIC_NATIVE_LONG), writeCurrentValue); @@ -128,6 +137,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { nativeChars.connectCharValue(mqttUri(TOPIC_NATIVE_CHAR), writeCurrentValue); nativeChars.connectStringValue(mqttUri(TOPIC_NATIVE_STRING), writeCurrentValue); + nativeIntegers.connectBooleanValueTransformed(mqttUri(TOPIC_NATIVE_BOOLEAN_TRANSFORMED), writeCurrentValue); nativeIntegers.connectIntValueTransformed(mqttUri(TOPIC_NATIVE_INT_TRANSFORMED), writeCurrentValue); nativeIntegers.connectShortValueTransformed(mqttUri(TOPIC_NATIVE_SHORT_TRANSFORMED), writeCurrentValue); nativeIntegers.connectLongValueTransformed(mqttUri(TOPIC_NATIVE_LONG_TRANSFORMED), writeCurrentValue); @@ -136,6 +146,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { nativeChars.connectCharValueTransformed(mqttUri(TOPIC_NATIVE_CHAR_TRANSFORMED), writeCurrentValue); nativeChars.connectStringValueTransformed(mqttUri(TOPIC_NATIVE_STRING_TRANSFORMED), writeCurrentValue); + boxedIntegers.connectBooleanValue(mqttUri(TOPIC_BOXED_BOOLEAN), writeCurrentValue); boxedIntegers.connectIntValue(mqttUri(TOPIC_BOXED_INTEGER), writeCurrentValue); boxedIntegers.connectShortValue(mqttUri(TOPIC_BOXED_SHORT), writeCurrentValue); boxedIntegers.connectLongValue(mqttUri(TOPIC_BOXED_LONG), writeCurrentValue); @@ -143,6 +154,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { boxedFloats.connectDoubleValue(mqttUri(TOPIC_BOXED_DOUBLE), writeCurrentValue); boxedChars.connectCharValue(mqttUri(TOPIC_BOXED_CHARACTER), writeCurrentValue); + boxedIntegers.connectBooleanValueTransformed(mqttUri(TOPIC_BOXED_BOOLEAN_TRANSFORMED), writeCurrentValue); boxedIntegers.connectIntValueTransformed(mqttUri(TOPIC_BOXED_INTEGER_TRANSFORMED), writeCurrentValue); boxedIntegers.connectShortValueTransformed(mqttUri(TOPIC_BOXED_SHORT_TRANSFORMED), writeCurrentValue); boxedIntegers.connectLongValueTransformed(mqttUri(TOPIC_BOXED_LONG_TRANSFORMED), writeCurrentValue); @@ -154,57 +166,65 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { private ReceiverData createReceiver(boolean transformed) { ReceiverData result = new ReceiverData(); + receiver.newConnection(transformed ? TOPIC_NATIVE_BOOLEAN_TRANSFORMED : TOPIC_NATIVE_BOOLEAN, bytes -> { + result.numberOfNativeBoolValues += 1; + result.lastNativeBoolValue = TestUtils.DefaultMappings.BytesToBool(bytes); + }); receiver.newConnection(transformed ? TOPIC_NATIVE_INT_TRANSFORMED : TOPIC_NATIVE_INT, bytes -> { result.numberOfNativeIntValues += 1; - result.lastNativeIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + result.lastNativeIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); receiver.newConnection(transformed ? TOPIC_NATIVE_SHORT_TRANSFORMED : TOPIC_NATIVE_SHORT, bytes -> { result.numberOfNativeShortValues += 1; - result.lastNativeShortValue = java.nio.ByteBuffer.wrap(bytes).getShort(); + result.lastNativeShortValue = TestUtils.DefaultMappings.BytesToShort(bytes); }); receiver.newConnection(transformed ? TOPIC_NATIVE_LONG_TRANSFORMED : TOPIC_NATIVE_LONG, bytes -> { result.numberOfNativeLongValues += 1; - result.lastNativeLongValue = java.nio.ByteBuffer.wrap(bytes).getLong(); + result.lastNativeLongValue = TestUtils.DefaultMappings.BytesToLong(bytes); }); receiver.newConnection(transformed ? TOPIC_NATIVE_FLOAT_TRANSFORMED : TOPIC_NATIVE_FLOAT, bytes -> { result.numberOfNativeFloatValues += 1; - result.lastNativeFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat(); + result.lastNativeFloatValue = TestUtils.DefaultMappings.BytesToFloat(bytes); }); receiver.newConnection(transformed ? TOPIC_NATIVE_DOUBLE_TRANSFORMED : TOPIC_NATIVE_DOUBLE, bytes -> { result.numberOfNativeDoubleValues += 1; - result.lastNativeDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble(); + result.lastNativeDoubleValue = TestUtils.DefaultMappings.BytesToDouble(bytes); }); receiver.newConnection(transformed ? TOPIC_NATIVE_CHAR_TRANSFORMED : TOPIC_NATIVE_CHAR, bytes -> { result.numberOfNativeCharValues += 1; - result.lastNativeCharValue = java.nio.ByteBuffer.wrap(bytes).getChar(); + result.lastNativeCharValue = TestUtils.DefaultMappings.BytesToChar(bytes); }); receiver.newConnection(transformed ? TOPIC_NATIVE_STRING_TRANSFORMED : TOPIC_NATIVE_STRING, bytes -> { result.numberOfNativeStringValues += 1; - result.lastNativeStringValue = new String(bytes); + result.lastNativeStringValue = TestUtils.DefaultMappings.BytesToString(bytes); + }); + receiver.newConnection(transformed ? TOPIC_BOXED_BOOLEAN_TRANSFORMED : TOPIC_BOXED_BOOLEAN, bytes -> { + result.numberOfBoxedBoolValues += 1; + result.lastBoxedBoolValue = TestUtils.DefaultMappings.BytesToBool(bytes); }); receiver.newConnection(transformed ? TOPIC_BOXED_INTEGER_TRANSFORMED : TOPIC_BOXED_INTEGER, bytes -> { result.numberOfBoxedIntValues += 1; - result.lastBoxedIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + result.lastBoxedIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); receiver.newConnection(transformed ? TOPIC_BOXED_SHORT_TRANSFORMED : TOPIC_BOXED_SHORT, bytes -> { result.numberOfBoxedShortValues += 1; - result.lastBoxedShortValue = java.nio.ByteBuffer.wrap(bytes).getShort(); + result.lastBoxedShortValue = TestUtils.DefaultMappings.BytesToShort(bytes); }); receiver.newConnection(transformed ? TOPIC_BOXED_LONG_TRANSFORMED : TOPIC_BOXED_LONG, bytes -> { result.numberOfBoxedLongValues += 1; - result.lastBoxedLongValue = java.nio.ByteBuffer.wrap(bytes).getLong(); + result.lastBoxedLongValue = TestUtils.DefaultMappings.BytesToLong(bytes); }); receiver.newConnection(transformed ? TOPIC_BOXED_FLOAT_TRANSFORMED : TOPIC_BOXED_FLOAT, bytes -> { result.numberOfBoxedFloatValues += 1; - result.lastBoxedFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat(); + result.lastBoxedFloatValue = TestUtils.DefaultMappings.BytesToFloat(bytes); }); receiver.newConnection(transformed ? TOPIC_BOXED_DOUBLE_TRANSFORMED : TOPIC_BOXED_DOUBLE, bytes -> { result.numberOfBoxedDoubleValues += 1; - result.lastBoxedDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble(); + result.lastBoxedDoubleValue = TestUtils.DefaultMappings.BytesToDouble(bytes); }); receiver.newConnection(transformed ? TOPIC_BOXED_CHARACTER_TRANSFORMED : TOPIC_BOXED_CHARACTER, bytes -> { result.numberOfBoxedCharValues += 1; - result.lastBoxedCharValue = java.nio.ByteBuffer.wrap(bytes).getChar(); + result.lastBoxedCharValue = TestUtils.DefaultMappings.BytesToChar(bytes); }); return result; } @@ -212,37 +232,37 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { @Override protected void communicateSendInitialValue() throws InterruptedException { // check initial value - checkData(1, 1, 1.1, 'a', "ab"); + checkData(1, 1, false, 1, 1.1, 'a', "ab"); // set new value setData("2", "2.2", "cd"); // check new value - checkData(2, 2, 2.2, 'c', "cd"); + checkData(2, 2, true, 2, 2.2, 'c', "cd"); // set new value setData("3", "3.2", "ee"); // check new value - checkData(3, 3, 3.2, 'e', "ee"); + checkData(3, 2, true, 3, 3.2, 'e', "ee"); } @Override protected void communicateOnlyUpdatedValue() throws InterruptedException { // check initial value (will be default values) - checkData(0, null, null, null, null); + checkData(0, 0, null, null, null, null, null); // set new value setData("2", "2.2", "cd"); // check new value - checkData(1, 2, 2.2, 'c', "cd"); + checkData(1, 1, true, 2, 2.2, 'c', "cd"); // set new value setData("3", "3.2", "ee"); // check new value - checkData(2, 3, 3.2, 'e', "ee"); + checkData(2, 1, true, 3, 3.2, 'e', "ee"); } @Override @@ -265,11 +285,12 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { boxedChars.setDriverSyn(stringDriver); } - private void checkData(int expectedNumberOfValues, - Integer expectedInt, Double expectedDouble, + private void checkData(int expectedNumberOfValues, int expectedNumberOfBoolValues, + Boolean expectedBool, Integer expectedInt, Double expectedDouble, Character expectedChar, String expectedString) throws InterruptedException { TestUtils.waitForMqtt(); for (ReceiverData data : new ReceiverData[]{dataNormal, dataTransformed}) { + assertEquals(expectedNumberOfBoolValues, data.numberOfNativeBoolValues); assertEquals(expectedNumberOfValues, data.numberOfNativeIntValues); assertEquals(expectedNumberOfValues, data.numberOfNativeShortValues); assertEquals(expectedNumberOfValues, data.numberOfNativeLongValues); @@ -278,6 +299,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { assertEquals(expectedNumberOfValues, data.numberOfNativeCharValues); assertEquals(expectedNumberOfValues, data.numberOfNativeStringValues); + assertEquals(expectedNumberOfBoolValues, data.numberOfBoxedBoolValues); assertEquals(expectedNumberOfValues, data.numberOfBoxedIntValues); assertEquals(expectedNumberOfValues, data.numberOfBoxedShortValues); assertEquals(expectedNumberOfValues, data.numberOfBoxedLongValues); @@ -285,6 +307,14 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { assertEquals(expectedNumberOfValues, data.numberOfBoxedDoubleValues); assertEquals(expectedNumberOfValues, data.numberOfBoxedCharValues); + if (expectedBool != null) { + assertEquals(expectedBool, data.lastNativeBoolValue); + assertEquals(expectedBool, data.lastBoxedBoolValue); + } else { + assertFalse(data.lastNativeBoolValue); + assertNull(data.lastBoxedBoolValue); + } + if (expectedInt != null) { assertEquals(expectedInt.intValue(), data.lastNativeIntValue); assertEquals(expectedInt.shortValue(), data.lastNativeShortValue); @@ -325,6 +355,8 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { } private static class ReceiverData { + boolean lastNativeBoolValue; + int numberOfNativeBoolValues = 0; int lastNativeIntValue; int numberOfNativeIntValues = 0; short lastNativeShortValue; @@ -340,6 +372,8 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest { String lastNativeStringValue; int numberOfNativeStringValues = 0; + Boolean lastBoxedBoolValue; + int numberOfBoxedBoolValues = 0; Integer lastBoxedIntValue; int numberOfBoxedIntValues = 0; Short lastBoxedShortValue; diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/IncrementalDependencyTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/IncrementalDependencyTest.java index 00123e5dbec5cc1a26e3c7d85620b64160943a12..e7d6555ef302f59f8ada8d77a9e6a33c262910cc 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/IncrementalDependencyTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/IncrementalDependencyTest.java @@ -61,15 +61,15 @@ public class IncrementalDependencyTest extends AbstractMqttTest { handler.newConnection(TOPIC_OUT_A, bytes -> { dataA.numberOfStringValues += 1; - dataA.lastStringValue = new String(bytes); + dataA.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_OUT_B1, bytes -> { dataB1.numberOfStringValues += 1; - dataB1.lastStringValue = new String(bytes); + dataB1.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_OUT_B2, bytes -> { dataB2.numberOfStringValues += 1; - dataB2.lastStringValue = new String(bytes); + dataB2.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); model.connectInput(mqttUri(TOPIC_IN)); diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MappingTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MappingTest.java index 84ad0b9e90305e4acbe3a582f403310330c7c9e3..2c7cd6ccf9d0a2ac3ce353fcc025881938194191 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MappingTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/MappingTest.java @@ -4,7 +4,6 @@ import mapping.ast.A; import mapping.ast.BoxedTypes; import mapping.ast.MqttHandler; import mapping.ast.NativeTypes; -import org.junit.jupiter.api.Tag; import java.io.IOException; import java.util.concurrent.TimeUnit; @@ -18,7 +17,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; * * @author rschoene - Initial contribution */ -@Tag("NewTest") public class MappingTest extends AbstractMqttTest { private static final String TOPIC_INPUT = "input"; @@ -28,6 +26,7 @@ public class MappingTest extends AbstractMqttTest { private static final String TOPIC_WRITE_NATIVE_FLOAT = "native/float"; private static final String TOPIC_WRITE_NATIVE_DOUBLE = "native/double"; private static final String TOPIC_WRITE_NATIVE_CHAR = "native/char"; + private static final String TOPIC_WRITE_NATIVE_BOOLEAN = "native/boolean"; private A model; private NativeTypes natives; @@ -58,31 +57,36 @@ public class MappingTest extends AbstractMqttTest { natives.addNativeFloatDependency(natives); natives.addNativeDoubleDependency(natives); natives.addNativeCharDependency(natives); + natives.addNativeBooleanDependency(natives); data = new ReceiverData(); handler.newConnection(TOPIC_WRITE_NATIVE_INT, bytes -> { data.numberOfNativeIntValues += 1; - data.lastNativeIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + data.lastNativeIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); handler.newConnection(TOPIC_WRITE_NATIVE_SHORT, bytes -> { data.numberOfNativeShortValues += 1; - data.lastNativeShortValue = java.nio.ByteBuffer.wrap(bytes).getShort(); + data.lastNativeShortValue = TestUtils.DefaultMappings.BytesToShort(bytes); }); handler.newConnection(TOPIC_WRITE_NATIVE_LONG, bytes -> { data.numberOfNativeLongValues += 1; - data.lastNativeLongValue = java.nio.ByteBuffer.wrap(bytes).getLong(); + data.lastNativeLongValue = TestUtils.DefaultMappings.BytesToLong(bytes); }); handler.newConnection(TOPIC_WRITE_NATIVE_FLOAT, bytes -> { data.numberOfNativeFloatValues += 1; - data.lastNativeFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat(); + data.lastNativeFloatValue = TestUtils.DefaultMappings.BytesToFloat(bytes); }); handler.newConnection(TOPIC_WRITE_NATIVE_DOUBLE, bytes -> { data.numberOfNativeDoubleValues += 1; - data.lastNativeDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble(); + data.lastNativeDoubleValue = TestUtils.DefaultMappings.BytesToDouble(bytes); }); handler.newConnection(TOPIC_WRITE_NATIVE_CHAR, bytes -> { data.numberOfNativeCharValues += 1; - data.lastNativeCharValue = java.nio.ByteBuffer.wrap(bytes).getChar(); + data.lastNativeCharValue = TestUtils.DefaultMappings.BytesToChar(bytes); + }); + handler.newConnection(TOPIC_WRITE_NATIVE_BOOLEAN, bytes -> { + data.numberOfNativeBooleanValues += 1; + data.lastNativeBooleanValue = TestUtils.DefaultMappings.BytesToBool(bytes); }); natives.connectWriteIntValue(mqttUri(TOPIC_WRITE_NATIVE_INT), writeCurrentValue); @@ -91,6 +95,7 @@ public class MappingTest extends AbstractMqttTest { natives.connectWriteFloatValue(mqttUri(TOPIC_WRITE_NATIVE_FLOAT), writeCurrentValue); natives.connectWriteDoubleValue(mqttUri(TOPIC_WRITE_NATIVE_DOUBLE), writeCurrentValue); natives.connectWriteCharValue(mqttUri(TOPIC_WRITE_NATIVE_CHAR), writeCurrentValue); + natives.connectWriteBooleanValue(mqttUri(TOPIC_WRITE_NATIVE_BOOLEAN), writeCurrentValue); natives.connectIntValue(mqttUri(TOPIC_INPUT)); natives.connectShortValue(mqttUri(TOPIC_INPUT)); @@ -98,6 +103,7 @@ public class MappingTest extends AbstractMqttTest { natives.connectFloatValue(mqttUri(TOPIC_INPUT)); natives.connectDoubleValue(mqttUri(TOPIC_INPUT)); natives.connectCharValue(mqttUri(TOPIC_INPUT)); + natives.connectBooleanValue(mqttUri(TOPIC_INPUT)); boxes.connectIntValue(mqttUri(TOPIC_INPUT)); boxes.connectShortValue(mqttUri(TOPIC_INPUT)); @@ -105,48 +111,49 @@ public class MappingTest extends AbstractMqttTest { boxes.connectFloatValue(mqttUri(TOPIC_INPUT)); boxes.connectDoubleValue(mqttUri(TOPIC_INPUT)); boxes.connectCharValue(mqttUri(TOPIC_INPUT)); + boxes.connectBooleanValue(mqttUri(TOPIC_INPUT)); } @Override protected void communicateSendInitialValue() throws InterruptedException { - checkSendData(1, 1, (short) 1, 1, 1.01f, 1.01d, (char) 1); + checkSendData(1, 1, (short) 1, 1, 1.01f, 1.01d, (char) 1, 1, false); // no check for initial received data (no input set yet) // send first value sendAndSetData("21", "31"); - checkSendData(2, 21, (short) 21, 21, 21.01f, 21.01d, (char) 21); - checkReceiveData(31, (short) 31, 31, 31.01f, 31.01d, (char) 31); + checkSendData(2, 21, (short) 21, 21, 21.01f, 21.01d, (char) 21, 1, false); + checkReceiveData(31, (short) 31, 31, 31.01f, 31.01d, (char) 31, true); // send same value sendAndSetData("21", "31"); - checkSendData(2, 21, (short) 21, 21, 21.01f, 21.01d, (char) 21); - checkReceiveData(31, (short) 31, 31, 31.01f, 31.01d, (char) 31); + checkSendData(2, 21, (short) 21, 21, 21.01f, 21.01d, (char) 21, 1, false); + checkReceiveData(31, (short) 31, 31, 31.01f, 31.01d, (char) 31, true); // send new value sendAndSetData("22", "32"); - checkSendData(3, 22, (short) 22, 22, 22.01f, 22.01d, (char) 22); - checkReceiveData(32, (short) 32, 32, 32.01f, 32.01d, (char) 32); + checkSendData(3, 22, (short) 22, 22, 22.01f, 22.01d, (char) 22, 2, true); + checkReceiveData(32, (short) 32, 32, 32.01f, 32.01d, (char) 32, true); } @Override protected void communicateOnlyUpdatedValue() throws InterruptedException { - checkSendData(0, 0, (short) 0, 0, 0f, 0d, (char) 0); + checkSendData(0, 0, (short) 0, 0, 0f, 0d, (char) 0, 0, false); // no check for initial received data (no input set yet) // send first value sendAndSetData("41", "51"); - checkSendData(1, 41, (short) 41, 41, 41.01f, 41.01d, (char) 41); - checkReceiveData(51, (short) 51, 51, 51.01f, 51.01d, (char) 51); + checkSendData(1, 41, (short) 41, 41, 41.01f, 41.01d, (char) 41, 1, true); + checkReceiveData(51, (short) 51, 51, 51.01f, 51.01d, (char) 51, true); // send same value sendAndSetData("41", "51"); - checkSendData(1, 41, (short) 41, 41, 41.01f, 41.01d, (char) 41); - checkReceiveData(51, (short) 51, 51, 51.01f, 51.01d, (char) 51); + checkSendData(1, 41, (short) 41, 41, 41.01f, 41.01d, (char) 41, 1, true); + checkReceiveData(51, (short) 51, 51, 51.01f, 51.01d, (char) 51, true); // send new value sendAndSetData("42", "52"); - checkSendData(2, 42, (short) 42, 42, 42.01f, 42.01d, (char) 42); - checkReceiveData(52, (short) 52, 52, 52.01f, 52.01d, (char) 52); + checkSendData(2, 42, (short) 42, 42, 42.01f, 42.01d, (char) 42, 1, true); + checkReceiveData(52, (short) 52, 52, 52.01f, 52.01d, (char) 52, true); } @Override @@ -164,7 +171,7 @@ public class MappingTest extends AbstractMqttTest { handler.publish(TOPIC_INPUT, input.getBytes()); } - private void checkSendData(int expectedNumberOfValues, int expectedInt, short expectedShort, long expectedLong, float expectedFloat, double expectedDouble, char expectedChar) throws InterruptedException { + private void checkSendData(int expectedNumberOfValues, int expectedInt, short expectedShort, long expectedLong, float expectedFloat, double expectedDouble, char expectedChar, int expectedNumberOfBooleanValues, boolean expectedBoolean) throws InterruptedException { TestUtils.waitForMqtt(); assertEquals(expectedNumberOfValues, data.numberOfNativeIntValues); assertEquals(expectedNumberOfValues, data.numberOfNativeShortValues); @@ -172,6 +179,7 @@ public class MappingTest extends AbstractMqttTest { assertEquals(expectedNumberOfValues, data.numberOfNativeFloatValues); assertEquals(expectedNumberOfValues, data.numberOfNativeDoubleValues); assertEquals(expectedNumberOfValues, data.numberOfNativeCharValues); + assertEquals(expectedNumberOfBooleanValues, data.numberOfNativeBooleanValues); if (expectedNumberOfValues == 0) { return; @@ -182,15 +190,17 @@ public class MappingTest extends AbstractMqttTest { assertEquals(expectedFloat, data.lastNativeFloatValue, TestUtils.DELTA); assertEquals(expectedDouble, data.lastNativeDoubleValue, TestUtils.DELTA); assertEquals(expectedChar, data.lastNativeCharValue); + assertEquals(expectedBoolean, data.lastNativeBooleanValue); } - private void checkReceiveData(int expectedInt, short expectedShort, long expectedLong, float expectedFloat, double expectedDouble, char expectedChar) { + private void checkReceiveData(int expectedInt, short expectedShort, long expectedLong, float expectedFloat, double expectedDouble, char expectedChar, boolean expectedBoolean) { assertEquals(expectedInt, natives.getIntValue()); assertEquals(expectedShort, natives.getShortValue()); assertEquals(expectedLong, natives.getLongValue()); assertEquals(expectedFloat, natives.getFloatValue(), TestUtils.DELTA); assertEquals(expectedDouble, natives.getDoubleValue(), TestUtils.DELTA); assertEquals(expectedChar, natives.getCharValue()); + assertEquals(expectedBoolean, natives.getBooleanValue()); assertEquals(expectedInt, boxes.getIntValue()); assertEquals(expectedShort, boxes.getShortValue()); @@ -198,6 +208,7 @@ public class MappingTest extends AbstractMqttTest { assertEquals(expectedFloat, boxes.getFloatValue(), TestUtils.DELTA); assertEquals(expectedDouble, boxes.getDoubleValue(), TestUtils.DELTA); assertEquals(expectedChar, boxes.getCharValue()); + assertEquals(expectedBoolean, boxes.getBooleanValue()); } private static class ReceiverData { @@ -213,6 +224,8 @@ public class MappingTest extends AbstractMqttTest { int numberOfNativeDoubleValues = 0; char lastNativeCharValue; int numberOfNativeCharValues = 0; + boolean lastNativeBooleanValue; + int numberOfNativeBooleanValues = 0; } } diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read1Write2Test.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read1Write2Test.java index b51b88ddc8bfccf26ab49a31e173731feea72e27..57db1a70581249d94023a3865264085d4cfa1334 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read1Write2Test.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read1Write2Test.java @@ -75,29 +75,29 @@ public class Read1Write2Test extends AbstractMqttTest { handler.newConnection(TOPIC_SAME_WRITE_INT, bytes -> { dataSame.numberOfIntValues += 1; - dataSame.lastIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + dataSame.lastIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); handler.newConnection(TOPIC_SAME_WRITE_STRING, bytes -> { dataSame.numberOfStringValues += 1; - dataSame.lastStringValue = new String(bytes); + dataSame.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_DIFFERENT_WRITE1_INT, bytes -> { dataOther1.numberOfIntValues += 1; - dataOther1.lastIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + dataOther1.lastIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); handler.newConnection(TOPIC_DIFFERENT_WRITE1_STRING, bytes -> { dataOther1.numberOfStringValues += 1; - dataOther1.lastStringValue = new String(bytes); + dataOther1.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_DIFFERENT_WRITE2_INT, bytes -> { dataOther2.numberOfIntValues += 1; - dataOther2.lastIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + dataOther2.lastIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); handler.newConnection(TOPIC_DIFFERENT_WRITE2_STRING, bytes -> { dataOther2.numberOfStringValues += 1; - dataOther2.lastStringValue = new String(bytes); + dataOther2.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); onSameNonterminal.connectInput(mqttUri(TOPIC_SAME_READ)); diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read2Write1Test.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read2Write1Test.java index b9bce7882d6552fe9da3a55c40bcbedc22429fad..048528bd895d45d4a296907cb4580b72f07f5b02 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read2Write1Test.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/Read2Write1Test.java @@ -76,17 +76,17 @@ public class Read2Write1Test extends AbstractMqttTest { handler.newConnection(TOPIC_SAME_WRITE_INT, bytes -> { dataSame.numberOfIntValues += 1; - dataSame.lastIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + dataSame.lastIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); handler.newConnection(TOPIC_DIFFERENT_WRITE1_INT, bytes -> { dataOther1.numberOfIntValues += 1; - dataOther1.lastIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + dataOther1.lastIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); handler.newConnection(TOPIC_DIFFERENT_WRITE2_INT, bytes -> { dataOther2.numberOfIntValues += 1; - dataOther2.lastIntValue = java.nio.ByteBuffer.wrap(bytes).getInt(); + dataOther2.lastIntValue = TestUtils.DefaultMappings.BytesToInt(bytes); }); onSameNonterminal.connectInput1(mqttUri(TOPIC_SAME_READ1)); diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java index 143c74e984af40f9acf883ed7be2f3eb8adb253a..5958b395d7920e70e71bfa6a4f49866dfce4c087 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TestUtils.java @@ -1,5 +1,7 @@ package org.jastadd.ragconnect.tests; +import defaultOnlyRead.ast.ASTNode; + import java.io.File; import java.io.IOException; import java.nio.charset.Charset; @@ -70,4 +72,136 @@ public class TestUtils { static void waitForMqtt() throws InterruptedException { TimeUnit.SECONDS.sleep(2); } + + @SuppressWarnings({"unused", "rawtypes"}) + static class DefaultMappings extends ASTNode { + public static boolean BytesToBool(byte[] input) { + try { + return _apply__DefaultBytesToBooleanMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + public static int BytesToInt(byte[] input) { + try { + return _apply__DefaultBytesToIntMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + public static short BytesToShort(byte[] input) { + try { + return _apply__DefaultBytesToShortMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + public static long BytesToLong(byte[] input) { + try { + return _apply__DefaultBytesToLongMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + public static float BytesToFloat(byte[] input) { + try { + return _apply__DefaultBytesToFloatMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + public static double BytesToDouble(byte[] input) { + try { + return _apply__DefaultBytesToDoubleMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + public static char BytesToChar(byte[] input) { + try { + return _apply__DefaultBytesToCharMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + public static String BytesToString(byte[] input) { + try { + return _apply__DefaultBytesToStringMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] BoolToBytes(boolean input) { + try { + return _apply__DefaultBooleanToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] IntToBytes(int input) { + try { + return _apply__DefaultIntToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] ShortToBytes(short input) { + try { + return _apply__DefaultShortToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] LongToBytes(long input) { + try { + return _apply__DefaultLongToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] FloatToBytes(float input) { + try { + return _apply__DefaultFloatToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] DoubleToBytes(double input) { + try { + return _apply__DefaultDoubleToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] CharToBytes(char input) { + try { + return _apply__DefaultCharToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static byte[] StringToBytes(String input) { + try { + return _apply__DefaultStringToBytesMapping(input); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + } } diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TokenValueSendTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TokenValueSendTest.java index a0c0a24d8e63fb1a53337e31a1f910844954385f..8c8c461df4bfdc8e2d21b9520815fb20807ae240 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TokenValueSendTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/TokenValueSendTest.java @@ -71,20 +71,20 @@ public class TokenValueSendTest extends AbstractMqttTest { handler.newConnection(TOPIC_SEND_ONE, bytes -> { dataOne.numberOfStringValues += 1; - dataOne.lastStringValue = new String(bytes); + dataOne.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_SEND_TWO, bytes -> { dataTwo.numberOfStringValues += 1; - dataTwo.lastStringValue = new String(bytes); + dataTwo.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_SEND_THREE_VALUE, bytes -> { dataThree.numberOfStringValues += 1; - dataThree.lastStringValue = new String(bytes); + dataThree.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_SEND_THREE_OTHER, bytes -> { dataThreeOther.numberOfStringValues += 1; - dataThreeOther.lastStringValue = new String(bytes); + dataThreeOther.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); one.connectValue(mqttUri(TOPIC_SEND_ONE), writeCurrentValue); diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java index c3041f7568c08f3bb390decedd2ccfbeeb8e0cbd..766208f725c6a73c6dd391a20cd0b105ac894a77 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java @@ -279,15 +279,15 @@ public class ViaTest extends AbstractMqttTest { handler.newConnection(TOPIC_MQTT_2_MQTT_SEND, bytes -> { dataMqtt2Mqtt.numberOfStringValues += 1; - dataMqtt2Mqtt.lastStringValue = new String(bytes); + dataMqtt2Mqtt.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_REST_2_MQTT_SEND, bytes -> { dataRest2Mqtt.numberOfStringValues += 1; - dataRest2Mqtt.lastStringValue = new String(bytes); + dataRest2Mqtt.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); handler.newConnection(TOPIC_BOTH_2_MQTT_SEND, bytes -> { dataBoth2Mqtt.numberOfStringValues += 1; - dataBoth2Mqtt.lastStringValue = new String(bytes); + dataBoth2Mqtt.lastStringValue = TestUtils.DefaultMappings.BytesToString(bytes); }); Client client = ClientBuilder.newClient();