x10-cm17a 0.9.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.
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'x10/cm17a'
5
+ require 'rbconfig'
6
+
7
+ # There's not much we can test on the api code without assuming a
8
+ # bunch of hardware. The output of the API is a sequence of on/off
9
+ # states in the DTS/RTS RS-232 signals. See the file
10
+ # cm17a_protocol.txt in the doc directory for details.
11
+ #
12
+ class TestApi < Test::Unit::TestCase
13
+ DEV = (Config::CONFIG['arch'] =~ /win32/) ? "COM1" : "/dev/ttyS0"
14
+
15
+ def teardown
16
+ X10.controller.close if X10.controller
17
+ end
18
+
19
+ def test_default_create
20
+ cm = X10::Cm17a::Controller.new
21
+ assert_not_nil cm
22
+ end
23
+
24
+ def test_specific_create
25
+ cm = X10::Cm17a::Controller.new(DEV)
26
+ assert_not_nil cm
27
+ end
28
+
29
+ def test_bad_create
30
+ assert_raises(X10::X10Error) {
31
+ cm = X10::Cm17a::Controller.new("/dev/bad device")
32
+ }
33
+ end
34
+ end
@@ -0,0 +1,219 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError
6
+ # nothing
7
+ end
8
+
9
+ require 'test/unit'
10
+ require 'flexmock'
11
+ require 'x10/cm17a'
12
+
13
+ ######################################################################
14
+ class NoopClass
15
+ def method_missing(sym, *args, &block)
16
+ self
17
+ end
18
+ end
19
+
20
+ NOOP = NoopClass.new
21
+
22
+ ######################################################################
23
+ class MockController < FlexMock
24
+ class << self
25
+ def setup_controller(controller)
26
+ X10.controller = controller
27
+ controller.mock_handle(:device, 1) { |house, unit|
28
+ X10::Cm17a::Device.new(house, unit, controller)
29
+ }
30
+ end
31
+
32
+ def use
33
+ super do |mock|
34
+ setup_controller(mock)
35
+ yield(mock)
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ ######################################################################
42
+ class TestCm17a < Test::Unit::TestCase
43
+ def setup
44
+ end
45
+
46
+ def teardown
47
+ X10.controller = nil
48
+ end
49
+
50
+ def test_create
51
+ MockController.use do |controller|
52
+ dev = X10.device('a1')
53
+ assert_not_nil(dev)
54
+ end
55
+ end
56
+
57
+ def test_on
58
+ MockController.use do |controller|
59
+ controller.mock_handle(:command, 1) { |house, unit, cmd, step|
60
+ assert_equal X10::Cm17a::ON, cmd
61
+ assert_equal 0, step
62
+ }
63
+ dev = X10.device('a1')
64
+ dev.on
65
+ end
66
+ end
67
+
68
+ def test_off
69
+ MockController.use do |controller|
70
+ controller.mock_handle(:command, 1) { |house, unit, cmd, step|
71
+ assert_equal X10::Cm17a::OFF, cmd
72
+ assert_equal 0, step
73
+ }
74
+ dev = X10.device('a1')
75
+ dev.off
76
+ end
77
+ end
78
+
79
+ def test_step_size
80
+ MockController.use do |controller|
81
+ dev = X10.device('a1')
82
+ assert_equal 0, dev.send(:steps_for, 0.0)
83
+ assert_equal 5, dev.send(:steps_for, 0.5)
84
+ assert_equal 5, dev.send(:steps_for, -0.5)
85
+ assert_equal 10, dev.send(:steps_for, 1.0)
86
+ end
87
+ end
88
+
89
+ def test_adjust
90
+ MockController.use do |controller|
91
+ controller.mock_handle(:command, 2) { |house, unit, cmd, step|
92
+ if step == 4
93
+ assert_equal 4, step
94
+ assert_equal X10::Cm17a::BRIGHTEN, cmd
95
+ else
96
+ assert_equal 3, step
97
+ assert_equal X10::Cm17a::DIM, cmd
98
+ end
99
+ }
100
+ dev = X10.device('a1')
101
+ dev.adjust(0.4)
102
+ dev.adjust(-0.3)
103
+ end
104
+ end
105
+
106
+ def test_big_adjustments
107
+ MockController.use do |controller|
108
+ controller.mock_handle(:command, 2) { |house, unit, cmd, step|
109
+ assert_equal X10::Cm17a::DIM, cmd
110
+ if step == 6
111
+ assert_equal 6, step
112
+ else
113
+ assert_equal 3, step
114
+ end
115
+ }
116
+ dev = X10.device('a1')
117
+ dev.adjust(-0.9)
118
+ end
119
+ end
120
+
121
+ def test_small_adjustments
122
+ MockController.use do |controller|
123
+ controller.mock_handle(:command, 0) { }
124
+ dev = X10.device('a1')
125
+ dev.adjust(0.0)
126
+ end
127
+ end
128
+
129
+ def test_device_addressing
130
+ MockController.use do |controller|
131
+ controller.mock_handle(:command) { |house, unit, cmd, step|
132
+ assert_equal 1, house
133
+ assert_equal 2, unit
134
+ }
135
+ dev = X10.device('b3')
136
+ dev.off
137
+ dev.on
138
+ dev.adjust(1)
139
+ dev.adjust(-1)
140
+ end
141
+ end
142
+ end
143
+
144
+ ######################################################################
145
+ class TestCm17aNonApi < Test::Unit::TestCase
146
+ def setup
147
+ X10.controller = MockController.new
148
+ X10.controller.mock_handle(:command) { }
149
+ MockController.setup_controller(X10.controller)
150
+ @dev = X10.device("a1")
151
+ end
152
+
153
+ def teardown
154
+ X10.controller = nil
155
+ end
156
+
157
+ def test_query
158
+ @dev.on
159
+ assert @dev.send(:on?)
160
+ assert ! @dev.send(:off?)
161
+ @dev.off
162
+ assert ! @dev.send(:on?)
163
+ assert @dev.send(:off?)
164
+ @dev.on
165
+ assert @dev.send(:on?)
166
+ assert ! @dev.send(:off?)
167
+ end
168
+
169
+ def test_undefined_on_off_state
170
+ assert_raises(X10::X10Error) {
171
+ @dev.send(:on?)
172
+ }
173
+ end
174
+
175
+ def test_undefined_level
176
+ assert_raises(X10::X10Error) {
177
+ @dev.send(:level)
178
+ }
179
+ end
180
+
181
+ def test_undefined_level_after_adjust
182
+ assert_raises(X10::X10Error) {
183
+ @dev.adjust(0.3)
184
+ @dev.send(:level)
185
+ }
186
+ end
187
+
188
+ def test_level
189
+ @dev.off
190
+ assert_equal 0.0, @dev.send(:level)
191
+
192
+ @dev.adjust(-0.5)
193
+ assert_equal 0.0, @dev.send(:level)
194
+
195
+ @dev.on
196
+ assert_equal 1.0, @dev.send(:level)
197
+
198
+ @dev.adjust(0.1)
199
+ assert_equal 1.0, @dev.send(:level)
200
+
201
+ @dev.adjust(-0.5)
202
+ assert_equal 0.5, @dev.send(:level)
203
+
204
+ @dev.adjust(-0.5)
205
+ assert_equal 0.0, @dev.send(:level)
206
+
207
+ @dev.adjust(-0.5)
208
+ assert_equal 0.0, @dev.send(:level)
209
+ end
210
+ end
211
+
212
+ ######################################################################
213
+ class TestCm17aController < Test::Unit::TestCase
214
+ def test_create
215
+ X10.controller = X10::Cm17a::Controller.new
216
+ d = X10.device('a1')
217
+ assert_not_nil d
218
+ end
219
+ end
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+
5
+ class TestX10 < Test::Unit::TestCase
6
+ def test_parse_name
7
+ assert_equal [0, 0], X10.parse_address("a1")
8
+ assert_equal [0, 0], X10.parse_address("A1")
9
+ assert_equal [1, 0], X10.parse_address("b1")
10
+ assert_equal [0, 1], X10.parse_address("a2")
11
+ assert_equal [7, 5], X10.parse_address("h6")
12
+ assert_equal [7, 5], X10.parse_address("H6")
13
+ assert_equal [15, 15], X10.parse_address("p16")
14
+ assert_equal [15, 15], X10.parse_address("P16")
15
+ end
16
+
17
+ def test_bad_house
18
+ assert_raises(X10::X10Error) { X10.parse_address("11") }
19
+ assert_raises(X10::X10Error) { X10.parse_address("?1") }
20
+ end
21
+
22
+ def test_bad_format
23
+ assert_raises(X10::X10Error) { X10.parse_address("") }
24
+ assert_raises(X10::X10Error) { X10.parse_address("abcd12") }
25
+ end
26
+
27
+ def test_bad_unit
28
+ assert_raises(X10::X10Error) { X10.parse_address("a0") }
29
+ assert_raises(X10::X10Error) { X10.parse_address("a17") }
30
+ end
31
+
32
+ def test_reverse_name
33
+ assert_equal "b10", X10.make_address(1, 9)
34
+ end
35
+ end
36
+
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.3
3
+ specification_version: 1
4
+ name: x10-cm17a
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.9.0
7
+ date: 2004-12-30
8
+ summary: Ruby based X10 CM17A Firecracker Controller
9
+ require_paths:
10
+ - lib
11
+ email: jim@weirichhouse.org
12
+ homepage:
13
+ rubyforge_project:
14
+ description: ''
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Jim Weirich
29
+ files:
30
+ - Rakefile
31
+ - setup.rb
32
+ - test/test_cm17a_controller.rb
33
+ - test/test_cm17a_device.rb
34
+ - test/test_x10.rb
35
+ - lib/x10.rb
36
+ - lib/x10/cm17a.rb
37
+ - lib/x10/cm17a_device.rb
38
+ - ext/cm17a_api/MANIFEST
39
+ - ext/cm17a_api/cm17a.h
40
+ - ext/cm17a_api/cm17a.c
41
+ - ext/cm17a_api/cm17a_api.c
42
+ - ext/cm17a_api/extconf.rb
43
+ test_files: []
44
+ rdoc_options: []
45
+ extra_rdoc_files: []
46
+ executables: []
47
+ extensions:
48
+ - ext/cm17a_api/extconf.rb
49
+ requirements: []
50
+ dependencies: []