oktest 1.3.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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