oktest 1.4.0 → 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 +42 -5
- data/Rakefile.rb +1 -1
- data/lib/oktest.rb +32 -9
- data/oktest.gemspec +3 -3
- data/test/assertion_test.rb +229 -227
- data/test/filter_test.rb +122 -120
- data/test/fixture_test.rb +33 -32
- data/test/generator_test.rb +20 -19
- data/test/helper_test.rb +280 -274
- data/test/init.rb +44 -0
- data/test/mainapp_test.rb +194 -190
- data/test/matcher_test.rb +156 -126
- data/test/misc_test.rb +31 -30
- data/test/nanot.rb +307 -0
- data/test/node_test.rb +296 -252
- data/test/reporter_test.rb +249 -208
- data/test/runner_test.rb +101 -100
- data/test/util_test.rb +196 -193
- data/test/utilhelper_test.rb +35 -38
- data/test/visitor_test.rb +54 -50
- metadata +10 -10
- data/test/initialize.rb +0 -22
- data/test/tc.rb +0 -128
- /data/test/{run_all.rb → all.rb} +0 -0
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
@@ -96,6 +96,8 @@ Oktest.rb requires Ruby 2.4 or later.
|
|
96
96
|
* <a href="#complex-example">Complex Example</a>
|
97
97
|
* <a href="#helper-methods-for-json-matcher">Helper Methods for JSON Matcher</a>
|
98
98
|
* <a href="#tips">Tips</a>
|
99
|
+
* <a href="#oktesttopic"><code>Oktest.topic()</code></a>
|
100
|
+
* <a href="#topic-target">Topic target</a>
|
99
101
|
* <a href="#ok--in-minitest"><code>ok {}</code> in MiniTest</a>
|
100
102
|
* <a href="#testing-rack-application">Testing Rack Application</a>
|
101
103
|
* <a href="#environment-variale-oktest_rb">Environment Variale <code>$OKTEST_RB</code></a>
|
@@ -1904,8 +1906,8 @@ Oktest.scope do
|
|
1904
1906
|
"id": 1000..9999, # range object
|
1905
1907
|
"age": Integer, # class object
|
1906
1908
|
"email": /^\w+@example\.com$/, # regexp
|
1907
|
-
"gender": Set
|
1908
|
-
"deleted": Set
|
1909
|
+
"gender": Set["M", "F"], # Set object ("M" or "F")
|
1910
|
+
"deleted": Set[true, false], # boolean (true or false)
|
1909
1911
|
"tags": [/^\w+$/].each, # Enumerator object (!= Array obj)
|
1910
1912
|
"twitter?": /^@\w+$/, # key 'xxx?' means optional value
|
1911
1913
|
}
|
@@ -1980,7 +1982,7 @@ Oktest.scope do
|
|
1980
1982
|
{
|
1981
1983
|
"team": String,
|
1982
1984
|
"members": [
|
1983
|
-
{"id": 1000..9999, "name": String, "gender": Set
|
1985
|
+
{"id": 1000..9999, "name": String, "gender": Set["M", "F"]}
|
1984
1986
|
].each, # Enumerator object (!= Array obj)
|
1985
1987
|
"leader?": String, # key 'xxx?' means optional value
|
1986
1988
|
}
|
@@ -2061,7 +2063,7 @@ ok {JSON({"val": 99 })} === {"val": 1..100} # implies Integer value
|
|
2061
2063
|
|
2062
2064
|
Oktest.rb provides some helper methods and objects:
|
2063
2065
|
|
2064
|
-
* `Enum(x, y, z)` is almost same as `Set
|
2066
|
+
* `Enum(x, y, z)` is almost same as `Set[x, y, z]`.
|
2065
2067
|
* `Bool()` is same as `Enum(true, false)`.
|
2066
2068
|
* `Length(3)` matches to length 3, and `Length(1..3)` matches to length 1..3.
|
2067
2069
|
|
@@ -2071,7 +2073,7 @@ test/example44_test.rb:
|
|
2071
2073
|
```ruby
|
2072
2074
|
actual = {"gender": "M", "deleted": false, "code": "ABCD1234"}
|
2073
2075
|
ok {JSON(actual)} == {
|
2074
|
-
"gender": Enum("M", "F"), # same as Set
|
2076
|
+
"gender": Enum("M", "F"), # same as Set["M", "F"]
|
2075
2077
|
"deleted": Bool(), # same as Enum(true, false)
|
2076
2078
|
"code": Length(6..10), # code length should be 6..10
|
2077
2079
|
}
|
@@ -2082,6 +2084,41 @@ test/example44_test.rb:
|
|
2082
2084
|
## Tips
|
2083
2085
|
|
2084
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
|
+
|
2085
2122
|
### `ok {}` in MiniTest
|
2086
2123
|
|
2087
2124
|
If you want to use `ok {actual} == expected` style assertion in MiniTest,
|
data/Rakefile.rb
CHANGED
data/lib/oktest.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
###
|
5
|
-
### $Release: 1.
|
5
|
+
### $Release: 1.5.0 $
|
6
6
|
### $Copyright: copyright(c) 2011-2024 kuwata-lab.com all rights reserved $
|
7
7
|
### $License: MIT License $
|
8
8
|
###
|
@@ -13,7 +13,7 @@ require 'set'
|
|
13
13
|
module Oktest
|
14
14
|
|
15
15
|
|
16
|
-
VERSION = '$Release: 1.
|
16
|
+
VERSION = '$Release: 1.5.0 $'.split()[1]
|
17
17
|
|
18
18
|
|
19
19
|
class OktestError < StandardError
|
@@ -1125,6 +1125,13 @@ END
|
|
1125
1125
|
attr_reader :target
|
1126
1126
|
attr_writer :_prefix
|
1127
1127
|
|
1128
|
+
def run_block_in_context_class(&block)
|
1129
|
+
#; [!i2kvj] run block in context class.
|
1130
|
+
#; [!pr3vj] run block with topic target as an argument.
|
1131
|
+
target = @target
|
1132
|
+
@context_class.class_exec(target, &block)
|
1133
|
+
end
|
1134
|
+
|
1128
1135
|
def _prefix
|
1129
1136
|
@_prefix || '*'
|
1130
1137
|
end
|
@@ -1234,6 +1241,13 @@ END
|
|
1234
1241
|
@_in_scope = false
|
1235
1242
|
end
|
1236
1243
|
|
1244
|
+
def self.topic(target, &block)
|
1245
|
+
#; [!c5j3f] same as `Oktest.scope do topic target do ... end end`.
|
1246
|
+
self.scope do
|
1247
|
+
topic(target, &block)
|
1248
|
+
end
|
1249
|
+
end
|
1250
|
+
|
1237
1251
|
|
1238
1252
|
module SpecHelper
|
1239
1253
|
|
@@ -2168,9 +2182,6 @@ END
|
|
2168
2182
|
end
|
2169
2183
|
|
2170
2184
|
|
2171
|
-
REPORTER_CLASS = VerboseReporter
|
2172
|
-
|
2173
|
-
|
2174
2185
|
REPORTER_CLASSES = {
|
2175
2186
|
'verbose' => VerboseReporter, 'v' => VerboseReporter,
|
2176
2187
|
'simple' => SimpleReporter, 's' => SimpleReporter,
|
@@ -2179,10 +2190,22 @@ END
|
|
2179
2190
|
'quiet' => QuietReporter, 'q' => QuietReporter,
|
2180
2191
|
}
|
2181
2192
|
|
2193
|
+
DEFAULT_REPORTING_STYLE = 'verbose'
|
2194
|
+
|
2195
|
+
def self.DEFAULT_REPORTING_STYLE=(style)
|
2196
|
+
#; [!lbufd] raises error if unknown style specified.
|
2197
|
+
REPORTER_CLASSES.key?(style) or
|
2198
|
+
raise ArgumentError, "#{style}: Unknown reporting style."
|
2199
|
+
#; [!dsbmo] changes value of default reporting style.
|
2200
|
+
remove_const :DEFAULT_REPORTING_STYLE
|
2201
|
+
const_set :DEFAULT_REPORTING_STYLE, style
|
2202
|
+
end
|
2203
|
+
|
2182
2204
|
|
2183
2205
|
def self.run(reporter: nil, style: nil)
|
2184
2206
|
#; [!6xn3t] creates reporter object according to 'style:' keyword arg.
|
2185
|
-
|
2207
|
+
style ||= DEFAULT_REPORTING_STYLE
|
2208
|
+
klass = REPORTER_CLASSES[style] or
|
2186
2209
|
raise ArgumentError, "#{style.inspect}: unknown style."
|
2187
2210
|
reporter ||= klass.new
|
2188
2211
|
#; [!mn451] run test cases.
|
@@ -2490,12 +2513,12 @@ END
|
|
2490
2513
|
public
|
2491
2514
|
|
2492
2515
|
def filter_children!(node)
|
2493
|
-
_filter_children!(node)
|
2516
|
+
_filter_children!(node, 0)
|
2494
2517
|
end
|
2495
2518
|
|
2496
2519
|
private
|
2497
2520
|
|
2498
|
-
def _filter_children!(node) #:nodoc:
|
2521
|
+
def _filter_children!(node, _depth) #:nodoc:
|
2499
2522
|
#; [!r6g6a] supports negative filter by topic.
|
2500
2523
|
#; [!doozg] supports negative filter by spec.
|
2501
2524
|
#; [!ntv44] supports negative filter by tag name.
|
@@ -2516,7 +2539,7 @@ END
|
|
2516
2539
|
removes << i unless positive
|
2517
2540
|
#; [!mz6id] can filter nested topics.
|
2518
2541
|
elsif item.is_a?(Node)
|
2519
|
-
removes << i unless _filter_children!(item)
|
2542
|
+
removes << i unless _filter_children!(item, _depth+1)
|
2520
2543
|
#; [!1jphf] can filter specs from nested topics.
|
2521
2544
|
elsif item.is_a?(SpecLeaf)
|
2522
2545
|
removes << i if positive
|
data/oktest.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
###
|
4
|
-
### $Release: 1.
|
4
|
+
### $Release: 1.5.0 $
|
5
5
|
### $License: MIT License $
|
6
6
|
### $Copyright: copyright(c) 2011-2024 kuwata-lab.com all rights reserved $
|
7
7
|
###
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.name = "oktest"
|
14
14
|
s.author = "kwatch"
|
15
15
|
s.email = "kwatch@gmail.com"
|
16
|
-
s.version = "$Release: 1.
|
16
|
+
s.version = "$Release: 1.5.0 $".split()[1]
|
17
17
|
s.license = "MIT"
|
18
18
|
s.platform = Gem::Platform::RUBY
|
19
19
|
s.homepage = "https://github.com/kwatch/oktest/tree/ruby/ruby"
|
@@ -41,5 +41,5 @@ END
|
|
41
41
|
s.files = files
|
42
42
|
s.executables = ['oktest']
|
43
43
|
s.bindir = 'bin'
|
44
|
-
s.test_file = 'test/
|
44
|
+
s.test_file = 'test/all.rb'
|
45
45
|
end
|