Skip to content

Commit a80403f

Browse files
committed
compute the status of a test case
1 parent 043c8e0 commit a80403f

File tree

8 files changed

+97
-54
lines changed

8 files changed

+97
-54
lines changed

backend/src/main/java/de/learnlib/alex/data/dao/SymbolDAOImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ public class SymbolDAOImpl implements SymbolDAO {
7171

7272
private static final Logger LOGGER = LogManager.getLogger();
7373

74-
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HH:mm:ss");
74+
/** The format for archived symbols. */
75+
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd-HH:mm:ss");
7576

7677
/** The ProjectRepository to use. Will be injected. */
7778
private ProjectRepository projectRepository;
@@ -610,7 +611,7 @@ public List<Symbol> hide(User user, Long projectId, List<Long> ids) throws NotFo
610611

611612
// rename the symbol so that there can be another new symbol with the name
612613
final Timestamp timestamp = new Timestamp(System.currentTimeMillis());
613-
symbol.setName(symbol.getName() + "--" + dateFormat.format(timestamp));
614+
symbol.setName(symbol.getName() + "--" + DATE_FORMAT.format(timestamp));
614615
}
615616

616617
final List<Symbol> archivedSymbols = symbolRepository.save(symbols);

backend/src/main/java/de/learnlib/alex/testing/entities/TestCase.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package de.learnlib.alex.testing.entities;
1818

19+
import com.fasterxml.jackson.annotation.JsonProperty;
1920
import com.fasterxml.jackson.annotation.JsonTypeName;
2021

2122
import javax.persistence.DiscriminatorValue;
@@ -25,6 +26,7 @@
2526
import javax.persistence.OneToMany;
2627
import javax.persistence.OrderBy;
2728
import javax.persistence.OrderColumn;
29+
import javax.persistence.Transient;
2830
import java.util.ArrayList;
2931
import java.util.List;
3032

@@ -36,6 +38,19 @@ public class TestCase extends Test {
3638

3739
private static final long serialVersionUID = 5961810799472877062L;
3840

41+
/** The status of the test. */
42+
public enum Status {
43+
44+
/** If it does not contain any steps. */
45+
EMPTY,
46+
47+
/** If if contains at least one unimplemented symbol. */
48+
WORK_IN_PROGRESS,
49+
50+
/** If not empty and there are no unimplemented symbols. */
51+
DONE
52+
}
53+
3954
/**
4055
* Steps that are executed before the actual test. All steps have to pass in order for the test steps to be
4156
* executed.
@@ -112,4 +127,23 @@ public List<TestCaseStep> getPostSteps() {
112127
public void setPostSteps(List<TestCaseStep> postSteps) {
113128
this.postSteps = postSteps;
114129
}
130+
131+
@Transient
132+
@JsonProperty("status")
133+
public Status getStatus() {
134+
if (this.steps.isEmpty()) {
135+
return Status.EMPTY;
136+
} else {
137+
for (TestCaseStep step : steps) {
138+
if (step.getPSymbol().getSymbol().getSteps().isEmpty()) {
139+
return Status.WORK_IN_PROGRESS;
140+
}
141+
}
142+
return Status.DONE;
143+
}
144+
}
145+
146+
@JsonProperty("status")
147+
public void setStatus(Status status) {
148+
}
115149
}
Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
<div class="test-case-node">
2-
<div class="header d-flex flex-row">
3-
<div class="test-icon">
4-
<i class="fa fa-fw fa-file"></i>
5-
</div>
6-
<div class="name flex-grow-1" ui-sref="test({projectId: vm.case.project, testId: vm.case.id})">
7-
<span class="pull-right" ng-if="vm.result">
8-
<span class="label label-success" ng-if="vm.result.passed">Passed</span>
9-
<span class="label label-danger" ng-if="!vm.result.passed">Failed</span>
10-
</span>
11-
12-
<strong ng-if="vm.parent === null">{{vm.case.name}}</strong>
13-
<span ng-if="vm.parent !== null">{{vm.case.name}}</span>
14-
</div>
2+
<div class="header d-flex flex-row">
3+
<div class="test-icon">
4+
<i class="fa fa-fw fa-file"></i>
155
</div>
6+
<a class="test-name w-100 d-flex flex-row" ui-sref="test({projectId: vm.case.project, testId: vm.case.id})">
7+
<div class="w-100">
8+
<div>
9+
<strong>{{vm.case.name}}</strong>
10+
</div>
11+
<span ng-switch="vm.case.status">
12+
<span class="label label-warning" ng-switch-when="EMPTY">Empty</span>
13+
<span class="label label-info" ng-switch-when="WORK_IN_PROGRESS">Work in progress</span>
14+
</span>
15+
</div>
16+
<div>
17+
<span ng-if="vm.result">
18+
<span class="label label-success" ng-if="vm.result.passed">Passed</span>
19+
<span class="label label-danger" ng-if="!vm.result.passed">Failed</span>
20+
</span>
21+
</div>
22+
</a>
23+
</div>
1624
</div>

frontend/src/main/javascript/src/js/components/test-tree/test-case-node/test-case-node.component.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export const testCaseNodeComponent = {
1818
template: require('./test-case-node.component.html'),
1919
bindings: {
2020
case: '=',
21-
parent: '=',
2221
results: '='
2322
},
2423
controllerAs: 'vm',
Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,28 @@
11
<div class="test-suite-node">
2-
<div class="header d-flex flex-row">
3-
<div class="test-icon">
4-
<i class="fa fa-fw fa-folder"></i>
5-
</div>
6-
<div class="name flex-grow-1" ui-sref="test({projectId: vm.suite.project, testId: vm.suite.id})">
7-
<strong ng-if="vm.parent === null">{{vm.suite.name}}</strong>
8-
<span ng-if="vm.parent !== null">{{vm.suite.name}}</span>
9-
10-
<span class="pull-right" ng-if="vm.result">
11-
<span class="label label-success" ng-if="vm.result.passed">
12-
Passed
13-
</span>
14-
<span class="label label-danger" ng-if="!vm.result.passed && vm.result.testCasesPassed === 0">
15-
Failed
16-
</span>
17-
<span class="label label-warning" ng-if="!vm.result.passed && vm.result.testCasesPassed > 0">
18-
{{vm.result.testCasesFailed}}/{{vm.result.testCasesRun}} Failed
19-
</span>
20-
</span>
21-
</div>
22-
<div class="collapse-icon" ng-click="vm.collapsed = !vm.collapsed">
23-
<i class="fa fa-fw" ng-class="vm.collapsed ? 'fa-caret-right' : 'fa-caret-down'"></i>
24-
</div>
25-
</div>
26-
<div class="children" ng-show="!vm.collapsed">
27-
<div ng-repeat="test in vm.suite.tests | sortTests">
28-
<test-suite-node suite="test" ng-if="test.type === 'suite'" results="vm.results"></test-suite-node>
29-
<test-case-node case="test" ng-if="test.type === 'case'" results="vm.results"></test-case-node>
30-
</div>
2+
<div class="header d-flex flex-row">
3+
<div class="test-icon">
4+
<i class="fa fa-fw fa-folder"></i>
315
</div>
6+
<a
7+
class="name d-flex flex-row align-items-center w-100"
8+
ui-sref="test({projectId: vm.suite.project, testId: vm.suite.id})"
9+
>
10+
<div class="w-100">
11+
<strong>{{vm.suite.name}}</strong>
12+
</div>
13+
<div>
14+
<span class="pull-right" ng-if="vm.result">
15+
<span class="label label-success" ng-if="vm.result.passed">
16+
Passed
17+
</span>
18+
<span class="label label-danger" ng-if="!vm.result.passed && vm.result.testCasesPassed === 0">
19+
Failed
20+
</span>
21+
<span class="label label-warning" ng-if="!vm.result.passed && vm.result.testCasesPassed > 0">
22+
{{vm.result.testCasesFailed}}/{{vm.result.testCasesRun}} Failed
23+
</span>
24+
</span>
25+
</div>
26+
</a>
27+
</div>
3228
</div>

frontend/src/main/javascript/src/js/components/test-tree/test-suite-node/test-suite-node.component.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export const testSuiteNodeComponent = {
1818
template: require('./test-suite-node.component.html'),
1919
bindings: {
2020
suite: '=',
21-
parent: '=',
2221
results: '='
2322
},
2423
controllerAs: 'vm',
@@ -29,7 +28,6 @@ export const testSuiteNodeComponent = {
2928
*/
3029
constructor() {
3130
this.suite = null;
32-
this.collapsed = true;
3331
this.results = null;
3432
}
3533

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<div class="test-tree">
2-
<test-suite-node suite="vm.root" parent="null" results="vm.results" ng-if="vm.root !== null && vm.root.type === 'suite'"></test-suite-node>
3-
<test-case-node case="vm.root" parent="null" results="vm.results" ng-if="vm.root !== null && vm.root.type === 'case'"></test-case-node>
2+
<test-suite-node suite="vm.root" results="vm.results" ng-if="vm.root !== null && vm.root.type === 'suite'"></test-suite-node>
3+
<test-case-node case="vm.root" results="vm.results" ng-if="vm.root !== null && vm.root.type === 'case'"></test-case-node>
44
</div>

frontend/src/main/javascript/src/scss/_test-tree.scss

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
.test-tree {
22
user-select: none;
33

4-
.name {
5-
padding: 2px;
6-
4+
.test-name {
75
&:hover {
86
cursor: pointer;
97
}
@@ -17,7 +15,8 @@
1715
}
1816

1917
.test-icon {
20-
padding: 2px 4px 2px 2px;
18+
padding: 2px;
19+
margin-right: .5rem;
2120
}
2221

2322
.collapse-icon {
@@ -54,4 +53,12 @@
5453
color: #5a99d0;
5554
}
5655
}
57-
}
56+
57+
.test-case-node .test-name,
58+
.test-suite-node .name {
59+
color: #555;
60+
&:hover {
61+
text-decoration: none;
62+
}
63+
}
64+
}

0 commit comments

Comments
 (0)