patch 0.4.13
Sign up to get free protection for your applications and to get access to all the features.
- 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/io/osc_test.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::IO::OSCTest < Minitest::Test
|
4
|
+
|
5
|
+
context "OSC" do
|
6
|
+
|
7
|
+
context "#new_from_config" do
|
8
|
+
|
9
|
+
context "server" do
|
10
|
+
|
11
|
+
setup do
|
12
|
+
@config = {
|
13
|
+
:id => 3,
|
14
|
+
:type => "osc",
|
15
|
+
:server => {
|
16
|
+
:port => 8000
|
17
|
+
}
|
18
|
+
}
|
19
|
+
@server = Patch::IO::OSC.new_from_config(@config)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "be server" do
|
23
|
+
refute_nil @server
|
24
|
+
assert Patch::IO::OSC::Server, @server.class
|
25
|
+
end
|
26
|
+
|
27
|
+
should "have id" do
|
28
|
+
refute_nil @server.id
|
29
|
+
assert_equal 3, @server.id
|
30
|
+
end
|
31
|
+
|
32
|
+
should "not initialize client" do
|
33
|
+
assert_nil @server.instance_variable_get("@client")
|
34
|
+
end
|
35
|
+
|
36
|
+
should "initialize server" do
|
37
|
+
refute_nil @server.instance_variable_get("@server")
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
context "server with echo" do
|
43
|
+
|
44
|
+
setup do
|
45
|
+
@config = {
|
46
|
+
:id => 4,
|
47
|
+
:type => "osc",
|
48
|
+
:client => {
|
49
|
+
:host => "192.168.1.118",
|
50
|
+
:port => 9000
|
51
|
+
},
|
52
|
+
:server => {
|
53
|
+
:port => 8000
|
54
|
+
}
|
55
|
+
}
|
56
|
+
@server = Patch::IO::OSC.new_from_config(@config)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "be server" do
|
60
|
+
refute_nil @server
|
61
|
+
assert Patch::IO::OSC::Server, @server.class
|
62
|
+
end
|
63
|
+
|
64
|
+
should "have id" do
|
65
|
+
refute_nil @server.id
|
66
|
+
assert_equal 4, @server.id
|
67
|
+
end
|
68
|
+
|
69
|
+
should "initialize echo client" do
|
70
|
+
refute_nil @server.instance_variable_get("@client")
|
71
|
+
end
|
72
|
+
|
73
|
+
should "initialize server" do
|
74
|
+
refute_nil @server.instance_variable_get("@server")
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
context "client" do
|
80
|
+
|
81
|
+
setup do
|
82
|
+
@config = {
|
83
|
+
:id => 5,
|
84
|
+
:type => "osc",
|
85
|
+
:client => {
|
86
|
+
:host => "192.168.1.118",
|
87
|
+
:port => 9000
|
88
|
+
}
|
89
|
+
}
|
90
|
+
@client = ::Patch::IO::OSC.new_from_config(@config)
|
91
|
+
end
|
92
|
+
|
93
|
+
should "be client" do
|
94
|
+
refute_nil @client
|
95
|
+
assert Patch::IO::OSC::Client, @client.class
|
96
|
+
end
|
97
|
+
|
98
|
+
should "have id" do
|
99
|
+
refute_nil @client.id
|
100
|
+
assert_equal 5, @client.id
|
101
|
+
end
|
102
|
+
|
103
|
+
should "initialize underlying client" do
|
104
|
+
refute_nil @client.instance_variable_get("@client")
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::IO::Websocket::NodeTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Node" 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
|
+
@server = @nodes.find_all_by_type(:websocket).first
|
12
|
+
end
|
13
|
+
|
14
|
+
context "#listen" do
|
15
|
+
|
16
|
+
setup do
|
17
|
+
EM::WebSocket.expects(:run).once
|
18
|
+
end
|
19
|
+
|
20
|
+
teardown do
|
21
|
+
EM::WebSocket.unstub(:run)
|
22
|
+
#Patch::IO::Websocket.any_instance.unstub(:start)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "start server" do
|
26
|
+
assert @server.listen(@patches.first) do
|
27
|
+
@val = "something"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context "#start" do
|
34
|
+
|
35
|
+
setup do
|
36
|
+
EM::WebSocket.expects(:run).once
|
37
|
+
end
|
38
|
+
|
39
|
+
teardown do
|
40
|
+
EM::WebSocket.unstub(:run)
|
41
|
+
#Patch::IO::Websocket.any_instance.unstub(:start)
|
42
|
+
end
|
43
|
+
|
44
|
+
should "start server" do
|
45
|
+
assert @server.start
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
context "#puts" do
|
51
|
+
|
52
|
+
setup do
|
53
|
+
@message = Patch::Message.new
|
54
|
+
@message.index = 1
|
55
|
+
@message.value = 100
|
56
|
+
@message.patch_name = :test
|
57
|
+
end
|
58
|
+
|
59
|
+
should "convert message to json" do
|
60
|
+
@server.stubs(:running?).returns(true)
|
61
|
+
@server.instance_variable_set("@socket", Object.new)
|
62
|
+
@server.instance_variable_get("@socket").expects(:puts).once
|
63
|
+
assert @server.puts(@patches.first, @message)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
context "#handle_input" do
|
69
|
+
|
70
|
+
setup do
|
71
|
+
@timestamp = 1396406728702
|
72
|
+
hash = {
|
73
|
+
:value => "blah",
|
74
|
+
:timestamp => @timestamp
|
75
|
+
}
|
76
|
+
@message = hash.to_json
|
77
|
+
@result = @server.send(:handle_input, nil, @message)
|
78
|
+
end
|
79
|
+
|
80
|
+
should "convert from String to Message" do
|
81
|
+
refute_nil @result
|
82
|
+
assert_equal ::Patch::Message, @result.class
|
83
|
+
assert_equal "blah", @result.value
|
84
|
+
end
|
85
|
+
|
86
|
+
should "convert timestamp from js time to ruby" do
|
87
|
+
time = @result.time
|
88
|
+
refute_nil time
|
89
|
+
assert_equal Time.at(@timestamp / 1000), time
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class Patch::IO::WebsocketTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Websocket" do
|
6
|
+
|
7
|
+
context "#new_from_config" do
|
8
|
+
|
9
|
+
setup do
|
10
|
+
@config = {
|
11
|
+
:id => 6,
|
12
|
+
:type => "websocket",
|
13
|
+
:host => "localhost",
|
14
|
+
:port => 9006
|
15
|
+
}
|
16
|
+
@websocket = Patch::IO::Websocket.new_from_config(@config)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "be node" do
|
20
|
+
refute_nil @websocket
|
21
|
+
assert Patch::IO::Websocket::Node, @websocket.class
|
22
|
+
end
|
23
|
+
|
24
|
+
should "have id" do
|
25
|
+
refute_nil @websocket.id
|
26
|
+
assert_equal 6, @websocket.id
|
27
|
+
end
|
28
|
+
|
29
|
+
should "not initialize underlying socket yet" do
|
30
|
+
assert_nil @websocket.instance_variable_get("@socket")
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/test/js/logger.js
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
MockConsole = function() {
|
2
|
+
this._last;
|
3
|
+
}
|
4
|
+
MockConsole.prototype.log = function(something) {
|
5
|
+
this._last = something;
|
6
|
+
return true;
|
7
|
+
}
|
8
|
+
MockConsole.prototype.error = MockConsole.prototype.log;
|
9
|
+
MockConsole.prototype.last = function() {
|
10
|
+
var last = this._last;
|
11
|
+
delete this._last;
|
12
|
+
return last;
|
13
|
+
}
|
14
|
+
|
15
|
+
LOGMESSAGE = {
|
16
|
+
closed: "Closed",
|
17
|
+
prefix: "Test: ",
|
18
|
+
open: "Open"
|
19
|
+
}
|
20
|
+
|
21
|
+
var logger;
|
22
|
+
var fakeConsole = new MockConsole();
|
23
|
+
|
24
|
+
module("Patch.Logger", {
|
25
|
+
setup: function() {
|
26
|
+
logger = new Patch.Logger(LOGMESSAGE, fakeConsole);
|
27
|
+
}, teardown: function() {
|
28
|
+
delete logger;
|
29
|
+
}
|
30
|
+
});
|
31
|
+
test( "new", function(assert) {
|
32
|
+
assert.ok( (logger !== undefined && logger !== null), "logger is initialized" );
|
33
|
+
});
|
34
|
+
test( "info", function(assert) {
|
35
|
+
assert.ok(logger.info("hello"), "info method is called" );
|
36
|
+
assert.equal(fakeConsole.last(), "Test: hello", "message is sent to underlying logger" );
|
37
|
+
});
|
38
|
+
test( "object", function(assert) {
|
39
|
+
var obj = {something:"hello"};
|
40
|
+
assert.ok(logger.object(obj), "object method is called" );
|
41
|
+
assert.equal(fakeConsole.last(), obj, "object is sent to underlying logger" );
|
42
|
+
});
|
43
|
+
test( "debug", function(assert) {
|
44
|
+
// not enabled
|
45
|
+
logger.shouldDebug = false;
|
46
|
+
assert.notOk(logger.debug("hello"), "debug method is called" );
|
47
|
+
assert.equal(fakeConsole.last(), undefined, "message is not sent to underlying logger" );
|
48
|
+
// enabled
|
49
|
+
logger.shouldDebug = true;
|
50
|
+
assert.ok(logger.debug("hello"), "debug method is called" );
|
51
|
+
assert.equal(fakeConsole.last(), "Test: hello", "message is sent to underlying logger" );
|
52
|
+
});
|
53
|
+
test( "debugObject", function(assert) {
|
54
|
+
// not enabled
|
55
|
+
logger.shouldDebug = false;
|
56
|
+
var obj = {something:"hello"};
|
57
|
+
assert.notOk(logger.debugObject(obj), "debugObject method is called" );
|
58
|
+
assert.equal(fakeConsole.last(), undefined, "object is not sent to underlying logger" );
|
59
|
+
// enabled
|
60
|
+
logger.shouldDebug = true;
|
61
|
+
assert.ok(logger.debugObject(obj), "debugObject method is called" );
|
62
|
+
assert.equal(fakeConsole.last(), obj, "object is sent to underlying logger" );
|
63
|
+
});
|
64
|
+
test( "error", function(assert) {
|
65
|
+
assert.ok(logger.error("hello"), "error method is called" );
|
66
|
+
assert.equal(fakeConsole.last(), "hello", "error is sent to underlying logger" );
|
67
|
+
});
|
data/test/js/message.js
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
var camera;
|
2
|
+
var number;
|
3
|
+
|
4
|
+
module("VZ.Camera", {
|
5
|
+
setup: function() {
|
6
|
+
camera = new VZ.Camera();
|
7
|
+
number = Math.floor((Math.random() * 100) + 1);
|
8
|
+
}, teardown: function() {
|
9
|
+
delete camera;
|
10
|
+
delete number;
|
11
|
+
}
|
12
|
+
});
|
13
|
+
test( "new", function() {
|
14
|
+
ok( (camera !== undefined && camera !== null), "camera is initialized" );
|
15
|
+
});
|
16
|
+
test( "position.set", function() {
|
17
|
+
camera.position.set(1,2,3);
|
18
|
+
equal(camera.position.x, 1);
|
19
|
+
equal(camera.position.y, 2);
|
20
|
+
equal(camera.position.z, 3);
|
21
|
+
});
|
22
|
+
test( "position=", function() {
|
23
|
+
camera.position.x = 10;
|
24
|
+
camera.position.y = 20;
|
25
|
+
camera.position.z = 30;
|
26
|
+
equal(camera.position.x, 10);
|
27
|
+
equal(camera.position.y, 20);
|
28
|
+
equal(camera.position.z, 30);
|
29
|
+
});
|
30
|
+
test( "saveState", function() {
|
31
|
+
camera.position.set(1,2,3);
|
32
|
+
camera.aspect = 30;
|
33
|
+
camera.fov = 40;
|
34
|
+
camera.near = 50;
|
35
|
+
camera.far = 60;
|
36
|
+
camera.saveState(number);
|
37
|
+
equal(camera.state[number].aspect, 30, "aspect");
|
38
|
+
equal(camera.state[number].fov, 40, "fov");
|
39
|
+
equal(camera.state[number].near, 50, "near");
|
40
|
+
equal(camera.state[number].far, 60, "far");
|
41
|
+
equal(camera.state[number].position.x, 1, "x");
|
42
|
+
equal(camera.state[number].position.y, 2, "y");
|
43
|
+
equal(camera.state[number].position.z, 3, "z");
|
44
|
+
});
|
45
|
+
test( "restoreState", function() {
|
46
|
+
camera.state[number] = {
|
47
|
+
aspect: 123,
|
48
|
+
fov: 234,
|
49
|
+
near: 345,
|
50
|
+
far: 456,
|
51
|
+
position: new THREE.Vector3(9, 10, 11),
|
52
|
+
target: new THREE.Vector3(13, 14, 15)
|
53
|
+
}
|
54
|
+
camera.restoreState(number);
|
55
|
+
equal(camera.aspect, 123, "aspect");
|
56
|
+
equal(camera.fov, 234, "fov");
|
57
|
+
equal(camera.near, 345, "near");
|
58
|
+
equal(camera.far, 456, "far");
|
59
|
+
equal(camera.position.x, 9, "x");
|
60
|
+
equal(camera.position.y, 10, "y");
|
61
|
+
equal(camera.position.z, 11, "z");
|
62
|
+
});
|