-
Notifications
You must be signed in to change notification settings - Fork 0
/
DirSuiteDemo.scala
158 lines (147 loc) · 4.51 KB
/
DirSuiteDemo.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
* Copyright 2016-2019 E257.FI
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import java.nio.file.Paths
import fi.e257.testing.{Glob, Regex}
import fi.e257.testing.DirSuite
class DirSuiteDemo extends DirSuite {
val testdir = Paths.get("tests").toAbsolutePath.normalize
val app = new DemoApp(testdir)
/**
* Find all noargs-tests and execute them.
*
* Assert that App (doArgsCount) return correct arg count (0)
*
* Search method: Glob
* https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob
*/
runDirSuiteTestCases(testdir, Glob("success/noargs[0-9]*.exec")) { args: Array[String] =>
assertResult(0) {
app.doArgsCount(args)
}
}
/**
* Find all args3 and execute them.
*
* Assert that App (doArgsCount) return correct arg count (3)
*
* Search method: Glob
* https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob
*/
runDirSuiteTestCases(testdir, Glob("success/args3-[0-9]*.exec")) { args: Array[String] =>
assertResult(3) {
app.doArgsCount(args)
}
}
/**
* Find all txt-output tests and execute them.
*
* Assert that doTxt was successful and check
* output based on reference vectors.
*
* Search method: Regex
* https://docs.oracle.com/javase/tutorial/essential/regex/index.html
*/
runDirSuiteTestCases(testdir, Regex("success/txt[0-9]+\\.exec")) { args: Array[String] =>
assertResult(DemoApp.SUCCESS) {
app.doTxt(args)
}
}
/**
* Find all xml-output tests and execute them.
*
* Assert that doXml was successful and check
* output based on reference vectors.
*
* Search method: Regex
* https://docs.oracle.com/javase/tutorial/essential/regex/index.html
*/
runDirSuiteTestCases(testdir, Regex("success/xml[0-9]+\\.exec")) { args: Array[String] =>
assertResult(DemoApp.SUCCESS) {
app.doXml(args)
}
}
/**
* Find all mixed output tests and execute them.
* Use XML Validator for XML-files, and TXT Validator
* for txt-files. This choice is done by
* DirSuite::selectValidator, which can be overloaded
* test-by-test class basis.
*
* Assert that doTxtXml was successful and check
* output based on reference vectors.
*
* Search method: Glob
* https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob
*/
runDirSuiteTestCases(testdir, Glob("success/mixed[0-9]*.exec")) { args: Array[String] =>
assertResult(DemoApp.SUCCESS) {
app.doTxtXml(args)
}
}
/**
* Test that an exception is thrown.
*
* This is internal assertThrows/intercept, so every execution step
* must throw an exception if multiple steps are run.
*/
runDirSuiteTestCases(testdir, Glob("success/singleStepEx[0-9]*.exec")) { args: Array[String] =>
assertThrows[RuntimeException]{
app.doFlaky(args)
}
}
/**
* First execution steps must succeed, and then
* Last execution step must throw up an exception
* when multiple steps are run
*
* For example:
* exec 0 => assertResult(SUCCESS)
* exec 1 => assertResult(SUCCESS)
* exec 2 => assertThrows[RuntimeException]
*/
runDualAssertionDirSuiteTestCases(testdir, Glob("success/multiStepEx[0-9]*.exec")) { args: Array[String] =>
// All steps at the begin must succeed
assertResult(DemoApp.SUCCESS) {
app.doFlaky(args)
}
} { args: Array[String] =>
// Last step must fail with exception
assertThrows[RuntimeException] {
app.doFlaky(args)
}
}
/**
* First execution steps must succeed, and then
* Last execution step must fail
*
* For example:
* exec 0 => assertResult(SUCCESS)
* exec 1 => assertResult(SUCCESS)
* exec 2 => assertResult(FAILURE)
*/
runDualAssertionDirSuiteTestCases(testdir, Glob("success/multiStepFail[0-9]*.exec")) { args: Array[String] =>
// Fist steps must succeed
assertResult(DemoApp.SUCCESS) {
app.doFlaky(args)
}
} { args: Array[String] =>
// last step must fail
assertResult(DemoApp.FAILURE) {
app.doFlaky(args)
}
}
}