zombie-chaser 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/zombie-chaser CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/local/bin/ruby
2
2
 
3
3
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. ui])
4
5
  require 'zombie_test_chaser'
6
+ require 'ui'
5
7
  require 'optparse'
6
8
 
7
9
  force = false
@@ -38,6 +40,18 @@ opts = OptionParser.new do |opts|
38
40
  puts "Setting timeout at #{timeout} seconds."
39
41
  end
40
42
 
43
+ opts.on("--width PIXELS", "Width of screen in pixels") do |width|
44
+ Window.width = Integer(width)
45
+ end
46
+
47
+ opts.on("--height PIXELS", "Height of screen in pixels") do |height|
48
+ Window.height = Integer(height)
49
+ end
50
+
51
+ opts.on("--console", "Use nethack-style text interface") do |opt|
52
+ World.interface_type = :console_interface
53
+ end
54
+
41
55
  opts.on("-r", "--random-seed SEED", "Random seed number (under development)") do |seed|
42
56
  srand(seed.to_i)
43
57
  end
data/lib/human.rb CHANGED
@@ -88,6 +88,11 @@ class Human < Actor
88
88
  def get_eaten
89
89
  @health = :dying unless dead?
90
90
  end
91
+
92
+ def test_suite_size
93
+ @test_handler.test_suite_size
94
+ end
95
+
91
96
  end
92
97
 
93
98
  class MockHuman < Human
@@ -116,6 +121,10 @@ class MockHuman < Human
116
121
  end
117
122
  notify_world
118
123
  end
124
+
125
+ def test_suite_size
126
+ @results.size
127
+ end
119
128
  end
120
129
 
121
130
  class MockZombieList
data/lib/interface.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  class Interface
2
2
  attr_writer :human, :current_zombie
3
+ end
4
+
5
+ class ConsoleInterface < Interface
3
6
 
4
7
  def initialize
5
8
  @representations = []
@@ -8,47 +11,53 @@ class Interface
8
11
 
9
12
  def current_representation
10
13
  if @current_zombie.nil?
11
- "." * human_successful_step_count + @human.current_symbol
12
- elsif human_successful_step_count > @current_zombie.successful_step_count
13
- "." * @current_zombie.successful_step_count + @current_zombie.current_symbol + "." * (@human.successful_step_count - @current_zombie.successful_step_count - 1) + @human.current_symbol
14
+ "." * human_position + @human.current_symbol
15
+ elsif human_position > zombie_position
16
+ "." * zombie_position + @current_zombie.current_symbol + "." * (human_position - zombie_position - 1) + @human.current_symbol
14
17
  else
15
- "." * @current_zombie.successful_step_count + @current_zombie.current_symbol
18
+ "." * zombie_position + @current_zombie.current_symbol
16
19
  end
17
20
  end
18
21
 
19
- def human_successful_step_count
20
- @human.successful_step_count
21
- end
22
-
23
22
  def something_happened
24
23
  @representations << current_representation
25
24
  display_representation(@representations.last)
26
25
  end
27
26
 
28
- end
29
-
30
- class NoInterface < Interface
31
- attr_reader :representations
32
-
33
27
  def display_representation(representation)
34
- #Do nothing
28
+ print "\r", representation
29
+ STDOUT.flush
30
+ sleep 0.2
35
31
  end
36
32
 
37
33
  def finish
38
- #Do nothing
34
+ puts
39
35
  end
36
+
37
+ def human_position
38
+ adjust_for_screen_width(@human.successful_step_count)
39
+ end
40
+
41
+ def zombie_position
42
+ adjust_for_screen_width(@current_zombie.successful_step_count)
43
+ end
44
+
45
+ def adjust_for_screen_width(step_count)
46
+ max_position = 78.0
47
+ (step_count * max_position / [@human.test_suite_size, max_position].max).round
48
+ end
49
+
40
50
  end
41
51
 
42
- class ConsoleInterface < Interface
52
+ class NoInterface < ConsoleInterface
53
+ attr_reader :representations
43
54
 
44
55
  def display_representation(representation)
45
- print "\r", representation
46
- STDOUT.flush
47
- sleep 0.2
56
+ #Do nothing
48
57
  end
49
58
 
50
59
  def finish
51
- puts
60
+ #Do nothing
52
61
  end
53
62
  end
54
63
 
@@ -2,7 +2,7 @@ require "test/unit/collector/objectspace"
2
2
  require "test/unit/ui/testrunnermediator"
3
3
 
4
4
  class TestUnitHandler
5
- attr_reader :results
5
+ attr_reader :results, :test_suite_size
6
6
 
7
7
  def initialize(test_pattern, actor)
8
8
  @actor = actor
@@ -14,6 +14,7 @@ class TestUnitHandler
14
14
  obj_sp = Test::Unit::Collector::ObjectSpace.new
15
15
  test_suite = Test::Unit::TestSuite.new("Mutation slayer test suite")
16
16
  test_suite << obj_sp.collect
17
+ @test_suite_size = test_suite.size
17
18
  @test_runner_mediator = Test::Unit::UI::TestRunnerMediator.new(test_suite)
18
19
  @test_runner_mediator.add_listener(Test::Unit::TestResult::FAULT) {test_failed}
19
20
  @test_runner_mediator.add_listener(Test::Unit::TestCase::FINISHED) {test_finished}
data/lib/world.rb CHANGED
@@ -2,7 +2,12 @@ require "human"
2
2
  require "interface"
3
3
 
4
4
  class World
5
- attr_reader :representations, :interface
5
+ @interface_type = :gui_interface
6
+
7
+ def self.interface_type=(interface_type); @interface_type = interface_type end
8
+ def self.interface_type; @interface_type end
9
+
10
+ attr_reader :interface
6
11
 
7
12
  def self.new_using_results(human_results, zombies_results)
8
13
  world = new(:no_interface)
@@ -14,7 +19,7 @@ class World
14
19
  end
15
20
 
16
21
  def self.new_using_test_unit_handler(test_pattern)
17
- world = new(:gui_interface) #FIXME make this a choice between console and gui
22
+ world = new(self.interface_type)
18
23
  human = Human.new_using_test_unit_handler(test_pattern, world)
19
24
  zombie_list = MockZombieList.new_using_results([], world) #Fixme
20
25
  world.set_human(human)
@@ -15,7 +15,7 @@ end
15
15
 
16
16
  class ZombieTestChaser < Chaser
17
17
 
18
- VERSION = '0.0.2'
18
+ VERSION = '0.0.3'
19
19
 
20
20
  @@test_pattern = 'test/test_*.rb'
21
21
  @@tests_loaded = false
data/test/test_zombie.rb CHANGED
@@ -6,15 +6,15 @@ require "world"
6
6
  module TestHumanHelper
7
7
  def assert_that_representations_include(expected_representation, human_results, failure_message)
8
8
  world = create_world(human_results)
9
- interface = world.interface
10
- assert interface.representations.include?(expected_representation), failure_message + "Expected #{expected_representation}, got #{world.representations.inspect}"
9
+ actual_representations = world.interface.representations
10
+ assert actual_representations.include?(expected_representation), failure_message + "Expected #{expected_representation}, got #{actual_representations.inspect}"
11
11
  end
12
12
 
13
13
  def assert_that_representations_include_these_representations(expected_representations, human_results, zombies_results, failure_message)
14
14
  world = create_world(human_results, zombies_results)
15
- interface = world.interface
15
+ actual_representations = world.interface.representations
16
16
  expected_representations.each do |expected_representation|
17
- assert interface.representations.include?(expected_representation), failure_message + ": Expected #{expected_representation}, got #{world.representations.inspect}"
17
+ assert actual_representations.include?(expected_representation), failure_message + ": Expected #{expected_representation}, got #{actual_representations.inspect}"
18
18
  end
19
19
  end
20
20
 
@@ -93,3 +93,16 @@ class TestZombie < Test::Unit::TestCase
93
93
  end
94
94
 
95
95
  end
96
+
97
+ class TestConsoleInterface < Test::Unit::TestCase
98
+ include TestHumanHelper
99
+
100
+ def test_excessive_tests_dont_make_it_run_off_the_page
101
+ human_results = [:pass] * 500
102
+ zombies_results = [[:pass, :failure]]
103
+ expected_representations = ["Z" + "." * 77 + "@"] #Having 80 characters in a line doesn't work
104
+ failure_message = "Doesn't handle large number of tests properly"
105
+ assert_that_representations_include_these_representations(expected_representations, human_results, zombies_results, failure_message)
106
+ end
107
+
108
+ end
data/ui/ui.rb CHANGED
@@ -34,7 +34,9 @@ class Actor
34
34
  end
35
35
 
36
36
  def x
37
- @successful_step_count * 10 + 10
37
+ max_position = Window.width - 10
38
+ left_offset = 10
39
+ left_offset + ((@successful_step_count * 10) * (max_position - left_offset) / [test_suite_size * 10 + 10, (max_position - left_offset)].max).round
38
40
  end
39
41
 
40
42
  def y
@@ -52,12 +54,20 @@ class Actor
52
54
  end
53
55
 
54
56
  class Window < Gosu::Window
57
+ @width = 400
58
+ @height = 300
59
+
60
+ def self.width=(width); @width = width end
61
+ def self.width; @width end
62
+
63
+ def self.height=(height); @height = height end
64
+ def self.height; @height end
55
65
 
56
66
  attr_accessor :grid
57
67
  attr_writer :human, :current_zombie
58
68
 
59
69
  def initialize
60
- super(400, 300, false)
70
+ super(self.class.width, self.class.height, false)
61
71
 
62
72
  self.caption = 'Zombie-chaser'
63
73
  self.grid = 1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{zombie-chaser}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Grimm", "Ryan Davis", "Eric Hodel", "Kevin Clark"]
12
- s.date = %q{2009-12-08}
12
+ s.date = %q{2009-12-13}
13
13
  s.default_executable = %q{zombie-chaser}
14
14
  s.description = %q{A zombie-themed graphic(al) user interface for mutation testing}
15
15
  s.email = %q{andrew.j.grimm@gmail.com}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zombie-chaser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Grimm
@@ -12,7 +12,7 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2009-12-08 00:00:00 +11:00
15
+ date: 2009-12-13 00:00:00 +11:00
16
16
  default_executable: zombie-chaser
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency