oktest 1.3.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +156 -18
- data/Rakefile.rb +1 -1
- data/benchmark/run_all.rb +1 -0
- data/bin/oktest +3 -0
- data/lib/oktest.rb +253 -143
- data/oktest.gemspec +4 -3
- data/test/{run_all.rb → all.rb} +1 -0
- data/test/assertion_test.rb +244 -229
- data/test/filter_test.rb +123 -120
- data/test/fixture_test.rb +34 -32
- data/test/generator_test.rb +26 -22
- data/test/helper_test.rb +382 -204
- data/test/init.rb +44 -0
- data/test/mainapp_test.rb +249 -199
- data/test/matcher_test.rb +157 -126
- data/test/misc_test.rb +32 -30
- data/test/nanot.rb +307 -0
- data/test/node_test.rb +321 -242
- data/test/reporter_test.rb +250 -208
- data/test/runner_test.rb +102 -100
- data/test/util_test.rb +197 -193
- data/test/utilhelper_test.rb +36 -38
- data/test/visitor_test.rb +55 -50
- metadata +21 -7
- data/test/initialize.rb +0 -21
- data/test/tc.rb +0 -127
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71a8ad713c8536b57d4ed59541ea7a734da36187f502566aefee6479b3858e5f
|
4
|
+
data.tar.gz: e55ae061182626cab3b75559a0353d13fdbe5042f119a035474e6c28be311798
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 579a24fb8c2847bbd53805367d36176cd09fbeacc2b5690212589108517ba19f809fea79a6bfb2b07e87ff83925ef8ea9aa18a0eb420a775683f1876bf60f3e8
|
7
|
+
data.tar.gz: 0a3f94d919a328d8d8bfdc19da5e512e2896252df6dba80d2775fc5fedaed245b1465553c56541c110eb79cd2b68dd3cb5aea0685fe89e7b555b02efa7a2fcde
|
data/README.md
CHANGED
@@ -77,7 +77,12 @@ Oktest.rb requires Ruby 2.4 or later.
|
|
77
77
|
* <a href="#fixture-keyword-argument"><code>fixture:</code> keyword argument</a>
|
78
78
|
* <a href="#global-scope">Global Scope</a>
|
79
79
|
* <a href="#helpers">Helpers</a>
|
80
|
+
* <a href="#capture_stdio"><code>capture_stdio()</code></a>
|
80
81
|
* <a href="#capture_sio"><code>capture_sio()</code></a>
|
82
|
+
* <a href="#capture_stdout"><code>capture_stdout()</code></a>
|
83
|
+
* <a href="#capture_stderr"><code>capture_stderr()</code></a>
|
84
|
+
* <a href="#capture_command"><code>capture_command()</code></a>
|
85
|
+
* <a href="#capture_command-1"><code>capture_command!()</code></a>
|
81
86
|
* <a href="#dummy_file"><code>dummy_file()</code></a>
|
82
87
|
* <a href="#dummy_dir"><code>dummy_dir()</code></a>
|
83
88
|
* <a href="#dummy_values"><code>dummy_values()</code></a>
|
@@ -91,6 +96,8 @@ Oktest.rb requires Ruby 2.4 or later.
|
|
91
96
|
* <a href="#complex-example">Complex Example</a>
|
92
97
|
* <a href="#helper-methods-for-json-matcher">Helper Methods for JSON Matcher</a>
|
93
98
|
* <a href="#tips">Tips</a>
|
99
|
+
* <a href="#oktesttopic"><code>Oktest.topic()</code></a>
|
100
|
+
* <a href="#topic-target">Topic target</a>
|
94
101
|
* <a href="#ok--in-minitest"><code>ok {}</code> in MiniTest</a>
|
95
102
|
* <a href="#testing-rack-application">Testing Rack Application</a>
|
96
103
|
* <a href="#environment-variale-oktest_rb">Environment Variale <code>$OKTEST_RB</code></a>
|
@@ -823,7 +830,7 @@ ok {exc.class} == NoMethodError
|
|
823
830
|
ok {exc.message} == "undefined method `len' for \"abc\":String"
|
824
831
|
|
825
832
|
## assert that procedure does NOT raise any exception
|
826
|
-
ok {pr}.raise_nothing? # (>=
|
833
|
+
ok {pr}.raise_nothing? # (Oktest >= 1.4)
|
827
834
|
ok {pr}.NOT.raise? # no exception class nor error message
|
828
835
|
not_ok {pr}.raise? # same as above
|
829
836
|
|
@@ -1303,9 +1310,9 @@ end
|
|
1303
1310
|
## Helpers
|
1304
1311
|
|
1305
1312
|
|
1306
|
-
### `
|
1313
|
+
### `capture_stdio()`
|
1307
1314
|
|
1308
|
-
`
|
1315
|
+
`capture_stdio()` captures standard I/O.
|
1309
1316
|
|
1310
1317
|
test/example31_test.rb:
|
1311
1318
|
|
@@ -1318,7 +1325,7 @@ Oktest.scope do
|
|
1318
1325
|
|
1319
1326
|
spec "example spec" do
|
1320
1327
|
data = nil
|
1321
|
-
sout, serr =
|
1328
|
+
sout, serr = capture_stdio("blabla") do # !!!!!
|
1322
1329
|
data = $stdin.read() # read from stdin
|
1323
1330
|
puts "fooo" # write into stdout
|
1324
1331
|
$stderr.puts "baaa" # write into stderr
|
@@ -1333,17 +1340,113 @@ Oktest.scope do
|
|
1333
1340
|
end
|
1334
1341
|
```
|
1335
1342
|
|
1336
|
-
* The first argument of `
|
1337
|
-
If it is not necessary, you can omit it like `
|
1343
|
+
* The first argument of `capture_stdio()` represents data from `$stdin`.
|
1344
|
+
If it is not necessary, you can omit it like `caputre_stdio() do ... end`.
|
1338
1345
|
* If you need `$stdin.tty? == true` and `$stdout.tty? == true`,
|
1339
|
-
call `
|
1346
|
+
call `capture_stdio(tty: true) do ... end`.
|
1347
|
+
* Available on Oktest >= 1.4.
|
1348
|
+
|
1349
|
+
|
1350
|
+
### `capture_sio()`
|
1351
|
+
|
1352
|
+
`capture_sio()` is an alias of `capture_stdio()`.
|
1353
|
+
This is provided for backward compatibility.
|
1354
|
+
|
1355
|
+
(`capture_stdio()` is provided as `capture_sio()` on Oktest < 1.4,
|
1356
|
+
and `capture_sio()` is renamed to `capture_stdio()` since Oktest 1.4.)
|
1357
|
+
|
1358
|
+
|
1359
|
+
### `capture_stdout()`
|
1360
|
+
|
1361
|
+
`capture_stdout()` captures output of $stdout.
|
1362
|
+
If output of $stderr is not empty, assertion error will be raised.
|
1363
|
+
|
1364
|
+
`capture_stdout()` is almost same as the following.
|
1365
|
+
|
1366
|
+
```ruby
|
1367
|
+
def capture_stdout(*args, **kwargs, &b)
|
1368
|
+
sout, serr = capture_stdio(*args, **kwargs, &b)
|
1369
|
+
ok {serr} == ""
|
1370
|
+
return sout
|
1371
|
+
end
|
1372
|
+
```
|
1373
|
+
|
1374
|
+
* Available on Oktest >= 1.4.
|
1375
|
+
|
1376
|
+
|
1377
|
+
### `capture_stderr()`
|
1378
|
+
|
1379
|
+
`capture_stderr()` captures output of $stderr.
|
1380
|
+
If output of $stdout is not empty, assertion error will be raised.
|
1381
|
+
|
1382
|
+
`capture_stderr()` is almost same as the following.
|
1383
|
+
|
1384
|
+
```ruby
|
1385
|
+
def capture_stderr(*args, **kwargs, &b)
|
1386
|
+
sout, serr = capture_stdio(*args, **kwargs, &b)
|
1387
|
+
ok {sout} == ""
|
1388
|
+
return serr
|
1389
|
+
end
|
1390
|
+
```
|
1391
|
+
|
1392
|
+
* Available on Oktest >= 1.4.
|
1393
|
+
|
1394
|
+
|
1395
|
+
### `capture_command()`
|
1396
|
+
|
1397
|
+
`capture_command()` executes a command and returns output of stdout and stderr.
|
1398
|
+
|
1399
|
+
test/example32_test.rb:
|
1400
|
+
|
1401
|
+
```ruby
|
1402
|
+
require 'oktest'
|
1403
|
+
|
1404
|
+
Oktest.scope do
|
1405
|
+
|
1406
|
+
topic "Capturing" do
|
1407
|
+
|
1408
|
+
spec "example spec" do
|
1409
|
+
input = "AAA\nBBB\n"
|
1410
|
+
sout, serr = capture_command("cat -n", input) # !!!!!
|
1411
|
+
ok {sout} == " 1\tAAA\n 2\tBBB\n"
|
1412
|
+
ok {serr} == ""
|
1413
|
+
end
|
1414
|
+
|
1415
|
+
spec "skip if command not installed" do
|
1416
|
+
begin
|
1417
|
+
sout, serr = capture_command "foobar"
|
1418
|
+
rescue Errno::ENOENT
|
1419
|
+
skip_when true, "command `foobar` not installed."
|
1420
|
+
end
|
1421
|
+
end
|
1422
|
+
|
1423
|
+
end
|
1424
|
+
|
1425
|
+
end
|
1426
|
+
```
|
1427
|
+
|
1428
|
+
* The second argument of `capture_command()` represents `$stdin` data.
|
1429
|
+
It is optional.
|
1430
|
+
* `capture_command()` raises RuntimeError if command failed.
|
1431
|
+
* `capture_command()` accepts error handler block. The block will be called only when command failed. If error handler block is specified, `capture_command()` doesn't raise RuntimeError even if command failed.
|
1432
|
+
* `capture_command()` raises `Errno::ENOENT` exception if command not found. This exception will not be handled by error handler block.
|
1433
|
+
* Keyword parameter `tty: true` is not available.
|
1434
|
+
* Available on Oktest >= 1.4.
|
1435
|
+
|
1436
|
+
|
1437
|
+
### `capture_command!()`
|
1438
|
+
|
1439
|
+
`capture_command!()` is similar to `capture_command()` but not raise error
|
1440
|
+
when command failed.
|
1441
|
+
|
1442
|
+
* Available on Oktest >= 1.4.
|
1340
1443
|
|
1341
1444
|
|
1342
1445
|
### `dummy_file()`
|
1343
1446
|
|
1344
1447
|
`dummy_file()` creates a dummy file temporarily.
|
1345
1448
|
|
1346
|
-
test/
|
1449
|
+
test/example33_test.rb:
|
1347
1450
|
|
1348
1451
|
```ruby
|
1349
1452
|
require 'oktest'
|
@@ -1383,7 +1486,7 @@ end
|
|
1383
1486
|
|
1384
1487
|
`dummy_dir()` creates a dummy directory temporarily.
|
1385
1488
|
|
1386
|
-
test/
|
1489
|
+
test/example34_test.rb:
|
1387
1490
|
|
1388
1491
|
```ruby
|
1389
1492
|
require 'oktest'
|
@@ -1425,7 +1528,7 @@ end
|
|
1425
1528
|
|
1426
1529
|
`dummy_values()` changes hash values temporarily.
|
1427
1530
|
|
1428
|
-
test/
|
1531
|
+
test/example35_test.rb:
|
1429
1532
|
|
1430
1533
|
```ruby
|
1431
1534
|
require 'oktest'
|
@@ -1477,7 +1580,7 @@ end
|
|
1477
1580
|
|
1478
1581
|
`dummy_attrs()` changes object attribute values temporarily.
|
1479
1582
|
|
1480
|
-
test/
|
1583
|
+
test/example36_test.rb:
|
1481
1584
|
|
1482
1585
|
```ruby
|
1483
1586
|
require 'oktest'
|
@@ -1532,7 +1635,7 @@ end
|
|
1532
1635
|
|
1533
1636
|
`dummy_ivars()` changes instance variables in object with dummy values temporarily.
|
1534
1637
|
|
1535
|
-
test/
|
1638
|
+
test/example37_test.rb:
|
1536
1639
|
|
1537
1640
|
```ruby
|
1538
1641
|
require 'oktest'
|
@@ -1589,7 +1692,7 @@ end
|
|
1589
1692
|
See [Benry::Recorder README](https://github.com/kwatch/benry-ruby/blob/ruby/benry-recorder/README.md)
|
1590
1693
|
for detals.
|
1591
1694
|
|
1592
|
-
test/
|
1695
|
+
test/example38_test.rb:
|
1593
1696
|
|
1594
1697
|
```ruby
|
1595
1698
|
require 'oktest'
|
@@ -1803,8 +1906,8 @@ Oktest.scope do
|
|
1803
1906
|
"id": 1000..9999, # range object
|
1804
1907
|
"age": Integer, # class object
|
1805
1908
|
"email": /^\w+@example\.com$/, # regexp
|
1806
|
-
"gender": Set
|
1807
|
-
"deleted": Set
|
1909
|
+
"gender": Set["M", "F"], # Set object ("M" or "F")
|
1910
|
+
"deleted": Set[true, false], # boolean (true or false)
|
1808
1911
|
"tags": [/^\w+$/].each, # Enumerator object (!= Array obj)
|
1809
1912
|
"twitter?": /^@\w+$/, # key 'xxx?' means optional value
|
1810
1913
|
}
|
@@ -1879,7 +1982,7 @@ Oktest.scope do
|
|
1879
1982
|
{
|
1880
1983
|
"team": String,
|
1881
1984
|
"members": [
|
1882
|
-
{"id": 1000..9999, "name": String, "gender": Set
|
1985
|
+
{"id": 1000..9999, "name": String, "gender": Set["M", "F"]}
|
1883
1986
|
].each, # Enumerator object (!= Array obj)
|
1884
1987
|
"leader?": String, # key 'xxx?' means optional value
|
1885
1988
|
}
|
@@ -1960,7 +2063,7 @@ ok {JSON({"val": 99 })} === {"val": 1..100} # implies Integer value
|
|
1960
2063
|
|
1961
2064
|
Oktest.rb provides some helper methods and objects:
|
1962
2065
|
|
1963
|
-
* `Enum(x, y, z)` is almost same as `Set
|
2066
|
+
* `Enum(x, y, z)` is almost same as `Set[x, y, z]`.
|
1964
2067
|
* `Bool()` is same as `Enum(true, false)`.
|
1965
2068
|
* `Length(3)` matches to length 3, and `Length(1..3)` matches to length 1..3.
|
1966
2069
|
|
@@ -1970,7 +2073,7 @@ test/example44_test.rb:
|
|
1970
2073
|
```ruby
|
1971
2074
|
actual = {"gender": "M", "deleted": false, "code": "ABCD1234"}
|
1972
2075
|
ok {JSON(actual)} == {
|
1973
|
-
"gender": Enum("M", "F"), # same as Set
|
2076
|
+
"gender": Enum("M", "F"), # same as Set["M", "F"]
|
1974
2077
|
"deleted": Bool(), # same as Enum(true, false)
|
1975
2078
|
"code": Length(6..10), # code length should be 6..10
|
1976
2079
|
}
|
@@ -1981,6 +2084,41 @@ test/example44_test.rb:
|
|
1981
2084
|
## Tips
|
1982
2085
|
|
1983
2086
|
|
2087
|
+
### `Oktest.topic()`
|
2088
|
+
|
2089
|
+
If you want to reduce nested block depth, `Oktest.topic()` will help you.
|
2090
|
+
|
2091
|
+
```ruby
|
2092
|
+
## This...
|
2093
|
+
Oktest.topic HelloClass do
|
2094
|
+
...
|
2095
|
+
end
|
2096
|
+
|
2097
|
+
## ...is equivarent to...
|
2098
|
+
Oktest.scope do
|
2099
|
+
Oktest.toic HelloClass do
|
2100
|
+
...
|
2101
|
+
end
|
2102
|
+
end
|
2103
|
+
```
|
2104
|
+
|
2105
|
+
(Since Oktest >= 1.5)
|
2106
|
+
|
2107
|
+
|
2108
|
+
### Topic target
|
2109
|
+
|
2110
|
+
`topic()` passes an target argument to the block.
|
2111
|
+
|
2112
|
+
```ruby
|
2113
|
+
topic '/api/orders/{id}' do |urlpath|
|
2114
|
+
p urlpath #=> "/api/orders/{id}"
|
2115
|
+
...
|
2116
|
+
end
|
2117
|
+
```
|
2118
|
+
|
2119
|
+
(Since Oktest >= 1.5)
|
2120
|
+
|
2121
|
+
|
1984
2122
|
### `ok {}` in MiniTest
|
1985
2123
|
|
1986
2124
|
If you want to use `ok {actual} == expected` style assertion in MiniTest,
|
data/Rakefile.rb
CHANGED
data/benchmark/run_all.rb
CHANGED