Skip to content

Commit

Permalink
refactoring; created new ragger abstraction to convert output to red/…
Browse files Browse the repository at this point in the history
…amber/green
  • Loading branch information
JonJagger committed Dec 27, 2016
1 parent 91cdc04 commit 8854725
Show file tree
Hide file tree
Showing 12 changed files with 109 additions and 71 deletions.
3 changes: 1 addition & 2 deletions app/controllers/forker_controller.rb
Expand Up @@ -43,8 +43,7 @@ def fork
manifest['unit_test_framework'] = kata.unit_test_framework
else
# after
lambda_src = kata.red_amber_green(nil)
manifest['red_amber_green' ] = lambda_src
manifest['red_amber_green' ] = manifest['red_amber_green']
manifest['display_name' ] = kata.display_name
manifest['filename_extension' ] = kata.filename_extension
manifest['progress_regexs' ] = kata.progress_regexs
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/kata_controller.rb
Expand Up @@ -53,7 +53,7 @@ def run_tests
@test_colour = 'timed_out'
else
@output = stdout + stderr
@test_colour = kata.red_amber_green(@output)
@test_colour = ragger.colour(kata, @output)
end

@avatar.tested(files, time_now, @output, @test_colour)
Expand Down
1 change: 1 addition & 0 deletions app/lib/all.rb
Expand Up @@ -15,6 +15,7 @@
stub_runner

differ_service
ragger_service
runner_service
storer_service

Expand Down
5 changes: 3 additions & 2 deletions app/lib/output_colour.rb
@@ -1,6 +1,7 @@

# Used only for katas created before the start-point volume re-architecture.
# See app/models/katas.rb:colour()
# Used only for katas created before
# the start-point volume re-architecture.
# See app/lib/ragger.rb

module OutputColour # mix-in

Expand Down
29 changes: 29 additions & 0 deletions app/lib/ragger_service.rb
@@ -0,0 +1,29 @@
require_relative '../../lib/nearest_ancestors'

class RaggerService

def initialize(parent)
@parent = parent
end

attr_reader :parent

def colour(kata, output)
manifest = storer.kata_manifest(kata.id)
# before or after start-points re-architecture?
src = manifest['red_amber_green']
if src.nil? # before
unit_test_framework = manifest['unit_test_framework']
OutputColour.of(unit_test_framework, output)
else # after
colour = eval(src.join("\n"))
colour.call(output).to_s
end
end

private

include NearestAncestors
def storer; nearest_ancestors(:storer); end

end
22 changes: 7 additions & 15 deletions app/models/kata.rb
Expand Up @@ -96,18 +96,8 @@ def lowlight_filenames
full_manifest_property
end

def red_amber_green(output)
src = manifest['red_amber_green']
if output.nil?
return src # so lambda src can be saved when forking
end
# before or after start-points re-architecture?
if src.nil? # before
OutputColour.of(unit_test_framework, output)
else # after
colour = eval(src.join("\n"))
colour.call(output).to_s
end
def red_amber_green
full_manifest_property
end

private
Expand All @@ -134,14 +124,16 @@ def manifest
end

def earliest_light
Time.mktime(*avatars.active.map { |avatar| avatar.lights[0].time }.sort[0])
times = avatars.active.map { |avatar| avatar.lights[0].time }
Time.mktime(*times.sort[0])
end

include NearestAncestors
def languages; nearest_ancestors(:languages); end
def custom; nearest_ancestors(:custom); end
def storer; nearest_ancestors(:storer); end
def custom ; nearest_ancestors(:custom ); end

def runner; nearest_ancestors(:runner); end
def storer; nearest_ancestors(:storer); end

end

Expand Down
7 changes: 4 additions & 3 deletions lib/env_var.rb
Expand Up @@ -17,9 +17,10 @@ def cd_env_name(suffix)
cd_env_name('exercises_root') => "#{cd_home}/start_points/exercises",
cd_env_name('custom_root') => "#{cd_home}/start_points/custom",

cd_env_name('differ_class') => 'DifferService',
cd_env_name('storer_class') => 'StorerService',
cd_env_name('runner_class') => 'RunnerService',
cd_env_name('runner_class') => 'RunnerService', # src -> output
cd_env_name('ragger_class') => 'RaggerService', # output -> traffic-light
cd_env_name('storer_class') => 'StorerService', # store src,output,traffic-light
cd_env_name('differ_class') => 'DifferService', # (src,src) -> diff

cd_env_name('disk_class') => 'HostDisk',
cd_env_name('log_class') => 'StdoutLog',
Expand Down
1 change: 1 addition & 0 deletions lib/externals.rb
Expand Up @@ -8,6 +8,7 @@ def log ; @log ||= external; end
def shell; @shell ||= external; end

def differ; @differ ||= external; end
def ragger; @ragger ||= external; end
def runner; @runner ||= external; end
def storer; @storer ||= external; end

Expand Down
9 changes: 6 additions & 3 deletions test/app_lib/delta_maker.rb
Expand Up @@ -60,12 +60,12 @@ def run_test_no_stub(at = time_now)
def run_test(at = time_now)
visible_files = now
delta = make_delta(@was, @now)
if @stubbed.nil? && nearest_ancestors(:runner, @avatar).class.name == 'StubRunner'
if @stubbed.nil? && runner.class.name == 'StubRunner'
stub_colour(:red)
end
stdout,stderr,status = @avatar.test(delta, visible_files, max_seconds)
output = stdout + stderr
colour = @avatar.kata.red_amber_green(output)
colour = ragger.colour(@avatar.kata, output)
@avatar.tested(visible_files, at, output, colour)
[delta, visible_files, output]
end
Expand All @@ -88,7 +88,6 @@ def max_seconds

private

include NearestAncestors
include TimeNow
include UnitTestFrameworkLookup

Expand All @@ -100,4 +99,8 @@ def refute(&pred)
fail RuntimeError.new('DeltaMaker.refute') if pred.call
end

include NearestAncestors
def runner; nearest_ancestors(:runner, @avatar); end
def ragger; nearest_ancestors(:ragger, @avatar); end

end
49 changes: 49 additions & 0 deletions test/app_lib/ragger_service_test.rb
@@ -0,0 +1,49 @@
require_relative './app_lib_test_base'

class RaggerServiceTest < AppLibTestBase

def setup
super
set_storer_class('FakeStorer')
set_runner_class('StubRunner')
end

# - - - - - - - - - - - - - - - - - - - - - - -

test '182F5B',
'before start-points volume re-architecture',
'colour of output is determined by OutputColour.of()' do
kata_id = '182F5B1E68'
manifest = make_manifest(kata_id)
manifest['unit_test_framework'] = 'junit'
storer.create_kata(manifest)
kata = katas[kata_id]
assert_equal 'red', ragger.colour(kata, red_output)
end

# - - - - - - - - - - - - - - - - - - - - - - -

test '1821E3',
'after start-points volume re-architecture',
'colour of output is determined by red-amber-green lambda' do
kata_id = '1821E3CB6F'
manifest = make_manifest(kata_id)
manifest['red_amber_green'] = [
"lambda { |output|",
" return :red if /^Tests run: (\\d*),(\\s)+Failures: (\\d*)/.match(output)",
" return :green if /^OK \\((\\d*) test/.match(output)",
" return :amber",
"}"
]
storer.create_kata(manifest)
kata = katas[kata_id]
assert_equal 'red', ragger.colour(kata, red_output)
end

private

def red_output
'Tests run: 1, Failures: 1'
end

end
4 changes: 2 additions & 2 deletions test/app_lib/stub_runner_test.rb
Expand Up @@ -59,7 +59,7 @@ def teardown
runner.stub_run_colour(lion, colour)
stdout,stderr,_ = runner.run(kata.image_name, kata.id, 'lion', _delta=nil, _files=nil, _image_name=nil)
output = stdout + stderr
assert_equal colour.to_s, kata.red_amber_green(output)
assert_equal colour.to_s, ragger.colour(kata, output)
end
end

Expand All @@ -71,7 +71,7 @@ def teardown
lion = kata.start_avatar(['lion'])
stdout,stderr,status = runner.run(kata.image_name, kata.id, 'lion', _delta=nil, _files=nil, _image_name=nil)
output = stdout + stderr
colour = kata.red_amber_green(output)
colour = ragger.colour(kata, output)
assert_equal 'amber', colour
end

Expand Down
48 changes: 5 additions & 43 deletions test/app_models/kata_test.rb
Expand Up @@ -200,8 +200,9 @@ def setup

#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

test '677446',
'red_amber_green(nil) returns the lamda source' do
test '677E1A',
'after start-points rearchitecture',
'unit_test_framework is nil, red_amber_green returns the lamda source' do
kata = make_kata
expected = [
"lambda { |output|",
Expand All @@ -210,47 +211,8 @@ def setup
" return :amber",
"}"
]
assert_equal expected, kata.red_amber_green(nil)
end

#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

test '6771FE',
'after start-points volume re-architecture, initial colour is red/amber/green' +
' determined by lambda held in kata manifest' do
hash = {
'language' => 'C#-Moq',
'exercise' => 'Fizz_Buzz',
}
kata = make_kata(hash)
json = storer.kata_manifest(kata.id)
refute_nil json['red_amber_green']
assert_equal 'red' , kata.red_amber_green('Errors and Failures:'), :red
assert_equal 'amber', kata.red_amber_green('sdfsdfsdf'), :amber
assert_equal 'green', kata.red_amber_green('Tests run: 3, Errors: 0, Failures: 0'), :green
end

#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

test '6777CC',
'before start-points volume re-architecture' +
' initial colour is red/amber/green' +
' determined by OutputColour.of()' do
hash = {
'language' => 'C#-Moq',
'exercise' => 'Fizz_Buzz',
}
kata = make_kata(hash)

json = storer.kata_manifest(kata.id)
json.delete('red_amber_green')
json['unit_test_framework'] = 'nunit'
storer.kata_dir(kata.id).write_json('manifest.json', json)

assert_nil kata.red_amber_green(nil)
assert_equal 'red' , kata.red_amber_green('Errors and Failures:'), :red
assert_equal 'amber', kata.red_amber_green('sdfsdfsdf'), :amber
assert_equal 'green', kata.red_amber_green('Tests run: 3, Errors: 0, Failures: 0'), :green
assert_nil kata.unit_test_framework
assert_equal expected, kata.red_amber_green
end

#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Expand Down

0 comments on commit 8854725

Please sign in to comment.