midi-message 0.4.8 → 0.4.9

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.
@@ -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