judges 0.20.0 → 0.21.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/.github/workflows/copyrights.yml +4 -0
- data/.github/workflows/xcop.yml +5 -1
- data/README.md +7 -0
- data/features/pull.feature +3 -5
- data/features/push.feature +1 -1
- data/features/step_definitions/steps.rb +2 -0
- data/features/test.feature +26 -4
- data/features/update.feature +4 -4
- data/judges.gemspec +1 -1
- data/lib/judges/commands/test.rb +6 -0
- data/lib/judges/judge.rb +4 -3
- data/lib/judges/judges.rb +20 -3
- data/lib/judges/options.rb +1 -1
- data/lib/judges.rb +1 -1
- data/test/commands/test_import.rb +1 -1
- data/test/commands/test_test.rb +33 -20
- data/test/commands/test_update.rb +5 -5
- data/test/test__helper.rb +8 -0
- data/test/test_judge.rb +7 -10
- data/test/test_judges.rb +28 -6
- data/test/test_options.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f826572e575f1c40c556cb5c0de0a2ca5aaf39554ef9d4219e517c6d8492236b
|
4
|
+
data.tar.gz: 7f16f70af23a1fb4903934939133015289f06d4a276c32a567356dd60e3fa75f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3b4e89fcd538caddf490ca8769c2142e6c06bec83eb99582bf426f48ce35617ce169d08d604a9d4ee2780d88f0cc877651fabd863efffc5cb2d1ee96cf6a6ec
|
7
|
+
data.tar.gz: 4dd669683164fcd9402f9f4043b5fab0faa086cc68de9f0a6dc1f6e78f9959f5a8a2f18eb3c8fed23986d735010e71c964313090acba222966803b02bd8ba9e3
|
data/.github/workflows/xcop.yml
CHANGED
data/README.md
CHANGED
@@ -48,6 +48,9 @@ options:
|
|
48
48
|
max: 100
|
49
49
|
expected:
|
50
50
|
- /fb[count(f)=1]
|
51
|
+
after:
|
52
|
+
- first.rb
|
53
|
+
- second.rb
|
51
54
|
```
|
52
55
|
|
53
56
|
Here, the `input` is an array of facts to be placed into the Factbase before
|
@@ -65,6 +68,10 @@ be executed. After each execution, all expected XPath expressions are validated.
|
|
65
68
|
The `before` (default: `[]`) is a list of judges that must be executed before
|
66
69
|
the current one.
|
67
70
|
|
71
|
+
The `after` (default: `[]`) is a list of relative file names
|
72
|
+
of Ruby scripts that are executed after the judge
|
73
|
+
(`$fb` and `$loog` are passed into them).
|
74
|
+
|
68
75
|
## How to contribute
|
69
76
|
|
70
77
|
Read
|
data/features/pull.feature
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
Feature: Pull
|
2
2
|
I want to pull a factbase
|
3
3
|
|
4
|
-
Scenario: Pull a small factbase
|
4
|
+
Scenario: Pull a small factbase, which is absent on the server
|
5
5
|
Given We are online
|
6
6
|
Given I make a temp directory
|
7
|
-
Then I run bin/judges with "--verbose pull --token 00000000-0000-0000-0000-000000000000 --wait=15
|
8
|
-
Then Stdout contains "
|
9
|
-
And Exit code is zero
|
10
|
-
Then I run bin/judges with "inspect simple.fb"
|
7
|
+
Then I run bin/judges with "--verbose pull --token 00000000-0000-0000-0000-000000000000 --wait=15 {FAKE-NAME} simple.fb"
|
8
|
+
Then Stdout contains "doesn't exist at www.zerocracy.com"
|
11
9
|
And Exit code is zero
|
12
10
|
|
data/features/push.feature
CHANGED
@@ -6,6 +6,6 @@ Feature: Push
|
|
6
6
|
Given I make a temp directory
|
7
7
|
Then I run bin/judges with "--verbose eval simple.fb '(0..1000).each { $fb.insert.foo = 42 }'"
|
8
8
|
And Exit code is zero
|
9
|
-
Then I run bin/judges with "push --token 00000000-0000-0000-0000-000000000000 --meta a:b --meta foo:bar --meta=pages_url:https://zerocracy.github.io/zerocracy.html --meta=duration:1055
|
9
|
+
Then I run bin/judges with "push --token 00000000-0000-0000-0000-000000000000 --meta a:b --meta foo:bar --meta=pages_url:https://zerocracy.github.io/zerocracy.html --meta=duration:1055 {FAKE-NAME} simple.fb"
|
10
10
|
Then Stdout contains "Pushed"
|
11
11
|
And Exit code is zero
|
@@ -23,6 +23,7 @@
|
|
23
23
|
require 'tmpdir'
|
24
24
|
require 'net/ping'
|
25
25
|
require 'English'
|
26
|
+
require 'securerandom'
|
26
27
|
|
27
28
|
Before do
|
28
29
|
@cwd = Dir.pwd
|
@@ -52,6 +53,7 @@ end
|
|
52
53
|
|
53
54
|
When(%r{^I run bin/judges with "([^"]*)"$}) do |arg|
|
54
55
|
home = File.join(File.dirname(__FILE__), '../..')
|
56
|
+
arg.gsub!('{FAKE-NAME}') { "fake#{SecureRandom.hex(8)}" }
|
55
57
|
cmd = "ruby -I#{home}/lib #{home}/bin/judges #{arg}"
|
56
58
|
cmd = "GLI_DEBUG=true #{cmd}" unless Gem.win_platform?
|
57
59
|
@stdout = `#{cmd} 2>&1`
|
data/features/test.feature
CHANGED
@@ -28,14 +28,14 @@ Feature: Test
|
|
28
28
|
|
29
29
|
Scenario: Simple test of a few judges, with a lib
|
30
30
|
Given I make a temp directory
|
31
|
-
Then I have a "myjudges/
|
31
|
+
Then I have a "myjudges/good/good.rb" file with content:
|
32
32
|
"""
|
33
33
|
$valve.enter('boom', 'some reason') do
|
34
34
|
n = $fb.insert
|
35
35
|
n.foo = $foo
|
36
36
|
end
|
37
37
|
"""
|
38
|
-
Then I have a "myjudges/
|
38
|
+
Then I have a "myjudges/good/good.yml" file with content:
|
39
39
|
"""
|
40
40
|
---
|
41
41
|
category: good
|
@@ -51,7 +51,7 @@ Feature: Test
|
|
51
51
|
|
52
52
|
Scenario: Simple test with many runs
|
53
53
|
Given I make a temp directory
|
54
|
-
Then I have a "foo/
|
54
|
+
Then I have a "foo/foo.rb" file with content:
|
55
55
|
"""
|
56
56
|
n = $fb.insert
|
57
57
|
n.foo = $fb.size
|
@@ -70,7 +70,7 @@ Feature: Test
|
|
70
70
|
|
71
71
|
Scenario: Simple test with many runs and many asserts
|
72
72
|
Given I make a temp directory
|
73
|
-
Then I have a "foo/
|
73
|
+
Then I have a "foo/foo.rb" file with content:
|
74
74
|
"""
|
75
75
|
n = $fb.insert
|
76
76
|
n.foo = $fb.size
|
@@ -141,3 +141,25 @@ Feature: Test
|
|
141
141
|
"""
|
142
142
|
Then I run bin/judges with "test mine"
|
143
143
|
And Exit code is zero
|
144
|
+
|
145
|
+
Scenario: Test with a post-assert
|
146
|
+
Given I make a temp directory
|
147
|
+
Then I have a "mine/foo/foo.rb" file with content:
|
148
|
+
"""
|
149
|
+
n = $fb.insert
|
150
|
+
n.foo = 42
|
151
|
+
"""
|
152
|
+
Then I have a "mine/foo/assert.rb" file with content:
|
153
|
+
"""
|
154
|
+
raise unless $fb.size == 1
|
155
|
+
"""
|
156
|
+
Then I have a "mine/foo/simple.yml" file with content:
|
157
|
+
"""
|
158
|
+
---
|
159
|
+
expected:
|
160
|
+
- /fb[count(f)=1]
|
161
|
+
after:
|
162
|
+
- assert.rb
|
163
|
+
"""
|
164
|
+
Then I run bin/judges with "test mine"
|
165
|
+
And Exit code is zero
|
data/features/update.feature
CHANGED
@@ -3,7 +3,7 @@ Feature: Update
|
|
3
3
|
|
4
4
|
Scenario: Simple run of a few judges
|
5
5
|
Given I make a temp directory
|
6
|
-
Then I have a "simple/
|
6
|
+
Then I have a "simple/simple.rb" file with content:
|
7
7
|
"""
|
8
8
|
n = $fb.insert
|
9
9
|
n.kind = 'yes!'
|
@@ -17,7 +17,7 @@ Feature: Update
|
|
17
17
|
|
18
18
|
Scenario: Simple run of a few judges, with a lib
|
19
19
|
Given I make a temp directory
|
20
|
-
Then I have a "mine/judge1/
|
20
|
+
Then I have a "mine/judge1/judge1.rb" file with content:
|
21
21
|
"""
|
22
22
|
$valve.enter('boom', 'for no particular reason') do
|
23
23
|
n = $fb.insert
|
@@ -35,7 +35,7 @@ Feature: Update
|
|
35
35
|
|
36
36
|
Scenario: The update fails when a bug in a judge
|
37
37
|
Given I make a temp directory
|
38
|
-
Then I have a "mine/
|
38
|
+
Then I have a "mine/broken/broken.rb" file with content:
|
39
39
|
"""
|
40
40
|
a < 1
|
41
41
|
"""
|
@@ -45,7 +45,7 @@ Feature: Update
|
|
45
45
|
|
46
46
|
Scenario: The update fails when a broken Ruby syntax in a judge
|
47
47
|
Given I make a temp directory
|
48
|
-
Then I have a "mine/
|
48
|
+
Then I have a "mine/broken/broken.rb" file with content:
|
49
49
|
"""
|
50
50
|
invalid$ruby$syntax$here
|
51
51
|
"""
|
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.
|
29
|
+
s.version = '0.21.0'
|
30
30
|
s.license = 'MIT'
|
31
31
|
s.summary = 'Command-Line Tool for a Factbase'
|
32
32
|
s.description =
|
data/lib/judges/commands/test.rb
CHANGED
@@ -82,6 +82,12 @@ class Judges::Test
|
|
82
82
|
test_one(fb, opts, j, n, yaml, assert: false)
|
83
83
|
end
|
84
84
|
test_one(fb, opts, judge, tname, yaml)
|
85
|
+
yaml['after']&.each do |rb|
|
86
|
+
@loog.info("Running #{rb} assertion script...")
|
87
|
+
$fb = fb
|
88
|
+
$loog = @loog
|
89
|
+
load(File.join(judge.dir, rb), true)
|
90
|
+
end
|
85
91
|
tests += 1
|
86
92
|
rescue StandardError => e
|
87
93
|
@loog.warn(Backtrace.new(e))
|
data/lib/judges/judge.rb
CHANGED
@@ -70,9 +70,10 @@ class Judges::Judge
|
|
70
70
|
|
71
71
|
# Get the name of the .rb script in the judge.
|
72
72
|
def script
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
b = "#{File.basename(@dir)}.rb"
|
74
|
+
files = Dir.glob(File.join(@dir, '*.rb')).map { |f| File.basename(f) }
|
75
|
+
raise "No #{b} script in #{@dir.to_rel} among #{files}" unless files.include?(b)
|
76
|
+
b
|
76
77
|
end
|
77
78
|
|
78
79
|
# Return all .yml tests files.
|
data/lib/judges/judges.rb
CHANGED
@@ -24,6 +24,20 @@ require_relative '../judges'
|
|
24
24
|
require_relative 'judge'
|
25
25
|
|
26
26
|
# Collection of all judges to run.
|
27
|
+
#
|
28
|
+
# In the directory +dir+ the following structure must be maintained:
|
29
|
+
#
|
30
|
+
# dir/
|
31
|
+
# judge-one/
|
32
|
+
# judge-one.rb
|
33
|
+
# other files...
|
34
|
+
# judge-two/
|
35
|
+
# judge-two.rb
|
36
|
+
# other files...
|
37
|
+
#
|
38
|
+
# The name of a directory of a judge must be exactly the same as the
|
39
|
+
# name of the +.rb+ script inside the directory.
|
40
|
+
#
|
27
41
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
28
42
|
# Copyright:: Copyright (c) 2024 Yegor Bugayenko
|
29
43
|
# License:: MIT
|
@@ -45,9 +59,12 @@ class Judges::Judges
|
|
45
59
|
# Iterate over them all.
|
46
60
|
# @yield [Judge]
|
47
61
|
def each
|
48
|
-
|
49
|
-
|
50
|
-
|
62
|
+
return to_enum(__method__) unless block_given?
|
63
|
+
Dir.glob(File.join(@dir, '*')).each do |d|
|
64
|
+
next unless File.directory?(d)
|
65
|
+
b = File.basename(d)
|
66
|
+
next unless File.exist?(File.join(d, "#{b}.rb"))
|
67
|
+
yield Judges::Judge.new(File.absolute_path(d), @lib, @loog)
|
51
68
|
end
|
52
69
|
end
|
53
70
|
|
data/lib/judges/options.rb
CHANGED
data/lib/judges.rb
CHANGED
data/test/commands/test_test.rb
CHANGED
@@ -32,9 +32,9 @@ require_relative '../../lib/judges/commands/test'
|
|
32
32
|
class TestTest < Minitest::Test
|
33
33
|
def test_positive
|
34
34
|
Dir.mktmpdir do |d|
|
35
|
-
|
36
|
-
|
37
|
-
File.join(d, 'something.yml'),
|
35
|
+
save_it(File.join(d, 'foo/foo.rb'), '$fb.query("(eq foo 42)").each { |f| f.bar = 4 }')
|
36
|
+
save_it(
|
37
|
+
File.join(d, 'foo/something.yml'),
|
38
38
|
<<-YAML
|
39
39
|
input:
|
40
40
|
-
|
@@ -51,9 +51,9 @@ class TestTest < Minitest::Test
|
|
51
51
|
|
52
52
|
def test_negative
|
53
53
|
Dir.mktmpdir do |d|
|
54
|
-
|
55
|
-
|
56
|
-
File.join(d, 'something.yml'),
|
54
|
+
save_it(File.join(d, 'foo/foo.rb'), '$fb.query("(eq foo 42)").each { |f| f.bar = 4 }')
|
55
|
+
save_it(
|
56
|
+
File.join(d, 'foo/something.yml'),
|
57
57
|
<<-YAML
|
58
58
|
input:
|
59
59
|
-
|
@@ -72,9 +72,9 @@ class TestTest < Minitest::Test
|
|
72
72
|
|
73
73
|
def test_with_options
|
74
74
|
Dir.mktmpdir do |d|
|
75
|
-
|
76
|
-
|
77
|
-
File.join(d, 'something.yml'),
|
75
|
+
save_it(File.join(d, 'foo/foo.rb'), '$fb.insert.foo = $options.bar')
|
76
|
+
save_it(
|
77
|
+
File.join(d, 'foo/something.yml'),
|
78
78
|
<<-YAML
|
79
79
|
input: []
|
80
80
|
options:
|
@@ -90,13 +90,10 @@ class TestTest < Minitest::Test
|
|
90
90
|
|
91
91
|
def test_with_before
|
92
92
|
Dir.mktmpdir do |d|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
File.write(File.join(d, 'judges/second/the-second.rb'), '$fb.insert.bar = 55')
|
98
|
-
File.write(
|
99
|
-
File.join(d, 'judges/second/something.yml'),
|
93
|
+
save_it(File.join(d, 'first/first.rb'), 'x = $fb.size; $fb.insert.foo = x')
|
94
|
+
save_it(File.join(d, 'second/second.rb'), '$fb.insert.bar = 55')
|
95
|
+
save_it(
|
96
|
+
File.join(d, 'second/something.yml'),
|
100
97
|
<<-YAML
|
101
98
|
input:
|
102
99
|
-
|
@@ -110,15 +107,15 @@ class TestTest < Minitest::Test
|
|
110
107
|
- /fb/f[bar=55]
|
111
108
|
YAML
|
112
109
|
)
|
113
|
-
Judges::Test.new(Loog::NULL).run({}, [
|
110
|
+
Judges::Test.new(Loog::NULL).run({}, [d])
|
114
111
|
end
|
115
112
|
end
|
116
113
|
|
117
114
|
def test_one_judge_negative
|
118
115
|
Dir.mktmpdir do |d|
|
119
|
-
|
120
|
-
|
121
|
-
File.join(d, 'x.yml'),
|
116
|
+
save_it(File.join(d, 'foo/foo.rb'), '')
|
117
|
+
save_it(
|
118
|
+
File.join(d, 'foo/x.yml'),
|
122
119
|
<<-YAML
|
123
120
|
input: []
|
124
121
|
expected:
|
@@ -130,4 +127,20 @@ class TestTest < Minitest::Test
|
|
130
127
|
end
|
131
128
|
end
|
132
129
|
end
|
130
|
+
|
131
|
+
def test_with_after_assertion
|
132
|
+
Dir.mktmpdir do |d|
|
133
|
+
save_it(File.join(d, 'foo/foo.rb'), '$fb.insert.foo = 42;')
|
134
|
+
save_it(File.join(d, 'foo/assert.rb'), 'raise unless $fb.size == 1')
|
135
|
+
save_it(
|
136
|
+
File.join(d, 'foo/x.yml'),
|
137
|
+
<<-YAML
|
138
|
+
input: []
|
139
|
+
after:
|
140
|
+
- assert.rb
|
141
|
+
YAML
|
142
|
+
)
|
143
|
+
Judges::Test.new(Loog::NULL).run({}, [d])
|
144
|
+
end
|
145
|
+
end
|
133
146
|
end
|
@@ -34,7 +34,7 @@ require_relative '../../lib/judges/commands/update'
|
|
34
34
|
class TestUpdate < Minitest::Test
|
35
35
|
def test_build_factbase_from_scratch
|
36
36
|
Dir.mktmpdir do |d|
|
37
|
-
|
37
|
+
save_it(File.join(d, 'foo/foo.rb'), 'return if $fb.size > 2; $fb.insert.zzz = $options.foo_bar + 1')
|
38
38
|
file = File.join(d, 'base.fb')
|
39
39
|
Judges::Update.new(Loog::NULL).run({ 'option' => ['foo_bar=42'] }, [d, file])
|
40
40
|
fb = Factbase.new
|
@@ -50,7 +50,7 @@ class TestUpdate < Minitest::Test
|
|
50
50
|
fb = Factbase.new
|
51
51
|
fb.insert.foo_bar = 42
|
52
52
|
File.binwrite(file, fb.export)
|
53
|
-
|
53
|
+
save_it(File.join(d, 'foo/foo.rb'), '$fb.insert.tt = 4')
|
54
54
|
Judges::Update.new(Loog::NULL).run({ 'max-cycles' => 1 }, [d, file])
|
55
55
|
fb = Factbase.new
|
56
56
|
fb.import(File.binread(file))
|
@@ -62,7 +62,7 @@ class TestUpdate < Minitest::Test
|
|
62
62
|
|
63
63
|
def test_update_with_error
|
64
64
|
Dir.mktmpdir do |d|
|
65
|
-
|
65
|
+
save_it(File.join(d, 'foo/foo.rb'), 'this$is$a$broken$Ruby$script')
|
66
66
|
file = File.join(d, 'base.fb')
|
67
67
|
Judges::Update.new(Loog::NULL).run({ 'quiet' => true, 'max-cycles' => 2 }, [d, file])
|
68
68
|
end
|
@@ -71,7 +71,7 @@ class TestUpdate < Minitest::Test
|
|
71
71
|
def test_update_with_error_no_quiet
|
72
72
|
assert_raises do
|
73
73
|
Dir.mktmpdir do |d|
|
74
|
-
|
74
|
+
save_it(File.join(d, 'foo/foo.rb'), 'a < 1')
|
75
75
|
file = File.join(d, 'base.fb')
|
76
76
|
Judges::Update.new(Loog::NULL).run({ 'quiet' => false }, [d, file])
|
77
77
|
end
|
@@ -80,7 +80,7 @@ class TestUpdate < Minitest::Test
|
|
80
80
|
|
81
81
|
def test_update_with_error_and_summary
|
82
82
|
Dir.mktmpdir do |d|
|
83
|
-
|
83
|
+
save_it(File.join(d, 'foo/foo.rb'), 'this$is$a$broken$Ruby$script')
|
84
84
|
file = File.join(d, 'base.fb')
|
85
85
|
2.times do
|
86
86
|
Judges::Update.new(Loog::NULL).run(
|
data/test/test__helper.rb
CHANGED
@@ -32,3 +32,11 @@ require 'minitest/autorun'
|
|
32
32
|
|
33
33
|
require 'minitest/reporters'
|
34
34
|
Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new]
|
35
|
+
|
36
|
+
class Minitest::Test
|
37
|
+
def save_it(file, content)
|
38
|
+
require 'fileutils'
|
39
|
+
FileUtils.mkdir_p(File.dirname(file))
|
40
|
+
File.binwrite(file, content)
|
41
|
+
end
|
42
|
+
end
|
data/test/test_judge.rb
CHANGED
@@ -34,7 +34,7 @@ require_relative '../lib/judges/judge'
|
|
34
34
|
class TestJudge < Minitest::Test
|
35
35
|
def test_basic_run
|
36
36
|
Dir.mktmpdir do |d|
|
37
|
-
|
37
|
+
save_it(File.join(d, "#{File.basename(d)}.rb"), '$fb.insert')
|
38
38
|
judge = Judges::Judge.new(d, nil, Loog::NULL)
|
39
39
|
fb = Factbase.new
|
40
40
|
judge.run(fb, {}, {}, {})
|
@@ -44,7 +44,7 @@ class TestJudge < Minitest::Test
|
|
44
44
|
|
45
45
|
def test_run_isolated
|
46
46
|
Dir.mktmpdir do |d|
|
47
|
-
|
47
|
+
save_it(File.join(d, "#{File.basename(d)}.rb"), '$fb.insert')
|
48
48
|
judge = Judges::Judge.new(d, nil, Loog::NULL)
|
49
49
|
fb1 = Factbase.new
|
50
50
|
judge.run(fb1, {}, {}, {})
|
@@ -57,8 +57,8 @@ class TestJudge < Minitest::Test
|
|
57
57
|
|
58
58
|
def test_passes_local_vars_between_tests
|
59
59
|
Dir.mktmpdir do |d|
|
60
|
-
|
61
|
-
File.join(d,
|
60
|
+
save_it(
|
61
|
+
File.join(d, "#{File.basename(d)}.rb"),
|
62
62
|
'
|
63
63
|
$local[:foo] = 42 if $local[:foo].nil?
|
64
64
|
$local[:foo] = $local[:foo] + 1
|
@@ -77,8 +77,7 @@ class TestJudge < Minitest::Test
|
|
77
77
|
Dir.mktmpdir do |d|
|
78
78
|
j = 'this_is_it'
|
79
79
|
dir = File.join(d, j)
|
80
|
-
|
81
|
-
File.write(File.join(dir, 'foo.rb'), '$loog.info("judge=" + $judge)')
|
80
|
+
save_it(File.join(dir, "#{j}.rb"), '$loog.info("judge=" + $judge)')
|
82
81
|
log = Loog::Buffer.new
|
83
82
|
Judges::Judge.new(dir, nil, log).run(Factbase.new, {}, {}, {})
|
84
83
|
assert(log.to_s.include?("judge=#{j}"))
|
@@ -89,8 +88,7 @@ class TestJudge < Minitest::Test
|
|
89
88
|
assert_raises do
|
90
89
|
Dir.mktmpdir do |d|
|
91
90
|
dir = File.join(d, 'judges')
|
92
|
-
|
93
|
-
File.write(File.join(dir, 'x.rb'), 'this$is$broken$syntax')
|
91
|
+
save_it(File.join(dir, "#{File.basename(d)}.rb"), 'this$is$broken$syntax')
|
94
92
|
judge = Judges::Judge.new(dir, lib, Loog::NULL)
|
95
93
|
judge.run(Factbase.new, {}, {}, {})
|
96
94
|
end
|
@@ -101,8 +99,7 @@ class TestJudge < Minitest::Test
|
|
101
99
|
assert_raises do
|
102
100
|
Dir.mktmpdir do |d|
|
103
101
|
dir = File.join(d, 'judges')
|
104
|
-
|
105
|
-
File.write(File.join(dir, 'x.rb'), 'a < 1')
|
102
|
+
save_it(File.join(dir, "#{File.basename(d)}.rb"), 'a < 1')
|
106
103
|
judge = Judges::Judge.new(dir, lib, Loog::NULL)
|
107
104
|
judge.run(Factbase.new, {}, {}, {})
|
108
105
|
end
|
data/test/test_judges.rb
CHANGED
@@ -33,8 +33,9 @@ require_relative '../lib/judges/judges'
|
|
33
33
|
class TestJudges < Minitest::Test
|
34
34
|
def test_basic
|
35
35
|
Dir.mktmpdir do |d|
|
36
|
-
File.
|
37
|
-
|
36
|
+
dir = File.join(d, 'foo')
|
37
|
+
save_it(File.join(dir, 'foo.rb'), 'hey')
|
38
|
+
save_it(File.join(dir, 'something.yml'), "---\nfoo: 42")
|
38
39
|
found = 0
|
39
40
|
Judges::Judges.new(d, nil, Loog::NULL).each do |p|
|
40
41
|
assert_equal('foo.rb', p.script)
|
@@ -47,11 +48,32 @@ class TestJudges < Minitest::Test
|
|
47
48
|
|
48
49
|
def test_get_one
|
49
50
|
Dir.mktmpdir do |d|
|
50
|
-
|
51
|
-
FileUtils.mkdir_p(File.dirname(f))
|
52
|
-
File.write(f, 'hey')
|
51
|
+
save_it(File.join(d, 'boo/boo.rb'), 'hey')
|
53
52
|
j = Judges::Judges.new(d, nil, Loog::NULL).get('boo')
|
54
|
-
assert_equal('
|
53
|
+
assert_equal('boo.rb', j.script)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_list_only_direct_subdirs
|
58
|
+
Dir.mktmpdir do |d|
|
59
|
+
save_it(File.join(d, 'first/first.rb'), '')
|
60
|
+
save_it(File.join(d, 'second/second.rb'), '')
|
61
|
+
save_it(File.join(d, 'second/just-file.rb'), '')
|
62
|
+
save_it(File.join(d, 'wrong.rb'), '')
|
63
|
+
save_it(File.join(d, 'another/wrong/wrong.rb'), '')
|
64
|
+
save_it(File.join(d, 'bad/hello.rb'), '')
|
65
|
+
list = Judges::Judges.new(d, nil, Loog::NULL).each.to_a
|
66
|
+
assert_equal(2, list.size)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_list_with_empty_dir
|
71
|
+
Dir.mktmpdir do |d|
|
72
|
+
save_it(File.join(d, 'wrong.rb'), '')
|
73
|
+
save_it(File.join(d, 'another/wrong/wrong.rb'), '')
|
74
|
+
save_it(File.join(d, 'bad/hello.rb'), '')
|
75
|
+
list = Judges::Judges.new(d, nil, Loog::NULL).each.to_a
|
76
|
+
assert(list.empty?)
|
55
77
|
end
|
56
78
|
end
|
57
79
|
end
|
data/test/test_options.rb
CHANGED
@@ -81,7 +81,7 @@ class TestOptions < Minitest::Test
|
|
81
81
|
opts = Judges::Options.new('foo' => 44, 'bar' => 'long-string-maybe-secret')
|
82
82
|
s = opts.to_s
|
83
83
|
assert(s.include?('FOO → "44"'), s)
|
84
|
-
assert(s.include?('"long
|
84
|
+
assert(s.include?('"long****************cret"'), s)
|
85
85
|
end
|
86
86
|
|
87
87
|
def test_merge
|
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.
|
4
|
+
version: 0.21.0
|
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-07-
|
11
|
+
date: 2024-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|