midi-nibbler 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,6 @@
1
- #!/usr/bin/env ruby
1
+ require "helper"
2
2
 
3
- require 'helper'
4
-
5
- class BufferTest < Test::Unit::TestCase
6
-
7
- include Nibbler
8
- include TestHelper
3
+ class Nibbler::BufferTest < Test::Unit::TestCase
9
4
 
10
5
  def test_buffer_nibble_str
11
6
  nibbler = Nibbler.new
@@ -68,4 +63,4 @@ class BufferTest < Test::Unit::TestCase
68
63
  assert_equal(["9", "4", "0"], nibbler.buffer)
69
64
  end
70
65
 
71
- end
66
+ end
@@ -1,16 +1,11 @@
1
- #!/usr/bin/env ruby
2
-
3
1
  require "helper"
4
2
 
5
- class ParserRejectedTest < Test::Unit::TestCase
6
-
7
- include Nibbler
8
- include TestHelper
3
+ class Nibbler::ParserRejectedTest < Test::Unit::TestCase
9
4
 
10
5
  def test_leading_chars
11
6
  nibbler = Nibbler.new
12
7
  msg = nibbler.parse("0", "9", "04", "040")
13
- assert_equal(MIDIMessage::NoteOn, msg.class)
8
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
14
9
  assert_equal(["0"], nibbler.rejected)
15
10
  end
16
11
 
@@ -23,43 +18,43 @@ class ParserRejectedTest < Test::Unit::TestCase
23
18
  def test_leading_string
24
19
  nibbler = Nibbler.new
25
20
  msg = nibbler.parse("10", "9", "04", "040")
26
- assert_equal(MIDIMessage::NoteOn, msg.class)
21
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
27
22
  assert_equal(["1", "0"], nibbler.rejected)
28
23
  end
29
24
 
30
25
  def test_long_leading_string
31
26
  nibbler = Nibbler.new
32
27
  msg = nibbler.parse("000001000010", "9", "04", "040")
33
- assert_equal(MIDIMessage::NoteOn, msg.class)
28
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
34
29
  assert_equal("000001000010".split(//), nibbler.rejected)
35
30
  end
36
31
 
37
32
  def test_long_leading_string_overlap
38
33
  nibbler = Nibbler.new
39
34
  msg = nibbler.parse("000001000010090", "4", "040")
40
- assert_equal(MIDIMessage::NoteOn, msg.class)
35
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
41
36
  assert_equal("0000010000100".split(//), nibbler.rejected)
42
37
  end
43
38
 
44
39
  def test_leading_number
45
40
  nibbler = Nibbler.new
46
41
  msg = nibbler.parse(0x30, "9", "04", "040")
47
- assert_equal(MIDIMessage::NoteOn, msg.class)
42
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
48
43
  assert_equal(["3", "0"], nibbler.rejected)
49
44
  end
50
45
 
51
46
  def test_2_leading_numbers
52
47
  nibbler = Nibbler.new
53
48
  msg = nibbler.parse(0x60, 0x30, "9", "04", "040")
54
- assert_equal(MIDIMessage::NoteOn, msg.class)
49
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
55
50
  assert_equal(["6", "0", "3", "0"], nibbler.rejected)
56
51
  end
57
52
 
58
53
  def test_3_leading_numbers
59
54
  nibbler = Nibbler.new
60
55
  msg = nibbler.parse(0x00, 0x30, "9", "04", "040")
61
- assert_equal(MIDIMessage::NoteOn, msg.class)
56
+ assert_equal(::MIDIMessage::NoteOn, msg.class)
62
57
  assert_equal(["0", "0", "3", "0"], nibbler.rejected)
63
58
  end
64
59
 
65
- end
60
+ end
@@ -0,0 +1,188 @@
1
+ require "helper"
2
+
3
+ class Nibbler::ParserTest < Test::Unit::TestCase
4
+
5
+ def test_lookahead
6
+ parser = Nibbler::Parser.new
7
+ num = 6
8
+ parser.instance_variable_set("@buffer", ["9", "0", "4", "0", "5", "0"])
9
+ parser.send(:populate_current)
10
+ output = parser.send(:lookahead, num) { |nibble_2, bytes| [nibble_2, bytes] }
11
+ assert_equal([0,[0x90, 0x40, 0x50]], output[:message])
12
+ assert_equal(["9", "0", "4", "0", "5", "0"], output[:processed])
13
+ assert_equal([], parser.instance_variable_get("@current"))
14
+ end
15
+
16
+ def test_lookahead_trailing
17
+ parser = Nibbler::Parser.new
18
+ num = 6
19
+ parser.instance_variable_set("@buffer", ["9", "0", "4", "0", "5", "0", "5", "0"])
20
+ parser.send(:populate_current)
21
+ output = parser.send(:lookahead, num) { |nibble_2, bytes| [nibble_2, bytes] }
22
+ assert_equal([0,[0x90, 0x40, 0x50]], output[:message])
23
+ assert_equal(["9", "0", "4", "0", "5", "0"], output[:processed])
24
+ assert_equal(["5", "0"], parser.instance_variable_get("@current"))
25
+ end
26
+
27
+ def test_lookahead_too_short
28
+ parser = Nibbler::Parser.new
29
+ num = 6
30
+ parser.instance_variable_set("@buffer", ["9", "0", "4"])
31
+ parser.send(:populate_current)
32
+ output = parser.send(:lookahead, num) do |nibble_2, bytes|
33
+ {
34
+ :message => nibble_2,
35
+ :processed => bytes
36
+ }
37
+ end
38
+
39
+ assert_nil output
40
+ assert_equal(["9", "0", "4"], parser.instance_variable_get("@current"))
41
+ end
42
+
43
+ def test_lookahead_sysex
44
+ parser = Nibbler::Parser.new
45
+ parser.instance_variable_set("@buffer", "F04110421240007F0041F750".split(//))
46
+ parser.send(:populate_current)
47
+ output = parser.send(:lookahead_sysex) { |b| b }
48
+ assert_equal([0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7], output[:message])
49
+ assert_equal("F04110421240007F0041F7".split(//), output[:processed])
50
+ assert_equal(["5", "0"], parser.instance_variable_get("@current"))
51
+ end
52
+
53
+ def test_lookahead_sysex_too_short
54
+ parser = Nibbler::Parser.new
55
+ parser.instance_variable_set("@buffer", ["9", "0", "4"])
56
+ parser.send(:populate_current)
57
+ output = parser.send(:lookahead_sysex) { |b| b }
58
+
59
+ assert_nil output
60
+ assert_equal(["9", "0", "4"], parser.instance_variable_get("@current"))
61
+ end
62
+
63
+ def test_process
64
+ parser = Nibbler::Parser.new
65
+ short = ["9", "0", "4", "0", "5", "0", "5", "0"]
66
+ output = parser.send(:process, short)
67
+
68
+ assert_equal(::MIDIMessage::NoteOn, output[:messages].first.class)
69
+ assert_equal(["5", "0"], parser.buffer)
70
+ assert_equal(["9", "0", "4", "0", "5", "0"], output[:processed])
71
+ end
72
+
73
+ def test_process_running_status
74
+ parser = Nibbler::Parser.new
75
+ two_msgs = ["9", "0", "4", "0", "5", "0", "4", "0", "6", "0"]
76
+ output = parser.send(:process, two_msgs)
77
+
78
+ assert_not_nil output
79
+ assert_equal(::MIDIMessage::NoteOn, output[:messages][0].class)
80
+ #assert_equal(::MIDIMessage::NoteOn, output[:messages][1].class)
81
+ assert_equal([], parser.buffer)
82
+ assert_equal(["9", "0", "4", "0", "5", "0", "4", "0", "6", "0"], output[:processed])
83
+ end
84
+
85
+ def test_process_multiple_overlapping_calls
86
+ parser = Nibbler::Parser.new
87
+ short = ["9", "0", "4", "0", "5", "0", "9", "0"]
88
+ short2 = ["3", "0", "2", "0", "1", "0"]
89
+
90
+ output = parser.send(:process, short)
91
+
92
+ assert_not_nil output
93
+ assert_equal(::MIDIMessage::NoteOn, output[:messages].first.class)
94
+ assert_equal(["9", "0"], parser.buffer)
95
+ assert_equal(["9", "0", "4", "0", "5", "0"], output[:processed])
96
+
97
+ output2 = parser.send(:process, short2)
98
+
99
+ assert_not_nil output2
100
+ assert_equal(::MIDIMessage::NoteOn, output2[:messages].first.class)
101
+ assert_equal(["1", "0"], parser.buffer)
102
+ assert_equal(["9", "0", "3", "0", "2", "0"], output2[:processed])
103
+ end
104
+
105
+ def test_nibbles_to_message_leading
106
+ parser = Nibbler::Parser.new
107
+ short = ["5", "0", "9", "0", "4", "0", "5", "0"]
108
+ parser.instance_variable_set("@buffer", short)
109
+ parser.send(:populate_current)
110
+ output = parser.send(:nibbles_to_message)
111
+
112
+ assert_nil output
113
+ assert_equal(["5", "0", "9", "0", "4", "0", "5", "0"], parser.buffer)
114
+ end
115
+
116
+ def test_nibbles_to_message_trailing
117
+ parser = Nibbler::Parser.new
118
+ short = ["9", "0", "4", "0", "5", "0", "5", "0"]
119
+ parser.instance_variable_set("@buffer", short)
120
+ parser.send(:populate_current)
121
+ output = parser.send(:nibbles_to_message)
122
+
123
+ assert_not_nil output
124
+ assert_equal(::MIDIMessage::NoteOn, output[:message].class)
125
+ assert_equal(["5", "0"], parser.instance_variable_get("@current"))
126
+ assert_equal(["9", "0", "4", "0", "5", "0"], output[:processed])
127
+ end
128
+
129
+ def test_nibbles_to_message
130
+ parser = Nibbler::Parser.new
131
+ short = ["9", "0", "4", "0", "5", "0", "5", "0"]
132
+ parser.instance_variable_set("@buffer", short)
133
+ parser.send(:populate_current)
134
+ output = parser.send(:nibbles_to_message)
135
+
136
+ assert_not_nil output
137
+ assert_equal(::MIDIMessage::NoteOn, output[:message].class)
138
+ assert_equal(["5", "0"], parser.instance_variable_get("@current"))
139
+ assert_equal(["9", "0", "4", "0", "5", "0"], output[:processed])
140
+ end
141
+
142
+ def test_nibbles_to_message_running_status
143
+ parser = Nibbler::Parser.new
144
+ short = ["9", "0", "4", "0", "5", "0"]
145
+ parser.instance_variable_set("@buffer", short)
146
+ parser.send(:populate_current)
147
+ output = parser.send(:nibbles_to_message)
148
+
149
+ assert_not_nil output
150
+ assert_equal(::MIDIMessage::NoteOn, output[:message].class)
151
+
152
+ running_status = ["5", "0", "6", "0"]
153
+ parser.instance_variable_set("@buffer", running_status)
154
+ parser.send(:populate_current)
155
+ output = parser.send(:nibbles_to_message)
156
+
157
+ assert_not_nil output
158
+ assert_equal(::MIDIMessage::NoteOn, output[:message].class)
159
+ assert_equal(["5", "0", "6", "0"], output[:processed])
160
+ end
161
+
162
+ def test_nibbles_to_message_sysex
163
+ parser = Nibbler::Parser.new
164
+ sysex = "F04110421240007F0041F750".split(//)
165
+ parser.instance_variable_set("@buffer", sysex)
166
+ parser.send(:populate_current)
167
+ output = parser.send(:nibbles_to_message)
168
+
169
+ assert_not_nil output
170
+ assert_equal(::MIDIMessage::SystemExclusive::Command, output[:message].class)
171
+ assert_equal(["5", "0"], parser.instance_variable_get("@current"))
172
+ assert_equal("F04110421240007F0041F7".split(//), output[:processed])
173
+ end
174
+
175
+ def test_message_library
176
+ parser = nil
177
+ assert_nothing_raised Exception do
178
+ parser = Nibbler::Parser.new(:message_lib => :midilib)
179
+ end
180
+ assert_equal Nibbler::Midilib, parser.instance_variable_get("@message")
181
+
182
+ assert_nothing_raised Exception do
183
+ parser = Nibbler::Parser.new
184
+ end
185
+ assert_equal Nibbler::MIDIMessage, parser.instance_variable_get("@message")
186
+ end
187
+
188
+ end
@@ -0,0 +1,135 @@
1
+ require "helper"
2
+
3
+ class Nibbler::SessionTest < Test::Unit::TestCase
4
+
5
+ def test_varying_length_strings
6
+ session = Nibbler::Session.new
7
+ message = session.parse("9", "04", "040")
8
+
9
+ assert_not_nil message
10
+ assert_equal(MIDIMessage::NoteOn, message.class)
11
+ end
12
+
13
+ def test_note_off
14
+ session = Nibbler::Session.new
15
+ message = session.parse(0x80, 0x40, 0x40)
16
+
17
+ assert_not_nil message
18
+ assert_equal(MIDIMessage::NoteOff, message.class)
19
+ assert_equal(0, message.channel)
20
+ assert_equal(0x40, message.note)
21
+ assert_equal(0x40, message.velocity)
22
+ end
23
+
24
+ def test_note_on
25
+ session = Nibbler::Session.new
26
+ message = session.parse(0x90, 0x40, 0x40)
27
+
28
+ assert_not_nil message
29
+ assert_equal(MIDIMessage::NoteOn, message.class)
30
+ assert_equal(0, message.channel)
31
+ assert_equal(0x40, message.note)
32
+ assert_equal(0x40, message.velocity)
33
+ end
34
+
35
+ def test_timestamp
36
+ session = Nibbler::Session.new
37
+ stamp = Time.now.to_i
38
+ report = session.parse(0x90, 0x40, 0x40, :timestamp => stamp)
39
+ message = report[:messages]
40
+
41
+ assert_not_nil message
42
+ assert_equal(MIDIMessage::NoteOn, message.class)
43
+ assert_equal(0, message.channel)
44
+ assert_equal(0x40, message.note)
45
+ assert_equal(0x40, message.velocity)
46
+ assert_equal(stamp, report[:timestamp])
47
+ end
48
+
49
+ def test_polyphonic_aftertouch
50
+ session = Nibbler::Session.new
51
+ message = session.parse(0xA1, 0x40, 0x40)
52
+
53
+ assert_not_nil message
54
+ assert_equal(MIDIMessage::PolyphonicAftertouch, message.class)
55
+ assert_equal(1, message.channel)
56
+ assert_equal(0x40, message.note)
57
+ assert_equal(0x40, message.value)
58
+ end
59
+
60
+ def test_control_change
61
+ session = Nibbler::Session.new
62
+ message = session.parse(0xB2, 0x20, 0x20)
63
+
64
+ assert_not_nil message
65
+ assert_equal(MIDIMessage::ControlChange, message.class)
66
+ assert_equal(message.channel, 2)
67
+ assert_equal(0x20, message.index)
68
+ assert_equal(0x20, message.value)
69
+ end
70
+
71
+ def test_program_change
72
+ session = Nibbler::Session.new
73
+ message = session.parse(0xC3, 0x40)
74
+
75
+ assert_not_nil message
76
+ assert_equal(MIDIMessage::ProgramChange, message.class)
77
+ assert_equal(3, message.channel)
78
+ assert_equal(0x40, message.program)
79
+ end
80
+
81
+ def test_channel_aftertouch
82
+ session = Nibbler::Session.new
83
+ message = session.parse(0xD3, 0x50)
84
+
85
+ assert_not_nil message
86
+ assert_equal(MIDIMessage::ChannelAftertouch, message.class)
87
+ assert_equal(3, message.channel)
88
+ assert_equal(0x50, message.value)
89
+ end
90
+
91
+ def test_pitch_bend
92
+ session = Nibbler::Session.new
93
+ message = session.parse(0xE0, 0x20, 0x00) # center
94
+
95
+ assert_not_nil message
96
+ assert_equal(MIDIMessage::PitchBend, message.class)
97
+ assert_equal(0, message.channel)
98
+ assert_equal(0x20, message.low)
99
+ assert_equal(0x00, message.high)
100
+ end
101
+
102
+ def test_system_common_generic_3_bytes
103
+ session = Nibbler::Session.new
104
+ message = session.parse(0xF1, 0x50, 0xA0)
105
+
106
+ assert_not_nil message
107
+ assert_equal(MIDIMessage::SystemCommon, message.class)
108
+ assert_equal(1, message.status[1])
109
+ assert_equal(0x50, message.data[0])
110
+ assert_equal(0xA0, message.data[1])
111
+ end
112
+
113
+ def test_system_common_generic_2_bytes
114
+ session = Nibbler::Session.new
115
+ message = session.parse(0xF1, 0x50)
116
+ assert_equal(MIDIMessage::SystemCommon, message.class)
117
+ assert_equal(1, message.status[1])
118
+ assert_equal(0x50, message.data[0])
119
+ end
120
+
121
+ def test_system_common_generic_1_byte
122
+ session = Nibbler::Session.new
123
+ message = session.parse(0xF1)
124
+ assert_equal(MIDIMessage::SystemCommon, message.class)
125
+ assert_equal(1, message.status[1])
126
+ end
127
+
128
+ def test_system_realtime
129
+ session = Nibbler::Session.new
130
+ message = session.parse(0xF8)
131
+ assert_equal(MIDIMessage::SystemRealtime, message.class)
132
+ assert_equal(8, message.id)
133
+ end
134
+
135
+ end
@@ -1,15 +1,10 @@
1
- #!/usr/bin/env ruby
1
+ require "helper"
2
2
 
3
- require 'helper'
4
-
5
- class TypeConversionTest < Test::Unit::TestCase
6
-
7
- include Nibbler
8
- include TestHelper
3
+ class Nibbler::TypeConversionTest < Test::Unit::TestCase
9
4
 
10
5
  def test_hex_chars_to_numeric_bytes
11
6
  nibbles = ["4", "5", "9", "3"]
12
- bytes = TypeConversion.hex_chars_to_numeric_bytes(nibbles)
7
+ bytes = Nibbler::TypeConversion.hex_chars_to_numeric_bytes(nibbles)
13
8
 
14
9
  assert_equal(["4", "5", "9", "3"], nibbles)
15
10
  assert_equal([0x45, 0x93], bytes)
@@ -17,7 +12,7 @@ class TypeConversionTest < Test::Unit::TestCase
17
12
 
18
13
  def test_hex_str_to_hex_chars
19
14
  str = "904050"
20
- nibbles = TypeConversion.send(:hex_str_to_hex_chars, str)
15
+ nibbles = Nibbler::TypeConversion.send(:hex_str_to_hex_chars, str)
21
16
 
22
17
  assert_equal("904050", str)
23
18
  assert_equal(["9", "0", "4", "0", "5", "0"], nibbles)
@@ -25,10 +20,10 @@ class TypeConversionTest < Test::Unit::TestCase
25
20
 
26
21
  def test_numeric_byte_to_hex_chars
27
22
  num = 0x90
28
- nibbles = TypeConversion.send(:numeric_byte_to_hex_chars, num)
23
+ nibbles = Nibbler::TypeConversion.send(:numeric_byte_to_hex_chars, num)
29
24
 
30
25
  assert_equal(0x90, num)
31
26
  assert_equal(["9", "0"], nibbles)
32
27
  end
33
28
 
34
- end
29
+ end