polytrix 0.1.0.pre → 0.1.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/.gitignore +1 -0
- data/.rubocop.yml +7 -2
- data/.travis.yml +2 -1
- data/Gemfile +1 -0
- data/README.md +190 -98
- data/Rakefile +8 -6
- data/bin/polytrix +2 -1
- data/docs/samples/code2doc/java/HelloWorld.md +4 -0
- data/docs/samples/code2doc/java/Quine.md +2 -0
- data/docs/samples/code2doc/python/hello_world.md +2 -0
- data/docs/samples/code2doc/python/quine.md +2 -0
- data/docs/samples/code2doc/ruby/hello_world.md +4 -0
- data/features/bootstrapping.feature +36 -0
- data/features/cloning.feature +34 -0
- data/features/execution.feature +2 -16
- data/features/fixtures/configs/empty.yml +12 -1
- data/features/fixtures/configs/hello_world.yml +11 -1
- data/features/fixtures/spec/polytrix_spec.rb +1 -4
- data/features/solo.feature +12 -0
- data/features/states.feature +40 -0
- data/features/step_definitions/sdk_steps.rb +11 -1
- data/features/support/env.rb +2 -1
- data/lib/polytrix/challenge.rb +211 -13
- data/lib/polytrix/challenge_result.rb +9 -0
- data/lib/polytrix/challenge_runner.rb +4 -11
- data/lib/polytrix/challenges.rb +16 -0
- data/lib/polytrix/cli/report.rb +0 -4
- data/lib/polytrix/cli.rb +229 -137
- data/lib/polytrix/color.rb +40 -0
- data/lib/polytrix/command/action.rb +26 -0
- data/lib/polytrix/command/list.rb +53 -0
- data/lib/polytrix/command/rundoc.rb +27 -0
- data/lib/polytrix/command/test.rb +24 -0
- data/lib/polytrix/command.rb +209 -0
- data/lib/polytrix/configuration.rb +30 -40
- data/lib/polytrix/core/file_system_helper.rb +2 -5
- data/lib/polytrix/core/hashie.rb +14 -0
- data/lib/polytrix/core/implementor.rb +52 -12
- data/lib/polytrix/core/manifest_section.rb +4 -0
- data/lib/polytrix/core/string_helpers.rb +15 -0
- data/lib/polytrix/documentation/helpers/code_helper.rb +3 -1
- data/lib/polytrix/error.rb +209 -0
- data/lib/polytrix/logger.rb +365 -8
- data/lib/polytrix/logging.rb +34 -0
- data/lib/polytrix/manifest.rb +40 -26
- data/lib/polytrix/result.rb +1 -0
- data/lib/polytrix/rspec.rb +7 -5
- data/lib/polytrix/runners/buff_shellout_executor.rb +19 -0
- data/lib/polytrix/runners/executor.rb +32 -0
- data/lib/polytrix/runners/mixlib_shellout_executor.rb +83 -0
- data/lib/polytrix/state_file.rb +60 -0
- data/lib/polytrix/util.rb +155 -0
- data/lib/polytrix/validation.rb +1 -1
- data/lib/polytrix/validator.rb +9 -5
- data/lib/polytrix/version.rb +1 -1
- data/lib/polytrix.rb +55 -33
- data/polytrix.gemspec +4 -2
- data/polytrix.rb +0 -5
- data/{polytrix_tests.yml → polytrix.yml} +5 -0
- data/samples/default_bootstrap.rb +0 -7
- data/samples/polytrix.rb +0 -9
- data/samples/{polytrix_tests.yml → polytrix.yml} +11 -0
- data/samples/polytrix_cli.sh +1 -1
- data/spec/fabricators/implementor_fabricator.rb +20 -0
- data/spec/fabricators/manifest_fabricator.rb +4 -1
- data/spec/fixtures/{polytrix_tests.yml → polytrix.yml} +10 -0
- data/spec/polytrix/challenge_runner_spec.rb +3 -2
- data/spec/polytrix/challenge_spec.rb +5 -4
- data/spec/polytrix/cli_spec.rb +23 -26
- data/spec/polytrix/configuration_spec.rb +4 -43
- data/spec/polytrix/documentation/helpers/code_helper_spec.rb +1 -1
- data/spec/polytrix/documentation_generator_spec.rb +2 -0
- data/spec/polytrix/implementor_spec.rb +44 -2
- data/spec/polytrix/manifest_spec.rb +7 -4
- data/spec/polytrix_spec.rb +9 -11
- data/spec/thor_spy.rb +2 -0
- metadata +66 -16
- data/features/fixtures/spec/polytrix_merge.rb +0 -5
- data/features/reporting.feature +0 -140
- data/lib/polytrix/executor.rb +0 -89
- data/samples/sdks/custom/polytrix.yml +0 -2
@@ -2,53 +2,14 @@ module Polytrix
|
|
2
2
|
describe Configuration do
|
3
3
|
subject(:configuration) { Configuration.new }
|
4
4
|
|
5
|
-
|
6
|
-
expect(configuration.logger).to be_kind_of ::Logger
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '.test_manifest' do
|
5
|
+
describe '.manifest' do
|
10
6
|
it 'parses the YAML file and registers the manifest' do
|
11
|
-
original_manifest = configuration.
|
12
|
-
configuration.
|
13
|
-
new_manifest = configuration.
|
7
|
+
original_manifest = configuration.manifest
|
8
|
+
configuration.manifest = 'spec/fixtures/polytrix.yml'
|
9
|
+
new_manifest = configuration.manifest
|
14
10
|
expect(original_manifest).to_not eq(new_manifest)
|
15
11
|
expect(new_manifest).to(be_an_instance_of(Polytrix::Manifest))
|
16
12
|
end
|
17
13
|
end
|
18
|
-
|
19
|
-
describe '.implementor' do
|
20
|
-
context 'argument is a Hash' do
|
21
|
-
it 'creates and registers Implementors' do
|
22
|
-
# This'd be a bit nicer w/ rspec 3...
|
23
|
-
expect do
|
24
|
-
configuration.implementor name: 'test', basedir: '.'
|
25
|
-
end.to change {
|
26
|
-
configuration.implementors
|
27
|
-
}.from(be_empty).to be_an_instance_of(Array)
|
28
|
-
|
29
|
-
expect(configuration.implementors.first).to be_an_instance_of Polytrix::Implementor
|
30
|
-
expect(configuration.implementors.first.name).to eq('test')
|
31
|
-
end
|
32
|
-
end
|
33
|
-
context 'argument is a String' do
|
34
|
-
context 'directory exists' do
|
35
|
-
context 'polytrix.yml does not exist' do
|
36
|
-
it 'builds an implementor with default settings' do
|
37
|
-
implementor = configuration.implementor('samples/sdks/ruby')
|
38
|
-
expect(implementor).to be_an_instance_of(Polytrix::Implementor)
|
39
|
-
expect(implementor.name).to eq('ruby') # directory name
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'polytrix_tests.yml exists' do
|
44
|
-
it 'loads settings from polytrix.yml' do
|
45
|
-
implementor = configuration.implementor('samples/sdks/custom')
|
46
|
-
expect(implementor).to be_an_instance_of(Polytrix::Implementor)
|
47
|
-
expect(implementor.name).to eq('My Custom project')
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
14
|
end
|
54
15
|
end
|
@@ -78,7 +78,7 @@ module Polytrix
|
|
78
78
|
|
79
79
|
describe '#code_block' do
|
80
80
|
it 'generates markdown code blocks by default' do
|
81
|
-
expected = "```ruby\n" + source + "\n```\n"
|
81
|
+
expected = "\n```ruby\n" + source + "\n```\n\n"
|
82
82
|
code_block = challenge.code_block(challenge.source, 'ruby')
|
83
83
|
expect(code_block).to eq(expected)
|
84
84
|
end
|
@@ -2,20 +2,62 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Polytrix
|
4
4
|
describe Implementor do
|
5
|
-
subject(:implementor) { described_class.new(name: 'test', language: 'ruby', basedir:
|
5
|
+
subject(:implementor) { described_class.new(name: 'test', language: 'ruby', basedir: expected_sdk_dir) }
|
6
|
+
let(:expected_sdk_dir) { 'samples/sdks/foo' }
|
6
7
|
let(:executor) { double('executor') }
|
8
|
+
let(:expected_sdk_path) { Pathname.new(File.absolute_path(expected_sdk_dir)) }
|
7
9
|
|
8
10
|
before do
|
9
11
|
subject.executor = executor
|
10
12
|
end
|
11
13
|
|
12
14
|
describe '#bootstrap' do
|
15
|
+
# Need an implementor that's already cloned
|
16
|
+
let(:expected_sdk_dir) { 'samples/sdks/ruby' }
|
17
|
+
|
13
18
|
it 'executes script/bootstrap' do
|
14
|
-
expect(executor).to receive(:execute).with('./scripts/bootstrap', cwd:
|
19
|
+
expect(executor).to receive(:execute).with('./scripts/bootstrap', cwd: expected_sdk_path, prefix: 'test')
|
15
20
|
implementor.bootstrap
|
16
21
|
end
|
17
22
|
end
|
18
23
|
|
24
|
+
describe '#clone' do
|
25
|
+
it 'does nothing if there is no clone option' do
|
26
|
+
expect(executor).to_not receive(:execute)
|
27
|
+
implementor.clone
|
28
|
+
|
29
|
+
implementor.clone
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with git as a simple string' do
|
33
|
+
it 'clones the repo specified by the string' do
|
34
|
+
implementor.git = 'git@github.com/foo/bar'
|
35
|
+
expect(executor).to receive(:execute).with("git clone git@github.com/foo/bar -b master #{expected_sdk_path}", {})
|
36
|
+
implementor.clone
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'with git as a hash' do
|
41
|
+
it 'clones the repo specified by the repo parameter' do
|
42
|
+
implementor.git = { repo: 'git@github.com/foo/bar' }
|
43
|
+
expect(executor).to receive(:execute).with("git clone git@github.com/foo/bar -b master #{expected_sdk_path}", {})
|
44
|
+
implementor.clone
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'clones the repo on the branch specified by the brach parameter' do
|
48
|
+
implementor.git = { repo: 'git@github.com/foo/bar', branch: 'quuz' }
|
49
|
+
expect(executor).to receive(:execute).with("git clone git@github.com/foo/bar -b quuz #{expected_sdk_path}", {})
|
50
|
+
implementor.clone
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'clones the repo to the location specified by the to parameter' do
|
54
|
+
implementor.git = { repo: 'git@github.com/foo/bar', to: 'sdks/foo' }
|
55
|
+
expect(executor).to receive(:execute).with('git clone git@github.com/foo/bar -b master sdks/foo', {})
|
56
|
+
implementor.clone
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
19
61
|
describe '#build_challenge' do
|
20
62
|
subject(:implementor) { Polytrix::Implementor.new name: 'some_sdk', basedir: File.absolute_path('spec/fixtures') }
|
21
63
|
let(:challenge) { Fabricate(:challenge, name: 'factorial', vars: {}) }
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Polytrix
|
2
2
|
describe Manifest do
|
3
3
|
describe '#from_yaml' do
|
4
|
-
subject(:manifest) { described_class.from_yaml 'spec/fixtures/
|
4
|
+
subject(:manifest) { described_class.from_yaml 'spec/fixtures/polytrix.yml' }
|
5
5
|
|
6
6
|
it 'initializes a manifest' do
|
7
7
|
expect(manifest).to be_an_instance_of Polytrix::Manifest
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'processes ERB' do
|
11
|
-
expect(manifest.global_env
|
11
|
+
expect(manifest.global_env.LOCALE).to eq(ENV['LANG'])
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'parses global_env' do
|
@@ -16,12 +16,15 @@ module Polytrix
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'parses suites' do
|
19
|
-
expect(manifest.suites).to be_an_instance_of
|
19
|
+
expect(manifest.suites).to be_an_instance_of Hashie::Hash
|
20
|
+
manifest.suites.each_value do | suite |
|
21
|
+
expect(suite).to be_an_instance_of Polytrix::Manifest::Suite
|
22
|
+
end
|
20
23
|
end
|
21
24
|
|
22
25
|
describe '#find_suite' do
|
23
26
|
before(:each) do
|
24
|
-
Polytrix.configuration.
|
27
|
+
Polytrix.configuration.manifest = 'samples/polytrix.yml'
|
25
28
|
end
|
26
29
|
it 'returns nil if no suite matches' do
|
27
30
|
suite = subject.find_suite('none')
|
data/spec/polytrix_spec.rb
CHANGED
@@ -2,23 +2,21 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Polytrix do
|
4
4
|
describe '.find_implementor' do
|
5
|
+
before do
|
6
|
+
Polytrix.configuration.manifest = 'samples/polytrix.yml'
|
7
|
+
end
|
8
|
+
|
5
9
|
it 'returns nil if no implementor is found for the file' do
|
6
10
|
tempfile = Tempfile.new(['foo', '.java'])
|
7
11
|
expect(described_class.find_implementor tempfile.path).to be_nil
|
8
12
|
end
|
9
13
|
|
10
|
-
it 'finds implementors from polytrix.yml in parent directories' do
|
11
|
-
sample_file = 'samples/sdks/custom/challenges/HelloWorld.custom'
|
12
|
-
implementor = described_class.find_implementor sample_file
|
13
|
-
expect(implementor).to be_an_instance_of Polytrix::Implementor
|
14
|
-
expect(implementor.name).to eq('My Custom project')
|
15
|
-
end
|
16
|
-
|
17
14
|
it 'finds implementors from by matching basedir to an already loaded implementor' do
|
18
|
-
Polytrix.
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
Polytrix.manifest.implementors['java'] = Fabricate(:implementor, name: 'java', basedir: 'samples/sdks/java')
|
16
|
+
# Polytrix.configuration.implementor(
|
17
|
+
# name: 'java',
|
18
|
+
# basedir: 'samples/sdks/java'
|
19
|
+
# )
|
22
20
|
|
23
21
|
sample_file = 'samples/sdks/java/challenges/HelloWorld.java'
|
24
22
|
implementor = described_class.find_implementor sample_file
|
data/spec/thor_spy.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polytrix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Lincoln
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.19'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: logging
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: mixlib-shellout
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: buff-shell_out
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: middleware
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +100,14 @@ dependencies:
|
|
72
100
|
requirements:
|
73
101
|
- - "~>"
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
103
|
+
version: '3.0'
|
76
104
|
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
110
|
+
version: '3.0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: padrino-helpers
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,17 +218,21 @@ files:
|
|
190
218
|
- docs/samples/code2doc/python/hello_world.md
|
191
219
|
- docs/samples/code2doc/python/quine.md
|
192
220
|
- docs/samples/code2doc/ruby/hello_world.md
|
221
|
+
- features/bootstrapping.feature
|
222
|
+
- features/cloning.feature
|
193
223
|
- features/execution.feature
|
194
224
|
- features/fixtures/configs/empty.yml
|
195
225
|
- features/fixtures/configs/hello_world.yml
|
196
|
-
- features/fixtures/spec/polytrix_merge.rb
|
197
226
|
- features/fixtures/spec/polytrix_spec.rb
|
198
|
-
- features/
|
227
|
+
- features/solo.feature
|
228
|
+
- features/states.feature
|
199
229
|
- features/step_definitions/sdk_steps.rb
|
200
230
|
- features/support/env.rb
|
201
231
|
- lib/polytrix.rb
|
202
232
|
- lib/polytrix/challenge.rb
|
233
|
+
- lib/polytrix/challenge_result.rb
|
203
234
|
- lib/polytrix/challenge_runner.rb
|
235
|
+
- lib/polytrix/challenges.rb
|
204
236
|
- lib/polytrix/cli.rb
|
205
237
|
- lib/polytrix/cli/add.rb
|
206
238
|
- lib/polytrix/cli/report.rb
|
@@ -208,26 +240,41 @@ files:
|
|
208
240
|
- lib/polytrix/cli/reports/json_reporter.rb
|
209
241
|
- lib/polytrix/cli/reports/markdown_reporter.rb
|
210
242
|
- lib/polytrix/cli/reports/yaml_reporter.rb
|
243
|
+
- lib/polytrix/color.rb
|
244
|
+
- lib/polytrix/command.rb
|
245
|
+
- lib/polytrix/command/action.rb
|
246
|
+
- lib/polytrix/command/list.rb
|
247
|
+
- lib/polytrix/command/rundoc.rb
|
248
|
+
- lib/polytrix/command/test.rb
|
211
249
|
- lib/polytrix/configuration.rb
|
212
250
|
- lib/polytrix/core/file_system_helper.rb
|
251
|
+
- lib/polytrix/core/hashie.rb
|
213
252
|
- lib/polytrix/core/implementor.rb
|
253
|
+
- lib/polytrix/core/manifest_section.rb
|
254
|
+
- lib/polytrix/core/string_helpers.rb
|
214
255
|
- lib/polytrix/documentation/code_segmenter.rb
|
215
256
|
- lib/polytrix/documentation/comment_styles.rb
|
216
257
|
- lib/polytrix/documentation/helpers/code_helper.rb
|
217
258
|
- lib/polytrix/documentation/view_helper.rb
|
218
259
|
- lib/polytrix/documentation_generator.rb
|
219
|
-
- lib/polytrix/
|
260
|
+
- lib/polytrix/error.rb
|
220
261
|
- lib/polytrix/logger.rb
|
262
|
+
- lib/polytrix/logging.rb
|
221
263
|
- lib/polytrix/manifest.rb
|
222
264
|
- lib/polytrix/result.rb
|
223
265
|
- lib/polytrix/rspec.rb
|
224
266
|
- lib/polytrix/rspec/documentation_formatter.rb
|
225
267
|
- lib/polytrix/rspec/yaml_report.rb
|
268
|
+
- lib/polytrix/runners/buff_shellout_executor.rb
|
269
|
+
- lib/polytrix/runners/executor.rb
|
226
270
|
- lib/polytrix/runners/linux_challenge_runner.rb
|
227
271
|
- lib/polytrix/runners/middleware/change_directory.rb
|
228
272
|
- lib/polytrix/runners/middleware/feature_executor.rb
|
229
273
|
- lib/polytrix/runners/middleware/setup_env_vars.rb
|
274
|
+
- lib/polytrix/runners/mixlib_shellout_executor.rb
|
230
275
|
- lib/polytrix/runners/windows_challenge_runner.rb
|
276
|
+
- lib/polytrix/state_file.rb
|
277
|
+
- lib/polytrix/util.rb
|
231
278
|
- lib/polytrix/validation.rb
|
232
279
|
- lib/polytrix/validations.rb
|
233
280
|
- lib/polytrix/validator.rb
|
@@ -235,17 +282,16 @@ files:
|
|
235
282
|
- lib/polytrix/version.rb
|
236
283
|
- polytrix.gemspec
|
237
284
|
- polytrix.rb
|
238
|
-
-
|
285
|
+
- polytrix.yml
|
239
286
|
- resources/code_sample.tt
|
240
287
|
- samples/.gitignore
|
241
288
|
- samples/_markdown.md
|
242
289
|
- samples/default_bootstrap.rb
|
243
290
|
- samples/polytrix.rb
|
291
|
+
- samples/polytrix.yml
|
244
292
|
- samples/polytrix_cli.sh
|
245
|
-
- samples/polytrix_tests.yml
|
246
293
|
- samples/scripts/bootstrap
|
247
294
|
- samples/scripts/wrapper
|
248
|
-
- samples/sdks/custom/polytrix.yml
|
249
295
|
- samples/sdks/java/.gitignore
|
250
296
|
- samples/sdks/java/build.gradle
|
251
297
|
- samples/sdks/java/challenges/HelloWorld.java
|
@@ -260,10 +306,11 @@ files:
|
|
260
306
|
- scripts/bootstrap
|
261
307
|
- scripts/wrapper
|
262
308
|
- spec/fabricators/challenge_fabricator.rb
|
309
|
+
- spec/fabricators/implementor_fabricator.rb
|
263
310
|
- spec/fabricators/manifest_fabricator.rb
|
264
311
|
- spec/fabricators/validator_fabricator.rb
|
265
312
|
- spec/fixtures/factorial.py
|
266
|
-
- spec/fixtures/
|
313
|
+
- spec/fixtures/polytrix.yml
|
267
314
|
- spec/fixtures/src-doc/_scenario.md.erb
|
268
315
|
- spec/fixtures/src-doc/quine.md.erb
|
269
316
|
- spec/polytrix/challenge_runner_spec.rb
|
@@ -298,9 +345,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
298
345
|
version: '0'
|
299
346
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
300
347
|
requirements:
|
301
|
-
- - "
|
348
|
+
- - ">="
|
302
349
|
- !ruby/object:Gem::Version
|
303
|
-
version:
|
350
|
+
version: '0'
|
304
351
|
requirements: []
|
305
352
|
rubyforge_project:
|
306
353
|
rubygems_version: 2.2.0
|
@@ -308,19 +355,22 @@ signing_key:
|
|
308
355
|
specification_version: 4
|
309
356
|
summary: A polyglot test runner for sample code
|
310
357
|
test_files:
|
358
|
+
- features/bootstrapping.feature
|
359
|
+
- features/cloning.feature
|
311
360
|
- features/execution.feature
|
312
361
|
- features/fixtures/configs/empty.yml
|
313
362
|
- features/fixtures/configs/hello_world.yml
|
314
|
-
- features/fixtures/spec/polytrix_merge.rb
|
315
363
|
- features/fixtures/spec/polytrix_spec.rb
|
316
|
-
- features/
|
364
|
+
- features/solo.feature
|
365
|
+
- features/states.feature
|
317
366
|
- features/step_definitions/sdk_steps.rb
|
318
367
|
- features/support/env.rb
|
319
368
|
- spec/fabricators/challenge_fabricator.rb
|
369
|
+
- spec/fabricators/implementor_fabricator.rb
|
320
370
|
- spec/fabricators/manifest_fabricator.rb
|
321
371
|
- spec/fabricators/validator_fabricator.rb
|
322
372
|
- spec/fixtures/factorial.py
|
323
|
-
- spec/fixtures/
|
373
|
+
- spec/fixtures/polytrix.yml
|
324
374
|
- spec/fixtures/src-doc/_scenario.md.erb
|
325
375
|
- spec/fixtures/src-doc/quine.md.erb
|
326
376
|
- spec/polytrix/challenge_runner_spec.rb
|
data/features/reporting.feature
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
Feature: Reporting
|
2
|
-
|
3
|
-
Polytrix creates YAML reports on teach test run. The reports are designed to be "deep mergable", so that you can split a test suite into separate threads running in parallel, each generating a separate report, and then merge them all to create a combined report.
|
4
|
-
|
5
|
-
Scenario: A report for a single SDK
|
6
|
-
Given the ruby SDK
|
7
|
-
And the hello_world polytrix config
|
8
|
-
And the standard rspec setup
|
9
|
-
When I successfully run `bundle exec rspec -f Polytrix::RSpec::YAMLReport -o reports/polytrix.yaml`
|
10
|
-
Then the file "reports/polytrix.yaml" should contain exactly:
|
11
|
-
"""
|
12
|
-
---
|
13
|
-
global_env:
|
14
|
-
LOCALE: en_US.UTF-8
|
15
|
-
FAVORITE_NUMBER: '5'
|
16
|
-
suites:
|
17
|
-
Katas:
|
18
|
-
env:
|
19
|
-
NAME: Max
|
20
|
-
samples:
|
21
|
-
hello world:
|
22
|
-
ruby:
|
23
|
-
validations:
|
24
|
-
- validated_by: polytrix
|
25
|
-
result: passed
|
26
|
-
execution_result:
|
27
|
-
exitstatus: 0
|
28
|
-
stdout: |
|
29
|
-
Hello, world!
|
30
|
-
stderr: ''
|
31
|
-
source_file: challenges/hello_world.rb
|
32
|
-
|
33
|
-
"""
|
34
|
-
|
35
|
-
Scenario: A report for several SDKS
|
36
|
-
Given the ruby SDK
|
37
|
-
And the java SDK
|
38
|
-
And the python SDK
|
39
|
-
And the hello_world polytrix config
|
40
|
-
And the standard rspec setup
|
41
|
-
When I successfully run `bundle exec rspec -f Polytrix::RSpec::YAMLReport -o reports/polytrix.yaml`
|
42
|
-
Then the file "reports/polytrix.yaml" should contain exactly:
|
43
|
-
"""
|
44
|
-
---
|
45
|
-
global_env:
|
46
|
-
LOCALE: en_US.UTF-8
|
47
|
-
FAVORITE_NUMBER: '5'
|
48
|
-
suites:
|
49
|
-
Katas:
|
50
|
-
env:
|
51
|
-
NAME: Max
|
52
|
-
samples:
|
53
|
-
hello world:
|
54
|
-
java:
|
55
|
-
validations:
|
56
|
-
- validated_by: polytrix
|
57
|
-
result: passed
|
58
|
-
execution_result:
|
59
|
-
exitstatus: 0
|
60
|
-
stdout: |
|
61
|
-
Hello, world!
|
62
|
-
stderr: ''
|
63
|
-
source_file: challenges/HelloWorld.java
|
64
|
-
python:
|
65
|
-
validations:
|
66
|
-
- validated_by: polytrix
|
67
|
-
result: passed
|
68
|
-
execution_result:
|
69
|
-
exitstatus: 0
|
70
|
-
stdout: |
|
71
|
-
Hello, world!
|
72
|
-
stderr: ''
|
73
|
-
source_file: challenges/hello_world.py
|
74
|
-
ruby:
|
75
|
-
validations:
|
76
|
-
- validated_by: polytrix
|
77
|
-
result: passed
|
78
|
-
execution_result:
|
79
|
-
exitstatus: 0
|
80
|
-
stdout: |
|
81
|
-
Hello, world!
|
82
|
-
stderr: ''
|
83
|
-
source_file: challenges/hello_world.rb
|
84
|
-
|
85
|
-
"""
|
86
|
-
|
87
|
-
Scenario: Merging separate reports
|
88
|
-
Given the ruby SDK
|
89
|
-
And the java SDK
|
90
|
-
And the python SDK
|
91
|
-
And the hello_world polytrix config
|
92
|
-
And the standard rspec setup
|
93
|
-
When I successfully run `bundle exec rspec -f Polytrix::RSpec::YAMLReport -t ruby -o reports/polytrix-ruby.yaml`
|
94
|
-
When I successfully run `bundle exec rspec -f Polytrix::RSpec::YAMLReport -t java -o reports/polytrix-java.yaml`
|
95
|
-
When I successfully run `bundle exec rspec -f Polytrix::RSpec::YAMLReport -t python -o reports/polytrix-python.yaml`
|
96
|
-
And I successfully run `bundle exec ruby spec/polytrix_merge.rb reports/polytrix-java.yaml reports/polytrix-python.yaml reports/polytrix-ruby.yaml`
|
97
|
-
Then the file "reports/polytrix.yaml" should contain exactly:
|
98
|
-
"""
|
99
|
-
---
|
100
|
-
global_env:
|
101
|
-
LOCALE: en_US.UTF-8
|
102
|
-
FAVORITE_NUMBER: '5'
|
103
|
-
suites:
|
104
|
-
Katas:
|
105
|
-
env:
|
106
|
-
NAME: Max
|
107
|
-
samples:
|
108
|
-
hello world:
|
109
|
-
java:
|
110
|
-
validations:
|
111
|
-
- validated_by: polytrix
|
112
|
-
result: passed
|
113
|
-
execution_result:
|
114
|
-
exitstatus: 0
|
115
|
-
stdout: |
|
116
|
-
Hello, world!
|
117
|
-
stderr: ''
|
118
|
-
source_file: challenges/HelloWorld.java
|
119
|
-
python:
|
120
|
-
validations:
|
121
|
-
- validated_by: polytrix
|
122
|
-
result: passed
|
123
|
-
execution_result:
|
124
|
-
exitstatus: 0
|
125
|
-
stdout: |
|
126
|
-
Hello, world!
|
127
|
-
stderr: ''
|
128
|
-
source_file: challenges/hello_world.py
|
129
|
-
ruby:
|
130
|
-
validations:
|
131
|
-
- validated_by: polytrix
|
132
|
-
result: passed
|
133
|
-
execution_result:
|
134
|
-
exitstatus: 0
|
135
|
-
stdout: |
|
136
|
-
Hello, world!
|
137
|
-
stderr: ''
|
138
|
-
source_file: challenges/hello_world.rb
|
139
|
-
|
140
|
-
"""
|
data/lib/polytrix/executor.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'hashie/dash'
|
2
|
-
require 'thor'
|
3
|
-
|
4
|
-
module Polytrix
|
5
|
-
module Executor
|
6
|
-
class OutputDecorator
|
7
|
-
# Reserve :red, :black, :white
|
8
|
-
COLORS = [:green, :yellow, :blue, :magenta, :cyan]
|
9
|
-
|
10
|
-
def self.next_color
|
11
|
-
@next_color ||= 0
|
12
|
-
@next_color += 1
|
13
|
-
COLORS[@next_color % COLORS.size]
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize(real_io, prefix = nil)
|
17
|
-
@real_io = real_io
|
18
|
-
# @prefix = set_color(prefix, :cyan)
|
19
|
-
@prefix = "#{prefix}: " if prefix
|
20
|
-
@color = self.class.next_color
|
21
|
-
@thor_shell = Thor::Shell::Color.new
|
22
|
-
end
|
23
|
-
|
24
|
-
def puts(line)
|
25
|
-
line = line.gsub(/^/, @prefix) if @prefix
|
26
|
-
@real_io.puts @thor_shell.set_color(line, @color)
|
27
|
-
end
|
28
|
-
|
29
|
-
def <<(line)
|
30
|
-
line = line.gsub(/^/, @prefix) if @prefix
|
31
|
-
@real_io << @thor_shell.set_color(line, @color)
|
32
|
-
end
|
33
|
-
|
34
|
-
def method_missing(meth, *args, &block)
|
35
|
-
@real_io.send meth, *args, &block
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
class ExecutionError < StandardError
|
40
|
-
attr_accessor :execution_result
|
41
|
-
end
|
42
|
-
|
43
|
-
class ExecutionResult < Hashie::Dash
|
44
|
-
property :exitstatus, require: true
|
45
|
-
property :stdout, required: true
|
46
|
-
property :stderr, required: true
|
47
|
-
end
|
48
|
-
|
49
|
-
class InteractiveExecutor
|
50
|
-
def execute(command, opts)
|
51
|
-
system command
|
52
|
-
# FIXME: This needs to return execution result, if interactive remains supported
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
class ShellOutExecutor
|
57
|
-
def execute(command, opts)
|
58
|
-
prefix = opts.delete :prefix
|
59
|
-
shell = Mixlib::ShellOut.new(command, opts)
|
60
|
-
shell.live_stream = OutputDecorator.new($stdout, prefix) unless Polytrix.configuration.suppress_output
|
61
|
-
shell.run_command
|
62
|
-
execution_result = ExecutionResult.new exitstatus: shell.exitstatus, stdout: shell.stdout, stderr: shell.stderr
|
63
|
-
begin
|
64
|
-
shell.error!
|
65
|
-
rescue Mixlib::ShellOut::ShellCommandFailed => e
|
66
|
-
execution_error = ExecutionError.new(e)
|
67
|
-
execution_error.execution_result = execution_result
|
68
|
-
raise execution_error
|
69
|
-
end
|
70
|
-
|
71
|
-
execution_result
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
attr_writer :executor
|
76
|
-
|
77
|
-
def executor
|
78
|
-
@executor ||= if ENV['INTERACTIVE']
|
79
|
-
InteractiveExecutor.new
|
80
|
-
else
|
81
|
-
ShellOutExecutor.new
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def execute(command, opts = {})
|
86
|
-
executor.execute(command, opts)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|