patch 0.4.13
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 +7 -0
- data/LICENSE +13 -0
- data/README.md +176 -0
- data/bin/patchrb +40 -0
- data/lib/patch/config.rb +124 -0
- data/lib/patch/em_patch.rb +47 -0
- data/lib/patch/hub.rb +68 -0
- data/lib/patch/io/midi/action.rb +42 -0
- data/lib/patch/io/midi/input.rb +110 -0
- data/lib/patch/io/midi/message.rb +112 -0
- data/lib/patch/io/midi/output.rb +58 -0
- data/lib/patch/io/midi.rb +45 -0
- data/lib/patch/io/module.rb +35 -0
- data/lib/patch/io/osc/action.rb +43 -0
- data/lib/patch/io/osc/client.rb +60 -0
- data/lib/patch/io/osc/message.rb +109 -0
- data/lib/patch/io/osc/server.rb +159 -0
- data/lib/patch/io/osc.rb +43 -0
- data/lib/patch/io/websocket/node.rb +103 -0
- data/lib/patch/io/websocket/socket.rb +103 -0
- data/lib/patch/io/websocket.rb +27 -0
- data/lib/patch/io.rb +15 -0
- data/lib/patch/log.rb +97 -0
- data/lib/patch/message.rb +67 -0
- data/lib/patch/node/container.rb +69 -0
- data/lib/patch/node/map.rb +71 -0
- data/lib/patch/node.rb +10 -0
- data/lib/patch/patch.rb +59 -0
- data/lib/patch/report.rb +132 -0
- data/lib/patch/thread.rb +19 -0
- data/lib/patch.rb +42 -0
- data/test/config/nodes.yml +16 -0
- data/test/config/patches.yml +41 -0
- data/test/config_test.rb +216 -0
- data/test/helper.rb +20 -0
- data/test/hub_test.rb +49 -0
- data/test/io/midi/action_test.rb +82 -0
- data/test/io/midi/input_test.rb +130 -0
- data/test/io/midi/message_test.rb +54 -0
- data/test/io/midi/output_test.rb +44 -0
- data/test/io/midi_test.rb +94 -0
- data/test/io/module_test.rb +21 -0
- data/test/io/osc/action_test.rb +76 -0
- data/test/io/osc/client_test.rb +49 -0
- data/test/io/osc/message_test.rb +53 -0
- data/test/io/osc/server_test.rb +116 -0
- data/test/io/osc_test.rb +111 -0
- data/test/io/websocket/node_test.rb +96 -0
- data/test/io/websocket_test.rb +37 -0
- data/test/js/logger.js +67 -0
- data/test/js/message.js +62 -0
- data/test/js/qunit-1.18.0.js +3828 -0
- data/test/js/qunit.css +291 -0
- data/test/js/test.html +15 -0
- data/test/js/websocket.js +12 -0
- data/test/log_test.rb +96 -0
- data/test/message_test.rb +109 -0
- data/test/node/container_test.rb +104 -0
- data/test/node/map_test.rb +50 -0
- data/test/node_test.rb +14 -0
- data/test/patch_test.rb +57 -0
- data/test/report_test.rb +37 -0
- metadata +320 -0
data/test/js/qunit.css
ADDED
@@ -0,0 +1,291 @@
|
|
1
|
+
/*!
|
2
|
+
* QUnit 1.18.0
|
3
|
+
* http://qunitjs.com/
|
4
|
+
*
|
5
|
+
* Copyright jQuery Foundation and other contributors
|
6
|
+
* Released under the MIT license
|
7
|
+
* http://jquery.org/license
|
8
|
+
*
|
9
|
+
* Date: 2015-04-03T10:23Z
|
10
|
+
*/
|
11
|
+
|
12
|
+
/** Font Family and Sizes */
|
13
|
+
|
14
|
+
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
|
15
|
+
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
16
|
+
}
|
17
|
+
|
18
|
+
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
|
19
|
+
#qunit-tests { font-size: smaller; }
|
20
|
+
|
21
|
+
|
22
|
+
/** Resets */
|
23
|
+
|
24
|
+
#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
|
25
|
+
margin: 0;
|
26
|
+
padding: 0;
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
/** Header */
|
31
|
+
|
32
|
+
#qunit-header {
|
33
|
+
padding: 0.5em 0 0.5em 1em;
|
34
|
+
|
35
|
+
color: #8699A4;
|
36
|
+
background-color: #0D3349;
|
37
|
+
|
38
|
+
font-size: 1.5em;
|
39
|
+
line-height: 1em;
|
40
|
+
font-weight: 400;
|
41
|
+
|
42
|
+
border-radius: 5px 5px 0 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
#qunit-header a {
|
46
|
+
text-decoration: none;
|
47
|
+
color: #C2CCD1;
|
48
|
+
}
|
49
|
+
|
50
|
+
#qunit-header a:hover,
|
51
|
+
#qunit-header a:focus {
|
52
|
+
color: #FFF;
|
53
|
+
}
|
54
|
+
|
55
|
+
#qunit-testrunner-toolbar label {
|
56
|
+
display: inline-block;
|
57
|
+
padding: 0 0.5em 0 0.1em;
|
58
|
+
}
|
59
|
+
|
60
|
+
#qunit-banner {
|
61
|
+
height: 5px;
|
62
|
+
}
|
63
|
+
|
64
|
+
#qunit-testrunner-toolbar {
|
65
|
+
padding: 0.5em 1em 0.5em 1em;
|
66
|
+
color: #5E740B;
|
67
|
+
background-color: #EEE;
|
68
|
+
overflow: hidden;
|
69
|
+
}
|
70
|
+
|
71
|
+
#qunit-userAgent {
|
72
|
+
padding: 0.5em 1em 0.5em 1em;
|
73
|
+
background-color: #2B81AF;
|
74
|
+
color: #FFF;
|
75
|
+
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
76
|
+
}
|
77
|
+
|
78
|
+
#qunit-modulefilter-container {
|
79
|
+
float: right;
|
80
|
+
padding: 0.2em;
|
81
|
+
}
|
82
|
+
|
83
|
+
.qunit-url-config {
|
84
|
+
display: inline-block;
|
85
|
+
padding: 0.1em;
|
86
|
+
}
|
87
|
+
|
88
|
+
.qunit-filter {
|
89
|
+
display: block;
|
90
|
+
float: right;
|
91
|
+
margin-left: 1em;
|
92
|
+
}
|
93
|
+
|
94
|
+
/** Tests: Pass/Fail */
|
95
|
+
|
96
|
+
#qunit-tests {
|
97
|
+
list-style-position: inside;
|
98
|
+
}
|
99
|
+
|
100
|
+
#qunit-tests li {
|
101
|
+
padding: 0.4em 1em 0.4em 1em;
|
102
|
+
border-bottom: 1px solid #FFF;
|
103
|
+
list-style-position: inside;
|
104
|
+
}
|
105
|
+
|
106
|
+
#qunit-tests > li {
|
107
|
+
display: none;
|
108
|
+
}
|
109
|
+
|
110
|
+
#qunit-tests li.running,
|
111
|
+
#qunit-tests li.pass,
|
112
|
+
#qunit-tests li.fail,
|
113
|
+
#qunit-tests li.skipped {
|
114
|
+
display: list-item;
|
115
|
+
}
|
116
|
+
|
117
|
+
#qunit-tests.hidepass li.running,
|
118
|
+
#qunit-tests.hidepass li.pass {
|
119
|
+
visibility: hidden;
|
120
|
+
position: absolute;
|
121
|
+
width: 0px;
|
122
|
+
height: 0px;
|
123
|
+
padding: 0;
|
124
|
+
border: 0;
|
125
|
+
margin: 0;
|
126
|
+
}
|
127
|
+
|
128
|
+
#qunit-tests li strong {
|
129
|
+
cursor: pointer;
|
130
|
+
}
|
131
|
+
|
132
|
+
#qunit-tests li.skipped strong {
|
133
|
+
cursor: default;
|
134
|
+
}
|
135
|
+
|
136
|
+
#qunit-tests li a {
|
137
|
+
padding: 0.5em;
|
138
|
+
color: #C2CCD1;
|
139
|
+
text-decoration: none;
|
140
|
+
}
|
141
|
+
|
142
|
+
#qunit-tests li p a {
|
143
|
+
padding: 0.25em;
|
144
|
+
color: #6B6464;
|
145
|
+
}
|
146
|
+
#qunit-tests li a:hover,
|
147
|
+
#qunit-tests li a:focus {
|
148
|
+
color: #000;
|
149
|
+
}
|
150
|
+
|
151
|
+
#qunit-tests li .runtime {
|
152
|
+
float: right;
|
153
|
+
font-size: smaller;
|
154
|
+
}
|
155
|
+
|
156
|
+
.qunit-assert-list {
|
157
|
+
margin-top: 0.5em;
|
158
|
+
padding: 0.5em;
|
159
|
+
|
160
|
+
background-color: #FFF;
|
161
|
+
|
162
|
+
border-radius: 5px;
|
163
|
+
}
|
164
|
+
|
165
|
+
.qunit-collapsed {
|
166
|
+
display: none;
|
167
|
+
}
|
168
|
+
|
169
|
+
#qunit-tests table {
|
170
|
+
border-collapse: collapse;
|
171
|
+
margin-top: 0.2em;
|
172
|
+
}
|
173
|
+
|
174
|
+
#qunit-tests th {
|
175
|
+
text-align: right;
|
176
|
+
vertical-align: top;
|
177
|
+
padding: 0 0.5em 0 0;
|
178
|
+
}
|
179
|
+
|
180
|
+
#qunit-tests td {
|
181
|
+
vertical-align: top;
|
182
|
+
}
|
183
|
+
|
184
|
+
#qunit-tests pre {
|
185
|
+
margin: 0;
|
186
|
+
white-space: pre-wrap;
|
187
|
+
word-wrap: break-word;
|
188
|
+
}
|
189
|
+
|
190
|
+
#qunit-tests del {
|
191
|
+
background-color: #E0F2BE;
|
192
|
+
color: #374E0C;
|
193
|
+
text-decoration: none;
|
194
|
+
}
|
195
|
+
|
196
|
+
#qunit-tests ins {
|
197
|
+
background-color: #FFCACA;
|
198
|
+
color: #500;
|
199
|
+
text-decoration: none;
|
200
|
+
}
|
201
|
+
|
202
|
+
/*** Test Counts */
|
203
|
+
|
204
|
+
#qunit-tests b.counts { color: #000; }
|
205
|
+
#qunit-tests b.passed { color: #5E740B; }
|
206
|
+
#qunit-tests b.failed { color: #710909; }
|
207
|
+
|
208
|
+
#qunit-tests li li {
|
209
|
+
padding: 5px;
|
210
|
+
background-color: #FFF;
|
211
|
+
border-bottom: none;
|
212
|
+
list-style-position: inside;
|
213
|
+
}
|
214
|
+
|
215
|
+
/*** Passing Styles */
|
216
|
+
|
217
|
+
#qunit-tests li li.pass {
|
218
|
+
color: #3C510C;
|
219
|
+
background-color: #FFF;
|
220
|
+
border-left: 10px solid #C6E746;
|
221
|
+
}
|
222
|
+
|
223
|
+
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
|
224
|
+
#qunit-tests .pass .test-name { color: #366097; }
|
225
|
+
|
226
|
+
#qunit-tests .pass .test-actual,
|
227
|
+
#qunit-tests .pass .test-expected { color: #999; }
|
228
|
+
|
229
|
+
#qunit-banner.qunit-pass { background-color: #C6E746; }
|
230
|
+
|
231
|
+
/*** Failing Styles */
|
232
|
+
|
233
|
+
#qunit-tests li li.fail {
|
234
|
+
color: #710909;
|
235
|
+
background-color: #FFF;
|
236
|
+
border-left: 10px solid #EE5757;
|
237
|
+
white-space: pre;
|
238
|
+
}
|
239
|
+
|
240
|
+
#qunit-tests > li:last-child {
|
241
|
+
border-radius: 0 0 5px 5px;
|
242
|
+
}
|
243
|
+
|
244
|
+
#qunit-tests .fail { color: #000; background-color: #EE5757; }
|
245
|
+
#qunit-tests .fail .test-name,
|
246
|
+
#qunit-tests .fail .module-name { color: #000; }
|
247
|
+
|
248
|
+
#qunit-tests .fail .test-actual { color: #EE5757; }
|
249
|
+
#qunit-tests .fail .test-expected { color: #008000; }
|
250
|
+
|
251
|
+
#qunit-banner.qunit-fail { background-color: #EE5757; }
|
252
|
+
|
253
|
+
/*** Skipped tests */
|
254
|
+
|
255
|
+
#qunit-tests .skipped {
|
256
|
+
background-color: #EBECE9;
|
257
|
+
}
|
258
|
+
|
259
|
+
#qunit-tests .qunit-skipped-label {
|
260
|
+
background-color: #F4FF77;
|
261
|
+
display: inline-block;
|
262
|
+
font-style: normal;
|
263
|
+
color: #366097;
|
264
|
+
line-height: 1.8em;
|
265
|
+
padding: 0 0.5em;
|
266
|
+
margin: -0.4em 0.4em -0.4em 0;
|
267
|
+
}
|
268
|
+
|
269
|
+
/** Result */
|
270
|
+
|
271
|
+
#qunit-testresult {
|
272
|
+
padding: 0.5em 1em 0.5em 1em;
|
273
|
+
|
274
|
+
color: #2B81AF;
|
275
|
+
background-color: #D2E0E6;
|
276
|
+
|
277
|
+
border-bottom: 1px solid #FFF;
|
278
|
+
}
|
279
|
+
#qunit-testresult .module-name {
|
280
|
+
font-weight: 700;
|
281
|
+
}
|
282
|
+
|
283
|
+
/** Fixture */
|
284
|
+
|
285
|
+
#qunit-fixture {
|
286
|
+
position: absolute;
|
287
|
+
top: -10000px;
|
288
|
+
left: -10000px;
|
289
|
+
width: 1000px;
|
290
|
+
height: 1000px;
|
291
|
+
}
|
data/test/js/test.html
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Patch Tests</title>
|
6
|
+
<link rel="stylesheet" href="qunit.css">
|
7
|
+
<script src="../../js/patch.Websocket.js"></script>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div id="qunit"></div>
|
11
|
+
<div id="qunit-fixture"></div>
|
12
|
+
<script src="qunit-1.18.0.js"></script>
|
13
|
+
<script src="logger.js"></script>
|
14
|
+
</body>
|
15
|
+
</html>
|
data/test/log_test.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::LogTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Log" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@out = Object.new
|
9
|
+
end
|
10
|
+
|
11
|
+
context "#exception" do
|
12
|
+
|
13
|
+
should "display exception" do
|
14
|
+
message = "blah blah"
|
15
|
+
@out.expects(:puts).once
|
16
|
+
@log = Patch::Log.new(@out)
|
17
|
+
begin
|
18
|
+
raise(message)
|
19
|
+
rescue Exception => e
|
20
|
+
@log.exception(e)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
context "#info" do
|
27
|
+
|
28
|
+
should "display message" do
|
29
|
+
message = "blah blah"
|
30
|
+
@out.expects(:puts).once
|
31
|
+
@log = Patch::Log.new(@out)
|
32
|
+
@log.info(message)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context "#populate_level" do
|
38
|
+
|
39
|
+
setup do
|
40
|
+
@message = "blah blah"
|
41
|
+
@error = "error!"
|
42
|
+
end
|
43
|
+
|
44
|
+
should "only output info" do
|
45
|
+
@log = Patch::Log.new(@out, :show => :info)
|
46
|
+
refute @log.instance_variable_get("@exception")
|
47
|
+
assert @log.instance_variable_get("@info")
|
48
|
+
@out.expects(:puts).once
|
49
|
+
output = Object.new
|
50
|
+
output.expects(:colorize).once.with(:blue)
|
51
|
+
@log.expects(:format).once.with(@message, :type => :info).returns(output)
|
52
|
+
@log.info(@message)
|
53
|
+
begin
|
54
|
+
raise(@error)
|
55
|
+
rescue Exception => e
|
56
|
+
@log.exception(e)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
should "only output exception" do
|
61
|
+
@log = Patch::Log.new(@out, :show => :exception)
|
62
|
+
assert @log.instance_variable_get("@exception")
|
63
|
+
refute @log.instance_variable_get("@info")
|
64
|
+
@out.expects(:puts).once
|
65
|
+
output = Object.new
|
66
|
+
output.expects(:colorize).once.with(:red)
|
67
|
+
@log.expects(:format).once.with(@error, :type => :exception).returns(output)
|
68
|
+
begin
|
69
|
+
raise(@error)
|
70
|
+
rescue Exception => e
|
71
|
+
@log.exception(e)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
should "show everything" do
|
76
|
+
@log = Patch::Log.new(@out)
|
77
|
+
assert @log.instance_variable_get("@exception")
|
78
|
+
assert @log.instance_variable_get("@info")
|
79
|
+
@out.expects(:puts).twice
|
80
|
+
output = Object.new
|
81
|
+
output.expects(:colorize).once.with(:red)
|
82
|
+
output.expects(:colorize).once.with(:blue)
|
83
|
+
@log.expects(:format).once.with(@error, :type => :exception).returns(output)
|
84
|
+
@log.expects(:format).once.with(@message, :type => :info).returns(output)
|
85
|
+
begin
|
86
|
+
raise(@error)
|
87
|
+
rescue Exception => e
|
88
|
+
@log.exception(e)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::MessageTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Message" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@message = Patch::Message.new
|
9
|
+
end
|
10
|
+
|
11
|
+
context "#to_h" do
|
12
|
+
|
13
|
+
setup do
|
14
|
+
@message.index = 1
|
15
|
+
@message.value = 100
|
16
|
+
@message.patch_name = :test
|
17
|
+
end
|
18
|
+
|
19
|
+
should "have basic properties" do
|
20
|
+
@result = @message.to_h
|
21
|
+
refute_nil @result
|
22
|
+
refute_empty @result
|
23
|
+
refute_nil @result[:index]
|
24
|
+
refute_nil @result[:value]
|
25
|
+
refute_nil @result[:patch_name]
|
26
|
+
refute_nil @result[:timestamp]
|
27
|
+
assert_equal 1, @result[:index]
|
28
|
+
assert_equal 100, @result[:value]
|
29
|
+
assert_equal :test, @result[:patch_name]
|
30
|
+
end
|
31
|
+
|
32
|
+
should "have properties from hash" do
|
33
|
+
@message.send(:populate_from_properties, { :a_property => "hello!" })
|
34
|
+
@result = @message.to_h
|
35
|
+
refute_nil @result
|
36
|
+
refute_nil @result[:a_property]
|
37
|
+
assert_equal "hello!", @result[:a_property]
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
context "#to_json" do
|
43
|
+
|
44
|
+
setup do
|
45
|
+
@message.index = 10
|
46
|
+
@message.value = 200
|
47
|
+
@message.patch_name = :test
|
48
|
+
end
|
49
|
+
|
50
|
+
should "have all of the message properties" do
|
51
|
+
hash = @message.to_h
|
52
|
+
json = @message.to_json
|
53
|
+
hash.each do |key, value|
|
54
|
+
assert json.include?(key.to_s)
|
55
|
+
assert json.include?(value.to_s)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
context "#timestamp" do
|
62
|
+
|
63
|
+
should "return js int time format" do
|
64
|
+
result = @message.timestamp
|
65
|
+
refute_nil result
|
66
|
+
assert_equal Fixnum, result.class
|
67
|
+
assert result.to_s.size > Time.new.to_i.to_s.size
|
68
|
+
assert_equal (result / 1000).to_s.size, Time.new.to_i.to_s.size
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
context "#timestamp_to_time" do
|
74
|
+
|
75
|
+
should "return Ruby time format" do
|
76
|
+
result = @message.send(:timestamp_to_time, 1413332943271)
|
77
|
+
refute_nil result
|
78
|
+
assert_equal Time, result.class
|
79
|
+
assert_equal 2014, result.year
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
context "#populate_from_properties" do
|
85
|
+
|
86
|
+
setup do
|
87
|
+
@hash = {
|
88
|
+
:index => 2,
|
89
|
+
:value => "blah",
|
90
|
+
:patch_name => :test,
|
91
|
+
:another_property => "something"
|
92
|
+
}
|
93
|
+
@message.send(:populate_from_properties, @hash)
|
94
|
+
end
|
95
|
+
|
96
|
+
should "have properties from hash" do
|
97
|
+
refute_nil @message.index
|
98
|
+
refute_nil @message.value
|
99
|
+
refute_nil @message.patch_name
|
100
|
+
assert_equal 2, @message.index
|
101
|
+
assert_equal "blah", @message.value
|
102
|
+
assert_equal :test, @message.patch_name
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::Node::ContainerTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Container" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@nodes_hash = {
|
9
|
+
:nodes => [
|
10
|
+
{
|
11
|
+
:id => 1,
|
12
|
+
:type => "websocket",
|
13
|
+
:host => "localhost",
|
14
|
+
:port => 9006
|
15
|
+
},
|
16
|
+
{
|
17
|
+
:id => 2,
|
18
|
+
:type => "midi",
|
19
|
+
:direction => "input",
|
20
|
+
:name => "Apple Inc. IAC Driver"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
:id => 3,
|
24
|
+
:type => "osc",
|
25
|
+
:server => {
|
26
|
+
:port => 8000
|
27
|
+
},
|
28
|
+
:client => {
|
29
|
+
:host => "192.168.1.118",
|
30
|
+
:port => 9000
|
31
|
+
}
|
32
|
+
}
|
33
|
+
]
|
34
|
+
}.freeze
|
35
|
+
@nodes = Patch::Config.to_nodes(@nodes_hash)
|
36
|
+
end
|
37
|
+
|
38
|
+
context "#find_all_by_type" do
|
39
|
+
|
40
|
+
should "return osc nodes" do
|
41
|
+
nodes = @nodes.find_all_by_type(:osc)
|
42
|
+
refute_nil nodes
|
43
|
+
refute_empty nodes
|
44
|
+
assert nodes.all? { |node| node.class.name.match(/\APatch\:\:IO\:\:OSC/) }
|
45
|
+
end
|
46
|
+
|
47
|
+
should "return midi nodes" do
|
48
|
+
nodes = @nodes.find_all_by_type(:midi)
|
49
|
+
refute_nil nodes
|
50
|
+
refute_empty nodes
|
51
|
+
assert nodes.all? { |node| node.class.name.match(/\APatch\:\:IO\:\:MIDI/) }
|
52
|
+
end
|
53
|
+
|
54
|
+
should "return websocket nodes" do
|
55
|
+
nodes = @nodes.find_all_by_type(:websocket)
|
56
|
+
refute_nil nodes
|
57
|
+
refute_empty nodes
|
58
|
+
assert nodes.all? { |node| node.class.name.match(/\APatch\:\:IO\:\:Websocket/) }
|
59
|
+
end
|
60
|
+
|
61
|
+
should "not return non existant nodes" do
|
62
|
+
nodes = @nodes.find_all_by_type(:http)
|
63
|
+
refute_nil nodes
|
64
|
+
assert_empty nodes
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
context "#enable" do
|
70
|
+
|
71
|
+
setup do
|
72
|
+
@node_classes = [Patch::IO::MIDI::Input, Patch::IO::OSC::Server, Patch::IO::Websocket::Node]
|
73
|
+
@node_classes.each { |c| c.any_instance.expects(:start).once }
|
74
|
+
end
|
75
|
+
|
76
|
+
teardown do
|
77
|
+
@node_classes.each { |c| c.any_instance.unstub(:start) }
|
78
|
+
end
|
79
|
+
|
80
|
+
should "enable nodes" do
|
81
|
+
assert @nodes.enable
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
context "#find_by_id" do
|
87
|
+
|
88
|
+
should "return node with id" do
|
89
|
+
node = @nodes.find_by_id(2)
|
90
|
+
refute_nil node
|
91
|
+
refute_nil node.id
|
92
|
+
assert_equal 2, node.id
|
93
|
+
end
|
94
|
+
|
95
|
+
should "return nil if not found" do
|
96
|
+
node = @nodes.find_by_id(99)
|
97
|
+
assert_nil node
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::Node::MapTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Map" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
load_test_data
|
9
|
+
@nodes = Patch::Config.to_nodes(@nodes_path)
|
10
|
+
@patches = Patch::Config.to_patches(@nodes, @patches_path)
|
11
|
+
end
|
12
|
+
|
13
|
+
context "#nodes" do
|
14
|
+
|
15
|
+
setup do
|
16
|
+
@map = @patches.first.maps.first
|
17
|
+
end
|
18
|
+
|
19
|
+
should "return all from and to nodes" do
|
20
|
+
@nodes = @map.nodes
|
21
|
+
refute_nil @nodes
|
22
|
+
refute_empty @nodes
|
23
|
+
assert @map.from.all? { |node| @nodes.include?(node) }
|
24
|
+
assert @map.to.all? { |node| @nodes.include?(node) }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context "#enable" do
|
30
|
+
|
31
|
+
setup do
|
32
|
+
@maps = @patches.first.maps
|
33
|
+
refute_empty @nodes
|
34
|
+
assert [Patch::IO::MIDI::Input, Patch::IO::OSC::Server, Patch::IO::Websocket::Node].all? { |klass| @nodes.map(&:class).include?(klass) }
|
35
|
+
::Patch::Thread.expects(:new).times(@nodes.count)
|
36
|
+
end
|
37
|
+
|
38
|
+
teardown do
|
39
|
+
::Patch::Thread.unstub(:new)
|
40
|
+
end
|
41
|
+
|
42
|
+
should "create node start threads" do
|
43
|
+
assert @maps.first.enable(@patches.first)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|