blinkenlights 0.0.3 → 0.0.4
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.
- data/CHANGES +5 -0
- data/Rakefile +8 -2
- data/VERSION +1 -1
- data/lib/blinkenlights.rb +37 -9
- data/tests/test.rb +206 -0
- metadata +7 -5
data/CHANGES
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2006-06-09 - 0.0.4 * Added unit tests.
|
2
|
+
* Disabled autorequire in Rakefile
|
3
|
+
* closed BlinkenLights instances now throw IO::Error on
|
4
|
+
Windows, too.
|
5
|
+
* Improved documentation further.
|
1
6
|
2006-06-08 - 0.0.3 * Added support for Windows. The relevant code parts were
|
2
7
|
contributed by Dave Burt <dave@burt.id.au>. Thanks a lot!
|
3
8
|
2005-10-18 - 0.0.2 * Some small bugs fixed
|
data/Rakefile
CHANGED
@@ -12,6 +12,7 @@ task :install do
|
|
12
12
|
ruby 'install.rb'
|
13
13
|
end
|
14
14
|
|
15
|
+
desc "Creating documentation"
|
15
16
|
task :doc do
|
16
17
|
ruby 'make_doc.rb'
|
17
18
|
end
|
@@ -22,6 +23,11 @@ task :clean do
|
|
22
23
|
rm_rf 'coverage'
|
23
24
|
end
|
24
25
|
|
26
|
+
desc "Testing library"
|
27
|
+
task :test do
|
28
|
+
ruby '-I lib tests/test.rb'
|
29
|
+
end
|
30
|
+
|
25
31
|
spec = Gem::Specification.new do |s|
|
26
32
|
#### Basic information.
|
27
33
|
|
@@ -44,7 +50,7 @@ spec = Gem::Specification.new do |s|
|
|
44
50
|
#### Load-time details: library and application (you will need one or both).
|
45
51
|
|
46
52
|
s.require_path = 'lib' # Use these for libraries.
|
47
|
-
s.autorequire = 'blinkenlights'
|
53
|
+
#s.autorequire = 'blinkenlights'
|
48
54
|
|
49
55
|
#s.bindir = "bin" # Use these for applications.
|
50
56
|
#s.executables = ["bla.rb"]
|
@@ -55,7 +61,7 @@ spec = Gem::Specification.new do |s|
|
|
55
61
|
s.has_rdoc = true
|
56
62
|
#s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
|
57
63
|
s.rdoc_options << '--title' << 'BlinkenLights in Ruby' << '--main' << 'BlinkenLights'
|
58
|
-
|
64
|
+
s.test_files << 'tests/test.rb'
|
59
65
|
|
60
66
|
#### Author and project details.
|
61
67
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/lib/blinkenlights.rb
CHANGED
@@ -112,13 +112,29 @@ class BlinkenLights
|
|
112
112
|
LED_ALL = 7
|
113
113
|
|
114
114
|
if defined? ::Win32API
|
115
|
-
#
|
116
|
-
|
115
|
+
# Windows Virtual Key code for caps lock
|
116
|
+
VK_CAPITAL = 0x14
|
117
117
|
|
118
|
-
# Windows
|
119
|
-
|
118
|
+
# Windows Virtual Key code for num lock
|
119
|
+
VK_NUMLOCK = 0x90
|
120
|
+
|
121
|
+
# Windows Virtual Key code for scroll lock
|
122
|
+
VK_SCROLL = 0x91
|
123
|
+
|
124
|
+
# Mapping from UNIX LEDs to Windows Virtual Key codes
|
125
|
+
WINDOWS_LEDS = {
|
126
|
+
LED_SCR => VK_SCROLL,
|
127
|
+
LED_NUM => VK_NUMLOCK,
|
128
|
+
LED_CAP => VK_CAPITAL
|
129
|
+
}
|
120
130
|
|
131
|
+
# Windows key released: Windows keybd_event() constant KEYEVENTF_KEYUP
|
132
|
+
WIN_KEY_UP = 0x26
|
133
|
+
|
134
|
+
# Win32API GetKeyState function
|
121
135
|
GetKeyState = ::Win32API.new("user32", "GetKeyState", ["i"], "i")
|
136
|
+
|
137
|
+
# Win32API Keybd_event function
|
122
138
|
Keybd_event = ::Win32API.new("user32", "keybd_event", %w[i i i i], "v")
|
123
139
|
end
|
124
140
|
end
|
@@ -153,9 +169,15 @@ class BlinkenLights
|
|
153
169
|
# the BlinkenLights#close method is called.
|
154
170
|
def self.open(tty = DEF_TTY, delay = DEF_DELAY)
|
155
171
|
obj = new(tty, delay)
|
156
|
-
|
157
|
-
|
158
|
-
|
172
|
+
if block_given?
|
173
|
+
begin
|
174
|
+
yield obj
|
175
|
+
ensure
|
176
|
+
obj.close if obj
|
177
|
+
end
|
178
|
+
else
|
179
|
+
obj
|
180
|
+
end
|
159
181
|
end
|
160
182
|
|
161
183
|
# Close the open console tty after resetting LEDs to the original state.
|
@@ -165,6 +187,10 @@ class BlinkenLights
|
|
165
187
|
self
|
166
188
|
end
|
167
189
|
|
190
|
+
def closed?
|
191
|
+
@tty.closed?
|
192
|
+
end
|
193
|
+
|
168
194
|
# Resets the LED state to the starting state (when the BlinkenLights object
|
169
195
|
# was created).
|
170
196
|
def reset
|
@@ -194,8 +220,8 @@ class BlinkenLights
|
|
194
220
|
|
195
221
|
# Set LEDs to _number_ in binary digital mode.
|
196
222
|
def digital=(number)
|
197
|
-
number
|
198
|
-
setting
|
223
|
+
number %= 8
|
224
|
+
setting = 0
|
199
225
|
0.upto(2) do |i|
|
200
226
|
if number[i] == 1
|
201
227
|
setting |= 1 << DIGITAL.index(LEDS[2 - i])
|
@@ -419,6 +445,7 @@ class BlinkenLights
|
|
419
445
|
|
420
446
|
if defined? ::Win32API
|
421
447
|
def set(number) # :nodoc:
|
448
|
+
raise IOError, 'closed stream' if closed?
|
422
449
|
WINDOWS_LEDS.each do |nix, win|
|
423
450
|
if (number & nix != 0) ^ (GetKeyState.call(win) != 0)
|
424
451
|
Keybd_event.call(win, 0, 0, 0)
|
@@ -430,6 +457,7 @@ class BlinkenLights
|
|
430
457
|
end
|
431
458
|
|
432
459
|
def get # :nodoc:
|
460
|
+
raise IOError, 'closed stream' if closed?
|
433
461
|
WINDOWS_LEDS.inject(0) do |sum, (nix, win)|
|
434
462
|
sum | ((GetKeyState.call(win) != 0) ? nix : 0)
|
435
463
|
end
|
data/tests/test.rb
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
base = File.basename(Dir.pwd)
|
4
|
+
if base == 'tests' || base =~ /file-tail/
|
5
|
+
Dir.chdir('..') if base == 'tests'
|
6
|
+
$LOAD_PATH.unshift(File.join(Dir.pwd, 'lib'))
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
require 'blinkenlights'
|
11
|
+
|
12
|
+
class TC_BlinkenLights < Test::Unit::TestCase
|
13
|
+
def setup
|
14
|
+
@bl = BlinkenLights.new
|
15
|
+
@old_leds = get_leds
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_leds
|
19
|
+
[ @bl.left, @bl.middle, @bl.right ]
|
20
|
+
end
|
21
|
+
|
22
|
+
def teardown
|
23
|
+
@bl.close unless @bl.closed?
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_close
|
27
|
+
assert !@bl.closed?
|
28
|
+
@bl.close
|
29
|
+
assert @bl.closed?
|
30
|
+
assert_raises(IOError) { @bl.flash }
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_block_open
|
34
|
+
bl2 = BlinkenLights.open do |bl|
|
35
|
+
assert !bl.closed?
|
36
|
+
assert bl.flash
|
37
|
+
:foo
|
38
|
+
end
|
39
|
+
assert_equal :foo, bl2
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_no_block_open
|
43
|
+
bl2 = BlinkenLights.open
|
44
|
+
assert_kind_of BlinkenLights, bl2
|
45
|
+
assert bl2.close
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_reset
|
49
|
+
@bl.random
|
50
|
+
@bl.reset
|
51
|
+
assert_equal get_leds, @old_leds
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_off
|
55
|
+
@bl.random
|
56
|
+
@bl.off
|
57
|
+
assert !@bl.left
|
58
|
+
assert !@bl.middle
|
59
|
+
assert !@bl.right
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_on
|
63
|
+
@bl.random
|
64
|
+
@bl.on
|
65
|
+
assert @bl.left
|
66
|
+
assert @bl.middle
|
67
|
+
assert @bl.right
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_on
|
71
|
+
@bl.random
|
72
|
+
@bl.flash
|
73
|
+
assert !@bl.left
|
74
|
+
assert !@bl.middle
|
75
|
+
assert !@bl.right
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_digital
|
79
|
+
@bl.random
|
80
|
+
for i in 0..8
|
81
|
+
@bl.digital = i
|
82
|
+
assert_equal i % 8, @bl.digital
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_left_to_right
|
87
|
+
@bl.random
|
88
|
+
@bl.left_to_right
|
89
|
+
assert !@bl.left
|
90
|
+
assert !@bl.middle
|
91
|
+
assert @bl.right
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_right_to_left
|
95
|
+
@bl.random
|
96
|
+
@bl.right_to_left
|
97
|
+
assert @bl.left
|
98
|
+
assert !@bl.middle
|
99
|
+
assert !@bl.right
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_circle
|
103
|
+
@bl.random
|
104
|
+
@bl.circle
|
105
|
+
assert @bl.left
|
106
|
+
assert !@bl.middle
|
107
|
+
assert !@bl.right
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_reverse_circle
|
111
|
+
@bl.random
|
112
|
+
@bl.reverse_circle
|
113
|
+
assert !@bl.left
|
114
|
+
assert !@bl.middle
|
115
|
+
assert @bl.right
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_converge
|
119
|
+
@bl.random
|
120
|
+
@bl.converge
|
121
|
+
assert !@bl.left
|
122
|
+
assert @bl.middle
|
123
|
+
assert !@bl.right
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_diverge
|
127
|
+
@bl.random
|
128
|
+
@bl.diverge
|
129
|
+
assert @bl.left
|
130
|
+
assert !@bl.middle
|
131
|
+
assert @bl.right
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_left
|
135
|
+
@bl.random
|
136
|
+
@bl.left = false
|
137
|
+
assert !@bl.left
|
138
|
+
@bl.left = true
|
139
|
+
assert @bl.left
|
140
|
+
@bl.toggle_left
|
141
|
+
assert !@bl.left
|
142
|
+
@bl.toggle_left
|
143
|
+
assert @bl.left
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_middle
|
147
|
+
@bl.random
|
148
|
+
@bl.middle = false
|
149
|
+
assert !@bl.middle
|
150
|
+
@bl.middle = true
|
151
|
+
assert @bl.middle
|
152
|
+
@bl.toggle_middle
|
153
|
+
assert !@bl.middle
|
154
|
+
@bl.toggle_middle
|
155
|
+
assert @bl.middle
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_right
|
159
|
+
@bl.random
|
160
|
+
@bl.right = false
|
161
|
+
assert !@bl.right
|
162
|
+
@bl.right = true
|
163
|
+
assert @bl.right
|
164
|
+
@bl.toggle_right
|
165
|
+
assert !@bl.right
|
166
|
+
@bl.toggle_right
|
167
|
+
assert @bl.right
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_num
|
171
|
+
@bl.random
|
172
|
+
@bl.num = false
|
173
|
+
assert !@bl.num
|
174
|
+
@bl.num = true
|
175
|
+
assert @bl.num
|
176
|
+
@bl.toggle_num
|
177
|
+
assert !@bl.num
|
178
|
+
@bl.toggle_num
|
179
|
+
assert @bl.num
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_cap
|
183
|
+
@bl.random
|
184
|
+
@bl.cap = false
|
185
|
+
assert !@bl.cap
|
186
|
+
@bl.cap = true
|
187
|
+
assert @bl.cap
|
188
|
+
@bl.toggle_cap
|
189
|
+
assert !@bl.cap
|
190
|
+
@bl.toggle_cap
|
191
|
+
assert @bl.cap
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_scr
|
195
|
+
@bl.random
|
196
|
+
@bl.scr = false
|
197
|
+
assert !@bl.scr
|
198
|
+
@bl.scr = true
|
199
|
+
assert @bl.scr
|
200
|
+
@bl.toggle_scr
|
201
|
+
assert !@bl.scr
|
202
|
+
@bl.toggle_scr
|
203
|
+
assert @bl.scr
|
204
|
+
end
|
205
|
+
end
|
206
|
+
# vim: set noet sw=2 ts=2:
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: blinkenlights
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-04-
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2006-04-09 00:00:00 +02:00
|
8
8
|
summary: Control the Blinkenlights on your keyboard from Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -12,7 +12,7 @@ email: flori@ping.de
|
|
12
12
|
homepage: http://blinkenlights.rubyforge.org
|
13
13
|
rubyforge_project: blinkenlights
|
14
14
|
description: ""
|
15
|
-
autorequire:
|
15
|
+
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
18
|
has_rdoc: true
|
@@ -33,15 +33,17 @@ files:
|
|
33
33
|
- GPL
|
34
34
|
- Rakefile
|
35
35
|
- VERSION
|
36
|
+
- tests
|
36
37
|
- CHANGES
|
37
38
|
- lib
|
38
39
|
- make_doc.rb
|
39
40
|
- README.en
|
40
41
|
- examples/netblinker.rb
|
41
42
|
- examples/loadbar.rb
|
43
|
+
- tests/test.rb
|
42
44
|
- lib/blinkenlights.rb
|
43
|
-
test_files:
|
44
|
-
|
45
|
+
test_files:
|
46
|
+
- tests/test.rb
|
45
47
|
rdoc_options:
|
46
48
|
- --title
|
47
49
|
- BlinkenLights in Ruby
|