rubywarrior 0.1.2 → 0.2.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 +7 -0
- data/{CHANGELOG.rdoc → CHANGELOG.md} +21 -3
- data/Gemfile +10 -0
- data/Gemfile.lock +55 -0
- data/LICENSE +4 -4
- data/{README.rdoc → README.md} +115 -93
- data/Rakefile +4 -9
- data/bin/rubywarrior +1 -1
- data/features/step_definitions/common_steps.rb +2 -2
- data/features/step_definitions/interaction_steps.rb +7 -7
- data/features/support/env.rb +1 -1
- data/lib/ruby_warrior/game.rb +5 -3
- data/lib/ruby_warrior/level.rb +5 -1
- data/lib/ruby_warrior/player_generator.rb +3 -3
- data/lib/ruby_warrior/profile.rb +1 -1
- data/lib/ruby_warrior/tower.rb +1 -1
- data/rubywarrior.gemspec +16 -0
- data/spec/ruby_warrior/abilities/attack_spec.rb +10 -10
- data/spec/ruby_warrior/abilities/base_spec.rb +19 -19
- data/spec/ruby_warrior/abilities/bind_spec.rb +5 -5
- data/spec/ruby_warrior/abilities/direction_of_spec.rb +3 -3
- data/spec/ruby_warrior/abilities/direction_of_stairs_spec.rb +3 -3
- data/spec/ruby_warrior/abilities/distance_of_spec.rb +3 -3
- data/spec/ruby_warrior/abilities/explode_spec.rb +7 -7
- data/spec/ruby_warrior/abilities/feel_spec.rb +1 -1
- data/spec/ruby_warrior/abilities/form_spec.rb +14 -14
- data/spec/ruby_warrior/abilities/health_spec.rb +3 -3
- data/spec/ruby_warrior/abilities/listen_spec.rb +3 -3
- data/spec/ruby_warrior/abilities/look_spec.rb +3 -3
- data/spec/ruby_warrior/abilities/pivot_spec.rb +1 -1
- data/spec/ruby_warrior/abilities/rescue_spec.rb +8 -8
- data/spec/ruby_warrior/abilities/rest_spec.rb +7 -7
- data/spec/ruby_warrior/abilities/shoot_spec.rb +4 -4
- data/spec/ruby_warrior/abilities/throw_spec.rb +10 -10
- data/spec/ruby_warrior/abilities/walk_spec.rb +5 -5
- data/spec/ruby_warrior/core_additions_spec.rb +2 -2
- data/spec/ruby_warrior/floor_spec.rb +27 -27
- data/spec/ruby_warrior/game_spec.rb +36 -36
- data/spec/ruby_warrior/level_loader_spec.rb +19 -19
- data/spec/ruby_warrior/level_spec.rb +57 -57
- data/spec/ruby_warrior/player_generator_spec.rb +3 -3
- data/spec/ruby_warrior/position_spec.rb +43 -43
- data/spec/ruby_warrior/profile_spec.rb +59 -59
- data/spec/ruby_warrior/space_spec.rb +71 -71
- data/spec/ruby_warrior/tower_spec.rb +5 -5
- data/spec/ruby_warrior/turn_spec.rb +13 -13
- data/spec/ruby_warrior/ui_spec.rb +32 -32
- data/spec/ruby_warrior/units/archer_spec.rb +9 -9
- data/spec/ruby_warrior/units/base_spec.rb +42 -42
- data/spec/ruby_warrior/units/captive_spec.rb +9 -9
- data/spec/ruby_warrior/units/golem_spec.rb +9 -9
- data/spec/ruby_warrior/units/sludge_spec.rb +11 -11
- data/spec/ruby_warrior/units/thick_sludge_spec.rb +7 -7
- data/spec/ruby_warrior/units/warrior_spec.rb +23 -23
- data/spec/ruby_warrior/units/wizard_spec.rb +9 -9
- data/spec/spec_helper.rb +3 -2
- data/towers/beginner/level_002.rb +1 -1
- data/towers/beginner/level_003.rb +1 -1
- data/towers/beginner/level_005.rb +2 -2
- data/towers/beginner/level_006.rb +2 -2
- data/towers/intermediate/level_002.rb +1 -1
- data/towers/intermediate/level_003.rb +2 -2
- metadata +47 -67
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RubyWarrior::Floor do
|
4
4
|
describe "2x3" do
|
@@ -7,75 +7,75 @@ describe RubyWarrior::Floor do
|
|
7
7
|
@floor.width = 2
|
8
8
|
@floor.height = 3
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it "should be able to add a unit and fetch it at that position" do
|
12
12
|
unit = RubyWarrior::Units::Base.new
|
13
13
|
@floor.add(unit, 0, 1, :north)
|
14
|
-
@floor.get(0, 1).
|
14
|
+
expect(@floor.get(0, 1)).to eq(unit)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it "should not consider unit on floor if no position" do
|
18
18
|
unit = RubyWarrior::Units::Base.new
|
19
19
|
@floor.add(unit, 0, 1, :north)
|
20
20
|
unit.position = nil
|
21
|
-
@floor.units.
|
21
|
+
expect(@floor.units).to_not include(unit)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
it "should fetch other units not warrior" do
|
25
25
|
unit = RubyWarrior::Units::Base.new
|
26
26
|
warrior = RubyWarrior::Units::Warrior.new
|
27
27
|
@floor.add(unit, 0, 0, :north)
|
28
28
|
@floor.add(warrior, 1, 0, :north)
|
29
|
-
@floor.other_units.
|
30
|
-
@floor.other_units.
|
29
|
+
expect(@floor.other_units).to_not include(warrior)
|
30
|
+
expect(@floor.other_units).to include(unit)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
it "should not consider corners out of bounds" do
|
34
|
-
@floor.
|
35
|
-
@floor.
|
36
|
-
@floor.
|
37
|
-
@floor.
|
34
|
+
expect(@floor).to_not be_out_of_bounds(0, 0)
|
35
|
+
expect(@floor).to_not be_out_of_bounds(1, 0)
|
36
|
+
expect(@floor).to_not be_out_of_bounds(1, 2)
|
37
|
+
expect(@floor).to_not be_out_of_bounds(0, 2)
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
it "should consider out of bounds when going beyond sides" do
|
41
|
-
@floor.
|
42
|
-
@floor.
|
43
|
-
@floor.
|
44
|
-
@floor.
|
41
|
+
expect(@floor).to be_out_of_bounds(-1, 0)
|
42
|
+
expect(@floor).to be_out_of_bounds(0, -1)
|
43
|
+
expect(@floor).to be_out_of_bounds(0, 3)
|
44
|
+
expect(@floor).to be_out_of_bounds(2, 0)
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
it "should return space at the specified location" do
|
48
|
-
@floor.space(0, 0).
|
48
|
+
expect(@floor.space(0, 0)).to be_kind_of(RubyWarrior::Space)
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
it "should place stairs and be able to fetch the location" do
|
52
52
|
@floor.place_stairs(1, 2)
|
53
|
-
@floor.stairs_location.
|
53
|
+
expect(@floor.stairs_location).to eq([1, 2])
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
describe "3x1" do
|
58
58
|
before(:each) do
|
59
59
|
@floor = RubyWarrior::Floor.new
|
60
60
|
@floor.width = 3
|
61
61
|
@floor.height = 1
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
it "should print map with stairs and unit" do
|
65
65
|
@floor.add(RubyWarrior::Units::Warrior.new, 0, 0)
|
66
66
|
@floor.place_stairs(2, 0)
|
67
|
-
@floor.character.
|
67
|
+
expect(@floor.character).to eq(<<-MAP)
|
68
68
|
---
|
69
69
|
|@ >|
|
70
70
|
---
|
71
71
|
MAP
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
it "should return unique units" do
|
75
75
|
u1 = RubyWarrior::Units::Base.new
|
76
76
|
@floor.add(u1, 0, 0)
|
77
77
|
@floor.add(RubyWarrior::Units::Base.new, 1, 0)
|
78
|
-
@floor.unique_units.
|
78
|
+
expect(@floor.unique_units).to eq([u1])
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -1,58 +1,58 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RubyWarrior::Game do
|
4
4
|
before(:each) do
|
5
5
|
@game = RubyWarrior::Game.new
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
# GAME DIR
|
9
|
-
|
9
|
+
|
10
10
|
it "should make game directory if player says so" do
|
11
11
|
RubyWarrior::UI.stubs(:ask).returns(true)
|
12
12
|
Dir.expects(:mkdir).with('./rubywarrior')
|
13
13
|
@game.make_game_directory
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "should not make game and exit if player says no" do
|
17
17
|
RubyWarrior::UI.stubs(:ask).returns(false)
|
18
18
|
Dir.stubs(:mkdir).raises('should not be called')
|
19
|
-
|
19
|
+
expect { @game.make_game_directory }.to raise_error(SystemExit)
|
20
20
|
end
|
21
|
-
|
22
|
-
|
21
|
+
|
22
|
+
|
23
23
|
# PROFILES
|
24
|
-
|
24
|
+
|
25
25
|
it "should load profiles for each profile path" do
|
26
26
|
RubyWarrior::Profile.expects(:load).with('foo/.profile').returns(1)
|
27
27
|
RubyWarrior::Profile.expects(:load).with('bar/.profile').returns(2)
|
28
28
|
@game.stubs(:profile_paths).returns(['foo/.profile', 'bar/.profile'])
|
29
|
-
@game.profiles.
|
29
|
+
expect(@game.profiles).to eq([1, 2])
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
it "should find profile paths using Dir[] search" do
|
33
33
|
Dir.expects(:[]).with("./rubywarrior/**/.profile")
|
34
34
|
@game.profile_paths
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
it "should try to create profile when no profile paths are specified" do
|
38
38
|
@game.stubs(:profiles).returns([])
|
39
39
|
@game.expects(:new_profile).returns('profile')
|
40
|
-
@game.profile.
|
40
|
+
expect(@game.profile).to eq('profile')
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "should ask a player to choose a profile if multiple profiles are available, but only once" do
|
44
44
|
RubyWarrior::UI.expects(:choose).with('profile', [:profile1, [:new, 'New Profile']]).returns(:profile1)
|
45
45
|
@game.stubs(:profiles).returns([:profile1])
|
46
|
-
2.times { @game.profile.
|
46
|
+
2.times { expect(@game.profile).to eq(:profile1) }
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it "should ask user to choose a tower when creating a new profile" do
|
50
50
|
RubyWarrior::UI.stubs(:gets).returns('')
|
51
51
|
@game.stubs(:towers).returns([:tower1, :tower2])
|
52
52
|
RubyWarrior::UI.expects(:choose).with('tower', [:tower1, :tower2]).returns(stub(:path => '/foo/bar'))
|
53
53
|
@game.new_profile
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
it "should pass name and selected tower to profile" do
|
57
57
|
profile = stub
|
58
58
|
RubyWarrior::UI.stubs(:choose).returns(stub(:path => 'tower_path'))
|
@@ -60,60 +60,60 @@ describe RubyWarrior::Game do
|
|
60
60
|
RubyWarrior::Profile.expects(:new).returns(profile)
|
61
61
|
profile.expects(:tower_path=).with('tower_path')
|
62
62
|
profile.expects(:warrior_name=).with('name')
|
63
|
-
@game.new_profile.
|
63
|
+
expect(@game.new_profile).to eq(profile)
|
64
64
|
end
|
65
|
-
|
66
|
-
|
65
|
+
|
66
|
+
|
67
67
|
# TOWERS
|
68
|
-
|
68
|
+
|
69
69
|
it "load towers for each tower path" do
|
70
70
|
RubyWarrior::Tower.expects(:new).with('towers/foo').returns(1)
|
71
71
|
RubyWarrior::Tower.expects(:new).with('towers/bar').returns(2)
|
72
72
|
@game.stubs(:tower_paths).returns(['towers/foo', 'towers/bar'])
|
73
|
-
@game.towers.
|
73
|
+
expect(@game.towers).to eq([1, 2])
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
it "should find tower paths using Dir[] search" do
|
77
|
-
Dir.expects(:[]).with(File.expand_path(
|
77
|
+
Dir.expects(:[]).with(File.expand_path('../../../towers/*', __FILE__))
|
78
78
|
@game.tower_paths
|
79
79
|
end
|
80
|
-
|
81
|
-
|
80
|
+
|
81
|
+
|
82
82
|
# LEVEL
|
83
|
-
|
83
|
+
|
84
84
|
it "should fetch current level from profile and cache it" do
|
85
85
|
@game.stubs(:profile).returns(stub)
|
86
86
|
@game.profile.expects(:current_level).returns('foo')
|
87
|
-
2.times { @game.current_level.
|
87
|
+
2.times { expect(@game.current_level).to eq('foo') }
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
it "should fetch next level from profile and cache it" do
|
91
91
|
@game.stubs(:profile).returns(stub)
|
92
92
|
@game.profile.expects(:next_level).returns('bar')
|
93
|
-
2.times { @game.next_level.
|
93
|
+
2.times { expect(@game.next_level).to eq('bar') }
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
it "should report final grade" do
|
97
97
|
profile = RubyWarrior::Profile.new
|
98
98
|
profile.current_epic_grades = { 1 => 0.7, 2 => 0.9 }
|
99
99
|
@game.stubs(:profile).returns(profile)
|
100
100
|
report = @game.final_report
|
101
|
-
report.
|
102
|
-
report.
|
101
|
+
expect(report).to include("Your average grade for this tower is: B")
|
102
|
+
expect(report).to include("Level 1: C\n Level 2: A")
|
103
103
|
end
|
104
|
-
|
104
|
+
|
105
105
|
it "should have an empty final report if no epic grades are available" do
|
106
106
|
profile = RubyWarrior::Profile.new
|
107
107
|
profile.current_epic_grades = {}
|
108
108
|
@game.stubs(:profile).returns(profile)
|
109
|
-
@game.final_report.
|
109
|
+
expect(@game.final_report).to be_nil
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
it "should have an empty final report if practice level" do
|
113
113
|
RubyWarrior::Config.practice_level = 2
|
114
114
|
profile = RubyWarrior::Profile.new
|
115
115
|
profile.current_epic_grades = { 1 => 0.7, 2 => 0.9 }
|
116
116
|
@game.stubs(:profile).returns(profile)
|
117
|
-
@game.final_report.
|
117
|
+
expect(@game.final_report).to be_nil
|
118
118
|
end
|
119
119
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RubyWarrior::LevelLoader do
|
4
4
|
describe "with profile" do
|
@@ -7,48 +7,48 @@ describe RubyWarrior::LevelLoader do
|
|
7
7
|
@level = RubyWarrior::Level.new(@profile, 1)
|
8
8
|
@loader = RubyWarrior::LevelLoader.new(@level)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it "should be able to add description, tip and clue" do
|
12
12
|
@loader.description "foo"
|
13
13
|
@loader.tip "bar"
|
14
14
|
@loader.clue "clue"
|
15
|
-
@level.description.
|
16
|
-
@level.tip.
|
17
|
-
@level.clue.
|
15
|
+
expect(@level.description).to eq("foo")
|
16
|
+
expect(@level.tip).to eq("bar")
|
17
|
+
expect(@level.clue).to eq("clue")
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
it "should be able to set size" do
|
21
21
|
@loader.size 5, 3
|
22
|
-
@level.floor.width.
|
23
|
-
@level.floor.height.
|
22
|
+
expect(@level.floor.width).to eq(5)
|
23
|
+
expect(@level.floor.height).to eq(3)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
it "should be able to add stairs" do
|
27
27
|
@level.floor.expects(:place_stairs).with(1, 2)
|
28
28
|
@loader.stairs 1, 2
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it "should yield new unit when building" do
|
32
32
|
@loader.unit :base, 1, 2 do |unit|
|
33
|
-
unit.
|
34
|
-
unit.position.
|
33
|
+
expect(unit).to be_kind_of(RubyWarrior::Units::Base)
|
34
|
+
expect(unit.position).to be_at(1, 2)
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
it "should be able to add multi-word units" do
|
39
|
-
|
39
|
+
expect { @loader.unit :thick_sludge, 1, 2 }.to_not raise_error
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it "should build warrior from profile" do
|
43
43
|
@loader.warrior 1, 2 do |unit|
|
44
|
-
unit.
|
45
|
-
unit.position.
|
44
|
+
expect(unit).to be_kind_of(RubyWarrior::Units::Warrior)
|
45
|
+
expect(unit.position).to be_at(1, 2)
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it "should be able to set time bonus" do
|
50
50
|
@loader.time_bonus 100
|
51
|
-
@level.time_bonus.
|
51
|
+
expect(@level.time_bonus).to eq(100)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
require 'set'
|
3
3
|
|
4
4
|
describe RubyWarrior::Level do
|
@@ -9,64 +9,64 @@ describe RubyWarrior::Level do
|
|
9
9
|
@level.floor = @floor
|
10
10
|
@level.stubs(:failed?).returns(false)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it "should consider passed when warrior is on stairs" do
|
14
14
|
@level.warrior = RubyWarrior::Units::Warrior.new
|
15
15
|
@floor.add(@level.warrior, 0, 0, :north)
|
16
16
|
@floor.place_stairs(0, 0)
|
17
|
-
@level.
|
17
|
+
expect(@level).to be_passed
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
it "should default time bonus to zero" do
|
21
|
-
@level.time_bonus.
|
21
|
+
expect(@level.time_bonus).to be_zero
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
it "should have a grade relative to ace score" do
|
25
25
|
@level.ace_score = 100
|
26
|
-
@level.grade_for(110).
|
27
|
-
@level.grade_for(100).
|
28
|
-
@level.grade_for(99).
|
29
|
-
@level.grade_for(89).
|
30
|
-
@level.grade_for(79).
|
31
|
-
@level.grade_for(69).
|
32
|
-
@level.grade_for(59).
|
26
|
+
expect(@level.grade_for(110)).to eq("S")
|
27
|
+
expect(@level.grade_for(100)).to eq("S")
|
28
|
+
expect(@level.grade_for(99)).to eq("A")
|
29
|
+
expect(@level.grade_for(89)).to eq("B")
|
30
|
+
expect(@level.grade_for(79)).to eq("C")
|
31
|
+
expect(@level.grade_for(69)).to eq("D")
|
32
|
+
expect(@level.grade_for(59)).to eq("F")
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
it "should have no grade if there is no ace score" do
|
36
|
-
@level.ace_score.
|
37
|
-
@level.grade_for(100).
|
36
|
+
expect(@level.ace_score).to be_nil
|
37
|
+
expect(@level.grade_for(100)).to be_nil
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
it "should load file contents into level" do
|
41
41
|
@level.stubs(:load_path).returns('path/to/level.rb')
|
42
42
|
File.expects(:read).with('path/to/level.rb').returns("description 'foo'")
|
43
43
|
@level.load_level
|
44
|
-
@level.description.
|
44
|
+
expect(@level.description).to eq('foo')
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
it "should have a player path from profile" do
|
48
48
|
@profile.stubs(:player_path).returns('path/to/player')
|
49
|
-
@level.player_path.
|
49
|
+
expect(@level.player_path).to eq('path/to/player')
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
it "should have a load path from profile tower with level number in it" do
|
53
53
|
@profile.stubs(:tower_path).returns('path/to/tower')
|
54
|
-
@level.load_path.
|
54
|
+
expect(@level.load_path).to eq(File.expand_path('towers/tower/level_001.rb'))
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
it "should exist if file exists" do
|
58
58
|
@level.stubs(:load_path).returns('/foo/bar')
|
59
59
|
File.expects(:exist?).with('/foo/bar').returns(true)
|
60
|
-
@level.exists
|
60
|
+
expect(@level.exists?).to eq(true)
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
it "should load player and player path" do
|
64
64
|
@level.stubs(:player_path).returns('player/path')
|
65
65
|
$:.expects(:<<).with('player/path')
|
66
66
|
@level.expects(:load).with('player.rb')
|
67
67
|
@level.load_player
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
it "should generate player files" do
|
71
71
|
@level.expects(:load_level)
|
72
72
|
generator = stub
|
@@ -74,31 +74,31 @@ describe RubyWarrior::Level do
|
|
74
74
|
RubyWarrior::PlayerGenerator.expects(:new).with(@level).returns(generator)
|
75
75
|
@level.generate_player_files
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
it "should setup warrior with profile abilities" do
|
79
79
|
@profile.abilities = [:foo, :bar]
|
80
80
|
warrior = stub_everything
|
81
81
|
warrior.expects(:add_abilities).with(:foo, :bar)
|
82
82
|
@level.setup_warrior(warrior)
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
it "should setup warrior with profile name" do
|
86
86
|
@profile.warrior_name = "Joe"
|
87
87
|
warrior = stub_everything
|
88
88
|
warrior.expects(:name=).with("Joe")
|
89
89
|
@level.setup_warrior(warrior)
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
describe "playing" do
|
93
93
|
before(:each) do
|
94
94
|
@level.stubs(:load_level)
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
it "should load level once when playing multiple turns" do
|
98
98
|
@level.expects(:load_level)
|
99
99
|
@level.play(2)
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
it "should call prepare_turn and play_turn on each object specified number of times" do
|
103
103
|
object = RubyWarrior::Units::Base.new
|
104
104
|
object.expects(:prepare_turn).times(2)
|
@@ -106,7 +106,7 @@ describe RubyWarrior::Level do
|
|
106
106
|
@floor.add(object, 0, 0, :north)
|
107
107
|
@level.play(2)
|
108
108
|
end
|
109
|
-
|
109
|
+
|
110
110
|
it "should return immediately when passed" do
|
111
111
|
object = RubyWarrior::Units::Base.new
|
112
112
|
object.expects(:turn).times(0)
|
@@ -114,90 +114,90 @@ describe RubyWarrior::Level do
|
|
114
114
|
@level.stubs(:passed?).returns(true)
|
115
115
|
@level.play(2)
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
it "should yield to block in play method for each turn" do
|
119
119
|
int = 0
|
120
120
|
@level.play(2) do
|
121
121
|
int += 1
|
122
122
|
end
|
123
|
-
int.
|
123
|
+
expect(int).to eq(2)
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
it "should count down time_bonus once each turn" do
|
127
127
|
@level.time_bonus = 10
|
128
128
|
@level.play(3)
|
129
|
-
@level.time_bonus.
|
129
|
+
expect(@level.time_bonus).to eq(7)
|
130
130
|
end
|
131
|
-
|
131
|
+
|
132
132
|
it "should count down time_bonus below 0" do
|
133
133
|
@level.time_bonus = 2
|
134
134
|
@level.play(5)
|
135
|
-
@level.time_bonus.
|
135
|
+
expect(@level.time_bonus).to be_zero
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
it "should have a pretty score calculation" do
|
139
|
-
@level.score_calculation(123, 45).
|
139
|
+
expect(@level.score_calculation(123, 45)).to eq("123 + 45 = 168")
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
it "should not have a score calculation when starting score is zero" do
|
143
|
-
@level.score_calculation(0, 45).
|
143
|
+
expect(@level.score_calculation(0, 45)).to eq("45")
|
144
144
|
end
|
145
145
|
end
|
146
|
-
|
146
|
+
|
147
147
|
describe "tallying points" do
|
148
148
|
before(:each) do
|
149
149
|
@warrior = stub(:score => 0, :abilities => {})
|
150
150
|
@level.stubs(:warrior).returns(@warrior)
|
151
151
|
@level.floor.stubs(:other_units).returns([stub])
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
it "should add warrior score to profile" do
|
155
155
|
@warrior.stubs(:score).returns(30)
|
156
156
|
@level.tally_points
|
157
|
-
@profile.score.
|
157
|
+
expect(@profile.score).to eq(30)
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
it "should add warrior score to profile for epic mode" do
|
161
161
|
@profile.enable_epic_mode
|
162
162
|
@warrior.stubs(:score).returns(30)
|
163
163
|
@level.tally_points
|
164
|
-
@profile.current_epic_score.
|
164
|
+
expect(@profile.current_epic_score).to eq(30)
|
165
165
|
end
|
166
|
-
|
166
|
+
|
167
167
|
it "should add level grade percent to profile for epic mode" do
|
168
168
|
@level.ace_score = 100
|
169
169
|
@profile.enable_epic_mode
|
170
170
|
@warrior.stubs(:score).returns(30)
|
171
171
|
@level.tally_points
|
172
|
-
@profile.current_epic_grades.
|
172
|
+
expect(@profile.current_epic_grades).to eq({ 1 => 0.3 })
|
173
173
|
end
|
174
|
-
|
174
|
+
|
175
175
|
it "should not add level grade if ace score is not set" do
|
176
176
|
@level.ace_score = nil
|
177
177
|
@profile.enable_epic_mode
|
178
178
|
@warrior.stubs(:score).returns(30)
|
179
179
|
@level.tally_points
|
180
|
-
@profile.current_epic_grades.
|
180
|
+
expect(@profile.current_epic_grades).to eq({})
|
181
181
|
end
|
182
|
-
|
182
|
+
|
183
183
|
it "should apply warrior abilities to profile" do
|
184
184
|
@warrior.stubs(:abilities).returns({:foo => nil, :bar => nil})
|
185
185
|
@level.tally_points
|
186
|
-
@profile.abilities.to_set.
|
186
|
+
expect(@profile.abilities.to_set).to eq([:foo, :bar].to_set)
|
187
187
|
end
|
188
|
-
|
188
|
+
|
189
189
|
it "should apply time bonus to profile score" do
|
190
190
|
@level.time_bonus = 20
|
191
191
|
@level.tally_points
|
192
|
-
@profile.score.
|
192
|
+
expect(@profile.score).to eq(20)
|
193
193
|
end
|
194
|
-
|
194
|
+
|
195
195
|
it "should give 20% bonus when no other units left" do
|
196
196
|
@level.floor.stubs(:other_units).returns([])
|
197
197
|
@warrior.stubs(:score).returns(10)
|
198
198
|
@level.time_bonus = 10
|
199
199
|
@level.tally_points
|
200
|
-
@profile.score.
|
200
|
+
expect(@profile.score).to eq(24)
|
201
201
|
end
|
202
202
|
end
|
203
203
|
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RubyWarrior::PlayerGenerator do
|
4
4
|
before(:each) do
|
5
5
|
@level = RubyWarrior::Level.new(RubyWarrior::Profile.new, 15)
|
6
6
|
@generator = RubyWarrior::PlayerGenerator.new(@level)
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
it "should know templates path" do
|
10
|
-
@generator.templates_path.
|
10
|
+
expect(@generator.templates_path).to eq(File.expand_path("../../../templates", __FILE__))
|
11
11
|
end
|
12
12
|
end
|