unimidi 0.4.7 → 0.4.8
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.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/lib/unimidi.rb +4 -3
- data/lib/unimidi/device.rb +18 -7
- data/lib/unimidi/input/buffer_access.rb +1 -1
- data/lib/unimidi/input/stream_reader.rb +1 -1
- data/lib/unimidi/loader.rb +22 -19
- data/lib/unimidi/output.rb +7 -7
- data/lib/unimidi/platform.rb +13 -5
- data/lib/unimidi/type_conversion.rb +6 -6
- data/test/helper.rb +1 -64
- data/test/integration/helper.rb +76 -0
- data/test/{input_test.rb → integration/input_test.rb} +4 -4
- data/test/{functional_test.rb → integration/io_test.rb} +7 -7
- data/test/unit/device_test.rb +197 -0
- data/test/unit/helper.rb +40 -0
- data/test/unit/platform_test.rb +37 -0
- data/test/{type_conversion_test.rb → unit/type_conversion_test.rb} +1 -1
- metadata +11 -10
- data/test/adapter_test.rb +0 -66
- data/test/class_methods_test.rb +0 -95
- data/test/platform_test.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf68a7b6957f53fe2ccdb7922af43d3ee59bcc8e
|
4
|
+
data.tar.gz: ad6dc382083631d6f8277e319d39af5e5bc27cad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8386b3217cae71e3712d12644c2371b6fd9b6bbcf11fb3b1537a38773a4fc077da771ef3713e417bca1248d6a4f1f6ab605dbd505a5aa0a686377b60b8605b88
|
7
|
+
data.tar.gz: 630f39aa818ad71e336dca7597e14a8c5b9bdf1237e9d8839aede3e50f504b763aa60f1a7512426903163f3e270f43d785c246f1bff0950adf84d2f2508868c4
|
data/LICENSE
CHANGED
data/README.md
CHANGED
data/lib/unimidi.rb
CHANGED
@@ -1,24 +1,25 @@
|
|
1
1
|
#
|
2
|
+
# UniMIDI
|
2
3
|
# Realtime MIDI IO for Ruby
|
3
4
|
#
|
4
|
-
# (c)2010-
|
5
|
+
# (c)2010-2017 Ari Russo
|
5
6
|
# Licensed under the Apache 2.0 License
|
6
7
|
#
|
7
8
|
|
8
9
|
# modules
|
9
10
|
require "unimidi/command"
|
10
11
|
require "unimidi/device"
|
11
|
-
require "unimidi/loader"
|
12
12
|
require "unimidi/platform"
|
13
13
|
require "unimidi/type_conversion"
|
14
14
|
|
15
15
|
# classes
|
16
16
|
require "unimidi/input"
|
17
|
+
require "unimidi/loader"
|
17
18
|
require "unimidi/output"
|
18
19
|
|
19
20
|
module UniMIDI
|
20
21
|
|
21
|
-
VERSION = "0.4.
|
22
|
+
VERSION = "0.4.8"
|
22
23
|
|
23
24
|
Platform.bootstrap
|
24
25
|
|
data/lib/unimidi/device.rb
CHANGED
@@ -63,38 +63,43 @@ module UniMIDI
|
|
63
63
|
end
|
64
64
|
|
65
65
|
# Select the device at the given index and enable it
|
66
|
-
# @param [
|
66
|
+
# @param [Integer] index
|
67
67
|
# @return [Input, Output]
|
68
68
|
def use(index, &block)
|
69
69
|
index = case index
|
70
70
|
when :first then 0
|
71
|
-
when :last then all.
|
71
|
+
when :last then all.count - 1
|
72
72
|
else index
|
73
73
|
end
|
74
|
-
use_device(
|
74
|
+
use_device(at(index), &block)
|
75
75
|
end
|
76
76
|
alias_method :open, :use
|
77
77
|
|
78
78
|
# Select the device at the given index
|
79
|
-
# @param [
|
79
|
+
# @param [Integer] index
|
80
80
|
# @return [Input, Output]
|
81
|
-
def
|
81
|
+
def at(index)
|
82
82
|
all[index]
|
83
83
|
end
|
84
|
+
alias_method :[], :at
|
84
85
|
|
85
86
|
private
|
86
87
|
|
87
88
|
# The direction of the device eg "input", "output"
|
88
89
|
# @return [String]
|
89
90
|
def get_direction
|
90
|
-
|
91
|
+
name.split("::").last.downcase
|
91
92
|
end
|
92
93
|
|
93
94
|
# Enable the given device
|
94
95
|
# @param [Input, Output] device
|
95
96
|
# @return [Input, Output]
|
96
97
|
def use_device(device, &block)
|
97
|
-
|
98
|
+
if device.enabled?
|
99
|
+
yield(device) if block_given?
|
100
|
+
else
|
101
|
+
device.open(&block)
|
102
|
+
end
|
98
103
|
device
|
99
104
|
end
|
100
105
|
|
@@ -155,6 +160,12 @@ module UniMIDI
|
|
155
160
|
end
|
156
161
|
end
|
157
162
|
|
163
|
+
# Returns true if the device is not enabled
|
164
|
+
# @return [Boolean]
|
165
|
+
def closed?
|
166
|
+
!@enabled
|
167
|
+
end
|
168
|
+
|
158
169
|
# Add attributes for the device instance
|
159
170
|
# :direction, :id, :name
|
160
171
|
def self.included(base)
|
@@ -35,7 +35,7 @@ module UniMIDI
|
|
35
35
|
# Gets any messages in the buffer in the same format as Input#gets_data. . This doesn't remove
|
36
36
|
# the messages from the buffer or have any effect on the StreamReader pointer position
|
37
37
|
# @param [*Object] args
|
38
|
-
# @return [Array<
|
38
|
+
# @return [Array<Integer>]
|
39
39
|
def gets_buffer_data(*args)
|
40
40
|
@device.buffer.map { |msg| msg[:data] }
|
41
41
|
end
|
data/lib/unimidi/loader.rb
CHANGED
@@ -1,29 +1,32 @@
|
|
1
1
|
module UniMIDI
|
2
2
|
|
3
3
|
# Populate UniMIDI devices using the underlying device objects from the platform-specific gems
|
4
|
-
|
4
|
+
class Loader
|
5
5
|
|
6
|
-
|
6
|
+
class << self
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
# Use the given platform-specific adapter to load devices
|
9
|
+
# @param [UniMIDI::Adapter::Loader] loader
|
10
|
+
def use(loader)
|
11
|
+
@loader = loader
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
# Get all MIDI devices
|
15
|
+
# @param [Hash] options
|
16
|
+
# @option options [Symbol] :direction Return only a particular direction of device eg :input, :output
|
17
|
+
# @return [Array<Input>, Array<Output>]
|
18
|
+
def devices(options = {})
|
19
|
+
if @devices.nil?
|
20
|
+
inputs = @loader.inputs.map { |device| ::UniMIDI::Input.new(device) }
|
21
|
+
outputs = @loader.outputs.map { |device| ::UniMIDI::Output.new(device) }
|
22
|
+
@devices = {
|
23
|
+
:input => inputs,
|
24
|
+
:output => outputs
|
25
|
+
}
|
26
|
+
end
|
27
|
+
options[:direction].nil? ? @devices.values.flatten : @devices[options[:direction]]
|
25
28
|
end
|
26
|
-
|
29
|
+
|
27
30
|
end
|
28
31
|
|
29
32
|
end
|
data/lib/unimidi/output.rb
CHANGED
@@ -12,7 +12,7 @@ module UniMIDI
|
|
12
12
|
Loader.devices(:direction => :output)
|
13
13
|
end
|
14
14
|
|
15
|
-
# Sends a message to the output.
|
15
|
+
# Sends a message to the output.
|
16
16
|
#
|
17
17
|
# The message format can be:
|
18
18
|
#
|
@@ -21,18 +21,18 @@ module UniMIDI
|
|
21
21
|
# 3. A string of bytes eg "904040"
|
22
22
|
# 4. An array of strings ["904040", "804040"]
|
23
23
|
#
|
24
|
-
# @param [*Array<
|
25
|
-
# @return [Array<
|
24
|
+
# @param [*Array<Integer>, *Array<String>, *Integer, *String] messages
|
25
|
+
# @return [Array<Integer>, Array<String>]
|
26
26
|
def puts(*messages)
|
27
27
|
message = messages.first
|
28
28
|
case message
|
29
29
|
when Array then messages.each { |array| puts(*array.flatten) }
|
30
|
-
when
|
30
|
+
when Integer then puts_bytes(*messages)
|
31
31
|
when String then puts_s(*messages)
|
32
32
|
else
|
33
33
|
if message.respond_to?(:to_bytes)
|
34
34
|
puts_bytes(*message.to_bytes.flatten)
|
35
|
-
elsif message.respond_to?(:to_a)
|
35
|
+
elsif message.respond_to?(:to_a)
|
36
36
|
puts_bytes(*message.to_a.flatten)
|
37
37
|
end
|
38
38
|
end
|
@@ -51,8 +51,8 @@ module UniMIDI
|
|
51
51
|
|
52
52
|
# Sends a message to the output in a form of bytes eg output.puts_bytes(0x90, 0x40, 0x40).
|
53
53
|
# This method does not do type checking.
|
54
|
-
# @param [*Array<
|
55
|
-
# @return [Array<
|
54
|
+
# @param [*Array<Integer>] messages
|
55
|
+
# @return [Array<Integer>, Array<Array<Integer>>]
|
56
56
|
def puts_bytes(*messages)
|
57
57
|
@device.puts_bytes(*messages)
|
58
58
|
messages.count < 2 ? messages[0] : messages
|
data/lib/unimidi/platform.rb
CHANGED
@@ -4,23 +4,31 @@ module UniMIDI
|
|
4
4
|
module Platform
|
5
5
|
|
6
6
|
extend self
|
7
|
-
|
7
|
+
|
8
8
|
# Loads the proper MIDI library and adapter for the user's environment
|
9
9
|
def bootstrap
|
10
|
-
|
10
|
+
require("unimidi/adapter/#{platform_lib}")
|
11
|
+
Loader.use(platform_module::Loader)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def platform_lib
|
17
|
+
case RUBY_PLATFORM
|
11
18
|
when /darwin/ then "ffi-coremidi"
|
12
19
|
when /java/ then "midi-jruby"
|
13
20
|
when /linux/ then "alsa-rawmidi"
|
14
21
|
when /mingw/ then "midi-winmm"
|
15
22
|
end
|
16
|
-
|
17
|
-
|
23
|
+
end
|
24
|
+
|
25
|
+
def platform_module
|
26
|
+
case RUBY_PLATFORM
|
18
27
|
when /darwin/ then Adapter::CoreMIDI
|
19
28
|
when /java/ then Adapter::MIDIJRuby
|
20
29
|
when /linux/ then Adapter::AlsaRawMIDI
|
21
30
|
when /mingw/ then Adapter::MIDIWinMM
|
22
31
|
end
|
23
|
-
Loader.use(interface::Loader)
|
24
32
|
end
|
25
33
|
|
26
34
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
module UniMIDI
|
2
|
-
|
2
|
+
|
3
3
|
# Utility for converting between different data formats
|
4
4
|
module TypeConversion
|
5
5
|
|
6
6
|
extend self
|
7
|
-
|
8
|
-
# Convert an array of numeric bytes to string of hex bytes
|
9
|
-
# @param [Array<
|
7
|
+
|
8
|
+
# Convert an array of numeric bytes to string of hex bytes
|
9
|
+
# @param [Array<Integer>] byte An array of numeric bytes eg [0x90, 0x40, 0x40]
|
10
10
|
# @return [String] A string of hex bytes eg "904040"
|
11
11
|
def numeric_byte_array_to_hex_string(bytes)
|
12
12
|
bytes.map { |b| b.to_s(16) }.join
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
end
|
data/test/helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
dir = File.dirname(File.expand_path(__FILE__))
|
2
|
-
$LOAD_PATH.unshift
|
2
|
+
$LOAD_PATH.unshift("#{dir}/../lib")
|
3
3
|
|
4
4
|
require "minitest/autorun"
|
5
5
|
require "mocha/test_unit"
|
@@ -8,67 +8,4 @@ require "unimidi"
|
|
8
8
|
|
9
9
|
module TestHelper
|
10
10
|
|
11
|
-
extend self
|
12
|
-
|
13
|
-
def sysex_ok?
|
14
|
-
ENV["_system_name"] != "OSX" || !RUBY_PLATFORM.include?("java")
|
15
|
-
end
|
16
|
-
|
17
|
-
def devices
|
18
|
-
if @devices.nil?
|
19
|
-
@devices = {}
|
20
|
-
{ :input => UniMIDI::Input, :output => UniMIDI::Output }.each do |type, klass|
|
21
|
-
@devices[type] = klass.gets
|
22
|
-
end
|
23
|
-
end
|
24
|
-
@devices
|
25
|
-
end
|
26
|
-
|
27
|
-
def bytestrs_to_ints(arr)
|
28
|
-
data = arr.map { |m| m[:data] }.join
|
29
|
-
output = []
|
30
|
-
until (bytestr = data.slice!(0,2)).eql?("")
|
31
|
-
output << bytestr.hex
|
32
|
-
end
|
33
|
-
output
|
34
|
-
end
|
35
|
-
|
36
|
-
class MIDIObj
|
37
|
-
def initialize(*bytes)
|
38
|
-
@bytes = bytes
|
39
|
-
end
|
40
|
-
def to_bytes
|
41
|
-
@bytes
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def message_objects
|
46
|
-
numeric_messages.map { |message| MIDIObj.new(*message) }
|
47
|
-
end
|
48
|
-
|
49
|
-
def numeric_messages
|
50
|
-
messages = [
|
51
|
-
[0x90, 100, 100], # note on
|
52
|
-
[0x90, 43, 100], # note on
|
53
|
-
[0x90, 76, 100], # note on
|
54
|
-
[0x90, 60, 100], # note on
|
55
|
-
[0x80, 100, 100] # note off
|
56
|
-
]
|
57
|
-
if sysex_ok?
|
58
|
-
messages << [0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7]
|
59
|
-
end
|
60
|
-
messages
|
61
|
-
end
|
62
|
-
|
63
|
-
def string_messages
|
64
|
-
messages = [
|
65
|
-
"906440", # note on
|
66
|
-
"804340" # note off
|
67
|
-
]
|
68
|
-
if sysex_ok?
|
69
|
-
messages << "F04110421240007F0041F7"
|
70
|
-
end
|
71
|
-
messages
|
72
|
-
end
|
73
|
-
|
74
11
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require "helper"
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "mocha/test_unit"
|
4
|
+
require "shoulda-context"
|
5
|
+
require "unimidi"
|
6
|
+
|
7
|
+
module TestHelper
|
8
|
+
|
9
|
+
module Integration
|
10
|
+
|
11
|
+
extend self
|
12
|
+
|
13
|
+
def sysex_ok?
|
14
|
+
ENV["_system_name"] != "OSX" || !RUBY_PLATFORM.include?("java")
|
15
|
+
end
|
16
|
+
|
17
|
+
def devices
|
18
|
+
if @devices.nil?
|
19
|
+
@devices = {}
|
20
|
+
{ :input => UniMIDI::Input, :output => UniMIDI::Output }.each do |type, klass|
|
21
|
+
@devices[type] = klass.gets
|
22
|
+
end
|
23
|
+
end
|
24
|
+
@devices
|
25
|
+
end
|
26
|
+
|
27
|
+
def bytestrs_to_ints(arr)
|
28
|
+
data = arr.map { |m| m[:data] }.join
|
29
|
+
output = []
|
30
|
+
until (bytestr = data.slice!(0,2)).eql?("")
|
31
|
+
output << bytestr.hex
|
32
|
+
end
|
33
|
+
output
|
34
|
+
end
|
35
|
+
|
36
|
+
class MIDIObj
|
37
|
+
def initialize(*bytes)
|
38
|
+
@bytes = bytes
|
39
|
+
end
|
40
|
+
def to_bytes
|
41
|
+
@bytes
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def message_objects
|
46
|
+
numeric_messages.map { |message| MIDIObj.new(*message) }
|
47
|
+
end
|
48
|
+
|
49
|
+
def numeric_messages
|
50
|
+
messages = [
|
51
|
+
[0x90, 100, 100], # note on
|
52
|
+
[0x90, 43, 100], # note on
|
53
|
+
[0x90, 76, 100], # note on
|
54
|
+
[0x90, 60, 100], # note on
|
55
|
+
[0x80, 100, 100] # note off
|
56
|
+
]
|
57
|
+
if sysex_ok?
|
58
|
+
messages << [0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7]
|
59
|
+
end
|
60
|
+
messages
|
61
|
+
end
|
62
|
+
|
63
|
+
def string_messages
|
64
|
+
messages = [
|
65
|
+
"906440", # note on
|
66
|
+
"804340" # note off
|
67
|
+
]
|
68
|
+
if sysex_ok?
|
69
|
+
messages << "F04110421240007F0041F7"
|
70
|
+
end
|
71
|
+
messages
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "integration/helper"
|
2
2
|
|
3
3
|
class UniMIDI::InputTest < Minitest::Test
|
4
4
|
|
@@ -8,9 +8,9 @@ class UniMIDI::InputTest < Minitest::Test
|
|
8
8
|
|
9
9
|
setup do
|
10
10
|
sleep(1)
|
11
|
-
@input = TestHelper.devices[:input].open
|
12
|
-
@output = TestHelper.devices[:output].open
|
13
|
-
@messages = TestHelper.numeric_messages
|
11
|
+
@input = TestHelper::Integration.devices[:input].open
|
12
|
+
@output = TestHelper::Integration.devices[:output].open
|
13
|
+
@messages = TestHelper::Integration.numeric_messages
|
14
14
|
@bytes = []
|
15
15
|
end
|
16
16
|
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require "helper"
|
1
|
+
require "integration/helper"
|
2
2
|
|
3
|
-
class UniMIDI::
|
3
|
+
class UniMIDI::IoTest < Minitest::Test
|
4
4
|
|
5
5
|
# ** these tests assume that TestOutput is connected to TestInput
|
6
6
|
context "UniMIDI" do
|
7
7
|
|
8
8
|
setup do
|
9
|
-
@input = TestHelper.devices[:input].open
|
10
|
-
@output = TestHelper.devices[:output].open
|
9
|
+
@input = TestHelper::Integration.devices[:input].open
|
10
|
+
@output = TestHelper::Integration.devices[:output].open
|
11
11
|
end
|
12
12
|
|
13
13
|
teardown do
|
@@ -20,7 +20,7 @@ class UniMIDI::FunctionalTest < Minitest::Test
|
|
20
20
|
context "using numeric bytes" do
|
21
21
|
|
22
22
|
setup do
|
23
|
-
@messages = TestHelper.numeric_messages
|
23
|
+
@messages = TestHelper::Integration.numeric_messages
|
24
24
|
@messages_arr = @messages.inject(&:+).flatten
|
25
25
|
@received_arr = []
|
26
26
|
@pointer = 0
|
@@ -48,7 +48,7 @@ class UniMIDI::FunctionalTest < Minitest::Test
|
|
48
48
|
context "using byte Strings" do
|
49
49
|
|
50
50
|
setup do
|
51
|
-
@messages = TestHelper.string_messages
|
51
|
+
@messages = TestHelper::Integration.string_messages
|
52
52
|
@messages_str = @messages.join
|
53
53
|
@received_str = ""
|
54
54
|
@pointer = 0
|
@@ -78,7 +78,7 @@ class UniMIDI::FunctionalTest < Minitest::Test
|
|
78
78
|
context "using MIDIMessages" do
|
79
79
|
|
80
80
|
setup do
|
81
|
-
@messages = TestHelper.message_objects
|
81
|
+
@messages = TestHelper::Integration.message_objects
|
82
82
|
@messages_arr = @messages.map(&:to_bytes).flatten
|
83
83
|
@received_arr = []
|
84
84
|
@pointer = 0
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require "unit/helper"
|
2
|
+
|
3
|
+
class UniMIDI::DeviceTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Device" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
UniMIDI::Input.stubs(:all).returns(TestHelper::Unit.mock_devices[:input])
|
9
|
+
UniMIDI::Output.stubs(:all).returns(TestHelper::Unit.mock_devices[:output])
|
10
|
+
end
|
11
|
+
|
12
|
+
teardown do
|
13
|
+
UniMIDI::Input.unstub(:all)
|
14
|
+
UniMIDI::Output.unstub(:all)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "InstanceMethods" do
|
18
|
+
|
19
|
+
context "Device#type" do
|
20
|
+
|
21
|
+
context "input" do
|
22
|
+
|
23
|
+
setup do
|
24
|
+
@input = UniMIDI::Input.all.sample
|
25
|
+
end
|
26
|
+
|
27
|
+
should "be an input" do
|
28
|
+
assert_equal(:input, @input.type)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context "output" do
|
34
|
+
|
35
|
+
setup do
|
36
|
+
UniMIDI::Input.stubs(:all).returns(TestHelper::Unit.mock_devices[:input])
|
37
|
+
@output = UniMIDI::Output.all.sample
|
38
|
+
end
|
39
|
+
|
40
|
+
should "be an output" do
|
41
|
+
assert_equal(:output, @output.type)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
context "ClassMethods" do
|
51
|
+
|
52
|
+
context ".find_by_name" do
|
53
|
+
|
54
|
+
setup do
|
55
|
+
@name = UniMIDI::Output.all.map(&:name).sample
|
56
|
+
@output = UniMIDI::Output.find_by_name(@name)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "select the correct input" do
|
60
|
+
assert_equal(@name, @output.name)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context ".first" do
|
66
|
+
|
67
|
+
setup do
|
68
|
+
@output_to_test = UniMIDI::Output.all[0]
|
69
|
+
@output_to_test.expects(:open).returns(true)
|
70
|
+
@output_to_test.expects(:enabled?).returns(true)
|
71
|
+
@output = UniMIDI::Output.first
|
72
|
+
end
|
73
|
+
|
74
|
+
teardown do
|
75
|
+
@output_to_test.unstub(:open)
|
76
|
+
@output_to_test.unstub(:enabled?)
|
77
|
+
end
|
78
|
+
|
79
|
+
should "return the first output" do
|
80
|
+
assert_equal(@output_to_test, @output)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context ".last" do
|
86
|
+
|
87
|
+
setup do
|
88
|
+
@output_to_test = UniMIDI::Output.all.last
|
89
|
+
@output_to_test.expects(:open).returns(true)
|
90
|
+
@output_to_test.expects(:enabled?).returns(true)
|
91
|
+
@output = UniMIDI::Output.last
|
92
|
+
end
|
93
|
+
|
94
|
+
teardown do
|
95
|
+
@output_to_test.unstub(:open)
|
96
|
+
@output_to_test.unstub(:enabled?)
|
97
|
+
end
|
98
|
+
|
99
|
+
should "return the last output" do
|
100
|
+
assert_equal @output_to_test, @output
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
context ".[]" do
|
106
|
+
|
107
|
+
setup do
|
108
|
+
@device_to_test = UniMIDI::Input.all[0]
|
109
|
+
@device_to_test.expects(:open).returns(true)
|
110
|
+
@device_to_test.expects(:enabled?).returns(true)
|
111
|
+
@device = UniMIDI::Input[0]
|
112
|
+
end
|
113
|
+
|
114
|
+
teardown do
|
115
|
+
@device_to_test.unstub(:open)
|
116
|
+
@device_to_test.unstub(:enabled?)
|
117
|
+
end
|
118
|
+
|
119
|
+
should "return correct input" do
|
120
|
+
assert_equal(@device_to_test, @device)
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
context ".use" do
|
126
|
+
|
127
|
+
context "block given" do
|
128
|
+
|
129
|
+
setup do
|
130
|
+
@device_to_test = UniMIDI::Input.all.sample
|
131
|
+
@index = UniMIDI::Input.all.index(@device_to_test)
|
132
|
+
@device_to_test.expects(:open).returns(true)
|
133
|
+
@device_to_test.expects(:enabled?).at_least_once.returns(true)
|
134
|
+
end
|
135
|
+
|
136
|
+
teardown do
|
137
|
+
@device_to_test.unstub(:open)
|
138
|
+
@device_to_test.unstub(:enabled?)
|
139
|
+
end
|
140
|
+
|
141
|
+
should "return and enable an input" do
|
142
|
+
@device = nil
|
143
|
+
UniMIDI::Input.use(@index) do |device|
|
144
|
+
@device = device
|
145
|
+
assert(@device.enabled?)
|
146
|
+
end
|
147
|
+
assert_equal(UniMIDI::Input.at(@index), @device)
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
context "with symbol" do
|
153
|
+
|
154
|
+
setup do
|
155
|
+
@device_to_test = UniMIDI::Output.all.sample
|
156
|
+
@index = UniMIDI::Output.all.index(@device_to_test)
|
157
|
+
@device_to_test.expects(:open).returns(true)
|
158
|
+
@device_to_test.expects(:enabled?).at_least_once.returns(true)
|
159
|
+
end
|
160
|
+
|
161
|
+
teardown do
|
162
|
+
@device_to_test.unstub(:open)
|
163
|
+
@device_to_test.unstub(:enabled?)
|
164
|
+
end
|
165
|
+
|
166
|
+
should "return an enabled input" do
|
167
|
+
@device = UniMIDI::Output.use(@index)
|
168
|
+
assert(@device.enabled?)
|
169
|
+
assert_equal(UniMIDI::Output.at(@index), @device)
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
context ".count" do
|
177
|
+
|
178
|
+
setup do
|
179
|
+
@inputs = UniMIDI::Input.all
|
180
|
+
@outputs = UniMIDI::Output.all
|
181
|
+
end
|
182
|
+
|
183
|
+
should "have the correct number of inputs" do
|
184
|
+
assert_equal(@inputs.count, UniMIDI::Input.count)
|
185
|
+
end
|
186
|
+
|
187
|
+
should "have the correct number of outputs" do
|
188
|
+
assert_equal(@outputs.count, UniMIDI::Output.count)
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
data/test/unit/helper.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require "helper"
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "mocha/test_unit"
|
4
|
+
require "shoulda-context"
|
5
|
+
require "unimidi"
|
6
|
+
|
7
|
+
module TestHelper
|
8
|
+
|
9
|
+
module Unit
|
10
|
+
|
11
|
+
extend self
|
12
|
+
|
13
|
+
def sysex_ok?
|
14
|
+
ENV["_system_name"] != "OSX" || !RUBY_PLATFORM.include?("java")
|
15
|
+
end
|
16
|
+
|
17
|
+
def mock_devices
|
18
|
+
if @mock_devices.nil?
|
19
|
+
@mock_devices = {
|
20
|
+
input: [],
|
21
|
+
output: []
|
22
|
+
}
|
23
|
+
2.times do |i|
|
24
|
+
input = Object.new
|
25
|
+
input.stubs(:type).returns(:input)
|
26
|
+
input.stubs(:name).returns("MIDI Input #{i}")
|
27
|
+
@mock_devices[:input] << input
|
28
|
+
end
|
29
|
+
3.times do |i|
|
30
|
+
input = Object.new
|
31
|
+
input.stubs(:type).returns(:output)
|
32
|
+
input.stubs(:name).returns("MIDI Output #{i}")
|
33
|
+
@mock_devices[:output] << input
|
34
|
+
end
|
35
|
+
end
|
36
|
+
@mock_devices
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "unit/helper"
|
2
|
+
|
3
|
+
class UniMIDI::PlatformTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Platform" do
|
6
|
+
|
7
|
+
context ".bootstrap" do
|
8
|
+
|
9
|
+
if RUBY_PLATFORM.include?("java")
|
10
|
+
should "recognize java" do
|
11
|
+
assert_equal(UniMIDI::Adapter::MIDIJRuby::Loader, UniMIDI::Loader.instance_variable_get("@loader"))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
if RUBY_PLATFORM.include?("linux")
|
16
|
+
should "recognize linux" do
|
17
|
+
assert_equal(UniMIDI::Adapter::AlsaRawMIDI::Loader, UniMIDI::Loader.instance_variable_get("@loader"))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if RUBY_PLATFORM.include?("darwin")
|
22
|
+
should "recognize osx" do
|
23
|
+
assert_equal(UniMIDI::Adapter::CoreMIDI::Loader, UniMIDI::Loader.instance_variable_get("@loader"))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if RUBY_PLATFORM.include?("mingw")
|
28
|
+
should "recognize windows" do
|
29
|
+
assert_equal(UniMIDI::Adapter::MIDIWinMM::Loader, UniMIDI::Loader.instance_variable_get("@loader"))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unimidi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Russo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -193,16 +193,17 @@ files:
|
|
193
193
|
- lib/unimidi/output.rb
|
194
194
|
- lib/unimidi/platform.rb
|
195
195
|
- lib/unimidi/type_conversion.rb
|
196
|
-
- test/adapter_test.rb
|
197
|
-
- test/class_methods_test.rb
|
198
|
-
- test/functional_test.rb
|
199
196
|
- test/helper.rb
|
200
|
-
- test/
|
201
|
-
- test/
|
202
|
-
- test/
|
197
|
+
- test/integration/helper.rb
|
198
|
+
- test/integration/input_test.rb
|
199
|
+
- test/integration/io_test.rb
|
200
|
+
- test/unit/device_test.rb
|
201
|
+
- test/unit/helper.rb
|
202
|
+
- test/unit/platform_test.rb
|
203
|
+
- test/unit/type_conversion_test.rb
|
203
204
|
homepage: http://github.com/arirusso/unimidi
|
204
205
|
licenses:
|
205
|
-
- Apache
|
206
|
+
- Apache-2.0
|
206
207
|
metadata: {}
|
207
208
|
post_install_message:
|
208
209
|
rdoc_options: []
|
@@ -220,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
221
|
version: 1.3.6
|
221
222
|
requirements: []
|
222
223
|
rubyforge_project: unimidi
|
223
|
-
rubygems_version: 2.
|
224
|
+
rubygems_version: 2.6.8
|
224
225
|
signing_key:
|
225
226
|
specification_version: 4
|
226
227
|
summary: Realtime MIDI IO for Ruby
|
data/test/adapter_test.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class UniMIDI::AdapterTest < Minitest::Test
|
4
|
-
|
5
|
-
context "Adapter" do
|
6
|
-
|
7
|
-
context "Device#type" do
|
8
|
-
|
9
|
-
should "be an input" do
|
10
|
-
input = TestHelper.devices[:input]
|
11
|
-
assert_equal(:input, input.type)
|
12
|
-
end
|
13
|
-
|
14
|
-
should "be an output" do
|
15
|
-
output = TestHelper.devices[:output]
|
16
|
-
assert_equal(:output, output.type)
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
context "Device.count" do
|
22
|
-
|
23
|
-
setup do
|
24
|
-
@inputs = UniMIDI::Input.all
|
25
|
-
end
|
26
|
-
|
27
|
-
should "count all of the inputs" do
|
28
|
-
assert_equal @inputs.count, UniMIDI::Input.count
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
context "Device.find_by_name" do
|
34
|
-
|
35
|
-
setup do
|
36
|
-
index = rand(0..(UniMIDI::Output.count-1))
|
37
|
-
@output = UniMIDI::Output.all[index]
|
38
|
-
end
|
39
|
-
|
40
|
-
should "select the correct input" do
|
41
|
-
result = UniMIDI::Output.find_by_name(@output.name)
|
42
|
-
assert_equal @output, result
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
context "Device.first" do
|
48
|
-
|
49
|
-
setup do
|
50
|
-
@output = UniMIDI::Output.all.first
|
51
|
-
end
|
52
|
-
|
53
|
-
should "open the output" do
|
54
|
-
@output.expects(:open)
|
55
|
-
output = UniMIDI::Output.first
|
56
|
-
@output.unstub(:open)
|
57
|
-
end
|
58
|
-
|
59
|
-
should "return the correct output" do
|
60
|
-
output = UniMIDI::Output.first
|
61
|
-
assert_equal @output, output
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
data/test/class_methods_test.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class UniMIDI::ClassMethodsTest < Minitest::Test
|
4
|
-
|
5
|
-
context "ClassMethods" do
|
6
|
-
|
7
|
-
context "#first" do
|
8
|
-
|
9
|
-
context "no block given" do
|
10
|
-
should "return first input" do
|
11
|
-
i = UniMIDI::Input.first
|
12
|
-
assert_equal(UniMIDI::Input.all.first, i)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "block given" do
|
17
|
-
should "pass and return first input" do
|
18
|
-
sleep(1)
|
19
|
-
i = UniMIDI::Input.first do |i|
|
20
|
-
assert_equal(true, i.enabled?)
|
21
|
-
end
|
22
|
-
assert_equal(UniMIDI::Input.all.first, i)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "#last" do
|
29
|
-
|
30
|
-
context "no block given" do
|
31
|
-
should "return last input" do
|
32
|
-
i = UniMIDI::Input.last
|
33
|
-
assert_equal(UniMIDI::Input.all.last, i)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "block given" do
|
38
|
-
should "pass and return last input" do
|
39
|
-
sleep(1)
|
40
|
-
i = UniMIDI::Input.last do |i|
|
41
|
-
assert_equal(true, i.enabled?)
|
42
|
-
end
|
43
|
-
assert_equal(UniMIDI::Input.all.last, i)
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "#[]" do
|
50
|
-
|
51
|
-
should "return correct input" do
|
52
|
-
i = UniMIDI::Input[0]
|
53
|
-
assert_equal(UniMIDI::Input.first, i)
|
54
|
-
assert_equal(UniMIDI::Input.all.first, i)
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
context "#use" do
|
60
|
-
|
61
|
-
context "block given" do
|
62
|
-
should "return and enable an input" do
|
63
|
-
sleep(1)
|
64
|
-
i = UniMIDI::Input.use(0) do |i|
|
65
|
-
assert_equal(true, i.enabled?)
|
66
|
-
end
|
67
|
-
assert_equal(UniMIDI::Input.first, i)
|
68
|
-
assert_equal(UniMIDI::Input.all.first, i)
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
context "with symbol" do
|
74
|
-
|
75
|
-
should "return an enabled input" do
|
76
|
-
sleep(1)
|
77
|
-
input = UniMIDI::Input.use(:first)
|
78
|
-
assert_equal(true, input.enabled?)
|
79
|
-
assert_equal(UniMIDI::Input.first, input)
|
80
|
-
assert_equal(UniMIDI::Input.all.first, input)
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
context "#all" do
|
88
|
-
should "return all devices" do
|
89
|
-
assert_equal(UniMIDI::Loader.devices(:direction => :input), UniMIDI::Input.all)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
data/test/platform_test.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class UniMIDI::PlatformTest < Minitest::Test
|
4
|
-
|
5
|
-
def platform_test(adapter, mod, device_class = nil, input_class = nil, output_class = nil)
|
6
|
-
device_class ||= mod::Device
|
7
|
-
input_class ||= mod::Input
|
8
|
-
output_class ||= mod::Output
|
9
|
-
refute_equal(input_class, UniMIDI::Input)
|
10
|
-
refute_equal(output_class, UniMIDI::Output)
|
11
|
-
refute_equal(device_class, UniMIDI::Device)
|
12
|
-
assert_equal(input_class.first.name, UniMIDI::Input.first.name)
|
13
|
-
assert_equal(input_class.first.id, UniMIDI::Input.first.id)
|
14
|
-
refute_equal(output_class.first, UniMIDI::Output.first)
|
15
|
-
assert_equal(output_class.first.name, UniMIDI::Output.first.name)
|
16
|
-
assert_equal(output_class.first.id, UniMIDI::Output.first.id)
|
17
|
-
end
|
18
|
-
|
19
|
-
context "Platform" do
|
20
|
-
|
21
|
-
should "recognize java" do
|
22
|
-
if RUBY_PLATFORM.include?("java")
|
23
|
-
platform_test(UniMIDI::Adapter::MIDIJRuby, ::MIDIJRuby)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
should "recognize linux" do
|
28
|
-
if RUBY_PLATFORM.include?("linux")
|
29
|
-
platform_test(UniMIDI::Adapter::AlsaRawMIDI, ::AlsaRawMIDI)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
should "recognize osx" do
|
34
|
-
if RUBY_PLATFORM.include?("darwin")
|
35
|
-
platform_test(UniMIDI::Adapter::CoreMIDI, ::CoreMIDI, ::CoreMIDI::Endpoint, ::CoreMIDI::Source, ::CoreMIDI::Destination)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
should "recognize windows" do
|
40
|
-
if RUBY_PLATFORM.include?("mingw")
|
41
|
-
platform_test(UniMIDI::Adapter::MIDIWinMM, ::MIDIWinMM)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|