midi-message 0.4.8 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,139 +1,45 @@
1
1
  require "helper"
2
2
 
3
- class ShortMessageTest < Minitest::Test
3
+ class MIDIMessage::MessageTest < Minitest::Test
4
4
 
5
- def test_channel_message
6
- message = MIDIMessage::ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
7
- refute_nil message
8
- assert message.kind_of?(MIDIMessage)
9
- assert_equal(0x9, message.status[0])
10
- assert_equal(0x0, message.status[1])
11
- assert_equal(0x40, message.data[0])
12
- assert_equal(0x40, message.data[1])
13
- assert_equal([0x90, 0x40, 0x40], message.to_a)
14
- assert_equal("904040", message.to_bytestr)
15
- end
16
-
17
- def test_to_type
18
- message = MIDIMessage::ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
19
- typemessage = message.to_type
20
- assert_equal(MIDIMessage::NoteOn, typemessage.class)
21
- assert_equal(message.status[1], typemessage.channel)
22
- assert_equal(message.data[0], typemessage.note)
23
- assert_equal(message.data[1], typemessage.velocity)
24
- assert_equal(message.to_a, typemessage.to_a)
25
- assert_equal(message.to_bytestr, typemessage.to_bytestr)
26
- end
27
-
28
- def test_note_off
29
- message = MIDIMessage::NoteOff.new(0, 0x40, 0x40)
30
- assert_equal(0, message.channel)
31
- assert_equal(0x40, message.note)
32
- assert_equal(0x40, message.velocity)
33
- assert_equal([0x80, 0x40, 0x40], message.to_a)
34
- assert_equal("804040", message.to_bytestr)
35
- end
36
-
37
- def test_note_on
38
- message = MIDIMessage::NoteOn.new(1, 0x40, 0x40)
39
- assert_equal(1, message.channel)
40
- assert_equal(0x40, message.note)
41
- assert_equal(0x40, message.velocity)
42
- assert_equal([0x91, 0x40, 0x40], message.to_a)
43
- assert_equal("914040", message.to_bytestr)
44
- assert_equal([0x91, 0x40, 0x40], message.to_bytes)
45
- end
46
-
47
- def test_change_channel
48
- message = MIDIMessage::NoteOn.new(1, 0x40, 0x40)
49
- assert_equal(1, message.channel)
50
- assert_equal(0x40, message.note)
51
- assert_equal(0x40, message.velocity)
52
- assert_equal([0x91, 0x40, 0x40], message.to_a)
53
- assert_equal("914040", message.to_bytestr)
54
- assert_equal([0x91, 0x40, 0x40], message.to_bytes)
5
+ context "Message" do
55
6
 
56
- message.channel = 3
57
- assert_equal(3, message.channel)
58
- assert_equal(0x40, message.note)
59
- assert_equal(0x40, message.velocity)
60
- assert_equal([0x93, 0x40, 0x40], message.to_a)
61
- assert_equal("934040", message.to_bytestr)
62
- assert_equal([0x93, 0x40, 0x40], message.to_bytes)
63
- end
7
+ context "#update" do
64
8
 
65
- def test_note_on_to_note_off
66
- message = MIDIMessage::NoteOn.new(0, 0x40, 0x40)
67
- assert_equal(0, message.channel)
68
- assert_equal(0x40, message.note)
69
- assert_equal(0x40, message.velocity)
70
- assert_equal([0x90, 0x40, 0x40], message.to_a)
71
- off = message.to_note_off
72
- assert_equal(0, off.channel)
73
- assert_equal(0x40, off.note)
74
- assert_equal(0x40, off.velocity)
75
- assert_equal([0x80, 0x40, 0x40], off.to_a)
76
- end
9
+ context "note" do
77
10
 
11
+ setup do
12
+ @message = MIDIMessage::NoteOn["E4"].new(0, 100)
13
+ assert_equal(0x40, @message.note)
14
+ assert_equal("E4", @message.name)
15
+ end
78
16
 
79
- def test_polyphonic_aftertouch
80
- message = MIDIMessage::PolyphonicAftertouch.new(1, 0x40, 0x40)
81
- assert_equal(1, message.channel)
82
- assert_equal(0x40, message.note)
83
- assert_equal(0x40, message.value)
84
- assert_equal([0xA1, 0x40, 0x40], message.to_a)
85
- assert_equal("A14040", message.to_bytestr)
86
- end
17
+ should "be mutable" do
18
+ @message.note += 5
19
+ assert_equal(0x45, @message.note)
20
+ assert_equal("A4", @message.name)
21
+ end
87
22
 
88
- def test_control_change
89
- message = MIDIMessage::ControlChange.new(2, 0x20, 0x20)
90
- assert_equal(message.channel, 2)
91
- assert_equal(0x20, message.index)
92
- assert_equal(0x20, message.value)
93
- assert_equal([0xB2, 0x20, 0x20], message.to_a)
94
- assert_equal("B22020", message.to_bytestr)
95
- end
23
+ end
96
24
 
97
- def test_program_change
98
- message = MIDIMessage::ProgramChange.new(3, 0x40)
99
- assert_equal(3, message.channel)
100
- assert_equal(0x40, message.program)
101
- assert_equal([0xC3, 0x40], message.to_a)
102
- assert_equal("C340", message.to_bytestr)
25
+ context "octave" do
103
26
 
104
- end
27
+ setup do
28
+ @message = MIDIMessage::NoteOn["E4"].new(0, 100)
29
+ assert_equal(0x40, @message.note)
30
+ assert_equal("E4", @message.name)
31
+ end
105
32
 
106
- def test_channel_aftertouch
107
- message = MIDIMessage::ChannelAftertouch.new(3, 0x50)
108
- assert_equal(3, message.channel)
109
- assert_equal(0x50, message.value)
110
- assert_equal([0xD3, 0x50], message.to_a)
111
- assert_equal("D350", message.to_bytestr)
112
- end
33
+ should "be mutable" do
34
+ @message.octave += 1
35
+ assert_equal(0x4C, @message.note)
36
+ assert_equal("E5", @message.name)
37
+ end
113
38
 
114
- def test_pitch_bend
115
- message = MIDIMessage::PitchBend.new(0, 0x50, 0xA0)
116
- assert_equal(0, message.channel)
117
- assert_equal(0x50, message.low)
118
- assert_equal(0xA0, message.high)
119
- assert_equal([0xE0, 0x50, 0xA0], message.to_a)
120
- assert_equal("E050A0", message.to_bytestr)
121
- end
39
+ end
122
40
 
123
- def test_system_common
124
- message = MIDIMessage::SystemCommon.new(1, 0x50, 0xA0)
125
- assert_equal(1, message.status[1])
126
- assert_equal(0x50, message.data[0])
127
- assert_equal(0xA0, message.data[1])
128
- assert_equal([0xF1, 0x50, 0xA0], message.to_a)
129
- assert_equal("F150A0", message.to_bytestr)
130
- end
41
+ end
131
42
 
132
- def test_system_realtime
133
- message = MIDIMessage::SystemRealtime.new(0x8)
134
- assert_equal(8, message.id)
135
- assert_equal([0xF8], message.to_a)
136
- assert_equal("F8", message.to_bytestr)
137
43
  end
138
44
 
139
45
  end
@@ -0,0 +1,139 @@
1
+ require "helper"
2
+
3
+ class MIDIMessage::MessagesTest < Minitest::Test
4
+
5
+ def test_channel_message
6
+ message = MIDIMessage::ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
7
+ refute_nil message
8
+ assert message.kind_of?(MIDIMessage)
9
+ assert_equal(0x9, message.status[0])
10
+ assert_equal(0x0, message.status[1])
11
+ assert_equal(0x40, message.data[0])
12
+ assert_equal(0x40, message.data[1])
13
+ assert_equal([0x90, 0x40, 0x40], message.to_a)
14
+ assert_equal("904040", message.to_bytestr)
15
+ end
16
+
17
+ def test_to_type
18
+ message = MIDIMessage::ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
19
+ typemessage = message.to_type
20
+ assert_equal(MIDIMessage::NoteOn, typemessage.class)
21
+ assert_equal(message.status[1], typemessage.channel)
22
+ assert_equal(message.data[0], typemessage.note)
23
+ assert_equal(message.data[1], typemessage.velocity)
24
+ assert_equal(message.to_a, typemessage.to_a)
25
+ assert_equal(message.to_bytestr, typemessage.to_bytestr)
26
+ end
27
+
28
+ def test_note_off
29
+ message = MIDIMessage::NoteOff.new(0, 0x40, 0x40)
30
+ assert_equal(0, message.channel)
31
+ assert_equal(0x40, message.note)
32
+ assert_equal(0x40, message.velocity)
33
+ assert_equal([0x80, 0x40, 0x40], message.to_a)
34
+ assert_equal("804040", message.to_bytestr)
35
+ end
36
+
37
+ def test_note_on
38
+ message = MIDIMessage::NoteOn.new(1, 0x40, 0x40)
39
+ assert_equal(1, message.channel)
40
+ assert_equal(0x40, message.note)
41
+ assert_equal(0x40, message.velocity)
42
+ assert_equal([0x91, 0x40, 0x40], message.to_a)
43
+ assert_equal("914040", message.to_bytestr)
44
+ assert_equal([0x91, 0x40, 0x40], message.to_bytes)
45
+ end
46
+
47
+ def test_change_channel
48
+ message = MIDIMessage::NoteOn.new(1, 0x40, 0x40)
49
+ assert_equal(1, message.channel)
50
+ assert_equal(0x40, message.note)
51
+ assert_equal(0x40, message.velocity)
52
+ assert_equal([0x91, 0x40, 0x40], message.to_a)
53
+ assert_equal("914040", message.to_bytestr)
54
+ assert_equal([0x91, 0x40, 0x40], message.to_bytes)
55
+
56
+ message.channel = 3
57
+ assert_equal(3, message.channel)
58
+ assert_equal(0x40, message.note)
59
+ assert_equal(0x40, message.velocity)
60
+ assert_equal([0x93, 0x40, 0x40], message.to_a)
61
+ assert_equal("934040", message.to_bytestr)
62
+ assert_equal([0x93, 0x40, 0x40], message.to_bytes)
63
+ end
64
+
65
+ def test_note_on_to_note_off
66
+ message = MIDIMessage::NoteOn.new(0, 0x40, 0x40)
67
+ assert_equal(0, message.channel)
68
+ assert_equal(0x40, message.note)
69
+ assert_equal(0x40, message.velocity)
70
+ assert_equal([0x90, 0x40, 0x40], message.to_a)
71
+ off = message.to_note_off
72
+ assert_equal(0, off.channel)
73
+ assert_equal(0x40, off.note)
74
+ assert_equal(0x40, off.velocity)
75
+ assert_equal([0x80, 0x40, 0x40], off.to_a)
76
+ end
77
+
78
+
79
+ def test_polyphonic_aftertouch
80
+ message = MIDIMessage::PolyphonicAftertouch.new(1, 0x40, 0x40)
81
+ assert_equal(1, message.channel)
82
+ assert_equal(0x40, message.note)
83
+ assert_equal(0x40, message.value)
84
+ assert_equal([0xA1, 0x40, 0x40], message.to_a)
85
+ assert_equal("A14040", message.to_bytestr)
86
+ end
87
+
88
+ def test_control_change
89
+ message = MIDIMessage::ControlChange.new(2, 0x20, 0x20)
90
+ assert_equal(message.channel, 2)
91
+ assert_equal(0x20, message.index)
92
+ assert_equal(0x20, message.value)
93
+ assert_equal([0xB2, 0x20, 0x20], message.to_a)
94
+ assert_equal("B22020", message.to_bytestr)
95
+ end
96
+
97
+ def test_program_change
98
+ message = MIDIMessage::ProgramChange.new(3, 0x40)
99
+ assert_equal(3, message.channel)
100
+ assert_equal(0x40, message.program)
101
+ assert_equal([0xC3, 0x40], message.to_a)
102
+ assert_equal("C340", message.to_bytestr)
103
+
104
+ end
105
+
106
+ def test_channel_aftertouch
107
+ message = MIDIMessage::ChannelAftertouch.new(3, 0x50)
108
+ assert_equal(3, message.channel)
109
+ assert_equal(0x50, message.value)
110
+ assert_equal([0xD3, 0x50], message.to_a)
111
+ assert_equal("D350", message.to_bytestr)
112
+ end
113
+
114
+ def test_pitch_bend
115
+ message = MIDIMessage::PitchBend.new(0, 0x50, 0xA0)
116
+ assert_equal(0, message.channel)
117
+ assert_equal(0x50, message.low)
118
+ assert_equal(0xA0, message.high)
119
+ assert_equal([0xE0, 0x50, 0xA0], message.to_a)
120
+ assert_equal("E050A0", message.to_bytestr)
121
+ end
122
+
123
+ def test_system_common
124
+ message = MIDIMessage::SystemCommon.new(1, 0x50, 0xA0)
125
+ assert_equal(1, message.status[1])
126
+ assert_equal(0x50, message.data[0])
127
+ assert_equal(0xA0, message.data[1])
128
+ assert_equal([0xF1, 0x50, 0xA0], message.to_a)
129
+ assert_equal("F150A0", message.to_bytestr)
130
+ end
131
+
132
+ def test_system_realtime
133
+ message = MIDIMessage::SystemRealtime.new(0x8)
134
+ assert_equal(8, message.id)
135
+ assert_equal([0xF8], message.to_a)
136
+ assert_equal("F8", message.to_bytestr)
137
+ end
138
+
139
+ end
@@ -1,6 +1,6 @@
1
1
  require "helper"
2
2
 
3
- class ParserTest < Minitest::Test
3
+ class MIDIMessage::ParserTest < Minitest::Test
4
4
 
5
5
  def test_sysex
6
6
  msg = MIDIMessage.parse(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7)
@@ -1,118 +1,265 @@
1
1
  require "helper"
2
2
 
3
- class SystemExclusiveMessageTest < Minitest::Test
3
+ class MIDIMessage::SystemExclusiveTest < Minitest::Test
4
4
 
5
- def test_node
6
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
7
- assert_equal(0x41, node.manufacturer_id)
8
- assert_equal(0x42, node.model_id)
9
- assert_equal(0x10, node.device_id)
10
- end
5
+ context "SystemExclusive" do
11
6
 
12
- def test_node_manufacturer_constant
13
- node = MIDIMessage::SystemExclusive::Node.new(:Roland, :model_id => 0x42, :device_id => 0x10)
14
- assert_equal(0x41, node.manufacturer_id)
15
- assert_equal(0x42, node.model_id)
16
- assert_equal(0x10, node.device_id)
17
- assert_equal([0x41, 0x10, 0x42], node.to_a)
18
- end
7
+ context "Node" do
19
8
 
20
- def test_no_node
21
- msg = MIDIMessage::SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10)
22
- assert_equal([0xF0, 0x12, 0x40, 0x7F, 0x00, 0x10, 0x31, 0xF7], msg.to_bytes)
23
- end
9
+ context "#initialize" do
24
10
 
25
- def test_node_without_model_id
26
- node = MIDIMessage::SystemExclusive::Node.new(:Roland, :device_id => 0x10)
27
- assert_equal(0x41, node.manufacturer_id)
28
- assert_equal(nil, node.model_id)
29
- assert_equal(0x10, node.device_id)
30
- assert_equal([0x41, 0x10], node.to_a)
31
- msg = MIDIMessage::SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10, :node => node)
32
- assert_equal(10, msg.to_bytes.size)
33
- assert_equal([0xF0, 0x41, 0x10, 0x12, 0x40, 0x7F, 0x00, 0x10, 0x31, 0xF7], msg.to_bytes)
34
- end
11
+ setup do
12
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
13
+ end
35
14
 
36
- def test_parse_weird_message
37
- msg = MIDIMessage::SystemExclusive.new(0xF0, 0x41, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7)
38
- assert_equal([0x41, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41], msg.data)
39
- assert_equal([0xF0, 0x41, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7], msg.to_bytes)
40
- end
15
+ should "populate message" do
16
+ assert_equal(0x41, @node.manufacturer_id)
17
+ assert_equal(0x42, @node.model_id)
18
+ assert_equal(0x10, @node.device_id)
19
+ end
41
20
 
42
- def test_new
43
- msg = MIDIMessage::SystemExclusive.new(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7)
44
- assert_equal(0x41, msg.node.manufacturer_id)
45
- assert_equal(0x42, msg.node.model_id)
46
- assert_equal(0x10, msg.node.device_id)
47
- assert_equal([0x40, 0x00, 0x7F], msg.address)
48
- assert_equal(0x10, msg.data)
49
- end
21
+ end
50
22
 
51
- def test_command
52
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
53
- msg = MIDIMessage::SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10, :node => node)
54
- assert_equal(node, msg.node)
55
- assert_equal([0x40, 0x7F, 0x00], msg.address)
56
- assert_equal(0x10, msg.data)
57
- end
23
+ context "#request" do
58
24
 
59
- def test_request_byte_size
60
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
61
- msg = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], 0x10, :node => node)
62
- assert_equal(node, msg.node)
63
- assert_equal([0x40, 0x7F, 0x00], msg.address)
64
- assert_equal([0x0, 0x0, 0x10], msg.size)
65
- end
25
+ setup do
26
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
27
+ @message = @node.request([0x40, 0x7F, 0x00], 0x10)
28
+ end
66
29
 
67
- def test_request_array_size
68
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
69
- msg = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], [0x0, 0x9, 0x10], :node => node)
70
- assert_equal(node, msg.node)
71
- assert_equal([0x40, 0x7F, 0x00], msg.address)
72
- assert_equal([0x0, 0x9, 0x10], msg.size)
73
- end
30
+ should "build correct request message object" do
31
+ assert_equal(@node, @message.node)
32
+ assert_equal([0x40, 0x7F, 0x00], @message.address)
33
+ assert_equal([0x0, 0x0, 0x10], @message.size)
34
+ end
74
35
 
75
- def test_request_numeric_size
76
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
77
- msg = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], 300, :node => node)
78
- assert_equal(node, msg.node)
79
- assert_equal([0x40, 0x7F, 0x00], msg.address)
80
- assert_equal([0x0, 0x35, 0xF7], msg.size)
81
- end
36
+ end
82
37
 
83
- def test_node_oriented
84
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
85
- msg = node.request([0x40, 0x7F, 0x00], 0x10)
86
- assert_equal(node, msg.node)
87
- assert_equal([0x40, 0x7F, 0x00], msg.address)
88
- assert_equal([0x0, 0x0, 0x10], msg.size)
89
- end
38
+ context "#manufacturer_id" do
90
39
 
91
- def test_prototype
92
- prototype = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], 0x10)
93
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
94
- msg = node.new_message_from(prototype)
95
- assert_equal(node, msg.node)
96
- assert_equal(prototype.address, msg.address)
97
- assert_equal(prototype.size, msg.size)
98
- end
40
+ setup do
41
+ @node = MIDIMessage::SystemExclusive::Node.new(:Roland, :model_id => 0x42, :device_id => 0x10)
42
+ end
99
43
 
100
- def test_checksum
101
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
102
- msg = MIDIMessage::SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => node)
103
- assert_equal(0x41, msg.checksum)
104
- end
44
+ should "populate manufacturer id from constant" do
45
+ assert_equal(0x41, @node.manufacturer_id)
46
+ assert_equal(0x42, @node.model_id)
47
+ assert_equal(0x10, @node.device_id)
48
+ assert_equal([0x41, 0x10, 0x42], @node.to_a)
49
+ end
105
50
 
106
- def test_to_a
107
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
108
- msg = MIDIMessage::SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => node)
109
- assert_equal([0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7], msg.to_bytes)
110
- end
51
+ end
52
+
53
+ context "#model_id" do
54
+
55
+ context "nil" do
56
+
57
+ setup do
58
+ @node = MIDIMessage::SystemExclusive::Node.new(:Roland, :device_id => 0x10)
59
+ @message = MIDIMessage::SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10, :node => @node)
60
+ end
61
+
62
+ should "create node with nil model_id" do
63
+ assert_equal(0x41, @node.manufacturer_id)
64
+ assert_equal(nil, @node.model_id)
65
+ assert_equal(0x10, @node.device_id)
66
+ assert_equal([0x41, 0x10], @node.to_a)
67
+ end
68
+
69
+ should "associate node with message" do
70
+ assert_equal(10, @message.to_bytes.size)
71
+ assert_equal([0xF0, 0x41, 0x10, 0x12, 0x40, 0x7F, 0x00, 0x10, 0x31, 0xF7], @message.to_bytes)
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+
78
+ context "#new_message_from" do
79
+
80
+ setup do
81
+ @prototype = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], 0x10)
82
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
83
+ @message = @node.new_message_from(@prototype)
84
+ end
85
+
86
+ should "create clone of original request" do
87
+ refute_nil(@message)
88
+ refute_equal(@prototype, @message)
89
+ assert_equal(@node, @message.node)
90
+ assert_equal(@prototype.address, @message.address)
91
+ assert_equal(@prototype.size, @message.size)
92
+ end
93
+
94
+ end
95
+
96
+ end
97
+
98
+ context "Command" do
99
+
100
+ context "#initialize" do
101
+
102
+ context "with node" do
103
+
104
+ setup do
105
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
106
+ @message = MIDIMessage::SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10, :node => @node)
107
+ end
108
+
109
+ should "create message and associate with node" do
110
+ assert_equal(@node, @message.node)
111
+ assert_equal([0x40, 0x7F, 0x00], @message.address)
112
+ assert_equal(0x10, @message.data)
113
+ end
114
+
115
+ end
116
+
117
+ context "without node" do
118
+
119
+ setup do
120
+ @message = MIDIMessage::SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10)
121
+ end
122
+
123
+ should "populate message" do
124
+ assert_equal([0xF0, 0x12, 0x40, 0x7F, 0x00, 0x10, 0x31, 0xF7], @message.to_bytes)
125
+ end
126
+
127
+ end
128
+
129
+ end
130
+
131
+ context "#checksum" do
132
+
133
+ setup do
134
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
135
+ @message = MIDIMessage::SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => @node)
136
+ end
137
+
138
+ should "have correct checksum" do
139
+ assert_equal(0x41, @message.checksum)
140
+ end
141
+
142
+ end
143
+
144
+ context "#to_a" do
145
+
146
+ setup do
147
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
148
+ @message = MIDIMessage::SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => @node)
149
+ end
150
+
151
+ should "have correct data in bytes" do
152
+ assert_equal([0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7], @message.to_bytes)
153
+ end
154
+
155
+ end
156
+
157
+ context "#to_s" do
158
+
159
+ setup do
160
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
161
+ @message = MIDIMessage::SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => @node)
162
+ end
163
+
164
+ should "have correct data as hex string" do
165
+ assert_equal("F04110421240007F0041F7", @message.to_bytestr)
166
+ end
167
+
168
+ end
169
+
170
+ end
171
+
172
+ context "Request" do
173
+
174
+ context "#size" do
175
+
176
+ setup do
177
+ @node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
178
+ end
179
+
180
+ context "array" do
181
+
182
+ setup do
183
+ @message = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], [0x0, 0x9, 0x10], :node => @node)
184
+ end
185
+
186
+ should "should have correct size data" do
187
+ assert_equal(@node, @message.node)
188
+ assert_equal([0x40, 0x7F, 0x00], @message.address)
189
+ assert_equal([0x0, 0x9, 0x10], @message.size)
190
+ end
191
+
192
+ end
193
+
194
+ context "byte" do
195
+
196
+ setup do
197
+ @message = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], 0x10, :node => @node)
198
+ end
199
+
200
+ should "should have correct size data" do
201
+ assert_equal(@node, @message.node)
202
+ assert_equal([0x40, 0x7F, 0x00], @message.address)
203
+ assert_equal([0x0, 0x0, 0x10], @message.size)
204
+ end
205
+
206
+ end
207
+
208
+ context "numeric" do
209
+
210
+ setup do
211
+ @message = MIDIMessage::SystemExclusive::Request.new([0x40, 0x7F, 0x00], 300, :node => @node)
212
+ end
213
+
214
+ should "should have correct size data" do
215
+ assert_equal(@node, @message.node)
216
+ assert_equal([0x40, 0x7F, 0x00], @message.address)
217
+ assert_equal([0x0, 0x35, 0xF7], @message.size)
218
+ end
219
+
220
+ end
221
+
222
+ end
223
+
224
+ end
225
+
226
+ context "Builder" do
227
+
228
+ context ".build" do
229
+
230
+ context "normal message" do
231
+
232
+ setup do
233
+ @message = MIDIMessage::SystemExclusive::Builder.build(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7)
234
+ end
235
+
236
+ should "create message" do
237
+ assert_equal(0x41, @message.node.manufacturer_id)
238
+ assert_equal(0x42, @message.node.model_id)
239
+ assert_equal(0x10, @message.node.device_id)
240
+ assert_equal([0x40, 0x00, 0x7F], @message.address)
241
+ assert_equal(0x10, @message.data)
242
+ end
243
+
244
+ end
245
+
246
+ context "weird message" do
247
+
248
+ setup do
249
+ @message = MIDIMessage::SystemExclusive::Builder.build(0xF0, 0x41, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7)
250
+ end
251
+
252
+ should "create message" do
253
+ assert_equal([0x41, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41], @message.data)
254
+ assert_equal([0xF0, 0x41, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7], @message.to_bytes)
255
+ end
256
+
257
+ end
258
+
259
+ end
260
+
261
+ end
111
262
 
112
- def test_to_s
113
- node = MIDIMessage::SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
114
- msg = MIDIMessage::SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => node)
115
- assert_equal("F04110421240007F0041F7", msg.to_bytestr)
116
263
  end
117
264
 
118
265
  end