Skip to content
Snippets Groups Projects
Commit efcbb658 authored by René Schöne's avatar René Schöne
Browse files

Add boolean to default mappings.

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