patch 0.4.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +176 -0
  4. data/bin/patchrb +40 -0
  5. data/lib/patch/config.rb +124 -0
  6. data/lib/patch/em_patch.rb +47 -0
  7. data/lib/patch/hub.rb +68 -0
  8. data/lib/patch/io/midi/action.rb +42 -0
  9. data/lib/patch/io/midi/input.rb +110 -0
  10. data/lib/patch/io/midi/message.rb +112 -0
  11. data/lib/patch/io/midi/output.rb +58 -0
  12. data/lib/patch/io/midi.rb +45 -0
  13. data/lib/patch/io/module.rb +35 -0
  14. data/lib/patch/io/osc/action.rb +43 -0
  15. data/lib/patch/io/osc/client.rb +60 -0
  16. data/lib/patch/io/osc/message.rb +109 -0
  17. data/lib/patch/io/osc/server.rb +159 -0
  18. data/lib/patch/io/osc.rb +43 -0
  19. data/lib/patch/io/websocket/node.rb +103 -0
  20. data/lib/patch/io/websocket/socket.rb +103 -0
  21. data/lib/patch/io/websocket.rb +27 -0
  22. data/lib/patch/io.rb +15 -0
  23. data/lib/patch/log.rb +97 -0
  24. data/lib/patch/message.rb +67 -0
  25. data/lib/patch/node/container.rb +69 -0
  26. data/lib/patch/node/map.rb +71 -0
  27. data/lib/patch/node.rb +10 -0
  28. data/lib/patch/patch.rb +59 -0
  29. data/lib/patch/report.rb +132 -0
  30. data/lib/patch/thread.rb +19 -0
  31. data/lib/patch.rb +42 -0
  32. data/test/config/nodes.yml +16 -0
  33. data/test/config/patches.yml +41 -0
  34. data/test/config_test.rb +216 -0
  35. data/test/helper.rb +20 -0
  36. data/test/hub_test.rb +49 -0
  37. data/test/io/midi/action_test.rb +82 -0
  38. data/test/io/midi/input_test.rb +130 -0
  39. data/test/io/midi/message_test.rb +54 -0
  40. data/test/io/midi/output_test.rb +44 -0
  41. data/test/io/midi_test.rb +94 -0
  42. data/test/io/module_test.rb +21 -0
  43. data/test/io/osc/action_test.rb +76 -0
  44. data/test/io/osc/client_test.rb +49 -0
  45. data/test/io/osc/message_test.rb +53 -0
  46. data/test/io/osc/server_test.rb +116 -0
  47. data/test/io/osc_test.rb +111 -0
  48. data/test/io/websocket/node_test.rb +96 -0
  49. data/test/io/websocket_test.rb +37 -0
  50. data/test/js/logger.js +67 -0
  51. data/test/js/message.js +62 -0
  52. data/test/js/qunit-1.18.0.js +3828 -0
  53. data/test/js/qunit.css +291 -0
  54. data/test/js/test.html +15 -0
  55. data/test/js/websocket.js +12 -0
  56. data/test/log_test.rb +96 -0
  57. data/test/message_test.rb +109 -0
  58. data/test/node/container_test.rb +104 -0
  59. data/test/node/map_test.rb +50 -0
  60. data/test/node_test.rb +14 -0
  61. data/test/patch_test.rb +57 -0
  62. data/test/report_test.rb +37 -0
  63. metadata +320 -0
@@ -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
+ });
@@ -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
+ });