Skip to content

Commit 61b52e7

Browse files
committed
Add Visualizer join method
1 parent 80e3b99 commit 61b52e7

4 files changed

Lines changed: 61 additions & 13 deletions

File tree

CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#TESTAR v2.7.20 (3-Feb-2026)
22
- Fix android SPY is displayed property
33
- Add Rect overlap method
4+
- Add Visualizer join method
45

56
#TESTAR v2.7.19 (27-Jan-2026)
67
- Bump org.seleniumhq.selenium:selenium-java from 4.39.0 to 4.40.0

core/src/org/testar/monkey/alayer/Verdict.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/***************************************************************************************************
22
*
3-
* Copyright (c) 2013 - 2025 Universitat Politecnica de Valencia - www.upv.es
4-
* Copyright (c) 2018 - 2025 Open Universiteit - www.ou.nl
3+
* Copyright (c) 2013 - 2026 Universitat Politecnica de Valencia - www.upv.es
4+
* Copyright (c) 2018 - 2026 Open Universiteit - www.ou.nl
55
*
66
* Redistribution and use in source and binary forms, with or without
77
* modification, are permitted provided that the following conditions are met:
@@ -213,7 +213,7 @@ public Verdict join(Verdict verdict) {
213213
String joinedInfo = this.info.contains(verdict.info()) ? this.info
214214
: (this.severity == Severity.OK.getValue() ? "" : this.info + "\n") + verdict.info();
215215

216-
Visualizer joinedVisualizer = (this.severity >= verdict.severity()) ? this.visualizer() : verdict.visualizer();
216+
Visualizer joinedVisualizer = Visualizer.join(this.visualizer(), verdict.visualizer());
217217

218218
return new Verdict(joinedSeverity, joinedInfo, joinedVisualizer);
219219
}

core/src/org/testar/monkey/alayer/Visualizer.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/***************************************************************************************************
22
*
3-
* Copyright (c) 2013 - 2025 Universitat Politecnica de Valencia - www.upv.es
4-
* Copyright (c) 2018 - 2025 Open Universiteit - www.ou.nl
3+
* Copyright (c) 2013 - 2026 Universitat Politecnica de Valencia - www.upv.es
4+
* Copyright (c) 2018 - 2026 Open Universiteit - www.ou.nl
55
*
66
* Redistribution and use in source and binary forms, with or without
77
* modification, are permitted provided that the following conditions are met:
@@ -31,13 +31,42 @@
3131
package org.testar.monkey.alayer;
3232

3333
import java.io.Serializable;
34+
import java.util.ArrayList;
3435
import java.util.Arrays;
3536
import java.util.List;
3637

38+
import org.testar.monkey.Assert;
39+
import org.testar.monkey.Util;
40+
3741
public interface Visualizer extends Serializable {
3842
void run(State state, Canvas canvas, Pen pen);
3943

4044
default List<Shape> getShapes() {
4145
return Arrays.asList(Rect.from(0, 0, 0, 0));
4246
}
47+
48+
static Visualizer join(Visualizer first, Visualizer second) {
49+
if (first == second) return first;
50+
if (first == Util.NullVisualizer) return second;
51+
if (second == Util.NullVisualizer) return first;
52+
53+
return new Visualizer() {
54+
private static final long serialVersionUID = 1L;
55+
56+
@Override
57+
public void run(State state, Canvas canvas, Pen pen) {
58+
Assert.notNull(state, canvas, pen);
59+
first.run(state, canvas, pen);
60+
second.run(state, canvas, pen);
61+
}
62+
63+
@Override
64+
public List<Shape> getShapes() {
65+
ArrayList<Shape> merged = new ArrayList<>();
66+
merged.addAll(first.getShapes());
67+
merged.addAll(second.getShapes());
68+
return merged;
69+
}
70+
};
71+
}
4372
}

core/test/org/testar/monkey/alayer/VerdictTest.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/***************************************************************************************************
22
*
3-
* Copyright (c) 2013 - 2025 Universitat Politecnica de Valencia - www.upv.es
4-
* Copyright (c) 2018 - 2025 Open Universiteit - www.ou.nl
3+
* Copyright (c) 2013 - 2026 Universitat Politecnica de Valencia - www.upv.es
4+
* Copyright (c) 2018 - 2026 Open Universiteit - www.ou.nl
55
*
66
* Redistribution and use in source and binary forms, with or without
77
* modification, are permitted provided that the following conditions are met:
@@ -32,7 +32,11 @@
3232

3333
import static org.junit.Assert.*;
3434

35+
import java.util.Arrays;
36+
3537
import org.junit.Test;
38+
import org.testar.monkey.alayer.visualizers.RegionsVisualizer;
39+
import org.testar.monkey.alayer.visualizers.ShapeVisualizer;
3640

3741
public class VerdictTest {
3842

@@ -43,10 +47,17 @@ public class VerdictTest {
4347
public void run(State s, Canvas c, Pen pen) {}
4448
};
4549

46-
private final Visualizer failVisualizer = new Visualizer(){
47-
private static final long serialVersionUID = -2732461936562344367L;
48-
public void run(State s, Canvas c, Pen pen) {}
49-
};
50+
private final Visualizer failVisualizer = new ShapeVisualizer(
51+
Pen.PEN_RED,
52+
Rect.from(0, 0, 10, 10),
53+
"Fail Visualizer",
54+
0.5, 0.5);
55+
56+
private final Visualizer issueVisualizer = new RegionsVisualizer(
57+
Pen.PEN_RED,
58+
Arrays.asList(Rect.from(0, 0, 10, 10)),
59+
"Issue Visualizer",
60+
0.5, 0.5);
5061

5162
@Test
5263
public void testToString() {
@@ -60,6 +71,7 @@ public void testJoin() {
6071
Verdict v1 = new Verdict(Verdict.Severity.OK, "Foo Bar");
6172
Verdict v2 = new Verdict(Verdict.Severity.FAIL, "Bar", failVisualizer);
6273
Verdict v3 = new Verdict(Verdict.Severity.OK, "Baz", dummyVisualizer);
74+
Verdict v4 = new Verdict(Verdict.Severity.FAIL, "Exception", issueVisualizer);
6375

6476
assertTrue("Joining two Verdicts shall create a new Verdict",
6577
v1 != v1.join(v2));
@@ -79,11 +91,17 @@ public void testJoin() {
7991
"then both infos shall be included separated by a line break",
8092
"Bar\nBaz", v2.join(v3).info());
8193

82-
assertTrue("Joining two Verdicts shall use the Visualizer of the Verdict with high severity",
94+
assertTrue("Joining an OK and Fail Verdicts shall use the Visualizer of the Verdict with high severity",
8395
v2.join(v1).visualizer() == failVisualizer);
8496

85-
assertTrue("Joining two Verdicts shall use the Visualizer of the Verdict with high severity",
97+
assertTrue("Joining an OK and Fail Verdicts shall use the Visualizer of the Verdict with high severity",
8698
v1.join(v2).visualizer() == failVisualizer);
99+
100+
assertTrue("Joining Fail and Issue Verdicts must contain Fail Shapes",
101+
v2.join(v4).visualizer().getShapes().containsAll(failVisualizer.getShapes()));
102+
103+
assertTrue("Joining Fail and Issue Verdicts must contain Issue Shapes",
104+
v2.join(v4).visualizer().getShapes().containsAll(issueVisualizer.getShapes()));
87105
}
88106

89107
@Test

0 commit comments

Comments
 (0)