toyrobot 0.0.1 → 0.0.2
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/CONTRIBUTING.md +2 -2
- data/README.md +166 -10
- data/lib/toy_robot/application.rb +1 -13
- data/lib/toy_robot/board.rb +1 -1
- data/lib/toy_robot/command/parser.rb +6 -3
- data/lib/toy_robot/command/parser/base.rb +4 -25
- data/lib/toy_robot/command/parser/left.rb +12 -0
- data/lib/toy_robot/command/parser/move.rb +12 -0
- data/lib/toy_robot/command/parser/place.rb +3 -4
- data/lib/toy_robot/command/parser/report.rb +12 -0
- data/lib/toy_robot/command/parser/right.rb +12 -0
- data/lib/toy_robot/controller.rb +32 -0
- data/lib/toy_robot/factory.rb +6 -18
- data/lib/toy_robot/pose.rb +19 -5
- data/lib/toy_robot/robot.rb +11 -15
- data/lib/toy_robot/view.rb +10 -12
- data/test/board_double.rb +5 -0
- data/test/integration/test_factory.rb +2 -2
- data/test/integration/test_toy_robot.rb +1 -1
- data/test/pose_double.rb +23 -0
- data/test/test_board.rb +7 -14
- data/test/test_board_double.rb +13 -0
- data/test/test_board_interface.rb +15 -0
- data/test/{test_command_matcher.rb → test_command_parser.rb} +6 -6
- data/test/{test_command_matcher_interface.rb → test_command_parser_interface.rb} +5 -5
- data/test/test_command_parser_left.rb +20 -0
- data/test/{test_command_matcher_move.rb → test_command_parser_move.rb} +5 -5
- data/test/{test_command_matcher_place.rb → test_command_parser_place.rb} +10 -10
- data/test/{test_command_matcher_report.rb → test_command_parser_report.rb} +5 -5
- data/test/test_command_parser_right.rb +20 -0
- data/test/test_controller.rb +64 -0
- data/test/test_pose.rb +16 -20
- data/test/test_pose_double.rb +15 -0
- data/test/test_pose_interface.rb +26 -0
- data/test/test_reporter_interface.rb +13 -1
- data/test/test_robot.rb +70 -27
- data/toyrobot.gemspec +1 -1
- metadata +35 -26
- data/lib/toy_robot/command/base.rb +0 -5
- data/lib/toy_robot/command/token.rb +0 -11
- data/lib/toy_robot/placement.rb +0 -34
- data/lib/toy_robot/robot_controller.rb +0 -35
- data/test/test_command.rb +0 -22
- data/test/test_command_matcher_left.rb +0 -20
- data/test/test_command_matcher_right.rb +0 -20
- data/test/test_placement.rb +0 -94
- data/test/test_robot_controller.rb +0 -62
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toyrobot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matias Anaya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -64,34 +64,39 @@ files:
|
|
64
64
|
- lib/toy_robot.rb
|
65
65
|
- lib/toy_robot/application.rb
|
66
66
|
- lib/toy_robot/board.rb
|
67
|
-
- lib/toy_robot/command/base.rb
|
68
67
|
- lib/toy_robot/command/parser.rb
|
69
68
|
- lib/toy_robot/command/parser/base.rb
|
69
|
+
- lib/toy_robot/command/parser/left.rb
|
70
|
+
- lib/toy_robot/command/parser/move.rb
|
70
71
|
- lib/toy_robot/command/parser/place.rb
|
71
|
-
- lib/toy_robot/command/
|
72
|
+
- lib/toy_robot/command/parser/report.rb
|
73
|
+
- lib/toy_robot/command/parser/right.rb
|
74
|
+
- lib/toy_robot/controller.rb
|
72
75
|
- lib/toy_robot/factory.rb
|
73
|
-
- lib/toy_robot/placement.rb
|
74
76
|
- lib/toy_robot/pose.rb
|
75
77
|
- lib/toy_robot/robot.rb
|
76
|
-
- lib/toy_robot/robot_controller.rb
|
77
78
|
- lib/toy_robot/view.rb
|
79
|
+
- test/board_double.rb
|
78
80
|
- test/integration/test_application.rb
|
79
81
|
- test/integration/test_factory.rb
|
80
82
|
- test/integration/test_toy_robot.rb
|
83
|
+
- test/pose_double.rb
|
81
84
|
- test/test_board.rb
|
82
|
-
- test/
|
83
|
-
- test/
|
84
|
-
- test/
|
85
|
-
- test/
|
86
|
-
- test/
|
87
|
-
- test/
|
88
|
-
- test/
|
89
|
-
- test/
|
90
|
-
- test/
|
85
|
+
- test/test_board_double.rb
|
86
|
+
- test/test_board_interface.rb
|
87
|
+
- test/test_command_parser.rb
|
88
|
+
- test/test_command_parser_interface.rb
|
89
|
+
- test/test_command_parser_left.rb
|
90
|
+
- test/test_command_parser_move.rb
|
91
|
+
- test/test_command_parser_place.rb
|
92
|
+
- test/test_command_parser_report.rb
|
93
|
+
- test/test_command_parser_right.rb
|
94
|
+
- test/test_controller.rb
|
91
95
|
- test/test_pose.rb
|
96
|
+
- test/test_pose_double.rb
|
97
|
+
- test/test_pose_interface.rb
|
92
98
|
- test/test_reporter_interface.rb
|
93
99
|
- test/test_robot.rb
|
94
|
-
- test/test_robot_controller.rb
|
95
100
|
- test/test_view.rb
|
96
101
|
- toyrobot.gemspec
|
97
102
|
homepage: https://github.com/matiasanaya/toy-robot-simulator
|
@@ -119,21 +124,25 @@ signing_key:
|
|
119
124
|
specification_version: 4
|
120
125
|
summary: A toy robot simulator
|
121
126
|
test_files:
|
127
|
+
- test/board_double.rb
|
122
128
|
- test/integration/test_application.rb
|
123
129
|
- test/integration/test_factory.rb
|
124
130
|
- test/integration/test_toy_robot.rb
|
131
|
+
- test/pose_double.rb
|
125
132
|
- test/test_board.rb
|
126
|
-
- test/
|
127
|
-
- test/
|
128
|
-
- test/
|
129
|
-
- test/
|
130
|
-
- test/
|
131
|
-
- test/
|
132
|
-
- test/
|
133
|
-
- test/
|
134
|
-
- test/
|
133
|
+
- test/test_board_double.rb
|
134
|
+
- test/test_board_interface.rb
|
135
|
+
- test/test_command_parser.rb
|
136
|
+
- test/test_command_parser_interface.rb
|
137
|
+
- test/test_command_parser_left.rb
|
138
|
+
- test/test_command_parser_move.rb
|
139
|
+
- test/test_command_parser_place.rb
|
140
|
+
- test/test_command_parser_report.rb
|
141
|
+
- test/test_command_parser_right.rb
|
142
|
+
- test/test_controller.rb
|
135
143
|
- test/test_pose.rb
|
144
|
+
- test/test_pose_double.rb
|
145
|
+
- test/test_pose_interface.rb
|
136
146
|
- test/test_reporter_interface.rb
|
137
147
|
- test/test_robot.rb
|
138
|
-
- test/test_robot_controller.rb
|
139
148
|
- test/test_view.rb
|
data/lib/toy_robot/placement.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
|
-
module ToyRobot
|
4
|
-
class Placement
|
5
|
-
extend Forwardable
|
6
|
-
|
7
|
-
def_delegator :pose, :report
|
8
|
-
def_delegator :pose, :rotate!, :rotate
|
9
|
-
|
10
|
-
def initialize(args)
|
11
|
-
@board = args[:board]
|
12
|
-
@pose = args[:pose]
|
13
|
-
end
|
14
|
-
|
15
|
-
def on_board?
|
16
|
-
board && board.valid_pose?(pose)
|
17
|
-
end
|
18
|
-
|
19
|
-
def update(a_new_pose)
|
20
|
-
if board.valid_pose?(a_new_pose)
|
21
|
-
self.pose = a_new_pose
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def advance
|
26
|
-
update(pose.adjacent)
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
attr_reader :board
|
32
|
-
attr_accessor :pose
|
33
|
-
end
|
34
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require_relative 'command/token'
|
2
|
-
require 'forwardable'
|
3
|
-
|
4
|
-
module ToyRobot
|
5
|
-
class RobotController
|
6
|
-
extend Forwardable
|
7
|
-
|
8
|
-
def_delegators :robot, :place, :move, :left, :right
|
9
|
-
def_delegator :view, :report
|
10
|
-
|
11
|
-
def initialize(args)
|
12
|
-
@robot = args[:robot]
|
13
|
-
@view = args[:view]
|
14
|
-
end
|
15
|
-
|
16
|
-
def input(command)
|
17
|
-
case command.token
|
18
|
-
when Command::Token::PLACE
|
19
|
-
place(command.args)
|
20
|
-
when Command::Token::MOVE
|
21
|
-
move
|
22
|
-
when Command::Token::RIGHT
|
23
|
-
right
|
24
|
-
when Command::Token::LEFT
|
25
|
-
left
|
26
|
-
when Command::Token::REPORT
|
27
|
-
report
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
attr_reader :robot, :view
|
34
|
-
end
|
35
|
-
end
|
data/test/test_command.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative '../lib/toy_robot/command/token'
|
2
|
-
require 'minitest/autorun'
|
3
|
-
|
4
|
-
module ToyRobot
|
5
|
-
class CommandTest < MiniTest::Unit::TestCase
|
6
|
-
def test_tokens_are_defined
|
7
|
-
assert defined?(Command::Token::PLACE)
|
8
|
-
|
9
|
-
assert defined?(Command::Token::MOVE)
|
10
|
-
|
11
|
-
assert defined?(Command::Token::RIGHT)
|
12
|
-
|
13
|
-
assert defined?(Command::Token::LEFT)
|
14
|
-
|
15
|
-
assert defined?(Command::Token::REPORT)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_base_is_defined
|
19
|
-
assert defined?(Command::Base)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require_relative '../lib/toy_robot/command/parser/base'
|
2
|
-
require_relative 'test_command_matcher_interface'
|
3
|
-
require 'minitest/autorun'
|
4
|
-
|
5
|
-
module ToyRobot
|
6
|
-
class CommandMatcherLeftTest < MiniTest::Unit::TestCase
|
7
|
-
include CommandMatcherInterfaceTest
|
8
|
-
|
9
|
-
def setup
|
10
|
-
@object = Command::Parser::Left
|
11
|
-
@object_token = Command::Token::LEFT
|
12
|
-
@object_valid_str = 'LEFT'
|
13
|
-
@object_invalid_strs = [
|
14
|
-
'LEFT ',
|
15
|
-
'LEFTY',
|
16
|
-
'LEFT 180'
|
17
|
-
]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require_relative '../lib/toy_robot/command/parser/base'
|
2
|
-
require_relative 'test_command_matcher_interface'
|
3
|
-
require 'minitest/autorun'
|
4
|
-
|
5
|
-
module ToyRobot
|
6
|
-
class CommandMatcherRightTest < MiniTest::Unit::TestCase
|
7
|
-
include CommandMatcherInterfaceTest
|
8
|
-
|
9
|
-
def setup
|
10
|
-
@object = Command::Parser::Right
|
11
|
-
@object_token = Command::Token::RIGHT
|
12
|
-
@object_valid_str = 'RIGHT'
|
13
|
-
@object_invalid_strs = [
|
14
|
-
'RIGHT ',
|
15
|
-
'RIGHTY',
|
16
|
-
'RIGHT 180'
|
17
|
-
]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/test/test_placement.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
require_relative '../lib/toy_robot/placement'
|
2
|
-
require_relative 'test_reporter_interface'
|
3
|
-
require 'minitest/autorun'
|
4
|
-
|
5
|
-
module ToyRobot
|
6
|
-
class PlacementTest < MiniTest::Unit::TestCase
|
7
|
-
include ReporterInterfaceTest
|
8
|
-
|
9
|
-
SimpleDouble = Struct.new(:stub) do
|
10
|
-
def valid_pose?(_)
|
11
|
-
stub.fetch(:valid_pose?)
|
12
|
-
end
|
13
|
-
|
14
|
-
def adjacent
|
15
|
-
stub.fetch(:adjacent)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def setup
|
20
|
-
@board = SimpleDouble.new(valid_pose?: true)
|
21
|
-
@pose = SimpleDouble.new
|
22
|
-
@placement = @object = Placement.new(board: @board, pose: @pose)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_respond_to_public_interface
|
26
|
-
assert_respond_to @placement, :update
|
27
|
-
assert_respond_to @placement, :advance
|
28
|
-
assert_respond_to @placement, :rotate
|
29
|
-
assert_respond_to @placement, :on_board?
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_that_it_might_be_on_board
|
33
|
-
assert @placement.on_board?
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_that_it_might_not_be_on_board
|
37
|
-
@board[:stub] = { valid_pose?: false }
|
38
|
-
|
39
|
-
refute @placement.on_board?
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_that_it_might_update
|
43
|
-
new_pose = Object.new
|
44
|
-
|
45
|
-
@placement.update(new_pose)
|
46
|
-
|
47
|
-
assert_equal new_pose, @placement.instance_variable_get(:@pose)
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_that_update_might_fail
|
51
|
-
@board[:stub] = { valid_pose?: false }
|
52
|
-
|
53
|
-
@placement.update('invalid_pose')
|
54
|
-
|
55
|
-
assert_equal @pose, @placement.instance_variable_get(:@pose)
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_that_it_might_advance
|
59
|
-
adjacent_pose = Object.new
|
60
|
-
@pose[:stub] = { adjacent: adjacent_pose }
|
61
|
-
|
62
|
-
@placement.advance
|
63
|
-
|
64
|
-
assert_equal adjacent_pose, @placement.instance_variable_get(:@pose)
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_that_it_might_not_advance
|
68
|
-
@board[:stub] = { valid_pose?: false }
|
69
|
-
@pose[:stub] = { adjacent: 'anything' }
|
70
|
-
|
71
|
-
@placement.advance
|
72
|
-
|
73
|
-
assert_equal @pose, @placement.instance_variable_get(:@pose)
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_that_it_rotates
|
77
|
-
pose = MiniTest::Mock.new
|
78
|
-
placement = Placement.new(pose: pose)
|
79
|
-
|
80
|
-
pose.expect(:rotate!, nil, [123])
|
81
|
-
placement.rotate(123)
|
82
|
-
pose.verify
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_that_it_reports
|
86
|
-
pose = MiniTest::Mock.new
|
87
|
-
placement = Placement.new(pose: pose)
|
88
|
-
|
89
|
-
pose.expect(:report, nil)
|
90
|
-
placement.report
|
91
|
-
pose.verify
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require_relative '../lib/toy_robot/robot_controller'
|
2
|
-
require 'minitest/autorun'
|
3
|
-
|
4
|
-
module ToyRobot
|
5
|
-
class RobotControllerTest < MiniTest::Unit::TestCase
|
6
|
-
CommandDouble = Struct.new(:token, :args)
|
7
|
-
|
8
|
-
def setup
|
9
|
-
@command_double = CommandDouble.new(nil, nil)
|
10
|
-
@robot = MiniTest::Mock.new
|
11
|
-
@view = MiniTest::Mock.new
|
12
|
-
@robot_controller = RobotController.new(
|
13
|
-
robot: @robot,
|
14
|
-
view: @view
|
15
|
-
)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_respond_to_public_interface
|
19
|
-
assert_respond_to @robot_controller, :input
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_it_delegates_a_place_command_to_robot
|
23
|
-
@command_double.token = Command::Token::PLACE
|
24
|
-
|
25
|
-
@robot.expect(:place, nil, [@command_double.args])
|
26
|
-
@robot_controller.input(@command_double)
|
27
|
-
@robot.verify
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_it_delegates_a_move_command_to_robot
|
31
|
-
@command_double.token = Command::Token::MOVE
|
32
|
-
|
33
|
-
@robot.expect(:move, nil)
|
34
|
-
@robot_controller.input(@command_double)
|
35
|
-
@robot.verify
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_it_delegates_a_left_command_to_robot
|
39
|
-
@command_double.token = Command::Token::LEFT
|
40
|
-
|
41
|
-
@robot.expect(:left, nil)
|
42
|
-
@robot_controller.input(@command_double)
|
43
|
-
@robot.verify
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_it_delegates_a_right_command_to_robot
|
47
|
-
@command_double.token = Command::Token::RIGHT
|
48
|
-
|
49
|
-
@robot.expect(:right, nil)
|
50
|
-
@robot_controller.input(@command_double)
|
51
|
-
@robot.verify
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_it_delegates_a_report_command_to_view
|
55
|
-
@command_double.token = Command::Token::REPORT
|
56
|
-
|
57
|
-
@view.expect(:report, nil)
|
58
|
-
@robot_controller.input(@command_double)
|
59
|
-
@view.verify
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|