Skip to content

Commit 6f51d59

Browse files
committed
Added serialization test for MMLTs.
1 parent 633ff03 commit 6f51d59

File tree

3 files changed

+74
-2
lines changed

3 files changed

+74
-2
lines changed
Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,45 @@
77
import org.testng.annotations.Test;
88

99
import java.io.File;
10+
import java.nio.file.Files;
11+
import java.nio.file.Paths;
12+
import java.util.Arrays;
13+
import java.util.List;
1014

11-
public class LocalTimerMealyDeserializationTest {
15+
public class LocalTimerMealyTests {
16+
17+
@Test
18+
public void parseAndWriteDemoModel() {
19+
var demoResource = LocalTimerMealyTests.class.getResource("/demo_mmlt.dot");
20+
var expResultPath = Paths.get(LocalTimerMealyTests.class.getResource("/demo_expected_serialized.dot").getPath());
21+
var demoModel = LocalTimerMealyGraphvizParser.parseLocalTimerMealy(new File(demoResource.getFile()), "void", StringSymbolCombiner.getInstance());
22+
23+
24+
StringBuilder sbOutput = new StringBuilder();
25+
try {
26+
List<String> expected = Files.readAllLines(expResultPath).stream()
27+
.filter(l -> !l.isBlank() && !l.startsWith("//"))
28+
.map(String::trim)
29+
.toList();
30+
31+
GraphDOT.write(demoModel.transitionGraphView(true, true), sbOutput);
32+
var actualData = sbOutput.toString();
33+
System.out.println(actualData);
34+
List<String> actual = Arrays.stream(actualData.split("\\n"))
35+
.filter(l -> !l.isBlank())
36+
.map(String::trim)
37+
.toList();
38+
39+
Assert.assertEquals(expected, actual);
40+
} catch (Exception ex) {
41+
throw new AssertionError();
42+
}
43+
}
1244

1345
@Test
1446
public void parseSensorModel() {
1547
// Load a model from file:
16-
var resource = LocalTimerMealyDeserializationTest.class.getResource("/sensor_mmlt.dot");
48+
var resource = LocalTimerMealyTests.class.getResource("/sensor_mmlt.dot");
1749

1850
var dotAutomaton = LocalTimerMealyGraphvizParser.parseLocalTimerMealy(new File(resource.getFile()), "void", StringSymbolCombiner.getInstance());
1951

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Resulting model that is expected when deserializing demo_mmlt.gv first, and then
2+
// serializing the result with edge coloring and reset information enabled.
3+
digraph g {
4+
5+
s0 [timers="a=2" shape="circle" label="0"];
6+
s1 [timers="b=4,c=6" shape="circle" label="1"];
7+
s2 [timers="d=2,e=3" shape="circle" label="2"];
8+
s0 -> s1 [color="chartreuse3" fontcolor="chartreuse3" label="to[a] / A {b↦4,c↦6}"];
9+
s1 -> s1 [color="cornflowerblue" fontcolor="cornflowerblue" label="to[b] / B {b↦4}"];
10+
s1 -> s1 [color="chartreuse3" fontcolor="chartreuse3" label="to[c] / C {b↦4,c↦6}"];
11+
s1 -> s2 [label="x / void {}"];
12+
s1 -> s1 [color="orange" fontcolor="orange" label="y / Y {b↦4,c↦6}"];
13+
s2 -> s2 [color="cornflowerblue" fontcolor="cornflowerblue" label="to[d] / D {d↦2}"];
14+
s2 -> s2 [color="cornflowerblue" fontcolor="cornflowerblue" label="to[e] / E {e↦3}"];
15+
s2 -> s2 [label="y / D {}"];
16+
17+
__start0 [label="" shape="none" width="0" height="0"];
18+
__start0 -> s0;
19+
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// This file demonstrates several MMLT features
2+
digraph g {
3+
s0 [label="L0" timers="a=2"]
4+
s1 [label="L1" timers="b=4,c=6"]
5+
s2 [label="L2" timers="d=2,e=3"]
6+
7+
s0 -> s1 [label="to[a] / A"] // one-shot with location change
8+
s1 -> s1 [label="to[b] / B"] // periodic
9+
s1 -> s1 [label="to[c] / C" resets="b,c"] // one-shot with loop
10+
11+
s2 -> s2 [label="to[d] / D" resets="d"] // periodic with explicit resets
12+
s2 -> s2 [label="to[e] / E"] // periodic
13+
14+
s1 -> s2 [label="x / void"]
15+
s1 -> s1 [label="y / Y" resets="b,c"] // loop with local reset
16+
s2 -> s2 [label="y / D"] // loop without reset
17+
18+
__start0 [label="" shape="none" width="0" height="0"];
19+
__start0 -> s0;
20+
}

0 commit comments

Comments
 (0)