nxt 0.3.0 → 0.5.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 +15 -0
- data/README.md +45 -0
- data/lib/communication/bluetooth_communication.rb +85 -0
- data/lib/communication/serial_port_profile.rb +71 -0
- data/lib/nxt.rb +111 -20
- data/lib/ruby-nxt.sublime-project +8 -0
- data/lib/ruby-nxt.sublime-workspace +288 -0
- data/lib/telegrams/commands/direct/get_battery_level.rb +8 -0
- data/lib/telegrams/commands/direct/get_current_program_name.rb +8 -0
- data/lib/{nxt/commands/sound.rb → telegrams/commands/direct/get_input_values.rb} +0 -0
- data/lib/{nxt/commands/tone.rb → telegrams/commands/direct/keep_alive.rb} +0 -0
- data/lib/telegrams/commands/direct/ls_get_status.rb +0 -0
- data/lib/telegrams/commands/direct/ls_read.rb +0 -0
- data/lib/telegrams/commands/direct/ls_write.rb +0 -0
- data/lib/telegrams/commands/direct/message_read.rb +0 -0
- data/lib/telegrams/commands/direct/message_write.rb +0 -0
- data/lib/telegrams/commands/direct/output_state.rb +229 -0
- data/lib/telegrams/commands/direct/play_sound_file.rb +38 -0
- data/lib/telegrams/commands/direct/play_tone.rb +34 -0
- data/lib/telegrams/commands/direct/replies/get_battery_level_reply.rb +28 -0
- data/lib/telegrams/commands/direct/replies/get_current_program_name_reply.rb +30 -0
- data/lib/telegrams/commands/direct/replies/play_sound_file_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/play_tone_reply.rb +14 -0
- data/lib/telegrams/commands/direct/replies/reset_motor_position_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/set_input_mode_reply.rb +11 -0
- data/lib/telegrams/commands/direct/replies/set_output_state_reply.rb +11 -0
- data/lib/telegrams/commands/direct/replies/start_program_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/stop_program_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/stop_sound_playback_reply.rb +13 -0
- data/lib/telegrams/commands/direct/reset_input_scaled_value.rb +0 -0
- data/lib/telegrams/commands/direct/reset_motor_position.rb +8 -0
- data/lib/telegrams/commands/direct/set_input_mode.rb +101 -0
- data/lib/telegrams/commands/direct/set_output_state.rb +29 -0
- data/lib/telegrams/commands/direct/start_program.rb +30 -0
- data/lib/telegrams/commands/direct/stop_program.rb +9 -0
- data/lib/telegrams/commands/direct/stop_sound_playback.rb +8 -0
- data/lib/telegrams/commands/direct_command.rb +8 -0
- data/lib/telegrams/commands/direct_command_reply.rb +10 -0
- data/lib/telegrams/commands/message_translator.rb +46 -0
- data/lib/telegrams/commands/system/get_device_info.rb +8 -0
- data/lib/telegrams/commands/system/replies/get_device_info_reply.rb +41 -0
- data/lib/telegrams/commands/system_command.rb +8 -0
- data/lib/telegrams/messages/error.rb +0 -0
- data/lib/telegrams/messages/message.rb +0 -0
- data/lib/telegrams/messages/success.rb +0 -0
- data/lib/telegrams/no_message_reply.rb +10 -0
- data/lib/telegrams/reply.rb +82 -0
- data/lib/telegrams/respondable_telegram.rb +29 -0
- data/lib/telegrams/telegram.rb +14 -0
- data/spec/communication/bluetooth_communication_spec.rb +170 -0
- data/spec/communication/serial_port_profile_spec.rb +139 -0
- data/spec/helper.rb +1 -0
- data/spec/nxt_spec.rb +438 -0
- data/spec/telegrams/commands/direct/get_battery_level_spec.rb +26 -0
- data/spec/telegrams/commands/direct/get_current_program_name_spec.rb +26 -0
- data/spec/telegrams/commands/direct/output_state_spec.rb +198 -0
- data/spec/telegrams/commands/direct/play_sound_file_spec.rb +75 -0
- data/spec/telegrams/commands/direct/play_tone_spec.rb +63 -0
- data/spec/telegrams/commands/direct/replies/get_battery_level_reply_spec.rb +40 -0
- data/spec/telegrams/commands/direct/replies/get_current_program_name_reply_spec.rb +33 -0
- data/spec/telegrams/commands/direct/replies/play_sound_file_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/replies/play_tone_reply_spec.rb +14 -0
- data/spec/telegrams/commands/direct/replies/reset_motor_position_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/replies/set_input_mode_reply_spec.rb +12 -0
- data/spec/telegrams/commands/direct/replies/set_output_state_reply_spec.rb +12 -0
- data/spec/telegrams/commands/direct/replies/start_program_reply_spec.rb +12 -0
- data/spec/telegrams/commands/direct/replies/stop_program_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/replies/stop_sound_playback_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/reset_motor_position_spec.rb +31 -0
- data/spec/telegrams/commands/direct/set_input_mode_spec.rb +122 -0
- data/spec/telegrams/commands/direct/set_output_state_spec.rb +72 -0
- data/spec/telegrams/commands/direct/start_program_spec.rb +58 -0
- data/spec/telegrams/commands/direct/stop_program_spec.rb +34 -0
- data/spec/telegrams/commands/direct/stop_sound_playback_spec.rb +34 -0
- data/spec/telegrams/commands/direct_command_reply_spec.rb +7 -0
- data/spec/telegrams/commands/direct_command_spec.rb +34 -0
- data/spec/telegrams/commands/system/get_device_info_spec.rb +16 -0
- data/spec/telegrams/commands/system/replies/get_device_info_reply_spec.rb +63 -0
- data/spec/telegrams/commands/system_command_spec.rb +26 -0
- data/spec/telegrams/no_message_reply_spec.rb +12 -0
- data/spec/telegrams/reply_spec.rb +63 -0
- data/spec/telegrams/respondable_telegram_spec.rb +66 -0
- data/spec/telegrams/telegram_spec.rb +38 -0
- metadata +97 -116
- data/README.markdown +0 -52
- data/Rakefile +0 -35
- data/lib/nxt/commands/base.rb +0 -51
- data/lib/nxt/commands/input.rb +0 -60
- data/lib/nxt/commands/output.rb +0 -105
- data/lib/nxt/commands/program.rb +0 -70
- data/lib/nxt/connectors/base.rb +0 -35
- data/lib/nxt/connectors/input/color.rb +0 -30
- data/lib/nxt/connectors/input/touch.rb +0 -11
- data/lib/nxt/connectors/input/ultrasonic.rb +0 -11
- data/lib/nxt/connectors/output/motor.rb +0 -114
- data/lib/nxt/errors.rb +0 -25
- data/lib/nxt/exceptions.rb +0 -26
- data/lib/nxt/interfaces/base.rb +0 -36
- data/lib/nxt/interfaces/serial_port.rb +0 -88
- data/lib/nxt/interfaces/usb.rb +0 -8
- data/lib/nxt/nxt_brick.rb +0 -167
- data/lib/nxt/patches/module.rb +0 -22
- data/lib/nxt/patches/string.rb +0 -29
- data/lib/nxt/utils/accessors.rb +0 -24
- data/spec/matchers.rb +0 -7
- data/spec/nxt/connectors/output/motor_spec.rb +0 -55
- data/spec/nxt/interfaces/serial_port_spec.rb +0 -73
- data/spec/nxt/nxt_brick_spec.rb +0 -199
- data/spec/spec_helper.rb +0 -4
data/lib/nxt/patches/module.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
class Module
|
2
|
-
# Creates an invariant accessor that allows getting and setting from the same
|
3
|
-
# endpoint. It will operate in getter mode if you don't pass any arguments
|
4
|
-
# when calling it, otherwise it will work in setter mode. Useful when needing
|
5
|
-
# to chain methods (you can't chain standard attr_writer methods because
|
6
|
-
# of the `= something` part).
|
7
|
-
def attr_combined_accessor(sym, default = nil)
|
8
|
-
define_method(sym) do |*args|
|
9
|
-
if args.empty?
|
10
|
-
instance_var = :"@#{sym}"
|
11
|
-
if (value = self.instance_variable_get(instance_var))
|
12
|
-
value
|
13
|
-
else
|
14
|
-
self.instance_variable_set(instance_var, default)
|
15
|
-
default
|
16
|
-
end
|
17
|
-
else
|
18
|
-
send(:"#{sym}=", *args)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/lib/nxt/patches/string.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
class String
|
2
|
-
# Convert the given string to a hexadecimal representation of the same data.
|
3
|
-
# This method is non-destructive, it will return a new copy of the string
|
4
|
-
# convered to hex.
|
5
|
-
def to_hex_str
|
6
|
-
str = ''
|
7
|
-
self.each_byte {|b| str << '0x%02x ' % b}
|
8
|
-
str
|
9
|
-
end
|
10
|
-
|
11
|
-
#
|
12
|
-
def from_hex_str_two
|
13
|
-
data = self.split(' ')
|
14
|
-
str = ''
|
15
|
-
data.each {|h| eval "str += '%c' % #{h}"}
|
16
|
-
str
|
17
|
-
end
|
18
|
-
|
19
|
-
def from_hex_str
|
20
|
-
data = self.split(' ')
|
21
|
-
str = ''
|
22
|
-
|
23
|
-
data.each do |h|
|
24
|
-
str += '%c' % h
|
25
|
-
end
|
26
|
-
|
27
|
-
str
|
28
|
-
end
|
29
|
-
end
|
data/lib/nxt/utils/accessors.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Utils
|
3
|
-
module Accessors
|
4
|
-
def attr_setter(name, options)
|
5
|
-
define_method("#{name}=") do |value|
|
6
|
-
if options.include?(:is)
|
7
|
-
raise TypeError.new('Expected value to be a #{options[:is]}') unless duration.is_a?(options[:is])
|
8
|
-
end
|
9
|
-
|
10
|
-
if options.include?(:is_in)
|
11
|
-
raise TypeError.new("Expected value to be one of: #{options[:is_in].join(', ')}") unless options[:is_in].include?(value)
|
12
|
-
end
|
13
|
-
|
14
|
-
if options.include?(:is_key_in)
|
15
|
-
raise TypeError.new("Expected value to be one of: :#{options[:is_key_in].keys.join(', :')}") unless options[:is_key_in].include?(value)
|
16
|
-
end
|
17
|
-
|
18
|
-
instance_variable_set("@#{name}", value)
|
19
|
-
self
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/spec/matchers.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe NXT::Connector::Output::Motor do
|
4
|
-
|
5
|
-
subject do
|
6
|
-
NXT::Connector::Output::Motor.new(nil, nil)
|
7
|
-
end
|
8
|
-
|
9
|
-
context '#duration' do
|
10
|
-
# TODO: Should be OK to use any number, but documenting current behavior
|
11
|
-
it 'should not allow a non-Integer duration' do
|
12
|
-
expect do
|
13
|
-
subject.duration(0.5)
|
14
|
-
end.to raise_exception(TypeError)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should allow valid type options' do
|
18
|
-
subject.duration(1, :type => :rotations)
|
19
|
-
subject.duration(1, :type => :seconds)
|
20
|
-
subject.duration(1, :type => :degrees)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should not allow invalid type option' do
|
24
|
-
expect do
|
25
|
-
subject.duration(1, :type => :incorrect_duration_after_type)
|
26
|
-
end.to raise_exception(TypeError)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should default to seconds as the duration unit' do
|
30
|
-
subject.duration(1)
|
31
|
-
|
32
|
-
subject.duration_type.should == :seconds
|
33
|
-
end
|
34
|
-
|
35
|
-
context "setting the :after option" do
|
36
|
-
# TODO: This isn't right...should change this
|
37
|
-
# but I'm just documenting current behavior
|
38
|
-
it 'should prevent using the :after option unless duration_type is :seconds' do
|
39
|
-
expect do
|
40
|
-
subject.duration(1, :type => :rotations, :after => :coast)
|
41
|
-
end.to raise_exception(TypeError)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'should allow using the :afer option when the duration type is :seconds' do
|
45
|
-
subject.duration(1, :type => :seconds, :after => :coast)
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should not allow setting an invalid value' do
|
49
|
-
expect do
|
50
|
-
subject.duration(1, :type => :seconds, :after => :foobar)
|
51
|
-
end.to raise_exception(TypeError)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe NXT::Interface::SerialPort do
|
4
|
-
before do
|
5
|
-
@device = '/dev/zero'
|
6
|
-
@bad_device = 'hello world'
|
7
|
-
end
|
8
|
-
|
9
|
-
subject do
|
10
|
-
NXT::Interface::SerialPort.new(@device)
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'constants' do
|
14
|
-
it 'should have a BAUD_RATE constant' do
|
15
|
-
should have_constant(:BAUD_RATE)
|
16
|
-
should have_constant(:DATA_BITS)
|
17
|
-
should have_constant(:STOP_BITS)
|
18
|
-
should have_constant(:PARITY)
|
19
|
-
should have_constant(:READ_TIMEOUT)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'accessors' do
|
24
|
-
it 'should have read/write accessor for @dev' do
|
25
|
-
should respond_to(:dev)
|
26
|
-
should respond_to(:dev=)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#initialize' do
|
31
|
-
it 'should set the device to the incomming argument' do
|
32
|
-
subject.dev.should equal(@device)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should raise an exception when trying to connect to invalid dev files' do
|
36
|
-
expect do
|
37
|
-
serial_port = subject.class.new(@bad_device)
|
38
|
-
end.to raise_exception(InvalidDeviceError)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '#connect' do
|
43
|
-
it 'should raise an exception when the SerialPort connection failed' do
|
44
|
-
expect do
|
45
|
-
subject.connect
|
46
|
-
end.to raise_exception(SerialPortConnectionError, "The #{@device} device is not a valid SerialPort")
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'should raise an exception when the SerialPort connection is nil' do
|
50
|
-
::SerialPort.should_receive(:new).and_return(nil)
|
51
|
-
expect do
|
52
|
-
subject.connect
|
53
|
-
end.to raise_exception(SerialPortConnectionError, "Could not establish a SerialPort connection to #{@device}")
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'should set the flow control and read timeout when the connection is established' do
|
57
|
-
serial_port_stub = stub()
|
58
|
-
serial_port_stub.should_receive(:flow_control=).with(::SerialPort::HARD).once
|
59
|
-
serial_port_stub.should_receive(:read_timeout=).with(subject.class::READ_TIMEOUT).once
|
60
|
-
::SerialPort.should_receive(:new).and_return(serial_port_stub)
|
61
|
-
|
62
|
-
subject.connect
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '#send' do
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
describe '#receive' do
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
data/spec/nxt/nxt_brick_spec.rb
DELETED
@@ -1,199 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module NXT
|
4
|
-
module Interface
|
5
|
-
class MockInterface < Base
|
6
|
-
def connect; end
|
7
|
-
def disconnect; end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe NXTBrick do
|
13
|
-
before do
|
14
|
-
@interface = :mock_interface
|
15
|
-
end
|
16
|
-
|
17
|
-
subject do
|
18
|
-
NXTBrick.new(@interface)
|
19
|
-
end
|
20
|
-
|
21
|
-
describe 'accessors' do
|
22
|
-
it 'should have read/write accessors for @interface' do
|
23
|
-
should respond_to(:interface)
|
24
|
-
should respond_to(:interface=)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should have a read accessor for @a' do
|
28
|
-
should respond_to(:a)
|
29
|
-
should_not respond_to(:a=)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'should have a read accessor for @b' do
|
33
|
-
should respond_to(:b)
|
34
|
-
should_not respond_to(:b=)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should have a read accessor for @c' do
|
38
|
-
should respond_to(:c)
|
39
|
-
should_not respond_to(:c=)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should have a read accessor for @one' do
|
43
|
-
should respond_to(:one)
|
44
|
-
should_not respond_to(:one=)
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should have a read accessor for @two' do
|
48
|
-
should respond_to(:two)
|
49
|
-
should_not respond_to(:two=)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should have a read accessor for @three' do
|
53
|
-
should respond_to(:three)
|
54
|
-
should_not respond_to(:three=)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should have a read accessor for @four' do
|
58
|
-
should respond_to(:four)
|
59
|
-
should_not respond_to(:four=)
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'should have a read accessor for @port_identifiers' do
|
63
|
-
should respond_to(:port_identifiers)
|
64
|
-
should_not respond_to(:port_identifiers=)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe '#initialize' do
|
69
|
-
it 'should raise an exception if an invalid type of interface is given' do
|
70
|
-
expect do
|
71
|
-
NXTBrick.new(:foobar_biz_buzz)
|
72
|
-
end.to raise_exception(InvalidInterfaceError)
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should set the interface to the incomming argument' do
|
76
|
-
subject.interface.class.should equal(NXT::Interface::MockInterface)
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'should call yield if given a block, passing self' do
|
80
|
-
block_called = false
|
81
|
-
|
82
|
-
NXTBrick.new(@interface) do |nxt|
|
83
|
-
block_called = true
|
84
|
-
nxt.should be_an_instance_of(NXTBrick)
|
85
|
-
end
|
86
|
-
|
87
|
-
block_called.should be_true
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe '#add' do
|
92
|
-
it 'should raise an exception if an invalid type of port is given' do
|
93
|
-
expect do
|
94
|
-
subject.add('not a symbol', :symbol, Class)
|
95
|
-
end.to raise_exception(TypeError, 'Expected port to be a Symbol')
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'should raise an exception if an invalid type of identifier is given' do
|
99
|
-
expect do
|
100
|
-
subject.add(:symbol, 'not a symbol', Class)
|
101
|
-
end.to raise_exception(TypeError, 'Expected identifier to be a Symbol')
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'should raise an exception if an invalid type of klass is given' do
|
105
|
-
expect do
|
106
|
-
subject.add(:symbol, :symbol, 'not a class')
|
107
|
-
end.to raise_exception(TypeError, 'Expected klass to be a Class')
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'should raise an exception if an invalid port number or letter is given' do
|
111
|
-
expect do
|
112
|
-
subject.add(:invalid_port, :symbol, Class)
|
113
|
-
end.to raise_exception(TypeError, 'Expected port to be one of: :a, :b, :c, :one, :two, :three, :four')
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'should create a new instance of the passed klass and store it in the attribute for the given port' do
|
117
|
-
port = :a
|
118
|
-
class_stub = Class.new
|
119
|
-
class_return_stub = stub()
|
120
|
-
|
121
|
-
class_stub.should_receive(:new) do
|
122
|
-
class_return_stub
|
123
|
-
end.with(port, anything).once()
|
124
|
-
|
125
|
-
subject.add(port, :hello, class_stub)
|
126
|
-
|
127
|
-
subject.send(port).should equal(class_return_stub)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'should raise an exception if the port given is already set' do
|
131
|
-
port = :a
|
132
|
-
|
133
|
-
class_stub = Class.new
|
134
|
-
class_stub.stub(:new)
|
135
|
-
subject.stub(:hello)
|
136
|
-
subject.instance_variable_set(:"@#{port}", 'some value already there')
|
137
|
-
|
138
|
-
expect do
|
139
|
-
subject.add(port, :hello, class_stub)
|
140
|
-
end.to raise_error(PortTakenError, "Port #{port} is already set, call remove first")
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'should raise an exception if trying to use an identifier that is the name of a defined methodz' do
|
144
|
-
port = :a
|
145
|
-
identifier = :hello
|
146
|
-
|
147
|
-
class_stub = Class.new
|
148
|
-
class_stub.stub(:new)
|
149
|
-
subject.stub(identifier)
|
150
|
-
|
151
|
-
expect do
|
152
|
-
subject.add(port, :hello, class_stub)
|
153
|
-
end.to raise_error(InvalidIdentifierError, "Cannot use identifier #{identifier}, a method on NXTBrick is already using it.")
|
154
|
-
end
|
155
|
-
|
156
|
-
it 'should set up the port identifiers correctly' do
|
157
|
-
port = :a
|
158
|
-
identifier = :hello_world
|
159
|
-
class_stub = Class.new
|
160
|
-
class_stub.stub(:new)
|
161
|
-
|
162
|
-
subject.add(port, identifier, class_stub)
|
163
|
-
|
164
|
-
subject.port_identifiers[identifier].should equal(port)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
describe '#remove' do
|
169
|
-
it 'should raise an exception if an invalid type of identifier is given' do
|
170
|
-
expect do
|
171
|
-
subject.remove('not a symbol')
|
172
|
-
end.to raise_exception(TypeError, 'Expected identifier to be a Symbol')
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'should remove any matching identifiers' do
|
176
|
-
identifier = :hello_world
|
177
|
-
port_identifiers = {}
|
178
|
-
subject.instance_variable_set(:@port_identifiers, port_identifiers)
|
179
|
-
|
180
|
-
port_identifiers.should_receive(:delete).with(identifier).once()
|
181
|
-
subject.remove(identifier)
|
182
|
-
end
|
183
|
-
|
184
|
-
it 'should return a boolean indicating whether it removed anything' do
|
185
|
-
identifier = :hello_world
|
186
|
-
port_identifiers = {}
|
187
|
-
port_identifiers[identifier] = true
|
188
|
-
subject.instance_variable_set(:@port_identifiers, port_identifiers)
|
189
|
-
|
190
|
-
return_value = subject.remove(identifier)
|
191
|
-
return_value.should be_true
|
192
|
-
|
193
|
-
port_identifiers.should_not include(identifier)
|
194
|
-
|
195
|
-
return_value = subject.remove(identifier)
|
196
|
-
return_value.should be_false
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
data/spec/spec_helper.rb
DELETED