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.
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
+ });