unimidi 0.4.7 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0531893dc83d0ed407f9c4f984c488058481957e
4
- data.tar.gz: c22c25a2305d2007e7179cf8826268abb4e40156
3
+ metadata.gz: bf68a7b6957f53fe2ccdb7922af43d3ee59bcc8e
4
+ data.tar.gz: ad6dc382083631d6f8277e319d39af5e5bc27cad
5
5
  SHA512:
6
- metadata.gz: 7abb6b93f5b49ec458ee47e24f277446528a233a174e6aed9c54db93239648d2ef058ef788f9532c24793c4b1b335a50ffa4ff10be360068d43bf49560a93586
7
- data.tar.gz: 7372540218623430ed69eb8012e1d8493e52693923801dc6326a607ad16040c69033e7097d9e433aa347e1b089a8fa0c91ff045973616caad5078431b8e5a6d9
6
+ metadata.gz: 8386b3217cae71e3712d12644c2371b6fd9b6bbcf11fb3b1537a38773a4fc077da771ef3713e417bca1248d6a4f1f6ab605dbd505a5aa0a686377b60b8605b88
7
+ data.tar.gz: 630f39aa818ad71e336dca7597e14a8c5b9bdf1237e9d8839aede3e50f504b763aa60f1a7512426903163f3e270f43d785c246f1bff0950adf84d2f2508868c4
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2010-2016 Ari Russo
1
+ Copyright 2010-2017 Ari Russo
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -84,4 +84,4 @@ See below for additional notes on testing with JRuby
84
84
 
85
85
  Apache 2.0, See the file LICENSE
86
86
 
87
- Copyright (c) 2010-2016 Ari Russo
87
+ Copyright (c) 2010-2017 Ari Russo
@@ -1,24 +1,25 @@
1
1
  #
2
+ # UniMIDI
2
3
  # Realtime MIDI IO for Ruby
3
4
  #
4
- # (c)2010-2016 Ari Russo
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.7"
22
+ VERSION = "0.4.8"
22
23
 
23
24
  Platform.bootstrap
24
25
 
@@ -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 [Fixnum] index
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.size - 1
71
+ when :last then all.count - 1
72
72
  else index
73
73
  end
74
- use_device(all[index], &block)
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 [Fixnum] index
79
+ # @param [Integer] index
80
80
  # @return [Input, Output]
81
- def [](index)
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
- self.name.split("::").last.downcase
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
- device.open(&block) unless device.enabled?
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<Fixnum>]
38
+ # @return [Array<Integer>]
39
39
  def gets_buffer_data(*args)
40
40
  @device.buffer.map { |msg| msg[:data] }
41
41
  end
@@ -56,7 +56,7 @@ module UniMIDI
56
56
  # [144, 60, 100, 128, 60, 100, 144, 40, 120]
57
57
  #
58
58
  # @param [*Object] args
59
- # @return [Array<Fixnum>]
59
+ # @return [Array<Integer>]
60
60
  def gets_data(*args)
61
61
  arr = gets(*args)
62
62
  arr.map { |msg| msg[:data] }.inject(:+)
@@ -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
- module Loader
4
+ class Loader
5
5
 
6
- extend self
6
+ class << self
7
7
 
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
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
- # @param [Hash] options
15
- # @option options [Symbol] :direction Return only a particular direction of device eg :input, :output
16
- # @return [Array<Input>, Array<Output>]
17
- def devices(options = {})
18
- if @devices.nil?
19
- inputs = @loader.inputs.map { |device| ::UniMIDI::Input.new(device) }
20
- outputs = @loader.outputs.map { |device| ::UniMIDI::Output.new(device) }
21
- @devices = {
22
- :input => inputs,
23
- :output => outputs
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
- options[:direction].nil? ? @devices.values.flatten : @devices[options[:direction]]
29
+
27
30
  end
28
31
 
29
32
  end
@@ -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<Fixnum>, *Array<String>, *Fixnum, *String] messages
25
- # @return [Array<Fixnum>, Array<String>]
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 Fixnum then puts_bytes(*messages)
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<Fixnum>] messages
55
- # @return [Array<Fixnum>, Array<Array<Fixnum>>]
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
@@ -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
- lib = case RUBY_PLATFORM
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
- require("unimidi/adapter/#{lib}")
17
- interface = case RUBY_PLATFORM
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<Fixnum>] byte An array of numeric bytes eg [0x90, 0x40, 0x40]
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
@@ -1,5 +1,5 @@
1
1
  dir = File.dirname(File.expand_path(__FILE__))
2
- $LOAD_PATH.unshift dir + '/../lib'
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 'helper'
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::FunctionalTest < Minitest::Test
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
@@ -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
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require "unit/helper"
2
2
 
3
3
  class UniMIDI::TypeConversionTest < Minitest::Test
4
4
 
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.7
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: 2016-09-18 00:00:00.000000000 Z
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/input_test.rb
201
- - test/platform_test.rb
202
- - test/type_conversion_test.rb
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 2.0
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.4.6
224
+ rubygems_version: 2.6.8
224
225
  signing_key:
225
226
  specification_version: 4
226
227
  summary: Realtime MIDI IO for Ruby
@@ -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
@@ -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
@@ -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