judges 0.0.23 → 0.0.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/codecov.yml +3 -2
- data/.github/workflows/rake.yml +3 -2
- data/.gitignore +0 -1
- data/.rubocop.yml +3 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +235 -0
- data/README.md +35 -0
- data/bin/judges +5 -1
- data/features/inspect.feature +16 -0
- data/features/misc.feature +11 -0
- data/features/print.feature +41 -0
- data/features/step_definitions/steps.rb +3 -1
- data/features/test.feature +32 -0
- data/features/trim.feature +14 -0
- data/features/update.feature +32 -0
- data/judges.gemspec +2 -2
- data/lib/judges/commands/test.rb +6 -4
- data/lib/judges/commands/trim.rb +8 -4
- data/lib/judges/commands/update.rb +4 -2
- data/lib/judges/impex.rb +3 -3
- data/lib/judges/pack.rb +16 -5
- data/lib/judges/packs.rb +3 -2
- data/test/commands/test_trim.rb +1 -1
- data/test/test_pack.rb +41 -8
- data/test/test_packs.rb +1 -1
- metadata +11 -5
- data/features/cli.feature +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2326cabc04af248b0125f37645bd07fce0d9f19633f6ebaa10fdcf134da35b73
|
4
|
+
data.tar.gz: ede2d649e85f3d5f637daaa963bf56887b2150345ede96bb7fd4c53f7e5f1400
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ed7d4a0d763cd9f1a5a565033cd42e69e8d52b113f8b117832861ad8d9c22194667ef6759aa8c4c8806cc754435a3cb9583c9951183eba01c7cb3f4aa83f03e
|
7
|
+
data.tar.gz: f3bfaee1fe32ff3315a533dc67019edc9e6c7fbb22db758917a17c0a643dc0a60a69e2e3641d9a954c426e39c928bef098ff1309dad18ce14bd69cf77aa061b0
|
@@ -19,7 +19,7 @@
|
|
19
19
|
# SOFTWARE.
|
20
20
|
---
|
21
21
|
name: codecov
|
22
|
-
on:
|
22
|
+
'on':
|
23
23
|
push:
|
24
24
|
branches:
|
25
25
|
- master
|
@@ -31,7 +31,8 @@ jobs:
|
|
31
31
|
- uses: ruby/setup-ruby@v1
|
32
32
|
with:
|
33
33
|
ruby-version: 3.2
|
34
|
-
|
34
|
+
bundler-cache: true
|
35
|
+
- run: bundle install
|
35
36
|
- run: bundle exec rake
|
36
37
|
- uses: codecov/codecov-action@v4.0.0-beta.3
|
37
38
|
with:
|
data/.github/workflows/rake.yml
CHANGED
@@ -31,7 +31,7 @@ jobs:
|
|
31
31
|
name: test
|
32
32
|
strategy:
|
33
33
|
matrix:
|
34
|
-
os: [ubuntu-20.04, macos-12]
|
34
|
+
os: [ubuntu-20.04, macos-12, windows-2022]
|
35
35
|
ruby: [3.2]
|
36
36
|
runs-on: ${{ matrix.os }}
|
37
37
|
steps:
|
@@ -39,5 +39,6 @@ jobs:
|
|
39
39
|
- uses: ruby/setup-ruby@v1
|
40
40
|
with:
|
41
41
|
ruby-version: ${{ matrix.ruby }}
|
42
|
-
|
42
|
+
bundler-cache: true
|
43
|
+
- run: bundle install
|
43
44
|
- run: bundle exec rake
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -22,6 +22,7 @@ AllCops:
|
|
22
22
|
Exclude:
|
23
23
|
- 'bin/**/*'
|
24
24
|
- 'assets/**/*'
|
25
|
+
- 'vendor/**/*'
|
25
26
|
DisplayCopNames: true
|
26
27
|
TargetRubyVersion: 3.2
|
27
28
|
SuggestExtensions: false
|
@@ -51,3 +52,5 @@ Layout/CaseIndentation:
|
|
51
52
|
Enabled: false
|
52
53
|
Naming/MethodParameterName:
|
53
54
|
MinNameLength: 2
|
55
|
+
Layout/EndOfLine:
|
56
|
+
EnforcedStyle: lf
|
data/Gemfile
CHANGED
@@ -24,10 +24,11 @@ source 'https://rubygems.org'
|
|
24
24
|
gemspec
|
25
25
|
|
26
26
|
gem 'cucumber', '9.2.0', require: false
|
27
|
-
gem 'minitest', '5.
|
27
|
+
gem 'minitest', '5.23.0', require: false
|
28
28
|
gem 'rake', '13.2.1', require: false
|
29
29
|
gem 'rspec-rails', '6.1.2', require: false
|
30
30
|
gem 'rubocop', '1.63.5', require: false
|
31
|
+
gem 'rubocop-performance', '1.21.0', require: false
|
31
32
|
gem 'rubocop-rspec', '2.29.2', require: false
|
32
33
|
gem 'simplecov', '0.22.0', require: false
|
33
34
|
gem 'simplecov-cobertura', '2.1.0', require: false
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,235 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
judges (0.0.0)
|
5
|
+
backtrace (~> 0.3)
|
6
|
+
factbase (~> 0.0.22)
|
7
|
+
gli (~> 2.21)
|
8
|
+
loog (~> 0.2)
|
9
|
+
nokogiri (~> 1.10)
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: https://rubygems.org/
|
13
|
+
specs:
|
14
|
+
actionpack (7.1.3.3)
|
15
|
+
actionview (= 7.1.3.3)
|
16
|
+
activesupport (= 7.1.3.3)
|
17
|
+
nokogiri (>= 1.8.5)
|
18
|
+
racc
|
19
|
+
rack (>= 2.2.4)
|
20
|
+
rack-session (>= 1.0.1)
|
21
|
+
rack-test (>= 0.6.3)
|
22
|
+
rails-dom-testing (~> 2.2)
|
23
|
+
rails-html-sanitizer (~> 1.6)
|
24
|
+
actionview (7.1.3.3)
|
25
|
+
activesupport (= 7.1.3.3)
|
26
|
+
builder (~> 3.1)
|
27
|
+
erubi (~> 1.11)
|
28
|
+
rails-dom-testing (~> 2.2)
|
29
|
+
rails-html-sanitizer (~> 1.6)
|
30
|
+
activesupport (7.1.3.3)
|
31
|
+
base64
|
32
|
+
bigdecimal
|
33
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
34
|
+
connection_pool (>= 2.2.5)
|
35
|
+
drb
|
36
|
+
i18n (>= 1.6, < 2)
|
37
|
+
minitest (>= 5.1)
|
38
|
+
mutex_m
|
39
|
+
tzinfo (~> 2.0)
|
40
|
+
ast (2.4.2)
|
41
|
+
backtrace (0.4.0)
|
42
|
+
base64 (0.2.0)
|
43
|
+
bigdecimal (3.1.8)
|
44
|
+
builder (3.2.4)
|
45
|
+
concurrent-ruby (1.2.3)
|
46
|
+
connection_pool (2.4.1)
|
47
|
+
crass (1.0.6)
|
48
|
+
cucumber (9.2.0)
|
49
|
+
builder (~> 3.2)
|
50
|
+
cucumber-ci-environment (> 9, < 11)
|
51
|
+
cucumber-core (> 13, < 14)
|
52
|
+
cucumber-cucumber-expressions (~> 17.0)
|
53
|
+
cucumber-gherkin (> 24, < 28)
|
54
|
+
cucumber-html-formatter (> 20.3, < 22)
|
55
|
+
cucumber-messages (> 19, < 25)
|
56
|
+
diff-lcs (~> 1.5)
|
57
|
+
mini_mime (~> 1.1)
|
58
|
+
multi_test (~> 1.1)
|
59
|
+
sys-uname (~> 1.2)
|
60
|
+
cucumber-ci-environment (10.0.1)
|
61
|
+
cucumber-core (13.0.2)
|
62
|
+
cucumber-gherkin (>= 27, < 28)
|
63
|
+
cucumber-messages (>= 20, < 23)
|
64
|
+
cucumber-tag-expressions (> 5, < 7)
|
65
|
+
cucumber-cucumber-expressions (17.1.0)
|
66
|
+
bigdecimal
|
67
|
+
cucumber-gherkin (27.0.0)
|
68
|
+
cucumber-messages (>= 19.1.4, < 23)
|
69
|
+
cucumber-html-formatter (21.3.1)
|
70
|
+
cucumber-messages (> 19, < 25)
|
71
|
+
cucumber-messages (22.0.0)
|
72
|
+
cucumber-tag-expressions (6.1.0)
|
73
|
+
diff-lcs (1.5.1)
|
74
|
+
docile (1.4.0)
|
75
|
+
drb (2.2.1)
|
76
|
+
erubi (1.12.0)
|
77
|
+
factbase (0.0.22)
|
78
|
+
json (~> 2.7)
|
79
|
+
loog (~> 0.2)
|
80
|
+
nokogiri (~> 1.10)
|
81
|
+
yaml (~> 0.3)
|
82
|
+
ffi (1.16.3)
|
83
|
+
ffi (1.16.3-x64-mingw-ucrt)
|
84
|
+
gli (2.21.1)
|
85
|
+
i18n (1.14.5)
|
86
|
+
concurrent-ruby (~> 1.0)
|
87
|
+
io-console (0.7.2)
|
88
|
+
irb (1.13.1)
|
89
|
+
rdoc (>= 4.0.0)
|
90
|
+
reline (>= 0.4.2)
|
91
|
+
json (2.7.2)
|
92
|
+
language_server-protocol (3.17.0.3)
|
93
|
+
loofah (2.22.0)
|
94
|
+
crass (~> 1.0.2)
|
95
|
+
nokogiri (>= 1.12.0)
|
96
|
+
loog (0.5.1)
|
97
|
+
mini_mime (1.1.5)
|
98
|
+
minitest (5.23.0)
|
99
|
+
multi_test (1.1.0)
|
100
|
+
mutex_m (0.2.0)
|
101
|
+
nokogiri (1.16.5-arm64-darwin)
|
102
|
+
racc (~> 1.4)
|
103
|
+
nokogiri (1.16.5-x64-mingw-ucrt)
|
104
|
+
racc (~> 1.4)
|
105
|
+
nokogiri (1.16.5-x86_64-darwin)
|
106
|
+
racc (~> 1.4)
|
107
|
+
nokogiri (1.16.5-x86_64-linux)
|
108
|
+
racc (~> 1.4)
|
109
|
+
parallel (1.24.0)
|
110
|
+
parser (3.3.1.0)
|
111
|
+
ast (~> 2.4.1)
|
112
|
+
racc
|
113
|
+
psych (5.1.2)
|
114
|
+
stringio
|
115
|
+
racc (1.7.3)
|
116
|
+
rack (3.0.11)
|
117
|
+
rack-session (2.0.0)
|
118
|
+
rack (>= 3.0.0)
|
119
|
+
rack-test (2.1.0)
|
120
|
+
rack (>= 1.3)
|
121
|
+
rackup (2.1.0)
|
122
|
+
rack (>= 3)
|
123
|
+
webrick (~> 1.8)
|
124
|
+
rails-dom-testing (2.2.0)
|
125
|
+
activesupport (>= 5.0.0)
|
126
|
+
minitest
|
127
|
+
nokogiri (>= 1.6)
|
128
|
+
rails-html-sanitizer (1.6.0)
|
129
|
+
loofah (~> 2.21)
|
130
|
+
nokogiri (~> 1.14)
|
131
|
+
railties (7.1.3.3)
|
132
|
+
actionpack (= 7.1.3.3)
|
133
|
+
activesupport (= 7.1.3.3)
|
134
|
+
irb
|
135
|
+
rackup (>= 1.0.0)
|
136
|
+
rake (>= 12.2)
|
137
|
+
thor (~> 1.0, >= 1.2.2)
|
138
|
+
zeitwerk (~> 2.6)
|
139
|
+
rainbow (3.1.1)
|
140
|
+
rake (13.2.1)
|
141
|
+
rdoc (6.6.3.1)
|
142
|
+
psych (>= 4.0.0)
|
143
|
+
regexp_parser (2.9.2)
|
144
|
+
reline (0.5.7)
|
145
|
+
io-console (~> 0.5)
|
146
|
+
rexml (3.2.8)
|
147
|
+
strscan (>= 3.0.9)
|
148
|
+
rspec-core (3.13.0)
|
149
|
+
rspec-support (~> 3.13.0)
|
150
|
+
rspec-expectations (3.13.0)
|
151
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
152
|
+
rspec-support (~> 3.13.0)
|
153
|
+
rspec-mocks (3.13.1)
|
154
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
155
|
+
rspec-support (~> 3.13.0)
|
156
|
+
rspec-rails (6.1.2)
|
157
|
+
actionpack (>= 6.1)
|
158
|
+
activesupport (>= 6.1)
|
159
|
+
railties (>= 6.1)
|
160
|
+
rspec-core (~> 3.13)
|
161
|
+
rspec-expectations (~> 3.13)
|
162
|
+
rspec-mocks (~> 3.13)
|
163
|
+
rspec-support (~> 3.13)
|
164
|
+
rspec-support (3.13.1)
|
165
|
+
rubocop (1.63.5)
|
166
|
+
json (~> 2.3)
|
167
|
+
language_server-protocol (>= 3.17.0)
|
168
|
+
parallel (~> 1.10)
|
169
|
+
parser (>= 3.3.0.2)
|
170
|
+
rainbow (>= 2.2.2, < 4.0)
|
171
|
+
regexp_parser (>= 1.8, < 3.0)
|
172
|
+
rexml (>= 3.2.5, < 4.0)
|
173
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
174
|
+
ruby-progressbar (~> 1.7)
|
175
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
176
|
+
rubocop-ast (1.31.3)
|
177
|
+
parser (>= 3.3.1.0)
|
178
|
+
rubocop-capybara (2.20.0)
|
179
|
+
rubocop (~> 1.41)
|
180
|
+
rubocop-factory_bot (2.25.1)
|
181
|
+
rubocop (~> 1.41)
|
182
|
+
rubocop-performance (1.21.0)
|
183
|
+
rubocop (>= 1.48.1, < 2.0)
|
184
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
185
|
+
rubocop-rspec (2.29.2)
|
186
|
+
rubocop (~> 1.40)
|
187
|
+
rubocop-capybara (~> 2.17)
|
188
|
+
rubocop-factory_bot (~> 2.22)
|
189
|
+
rubocop-rspec_rails (~> 2.28)
|
190
|
+
rubocop-rspec_rails (2.28.3)
|
191
|
+
rubocop (~> 1.40)
|
192
|
+
ruby-progressbar (1.13.0)
|
193
|
+
simplecov (0.22.0)
|
194
|
+
docile (~> 1.1)
|
195
|
+
simplecov-html (~> 0.11)
|
196
|
+
simplecov_json_formatter (~> 0.1)
|
197
|
+
simplecov-cobertura (2.1.0)
|
198
|
+
rexml
|
199
|
+
simplecov (~> 0.19)
|
200
|
+
simplecov-html (0.12.3)
|
201
|
+
simplecov_json_formatter (0.1.4)
|
202
|
+
stringio (3.1.0)
|
203
|
+
strscan (3.1.0)
|
204
|
+
sys-uname (1.2.3)
|
205
|
+
ffi (~> 1.1)
|
206
|
+
thor (1.3.1)
|
207
|
+
tzinfo (2.0.6)
|
208
|
+
concurrent-ruby (~> 1.0)
|
209
|
+
unicode-display_width (2.5.0)
|
210
|
+
webrick (1.8.1)
|
211
|
+
yaml (0.3.0)
|
212
|
+
yard (0.9.36)
|
213
|
+
zeitwerk (2.6.14)
|
214
|
+
|
215
|
+
PLATFORMS
|
216
|
+
arm64-darwin-22
|
217
|
+
x64-mingw-ucrt
|
218
|
+
x86_64-darwin-20
|
219
|
+
x86_64-linux
|
220
|
+
|
221
|
+
DEPENDENCIES
|
222
|
+
cucumber (= 9.2.0)
|
223
|
+
judges!
|
224
|
+
minitest (= 5.23.0)
|
225
|
+
rake (= 13.2.1)
|
226
|
+
rspec-rails (= 6.1.2)
|
227
|
+
rubocop (= 1.63.5)
|
228
|
+
rubocop-performance (= 1.21.0)
|
229
|
+
rubocop-rspec (= 2.29.2)
|
230
|
+
simplecov (= 0.22.0)
|
231
|
+
simplecov-cobertura (= 2.1.0)
|
232
|
+
yard (= 0.9.36)
|
233
|
+
|
234
|
+
BUNDLED WITH
|
235
|
+
2.4.22
|
data/README.md
CHANGED
@@ -14,6 +14,41 @@
|
|
14
14
|
A command line tool and a Ruby gem for running judges agains a
|
15
15
|
[factbase](https://github.com/yegor256/factbase).
|
16
16
|
|
17
|
+
Every "judge" is a directory with a single `.rb` file and a number
|
18
|
+
of `.yml` files. A script in the Ruby file is executed with the following
|
19
|
+
global variables available to it:
|
20
|
+
|
21
|
+
* `$fb` — an instance
|
22
|
+
of [`Factbase`](https://www.rubydoc.info/gems/factbase/0.0.22/Factbase),
|
23
|
+
where facts may be added/updated;
|
24
|
+
* `$loog` — an instance
|
25
|
+
of [`Loog`](https://www.rubydoc.info/gems/loog/0.5.1/Loog),
|
26
|
+
where `.info` and `.debug` logs are welcome;
|
27
|
+
* `$options` — a holder of options coming from `.yml` files;
|
28
|
+
* `$local` — a hash map that is cleaned up when all tests
|
29
|
+
in the pack are finished;
|
30
|
+
* `$global` — a hash map that is never cleaned up;
|
31
|
+
* `$judge` — the name of the directory, where the `.rb` script is located.
|
32
|
+
|
33
|
+
Every `.yml` file must be formatted as such:
|
34
|
+
|
35
|
+
```yaml
|
36
|
+
input:
|
37
|
+
-
|
38
|
+
foo: 42
|
39
|
+
bar: Hello, world!
|
40
|
+
options:
|
41
|
+
max: 100
|
42
|
+
expected:
|
43
|
+
- /fb[count(f)=1]
|
44
|
+
```
|
45
|
+
|
46
|
+
Here, the `input` is an array of facts to be placed into the Factbase before
|
47
|
+
the test starts; the `options` is a hash map of options to be passed
|
48
|
+
via command line `--option` of the `update` command; and `expected` is
|
49
|
+
an array of XPath expressions that must be present in the XML of the Factbase
|
50
|
+
when the test is finished.
|
51
|
+
|
17
52
|
## How to contribute
|
18
53
|
|
19
54
|
Read
|
data/bin/judges
CHANGED
@@ -32,7 +32,7 @@ Encoding.default_internal = Encoding::UTF_8
|
|
32
32
|
class App
|
33
33
|
extend GLI::App
|
34
34
|
|
35
|
-
ver = '0.0.
|
35
|
+
ver = '0.0.25'
|
36
36
|
|
37
37
|
loog = Loog::REGULAR
|
38
38
|
|
@@ -59,6 +59,8 @@ class App
|
|
59
59
|
command :update do |c|
|
60
60
|
c.desc 'Options to pass to every judge'
|
61
61
|
c.flag([:o, :option], multiple: true, arg_name: '<key=value>')
|
62
|
+
c.desc 'The location of a Ruby library (directory with .rb files to include)'
|
63
|
+
c.flag([:lib])
|
62
64
|
c.desc 'Maximum number of update cycles to run'
|
63
65
|
c.flag([:'max-cycles'], default_value: 8, type: Integer)
|
64
66
|
c.desc 'Stay quiet even if some judges fail'
|
@@ -111,6 +113,8 @@ class App
|
|
111
113
|
command :test do |c|
|
112
114
|
c.desc 'Name of the test pack to run'
|
113
115
|
c.flag([:pack], multiple: true)
|
116
|
+
c.desc 'The location of a Ruby library (directory with .rb files to include)'
|
117
|
+
c.flag([:lib])
|
114
118
|
c.desc 'Stay quiet even if some tests fail or simply no tests executed?'
|
115
119
|
c.switch([:quiet], default_value: false)
|
116
120
|
c.action do |global, options, args|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Inspect
|
2
|
+
I want to inspect a factbase
|
3
|
+
|
4
|
+
Scenario: Simple inspect of a small factbase
|
5
|
+
Given I make a temp directory
|
6
|
+
Then I have a "simple/simple_judge.rb" file with content:
|
7
|
+
"""
|
8
|
+
return if $fb.size > 2
|
9
|
+
n = $fb.insert
|
10
|
+
n.kind = 'yes!'
|
11
|
+
"""
|
12
|
+
Then I run bin/judges with "update . simple.fb"
|
13
|
+
Then I run bin/judges with "inspect simple.fb"
|
14
|
+
Then Stdout contains "Facts: 3"
|
15
|
+
And Exit code is zero
|
16
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: Misc
|
2
|
+
I want to get some meta info
|
3
|
+
|
4
|
+
Scenario: Help can be printed
|
5
|
+
When I run bin/judges with "-h"
|
6
|
+
Then Exit code is zero
|
7
|
+
And Stdout contains "--help"
|
8
|
+
|
9
|
+
Scenario: Version can be printed
|
10
|
+
When I run bin/judges with "--version"
|
11
|
+
Then Exit code is zero
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Print
|
2
|
+
I want to print a factbase
|
3
|
+
|
4
|
+
Scenario: Simple print of a small factbase, to YAML
|
5
|
+
Given I make a temp directory
|
6
|
+
Then I have a "simple/simple_judge.rb" file with content:
|
7
|
+
"""
|
8
|
+
return if $fb.size > 2
|
9
|
+
n = $fb.insert
|
10
|
+
n.kind = 'yes!'
|
11
|
+
"""
|
12
|
+
Then I run bin/judges with "update . simple.fb"
|
13
|
+
Then I run bin/judges with "print --format=yaml simple.fb simple.yml"
|
14
|
+
Then Stdout contains "printed"
|
15
|
+
And Exit code is zero
|
16
|
+
|
17
|
+
Scenario: Simple print of a small factbase, to JSON
|
18
|
+
Given I make a temp directory
|
19
|
+
Then I have a "simple/simple_judge.rb" file with content:
|
20
|
+
"""
|
21
|
+
return if $fb.size > 2
|
22
|
+
n = $fb.insert
|
23
|
+
n.kind = 'yes!'
|
24
|
+
"""
|
25
|
+
Then I run bin/judges with "update . simple.fb"
|
26
|
+
Then I run bin/judges with "print --format=json simple.fb simple.json"
|
27
|
+
Then Stdout contains "printed"
|
28
|
+
And Exit code is zero
|
29
|
+
|
30
|
+
Scenario: Simple print of a small factbase, to XML
|
31
|
+
Given I make a temp directory
|
32
|
+
Then I have a "simple/simple_judge.rb" file with content:
|
33
|
+
"""
|
34
|
+
return if $fb.size > 2
|
35
|
+
n = $fb.insert
|
36
|
+
n.kind = 'yes!'
|
37
|
+
"""
|
38
|
+
Then I run bin/judges with "update . simple.fb"
|
39
|
+
Then I run bin/judges with "print --format=xml --auto simple.fb"
|
40
|
+
Then Stdout contains "printed"
|
41
|
+
And Exit code is zero
|
@@ -47,7 +47,9 @@ end
|
|
47
47
|
|
48
48
|
When(%r{^I run bin/judges with "([^"]*)"$}) do |arg|
|
49
49
|
home = File.join(File.dirname(__FILE__), '../..')
|
50
|
-
|
50
|
+
cmd = "ruby -I#{home}/lib #{home}/bin/judges #{arg}"
|
51
|
+
cmd = "GLI_DEBUG=true #{cmd}" unless Gem.win_platform?
|
52
|
+
@stdout = `#{cmd}`
|
51
53
|
@exitstatus = $CHILD_STATUS.exitstatus
|
52
54
|
end
|
53
55
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Test
|
2
|
+
I want to test a few judges
|
3
|
+
|
4
|
+
Scenario: Simple test of a few judges
|
5
|
+
Given I run bin/judges with "test ./fixtures"
|
6
|
+
Then Stdout contains "👉 Testing"
|
7
|
+
Then Stdout contains "judge(s) tested successfully"
|
8
|
+
And Exit code is zero
|
9
|
+
|
10
|
+
Scenario: Simple test of just one pack
|
11
|
+
Given I run bin/judges with "test --pack reward_for_good_bug ./fixtures"
|
12
|
+
Then Stdout contains "judge(s) tested successfully"
|
13
|
+
And Exit code is zero
|
14
|
+
|
15
|
+
Scenario: Simple test of no packs
|
16
|
+
Given I run bin/judges with "test --pack absent_for_sure ./fixtures"
|
17
|
+
Then Exit code is not zero
|
18
|
+
|
19
|
+
Scenario: Simple test of a few judges, with a lib
|
20
|
+
Given I make a temp directory
|
21
|
+
Then I have a "mypacks/mypack/simple_judge.rb" file with content:
|
22
|
+
"""
|
23
|
+
n = $fb.insert
|
24
|
+
n.foo = $foo
|
25
|
+
"""
|
26
|
+
Then I have a "mylib/foo.rb" file with content:
|
27
|
+
"""
|
28
|
+
$foo = 42
|
29
|
+
"""
|
30
|
+
Then I run bin/judges with "test --lib mylib mypacks"
|
31
|
+
Then Stdout contains "All 1 judge(s) tested successfully"
|
32
|
+
And Exit code is zero
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Trim
|
2
|
+
I want to trim a factbase
|
3
|
+
|
4
|
+
Scenario: Simple trimming of a factbase
|
5
|
+
Given I make a temp directory
|
6
|
+
Then I have a "simple/simple_judge.rb" file with content:
|
7
|
+
"""
|
8
|
+
return if $fb.size > 2
|
9
|
+
$fb.insert.time = Time.now - 100 * 60 * 60 * 24
|
10
|
+
"""
|
11
|
+
Then I run bin/judges with "--verbose update . simple.fb"
|
12
|
+
Given I run bin/judges with "trim --days 5 simple.fb"
|
13
|
+
Then Stdout contains "3 fact(s) deleted"
|
14
|
+
And Exit code is zero
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Update
|
2
|
+
I want to run a few judges over a factbase
|
3
|
+
|
4
|
+
Scenario: Simple run of a few judges
|
5
|
+
Given I make a temp directory
|
6
|
+
Then I have a "simple/simple_judge.rb" file with content:
|
7
|
+
"""
|
8
|
+
n = $fb.insert
|
9
|
+
n.kind = 'yes!'
|
10
|
+
"""
|
11
|
+
Then I run bin/judges with "--verbose update --quiet -o foo=1 -o bar=2 --max-cycles 3 . simple.fb"
|
12
|
+
Then Stdout contains "foo → "
|
13
|
+
Then Stdout contains "bar → "
|
14
|
+
Then Stdout contains "1 judge(s) processed"
|
15
|
+
Then Stdout contains "Update finished in 3 cycles"
|
16
|
+
And Exit code is zero
|
17
|
+
|
18
|
+
Scenario: Simple run of a few judges, with a lib
|
19
|
+
Given I make a temp directory
|
20
|
+
Then I have a "mypacks/mypack/simple_judge.rb" file with content:
|
21
|
+
"""
|
22
|
+
n = $fb.insert
|
23
|
+
n.foo = $foo
|
24
|
+
"""
|
25
|
+
Then I have a "mylib/foo.rb" file with content:
|
26
|
+
"""
|
27
|
+
$foo = 42
|
28
|
+
"""
|
29
|
+
Then I run bin/judges with "update --lib mylib --max-cycles 1 mypacks simple.fb"
|
30
|
+
Then Stdout contains "1 judge(s) processed"
|
31
|
+
Then Stdout contains "Update finished in 1 cycles"
|
32
|
+
And Exit code is zero
|
data/judges.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
27
27
|
s.required_ruby_version = '>=3.2'
|
28
28
|
s.name = 'judges'
|
29
|
-
s.version = '0.0.
|
29
|
+
s.version = '0.0.25'
|
30
30
|
s.license = 'MIT'
|
31
31
|
s.summary = 'Command-Line Tool for a Factbase'
|
32
32
|
s.description = '
|
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.rdoc_options = ['--charset=UTF-8']
|
43
43
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
44
44
|
s.add_runtime_dependency 'backtrace', '~> 0.3'
|
45
|
-
s.add_runtime_dependency 'factbase', '~>0.0.
|
45
|
+
s.add_runtime_dependency 'factbase', '~>0.0.22'
|
46
46
|
s.add_runtime_dependency 'gli', '~>2.21'
|
47
47
|
s.add_runtime_dependency 'loog', '~>0.2'
|
48
48
|
s.add_runtime_dependency 'nokogiri', '~> 1.10'
|
data/lib/judges/commands/test.rb
CHANGED
@@ -44,14 +44,16 @@ class Judges::Test
|
|
44
44
|
@loog.info("Testing judges in #{dir.to_rel}...")
|
45
45
|
errors = []
|
46
46
|
done = 0
|
47
|
-
|
47
|
+
global = {}
|
48
|
+
Judges::Packs.new(dir, opts['lib'], @loog).each_with_index do |p, i|
|
49
|
+
local = {}
|
48
50
|
next unless include?(opts, p.name)
|
49
51
|
@loog.info("\n👉 Testing #{p.script} (##{i}) in #{p.dir.to_rel}...")
|
50
52
|
p.tests.each do |f|
|
51
53
|
yaml = YAML.load_file(f, permitted_classes: [Time])
|
52
54
|
@loog.info("Testing #{f.to_rel}:")
|
53
55
|
begin
|
54
|
-
test_one(p, yaml)
|
56
|
+
test_one(p, global, local, yaml)
|
55
57
|
rescue StandardError => e
|
56
58
|
@loog.warn(Backtrace.new(e))
|
57
59
|
errors << f
|
@@ -78,7 +80,7 @@ class Judges::Test
|
|
78
80
|
packs.include?(name)
|
79
81
|
end
|
80
82
|
|
81
|
-
def test_one(pack, yaml)
|
83
|
+
def test_one(pack, global, local, yaml)
|
82
84
|
fb = Factbase.new
|
83
85
|
yaml['input'].each do |i|
|
84
86
|
f = fb.insert
|
@@ -92,7 +94,7 @@ class Judges::Test
|
|
92
94
|
end
|
93
95
|
end
|
94
96
|
end
|
95
|
-
pack.run(Factbase::Looged.new(fb, @loog), Judges::Options.new(yaml['options']))
|
97
|
+
pack.run(Factbase::Looged.new(fb, @loog), global, local, Judges::Options.new(yaml['options']))
|
96
98
|
xml = Nokogiri::XML.parse(fb.to_xml)
|
97
99
|
yaml['expected'].each do |xp|
|
98
100
|
raise "#{pack.script} doesn't match '#{xp}':\n#{xml}" if xml.xpath(xp).empty?
|
data/lib/judges/commands/trim.rb
CHANGED
@@ -37,10 +37,14 @@ class Judges::Trim
|
|
37
37
|
raise 'Exactly one argument required' unless args.size == 1
|
38
38
|
impex = Judges::Impex.new(@loog, args[0])
|
39
39
|
fb = impex.import
|
40
|
-
|
41
|
-
|
40
|
+
days = opts['days']
|
41
|
+
day = Time.now - (days * 60 * 60 * 24)
|
42
42
|
deleted = fb.query("(lt time #{day.utc.iso8601})").delete!
|
43
|
-
|
44
|
-
|
43
|
+
if deleted.zero?
|
44
|
+
@loog.info('No facts deleted')
|
45
|
+
else
|
46
|
+
@loog.info("🗑 #{deleted} fact(s) deleted, because they were older than #{days} days")
|
47
|
+
impex.export(fb)
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
@@ -46,7 +46,7 @@ class Judges::Update
|
|
46
46
|
fb = Factbase::Looged.new(fb, @loog)
|
47
47
|
options = Judges::Options.new(opts['option'])
|
48
48
|
@loog.debug("The following options provided:\n\t#{options.to_s.gsub("\n", "\n\t")}")
|
49
|
-
packs = Judges::Packs.new(dir, @loog)
|
49
|
+
packs = Judges::Packs.new(dir, opts['lib'], @loog)
|
50
50
|
c = 0
|
51
51
|
loop do
|
52
52
|
c += 1
|
@@ -66,11 +66,13 @@ class Judges::Update
|
|
66
66
|
def cycle(packs, fb, impex, options)
|
67
67
|
errors = []
|
68
68
|
diff = 0
|
69
|
+
global = {}
|
69
70
|
done = packs.each_with_index do |p, i|
|
71
|
+
local = {}
|
70
72
|
@loog.info("👉 Running #{p.name} (##{i}) at #{p.dir.to_rel}...")
|
71
73
|
before = fb.size
|
72
74
|
begin
|
73
|
-
p.run(fb, options)
|
75
|
+
p.run(fb, global, local, options)
|
74
76
|
rescue StandardError => e
|
75
77
|
@loog.warn(Backtrace.new(e))
|
76
78
|
errors << p.script
|
data/lib/judges/impex.rb
CHANGED
@@ -39,7 +39,7 @@ class Judges::Impex
|
|
39
39
|
fb = Factbase.new
|
40
40
|
if File.exist?(@file)
|
41
41
|
fb.import(File.binread(@file))
|
42
|
-
@loog.info("The factbase imported from #{@file.to_rel} (#{File.size(@file)} bytes)")
|
42
|
+
@loog.info("The factbase imported from #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)")
|
43
43
|
elsif strict
|
44
44
|
raise "The factbase is absent at #{@file.to_rel}"
|
45
45
|
end
|
@@ -49,12 +49,12 @@ class Judges::Impex
|
|
49
49
|
def import_to(fb)
|
50
50
|
raise "The factbase is absent at #{@file.to_rel}" unless File.exist?(@file)
|
51
51
|
fb.import(File.binread(@file))
|
52
|
-
@loog.info("The factbase loaded from #{@file.to_rel} (#{File.size(@file)} bytes)")
|
52
|
+
@loog.info("The factbase loaded from #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)")
|
53
53
|
end
|
54
54
|
|
55
55
|
def export(fb)
|
56
56
|
FileUtils.mkdir_p(File.dirname(@file))
|
57
57
|
File.binwrite(@file, fb.export)
|
58
|
-
@loog.info("Factbase exported to #{@file.to_rel} (#{File.size(@file)} bytes)")
|
58
|
+
@loog.info("Factbase exported to #{@file.to_rel} (#{File.size(@file)} bytes, #{fb.size} facts)")
|
59
59
|
end
|
60
60
|
end
|
data/lib/judges/pack.rb
CHANGED
@@ -20,9 +20,8 @@
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
21
|
# SOFTWARE.
|
22
22
|
|
23
|
-
require 'yaml'
|
24
|
-
require 'time'
|
25
23
|
require_relative '../judges'
|
24
|
+
require_relative '../judges/to_rel'
|
26
25
|
require_relative '../judges/fb/once'
|
27
26
|
require_relative '../judges/fb/if_absent'
|
28
27
|
|
@@ -33,17 +32,27 @@ require_relative '../judges/fb/if_absent'
|
|
33
32
|
class Judges::Pack
|
34
33
|
attr_reader :dir
|
35
34
|
|
36
|
-
def initialize(dir, loog)
|
35
|
+
def initialize(dir, lib, loog)
|
37
36
|
@dir = dir
|
37
|
+
@lib = lib
|
38
38
|
@loog = loog
|
39
39
|
end
|
40
40
|
|
41
41
|
# Run it with the given Factbase and environment variables.
|
42
|
-
def run(fbase, options)
|
42
|
+
def run(fbase, global, local, options)
|
43
43
|
$fb = fbase
|
44
44
|
$judge = File.basename(@dir)
|
45
45
|
$options = options
|
46
46
|
$loog = @loog
|
47
|
+
$global = global
|
48
|
+
$local = local
|
49
|
+
unless @lib.nil?
|
50
|
+
raise "Lib dir #{@lib.to_rel} is absent" unless File.exist?(@lib)
|
51
|
+
raise "Lib #{@lib.to_rel} is not a directory" unless File.directory?(@lib)
|
52
|
+
Dir.glob(File.join(@lib, '*.rb')).each do |f|
|
53
|
+
require_relative(File.absolute_path(f))
|
54
|
+
end
|
55
|
+
end
|
47
56
|
s = File.join(@dir, script)
|
48
57
|
raise "Can't load '#{s}'" unless File.exist?(s)
|
49
58
|
begin
|
@@ -60,7 +69,9 @@ class Judges::Pack
|
|
60
69
|
|
61
70
|
# Get the name of the .rb script in the pack.
|
62
71
|
def script
|
63
|
-
|
72
|
+
s = Dir.glob(File.join(@dir, '*.rb')).first
|
73
|
+
raise "No *.rb scripts in #{@dir.to_rel}" if s.nil?
|
74
|
+
File.basename(s)
|
64
75
|
end
|
65
76
|
|
66
77
|
# Return all .yml tests files.
|
data/lib/judges/packs.rb
CHANGED
@@ -28,8 +28,9 @@ require_relative 'pack'
|
|
28
28
|
# Copyright:: Copyright (c) 2024 Yegor Bugayenko
|
29
29
|
# License:: MIT
|
30
30
|
class Judges::Packs
|
31
|
-
def initialize(dir, loog)
|
31
|
+
def initialize(dir, lib, loog)
|
32
32
|
@dir = dir
|
33
|
+
@lib = lib
|
33
34
|
@loog = loog
|
34
35
|
end
|
35
36
|
|
@@ -38,7 +39,7 @@ class Judges::Packs
|
|
38
39
|
def each
|
39
40
|
Dir.glob(File.join(@dir, '**/*.rb')).each do |f|
|
40
41
|
d = File.dirname(File.absolute_path(f))
|
41
|
-
yield Judges::Pack.new(d, @loog)
|
42
|
+
yield Judges::Pack.new(d, @lib, @loog)
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
data/test/commands/test_trim.rb
CHANGED
@@ -39,7 +39,7 @@ class TestTrim < Minitest::Test
|
|
39
39
|
before.insert.time = Time.now + 1
|
40
40
|
before.insert.time = Time.now - (100 * 24 * 60 * 60)
|
41
41
|
File.binwrite(file, before.export)
|
42
|
-
Judges::Trim.new(Loog::VERBOSE).run({ 'days' =>
|
42
|
+
Judges::Trim.new(Loog::VERBOSE).run({ 'days' => 10 }, [file])
|
43
43
|
after = Factbase.new
|
44
44
|
after.import(File.binread(file))
|
45
45
|
assert_equal(1, after.size)
|
data/test/test_pack.rb
CHANGED
@@ -35,9 +35,9 @@ class TestPack < Minitest::Test
|
|
35
35
|
def test_basic_run
|
36
36
|
Dir.mktmpdir do |d|
|
37
37
|
File.write(File.join(d, 'foo.rb'), '$fb.insert')
|
38
|
-
pack = Judges::Pack.new(d, Loog::VERBOSE)
|
38
|
+
pack = Judges::Pack.new(d, nil, Loog::VERBOSE)
|
39
39
|
fb = Factbase.new
|
40
|
-
pack.run(fb, {})
|
40
|
+
pack.run(fb, {}, {}, {})
|
41
41
|
assert_equal(1, fb.size)
|
42
42
|
end
|
43
43
|
end
|
@@ -45,12 +45,12 @@ class TestPack < Minitest::Test
|
|
45
45
|
def test_run_isolated
|
46
46
|
Dir.mktmpdir do |d|
|
47
47
|
File.write(File.join(d, 'bar.rb'), '$fb.insert')
|
48
|
-
pack = Judges::Pack.new(d, Loog::VERBOSE)
|
48
|
+
pack = Judges::Pack.new(d, nil, Loog::VERBOSE)
|
49
49
|
fb1 = Factbase.new
|
50
|
-
pack.run(fb1, {})
|
50
|
+
pack.run(fb1, {}, {}, {})
|
51
51
|
assert_equal(1, fb1.size)
|
52
52
|
fb2 = Factbase.new
|
53
|
-
pack.run(fb2, {})
|
53
|
+
pack.run(fb2, {}, {}, {})
|
54
54
|
assert_equal(1, fb2.size)
|
55
55
|
end
|
56
56
|
end
|
@@ -58,8 +58,26 @@ class TestPack < Minitest::Test
|
|
58
58
|
def test_with_supplemenary_functions
|
59
59
|
Dir.mktmpdir do |d|
|
60
60
|
File.write(File.join(d, 'x.rb'), 'once($fb).insert')
|
61
|
-
pack = Judges::Pack.new(d, Loog::VERBOSE)
|
62
|
-
pack.run(Factbase.new, {})
|
61
|
+
pack = Judges::Pack.new(d, nil, Loog::VERBOSE)
|
62
|
+
pack.run(Factbase.new, {}, {}, {})
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_passes_local_vars_between_tests
|
67
|
+
Dir.mktmpdir do |d|
|
68
|
+
File.write(
|
69
|
+
File.join(d, 'x.rb'),
|
70
|
+
'
|
71
|
+
$local[:foo] = 42 if $local[:foo].nil?
|
72
|
+
$local[:foo] = $local[:foo] + 1
|
73
|
+
'
|
74
|
+
)
|
75
|
+
pack = Judges::Pack.new(d, nil, Loog::NULL)
|
76
|
+
local = {}
|
77
|
+
pack.run(Factbase.new, {}, local, {})
|
78
|
+
pack.run(Factbase.new, {}, local, {})
|
79
|
+
pack.run(Factbase.new, {}, local, {})
|
80
|
+
assert_equal(45, local[:foo])
|
63
81
|
end
|
64
82
|
end
|
65
83
|
|
@@ -70,8 +88,23 @@ class TestPack < Minitest::Test
|
|
70
88
|
FileUtils.mkdir(dir)
|
71
89
|
File.write(File.join(dir, 'foo.rb'), '$loog.info("judge=" + $judge)')
|
72
90
|
log = Loog::Buffer.new
|
73
|
-
Judges::Pack.new(dir, log).run(Factbase.new, {})
|
91
|
+
Judges::Pack.new(dir, nil, log).run(Factbase.new, {}, {}, {})
|
74
92
|
assert(log.to_s.include?("judge=#{j}"))
|
75
93
|
end
|
76
94
|
end
|
95
|
+
|
96
|
+
def test_with_library
|
97
|
+
Dir.mktmpdir do |d|
|
98
|
+
dir = File.join(d, 'packs')
|
99
|
+
FileUtils.mkdir_p(dir)
|
100
|
+
File.write(File.join(dir, 'x.rb'), 'once($fb).insert.bar = $foo')
|
101
|
+
lib = File.join(d, 'lib')
|
102
|
+
FileUtils.mkdir_p(lib)
|
103
|
+
File.write(File.join(lib, 'y.rb'), '$foo = 42')
|
104
|
+
pack = Judges::Pack.new(dir, lib, Loog::VERBOSE)
|
105
|
+
fb = Factbase.new
|
106
|
+
pack.run(fb, {}, {}, {})
|
107
|
+
assert_equal(42, fb.query('()').each.to_a.first.bar)
|
108
|
+
end
|
109
|
+
end
|
77
110
|
end
|
data/test/test_packs.rb
CHANGED
@@ -36,7 +36,7 @@ class TestPacks < Minitest::Test
|
|
36
36
|
File.write(File.join(d, 'foo.rb'), 'hey')
|
37
37
|
File.write(File.join(d, 'something.yml'), "---\nfoo: 42")
|
38
38
|
found = 0
|
39
|
-
Judges::Packs.new(d, Loog::VERBOSE).each do |p|
|
39
|
+
Judges::Packs.new(d, nil, Loog::VERBOSE).each do |p|
|
40
40
|
assert_equal('foo.rb', p.script)
|
41
41
|
found += 1
|
42
42
|
assert_equal('something.yml', File.basename(p.tests.first))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: judges
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.22
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.22
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: gli
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,14 +107,20 @@ files:
|
|
107
107
|
- ".rultor.yml"
|
108
108
|
- ".simplecov"
|
109
109
|
- Gemfile
|
110
|
+
- Gemfile.lock
|
110
111
|
- LICENSE.txt
|
111
112
|
- README.md
|
112
113
|
- Rakefile
|
113
114
|
- bin/judges
|
114
|
-
- features/cli.feature
|
115
115
|
- features/gem_package.feature
|
116
|
+
- features/inspect.feature
|
117
|
+
- features/misc.feature
|
118
|
+
- features/print.feature
|
116
119
|
- features/step_definitions/steps.rb
|
117
120
|
- features/support/env.rb
|
121
|
+
- features/test.feature
|
122
|
+
- features/trim.feature
|
123
|
+
- features/update.feature
|
118
124
|
- fixtures/reward_for_good_bug/README.md
|
119
125
|
- fixtures/reward_for_good_bug/no-reward.yml
|
120
126
|
- fixtures/reward_for_good_bug/reward_it.rb
|
data/features/cli.feature
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
Feature: Simple Run
|
2
|
-
I want to run a few judges over a factbase
|
3
|
-
|
4
|
-
Scenario: Help can be printed
|
5
|
-
When I run bin/judges with "-h"
|
6
|
-
Then Exit code is zero
|
7
|
-
And Stdout contains "--help"
|
8
|
-
|
9
|
-
Scenario: Version can be printed
|
10
|
-
When I run bin/judges with "--version"
|
11
|
-
Then Exit code is zero
|
12
|
-
|
13
|
-
Scenario: Simple run of a few judges
|
14
|
-
Given I make a temp directory
|
15
|
-
Then I have a "simple/simple_judge.rb" file with content:
|
16
|
-
"""
|
17
|
-
n = $fb.insert
|
18
|
-
n.kind = 'yes!'
|
19
|
-
"""
|
20
|
-
Then I run bin/judges with "--verbose update --quiet -o foo=1 -o bar=2 --max-cycles 3 . simple.fb"
|
21
|
-
Then Stdout contains "foo → "
|
22
|
-
Then Stdout contains "bar → "
|
23
|
-
Then Stdout contains "1 judge(s) processed"
|
24
|
-
Then Stdout contains "Update finished in 3 cycles"
|
25
|
-
And Exit code is zero
|
26
|
-
|
27
|
-
Scenario: Simple test of a few judges
|
28
|
-
Given I run bin/judges with "test ./fixtures"
|
29
|
-
Then Stdout contains "👉 Testing"
|
30
|
-
Then Stdout contains "judge(s) tested successfully"
|
31
|
-
And Exit code is zero
|
32
|
-
|
33
|
-
Scenario: Simple test of just one pack
|
34
|
-
Given I run bin/judges with "test --pack reward_for_good_bug ./fixtures"
|
35
|
-
Then Stdout contains "judge(s) tested successfully"
|
36
|
-
And Exit code is zero
|
37
|
-
|
38
|
-
Scenario: Simple test of no packs
|
39
|
-
Given I run bin/judges with "test --pack absent_for_sure ./fixtures"
|
40
|
-
Then Exit code is not zero
|
41
|
-
|
42
|
-
Scenario: Simple trimming of a factbase
|
43
|
-
Given I make a temp directory
|
44
|
-
Then I have a "simple/simple_judge.rb" file with content:
|
45
|
-
"""
|
46
|
-
return if $fb.size > 2
|
47
|
-
$fb.insert.time = Time.now - 100 * 60 * 60 * 24
|
48
|
-
"""
|
49
|
-
Then I run bin/judges with "--verbose update . simple.fb"
|
50
|
-
Given I run bin/judges with "trim --days 5 simple.fb"
|
51
|
-
Then Stdout contains "3 facts deleted"
|
52
|
-
And Exit code is zero
|
53
|
-
|
54
|
-
Scenario: Simple print of a small factbase
|
55
|
-
Given I make a temp directory
|
56
|
-
Then I have a "simple/simple_judge.rb" file with content:
|
57
|
-
"""
|
58
|
-
return if $fb.size > 2
|
59
|
-
n = $fb.insert
|
60
|
-
n.kind = 'yes!'
|
61
|
-
"""
|
62
|
-
Then I run bin/judges with "update . simple.fb"
|
63
|
-
Then I run bin/judges with "print --format=yaml simple.fb simple.yml"
|
64
|
-
Then Stdout contains "printed"
|
65
|
-
And Exit code is zero
|
66
|
-
|
67
|
-
Scenario: Simple inspect of a small factbase
|
68
|
-
Given I make a temp directory
|
69
|
-
Then I have a "simple/simple_judge.rb" file with content:
|
70
|
-
"""
|
71
|
-
return if $fb.size > 2
|
72
|
-
n = $fb.insert
|
73
|
-
n.kind = 'yes!'
|
74
|
-
"""
|
75
|
-
Then I run bin/judges with "update . simple.fb"
|
76
|
-
Then I run bin/judges with "inspect simple.fb"
|
77
|
-
Then Stdout contains "Facts: 3"
|
78
|
-
And Exit code is zero
|
79
|
-
|