Merge pull request #12804 from thingsboard/tbel_new_ver_Unmodif_FunctionDate
tbel_Unmodifiable
This commit is contained in:
commit
6e9a4234ce
@ -21,6 +21,7 @@ import org.thingsboard.script.api.tbel.TbDate;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Base64;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@ -146,6 +147,31 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest {
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mapsImplicitIterationWithoutEntrySet() throws ExecutionException, InterruptedException {
|
||||
msgStr = msgMapStr;
|
||||
decoderStr = """
|
||||
foreach(element : msg){
|
||||
if(element.getKey() == null){
|
||||
return raiseError("Bad getKey");
|
||||
}
|
||||
if(element.key == null){
|
||||
return raiseError("Bad key");
|
||||
}
|
||||
if(element.getValue() == null){
|
||||
return raiseError("Bad getValue");
|
||||
}
|
||||
if(element.value == null){
|
||||
return raiseError("Bad value");
|
||||
}
|
||||
}
|
||||
return msg;
|
||||
""";
|
||||
LinkedHashMap<String, Object> expected = expectedMap;
|
||||
Object actual = invokeScript(evalScript(decoderStr), msgStr);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mapsGetInfoSize_Test() throws ExecutionException, InterruptedException {
|
||||
msgStr = msgMapStr;
|
||||
@ -660,14 +686,13 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest {
|
||||
""";
|
||||
decoderStr = """
|
||||
var list = msg.list;
|
||||
var listAdd = ["thigsboard", 4, 67];
|
||||
return {
|
||||
list: list.clone(),
|
||||
length: list.length(),
|
||||
memorySize: list.memorySize(),
|
||||
indOf1: list.indexOf("B", 1),
|
||||
indOf2: list.indexOf(2, 2),
|
||||
sStr: list.validateClazzInArrayIsOnlyString()
|
||||
sStr: list.validateClazzInArrayIsOnlyNumber()
|
||||
}
|
||||
""";
|
||||
ArrayList list = new ArrayList<>(List.of(67, 2, 2, 2));
|
||||
@ -677,7 +702,7 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest {
|
||||
expected.put("memorySize", 32L);
|
||||
expected.put("indOf1", -1);
|
||||
expected.put("indOf2", 2);
|
||||
expected.put("sStr", false);
|
||||
expected.put("sStr", true);
|
||||
Object actual = invokeScript(evalScript(decoderStr), msgStr);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
@ -2148,6 +2173,177 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest {
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toUnmodifiableExecutionArrayList_Test() throws ExecutionException, InterruptedException {
|
||||
msgStr = "{}";
|
||||
decoderStr = String.format("""
|
||||
var original = [];
|
||||
original.add(0x35);
|
||||
var unmodifiable = original.toUnmodifiable();
|
||||
msg.result = unmodifiable;
|
||||
return {msg: msg};
|
||||
""");
|
||||
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
|
||||
List expectedList = Arrays.asList(0x35);
|
||||
LinkedHashMap<String, Object> expectedResult = new LinkedHashMap<>();
|
||||
expectedResult.put("result", expectedList);
|
||||
expected.put("msg", expectedResult);
|
||||
Object actual = invokeScript(evalScript(decoderStr), msgStr);
|
||||
assertEquals(expected, actual);
|
||||
|
||||
decoderStr = String.format("""
|
||||
var original = [];
|
||||
original.add(0x67);
|
||||
var unmodifiable = original.toUnmodifiable();
|
||||
unmodifiable.add(0x35);
|
||||
msg.result = unmodifiable;
|
||||
return {msg: msg};
|
||||
""");
|
||||
assertThatThrownBy(() -> {
|
||||
invokeScript(evalScript(decoderStr), msgStr);
|
||||
}).hasMessageContaining("Error: unmodifiable.add(0x35): List is unmodifiable");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void toUnmodifiableExecutionHashMap_Test() throws ExecutionException, InterruptedException {
|
||||
msgStr = "{}";
|
||||
decoderStr = String.format("""
|
||||
var original = {};
|
||||
original.putIfAbsent("entry1", 73);
|
||||
var unmodifiable = original.toUnmodifiable();
|
||||
msg.result = unmodifiable;
|
||||
return {msg: msg};
|
||||
""");
|
||||
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
|
||||
LinkedHashMap<String, Object> expectedMap = new LinkedHashMap<>(Map.of("entry1", 73));
|
||||
LinkedHashMap<String, Object> expectedResult = new LinkedHashMap<>();
|
||||
expectedResult.put("result", expectedMap);
|
||||
expected.put("msg", expectedResult);
|
||||
Object actual = invokeScript(evalScript(decoderStr), msgStr);
|
||||
assertEquals(expected, actual);
|
||||
|
||||
decoderStr = String.format("""
|
||||
var original = {};
|
||||
original.humidity = 73;
|
||||
var unmodifiable = original.toUnmodifiable();
|
||||
unmodifiable.put("temperature1", 96);
|
||||
msg.result = unmodifiable;
|
||||
return {msg: msg};
|
||||
""");
|
||||
assertThatThrownBy(() -> {
|
||||
invokeScript(evalScript(decoderStr), msgStr);
|
||||
}).hasMessageContaining("Error: unmodifiable.put(\"temperature1\", 96): Map is unmodifiable");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tbDateFunction_Test() throws ExecutionException, InterruptedException {
|
||||
String stringDateUTC = "2024-01-01T10:00:00.00Z";
|
||||
TbDate d = new TbDate(stringDateUTC);
|
||||
|
||||
msgStr = "{}";
|
||||
decoderStr = String.format("""
|
||||
var d = new Date("%s"); // TZ => "UTC"
|
||||
var dIsoY1 = d.toISOString(); // return 2024-01-01T10:00:00Z
|
||||
d.addYears(1);
|
||||
var dIsoY2 = d.toISOString(); // return 2025-01-01T10:00:00Z
|
||||
d.addYears(-2);
|
||||
var dIsoY3 = d.toISOString(); // return 2023-01-01T10:00:00Z
|
||||
d.addMonths(2);
|
||||
var dIsoM1 = d.toISOString(); // return 2023-03-01T10:00:00Z
|
||||
d.addMonths(10);
|
||||
var dIsoM2 = d.toISOString(); // return 2024-01-01T10:00:00Z
|
||||
d.addMonths(-13);
|
||||
var dIsoM3 = d.toISOString(); // return 2022-12-01T10:00:00Z
|
||||
d.addWeeks(4);
|
||||
var dIsoW1 = d.toISOString(); // return 2022-12-29T10:00:00Z
|
||||
d.addWeeks(-5);
|
||||
var dIsoW2 = d.toISOString(); // return 2022-11-24T10:00:00Z
|
||||
d.addDays(6);
|
||||
var dIsoD1 = d.toISOString(); // return 2022-11-30T10:00:00Z
|
||||
d.addDays(45);
|
||||
var dIsoD2 = d.toISOString(); // return 2023-01-14T10:00:00Z
|
||||
d.addDays(-50);
|
||||
var dIsoD3 = d.toISOString(); // return 2022-11-25T10:00:00Z
|
||||
d.addHours(23);
|
||||
var dIsoH1 = d.toISOString(); // return 2022-11-26T09:00:00Z
|
||||
d.addHours(-47);
|
||||
var dIsoH2 = d.toISOString(); // return 2022-11-24T10:00:00Z
|
||||
d.addMinutes(59);
|
||||
var dIsoMin1 = d.toISOString(); // return 2022-11-24T10:59:00Z
|
||||
d.addMinutes(-60);
|
||||
var dIsoMin2 = d.toISOString(); // return 2022-11-24T09:59:00Z
|
||||
d.addSeconds(59);
|
||||
var dIsoS1 = d.toISOString(); // return 2022-11-24T09:59:59Z
|
||||
d.addSeconds(-60);
|
||||
var dIsoS2 = d.toISOString(); // return 2022-11-24T09:58:59Z
|
||||
d.addNanos(999999);
|
||||
var dIsoN1 = d.toISOString(); // return 2022-11-24T09:58:59.000999999Z
|
||||
d.addNanos(-1000000);
|
||||
var dIsoN2 = d.toISOString(); // return 2022-11-24T09:58:58.999999999Z
|
||||
return {
|
||||
"dIsoY1": dIsoY1,
|
||||
"dIsoY2": dIsoY2,
|
||||
"dIsoY3": dIsoY3,
|
||||
"dIsoM1": dIsoM1,
|
||||
"dIsoM2": dIsoM2,
|
||||
"dIsoM3": dIsoM3,
|
||||
"dIsoW1": dIsoW1,
|
||||
"dIsoW2": dIsoW2,
|
||||
"dIsoD1": dIsoD1,
|
||||
"dIsoD2": dIsoD2,
|
||||
"dIsoD3": dIsoD3,
|
||||
"dIsoH1": dIsoH1,
|
||||
"dIsoH2": dIsoH2,
|
||||
"dIsoMin1": dIsoMin1,
|
||||
"dIsoMin2": dIsoMin2,
|
||||
"dIsoS1": dIsoS1,
|
||||
"dIsoS2": dIsoS2,
|
||||
"dIsoN1": dIsoN1,
|
||||
"dIsoN2": dIsoN2
|
||||
}
|
||||
""", stringDateUTC);
|
||||
LinkedHashMap<String, Object> expected = new LinkedHashMap<>();
|
||||
expected.put("dIsoY1", d.toISOString());
|
||||
d.addYears(1);
|
||||
expected.put("dIsoY2", d.toISOString());
|
||||
d.addYears(-2);
|
||||
expected.put("dIsoY3", d.toISOString());
|
||||
d.addMonths(2);
|
||||
expected.put("dIsoM1", d.toISOString());
|
||||
d.addMonths(10);
|
||||
expected.put("dIsoM2", d.toISOString());
|
||||
d.addMonths(-13);
|
||||
expected.put("dIsoM3", d.toISOString());
|
||||
d.addWeeks(4);
|
||||
expected.put("dIsoW1", d.toISOString());
|
||||
d.addWeeks(-5);
|
||||
expected.put("dIsoW2", d.toISOString());
|
||||
d.addDays(6);
|
||||
expected.put("dIsoD1", d.toISOString());
|
||||
d.addDays(45);
|
||||
expected.put("dIsoD2", d.toISOString());
|
||||
d.addDays(-50);
|
||||
expected.put("dIsoD3", d.toISOString());
|
||||
d.addHours(23);
|
||||
expected.put("dIsoH1", d.toISOString());
|
||||
d.addHours(-47);
|
||||
expected.put("dIsoH2", d.toISOString());
|
||||
d.addMinutes(59);
|
||||
expected.put("dIsoMin1", d.toISOString());
|
||||
d.addMinutes(-60);
|
||||
expected.put("dIsoMin2", d.toISOString());
|
||||
d.addSeconds(59);
|
||||
expected.put("dIsoS1", d.toISOString());
|
||||
d.addSeconds(-60);
|
||||
expected.put("dIsoS2", d.toISOString());
|
||||
d.addNanos(999999);
|
||||
expected.put("dIsoN1", d.toISOString());
|
||||
d.addNanos(-1000000);
|
||||
expected.put("dIsoN2", d.toISOString());
|
||||
Object actual = invokeScript(evalScript(decoderStr), msgStr);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
private List splice(List oldList, int start, int deleteCount, Object... values) {
|
||||
start = initStartIndex(oldList, start);
|
||||
|
||||
2
pom.xml
2
pom.xml
@ -83,7 +83,7 @@
|
||||
<zookeeper.version>3.9.2</zookeeper.version>
|
||||
<protobuf.version>3.25.5</protobuf.version> <!-- A Major v4 does not support by the pubsub yet-->
|
||||
<grpc.version>1.63.0</grpc.version>
|
||||
<tbel.version>1.2.5</tbel.version>
|
||||
<tbel.version>1.2.6</tbel.version>
|
||||
<lombok.version>1.18.32</lombok.version>
|
||||
<paho.client.version>1.2.5</paho.client.version>
|
||||
<paho.mqttv5.client.version>1.2.5</paho.mqttv5.client.version>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user