ruby-dbus 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS +8 -0
- data/README.md +41 -4
- data/Rakefile +15 -16
- data/VERSION +1 -1
- data/lib/dbus.rb +18 -14
- data/lib/dbus/bus.rb +32 -168
- data/lib/dbus/error.rb +4 -2
- data/lib/dbus/export.rb +3 -2
- data/lib/dbus/introspect.rb +0 -294
- data/lib/dbus/marshall.rb +1 -1
- data/lib/dbus/message.rb +8 -0
- data/lib/dbus/message_queue.rb +166 -0
- data/lib/dbus/proxy_object.rb +149 -0
- data/lib/dbus/proxy_object_factory.rb +41 -0
- data/lib/dbus/proxy_object_interface.rb +128 -0
- data/ruby-dbus.gemspec +1 -0
- data/test/{async_test.rb → async_spec.rb} +10 -11
- data/test/{binding_test.rb → binding_spec.rb} +23 -25
- data/test/bus_and_xml_backend_spec.rb +39 -0
- data/test/bus_driver_spec.rb +20 -0
- data/test/{bus_test.rb → bus_spec.rb} +8 -7
- data/test/byte_array_spec.rb +38 -0
- data/test/err_msg_spec.rb +42 -0
- data/test/{introspect_xml_parser_test.rb → introspect_xml_parser_spec.rb} +5 -6
- data/test/introspection_spec.rb +32 -0
- data/test/{main_loop_test.rb → main_loop_spec.rb} +10 -7
- data/test/property_spec.rb +53 -0
- data/test/server_robustness_spec.rb +66 -0
- data/test/{server_test.rb → server_spec.rb} +10 -11
- data/test/service_newapi.rb +1 -1
- data/test/session_bus_spec_manual.rb +15 -0
- data/test/{signal_test.rb → signal_spec.rb} +13 -14
- data/test/spec_helper.rb +33 -0
- data/test/{thread_safety_test.rb → thread_safety_spec.rb} +5 -6
- data/test/type_spec.rb +19 -0
- data/test/{value_test.rb → value_spec.rb} +23 -24
- data/test/variant_spec.rb +66 -0
- metadata +40 -22
- data/test/bus_and_xml_backend_test.rb +0 -43
- data/test/bus_driver_test.rb +0 -19
- data/test/byte_array_test.rb +0 -42
- data/test/err_msg_test.rb +0 -59
- data/test/introspection_test.rb +0 -32
- data/test/property_test.rb +0 -65
- data/test/server_robustness_test.rb +0 -73
- data/test/session_bus_test_manual.rb +0 -17
- data/test/test_helper.rb +0 -14
- data/test/type_test.rb +0 -23
- data/test/variant_test.rb +0 -67
@@ -1,11 +1,10 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env rspec
|
2
2
|
# Test the signal handlers
|
3
|
-
|
4
|
-
require "test/unit"
|
3
|
+
require_relative "spec_helper"
|
5
4
|
require "dbus"
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
describe "SignalHandlerTest" do
|
7
|
+
before(:each) do
|
9
8
|
@session_bus = DBus::ASessionBus.new
|
10
9
|
svc = @session_bus.service("org.ruby.service")
|
11
10
|
@obj = svc.object("/org/ruby/MyInstance")
|
@@ -18,7 +17,7 @@ class SignalHandlerTest < Test::Unit::TestCase
|
|
18
17
|
end
|
19
18
|
|
20
19
|
# testing for commit 017c83 (kkaempf)
|
21
|
-
|
20
|
+
it "tests overriding a handler" do
|
22
21
|
DBus.logger.debug "Inside test_overriding_a_handler"
|
23
22
|
counter = 0
|
24
23
|
|
@@ -47,10 +46,10 @@ class SignalHandlerTest < Test::Unit::TestCase
|
|
47
46
|
@loop.run
|
48
47
|
quitter.join
|
49
48
|
|
50
|
-
|
49
|
+
expect(counter).to eq(1)
|
51
50
|
end
|
52
51
|
|
53
|
-
|
52
|
+
it "tests on signal overload" do
|
54
53
|
DBus.logger.debug "Inside test_on_signal_overload"
|
55
54
|
counter = 0
|
56
55
|
started = false
|
@@ -71,13 +70,13 @@ class SignalHandlerTest < Test::Unit::TestCase
|
|
71
70
|
@loop.run
|
72
71
|
quitter.join
|
73
72
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
73
|
+
expect(started).to eq(true)
|
74
|
+
expect(counter).to eq(1)
|
75
|
+
expect { @intf.on_signal }.to raise_error(ArgumentError) # not enough
|
76
|
+
expect { @intf.on_signal 'to', 'many', 'yarrrrr!' }.to raise_error(ArgumentError)
|
78
77
|
end
|
79
78
|
|
80
|
-
|
79
|
+
it "tests too many rules" do
|
81
80
|
100.times do
|
82
81
|
@obj.on_signal "Whichever" do
|
83
82
|
puts "not called"
|
@@ -85,7 +84,7 @@ class SignalHandlerTest < Test::Unit::TestCase
|
|
85
84
|
end
|
86
85
|
end
|
87
86
|
|
88
|
-
|
87
|
+
it "tests removing a nonexistent rule" do
|
89
88
|
@obj.on_signal "DoesNotExist"
|
90
89
|
end
|
91
90
|
end
|
data/test/spec_helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
if ENV["COVERAGE"]
|
2
|
+
coverage = ENV["COVERAGE"] == "true"
|
3
|
+
else
|
4
|
+
# heuristics: enable for interactive builds (but not in OBS) or in Travis
|
5
|
+
coverage = !!ENV["DISPLAY"] || ENV["TRAVIS"]
|
6
|
+
end
|
7
|
+
|
8
|
+
if coverage
|
9
|
+
require "simplecov"
|
10
|
+
SimpleCov.root File.expand_path("../..", __FILE__)
|
11
|
+
|
12
|
+
# do not cover specs
|
13
|
+
SimpleCov.add_filter "_spec.rb"
|
14
|
+
# do not cover the activesupport helpers
|
15
|
+
SimpleCov.add_filter "/core_ext/"
|
16
|
+
|
17
|
+
# use coveralls for on-line code coverage reporting at Travis CI
|
18
|
+
if ENV["TRAVIS"]
|
19
|
+
require "coveralls"
|
20
|
+
end
|
21
|
+
SimpleCov.start
|
22
|
+
end
|
23
|
+
|
24
|
+
$:.unshift File.expand_path("../../lib", __FILE__)
|
25
|
+
|
26
|
+
if Object.const_defined? "RSpec"
|
27
|
+
# http://betterspecs.org/#expect
|
28
|
+
RSpec.configure do |config|
|
29
|
+
config.expect_with :rspec do |c|
|
30
|
+
c.syntax = :expect
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env rspec
|
2
2
|
# Test thread safety
|
3
|
-
|
4
|
-
require "test/unit"
|
3
|
+
require_relative "spec_helper"
|
5
4
|
require "dbus"
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
describe "ThreadSafetyTest" do
|
7
|
+
it "tests thread competition" do
|
9
8
|
print "Thread competition: "
|
10
9
|
jobs = []
|
11
10
|
5.times do
|
@@ -22,7 +21,7 @@ class ThreadSafetyTest < Test::Unit::TestCase
|
|
22
21
|
10.times do |i|
|
23
22
|
print "#{i} "
|
24
23
|
$stdout.flush
|
25
|
-
|
24
|
+
expect(obj.the_answer[0]).to eq(42)
|
26
25
|
sleep 0.1 * rand
|
27
26
|
end
|
28
27
|
end
|
data/test/type_spec.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
3
|
+
require "dbus"
|
4
|
+
|
5
|
+
describe DBus do
|
6
|
+
describe ".type" do
|
7
|
+
%w{i ai a(ii) aai}.each do |s|
|
8
|
+
it "parses some type #{s}" do
|
9
|
+
expect(DBus::type(s).to_s).to be_eql s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
%w{aa (ii ii) hrmp}.each do |s|
|
14
|
+
it "raises exception for invalid type #{s}" do
|
15
|
+
expect {DBus::type(s).to_s}.to raise_error DBus::Type::SignatureException
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env rspec
|
2
2
|
# -*- coding: utf-8 -*-
|
3
|
-
|
4
|
-
require "test/unit"
|
3
|
+
require_relative "spec_helper"
|
5
4
|
require "dbus"
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
describe "ValueTest" do
|
7
|
+
before(:each) do
|
9
8
|
session_bus = DBus::ASessionBus.new
|
10
9
|
svc = session_bus.service("org.ruby.service")
|
11
10
|
@obj = svc.object("/org/ruby/MyInstance")
|
@@ -13,7 +12,7 @@ class ValueTest < Test::Unit::TestCase
|
|
13
12
|
@obj.default_iface = "org.ruby.SampleInterface"
|
14
13
|
end
|
15
14
|
|
16
|
-
|
15
|
+
it "tests passing an array of structs through a variant" do
|
17
16
|
triple = ['a(uuu)', []]
|
18
17
|
@obj.test_variant(triple)
|
19
18
|
quadruple = ['a(uuuu)', []] # a(uuu) works fine
|
@@ -22,7 +21,7 @@ class ValueTest < Test::Unit::TestCase
|
|
22
21
|
@obj.test_variant(quadruple)
|
23
22
|
end
|
24
23
|
|
25
|
-
|
24
|
+
it "tests passing an array through a variant" do
|
26
25
|
# old explicit typing
|
27
26
|
@obj.test_variant(["as", ["coucou", "kuku"]])
|
28
27
|
# automatic typing
|
@@ -30,53 +29,53 @@ class ValueTest < Test::Unit::TestCase
|
|
30
29
|
@obj.test_variant(["saint", "was that a word or a signature?"])
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
it "tests bouncing a variant" do
|
33
|
+
expect(@obj.bounce_variant("cuckoo")[0]).to eq("cuckoo")
|
34
|
+
expect(@obj.bounce_variant(["coucou", "kuku"])[0]).to eq(["coucou", "kuku"])
|
35
|
+
expect(@obj.bounce_variant([])[0]).to eq([])
|
37
36
|
empty_hash = {}
|
38
|
-
|
37
|
+
expect(@obj.bounce_variant(empty_hash)[0]).to eq(empty_hash)
|
39
38
|
end
|
40
39
|
|
41
40
|
# these are ambiguous
|
42
|
-
|
41
|
+
it "tests pairs with a string" do
|
43
42
|
|
44
43
|
# deprecated
|
45
|
-
|
44
|
+
expect(@obj.bounce_variant(["s", "foo"])[0]).to eq("foo")
|
46
45
|
|
47
|
-
|
48
|
-
|
46
|
+
expect(@obj.bounce_variant(DBus.variant("s", "foo"))[0]).to eq("foo")
|
47
|
+
expect(@obj.bounce_variant([DBus.type("s"), "foo"])[0]).to eq("foo")
|
49
48
|
|
50
49
|
# does not work, because the server side forgets the explicit typing
|
51
50
|
# assert_equal ["s", "foo"], @obj.bounce_variant(["av", ["s", "foo"]])[0]
|
52
51
|
# assert_equal ["s", "foo"], @obj.bounce_variant(["as", ["s", "foo"]])[0]
|
53
52
|
|
54
53
|
# instead, use this to demonstrate that the variant is passed as expected
|
55
|
-
|
54
|
+
expect(@obj.variant_size(["s", "four"])[0]).to eq(4)
|
56
55
|
# "av" is the simplest thing that will work,
|
57
56
|
# shifting the heuristic from a pair to the individual items
|
58
|
-
|
57
|
+
expect(@obj.variant_size(["av", ["s", "four"]])[0]).to eq(2)
|
59
58
|
end
|
60
59
|
|
61
|
-
|
60
|
+
it "tests marshalling an array of variants" do
|
62
61
|
# https://trac.luon.net/ruby-dbus/ticket/30
|
63
62
|
@obj.default_iface = "org.ruby.Ticket30"
|
64
63
|
choices = []
|
65
64
|
choices << ['s', 'Plan A']
|
66
65
|
choices << ['s', 'Plan B']
|
67
66
|
# old explicit typing
|
68
|
-
|
67
|
+
expect(@obj.Sybilla(choices)[0]).to eq("Do Plan A")
|
69
68
|
# automatic typing
|
70
|
-
|
69
|
+
expect(@obj.Sybilla(["Plan A", "Plan B"])[0]).to eq("Do Plan A")
|
71
70
|
end
|
72
71
|
|
73
|
-
|
72
|
+
it "tests service returning nonarray" do
|
74
73
|
# "warning: default `to_a' will be obsolete"
|
75
74
|
@obj.the_answer
|
76
75
|
end
|
77
76
|
|
78
|
-
|
77
|
+
it "tests multibyte string" do
|
79
78
|
str = @obj.multibyte_string[0]
|
80
|
-
|
79
|
+
expect(str).to eq("あいうえお")
|
81
80
|
end
|
82
81
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
# Test marshalling variants according to ruby types
|
3
|
+
require_relative "spec_helper"
|
4
|
+
require "dbus"
|
5
|
+
|
6
|
+
describe "VariantTest" do
|
7
|
+
before(:each) do
|
8
|
+
@bus = DBus::ASessionBus.new
|
9
|
+
@svc = @bus.service("org.ruby.service")
|
10
|
+
end
|
11
|
+
|
12
|
+
def make_variant(a)
|
13
|
+
DBus::PacketMarshaller.make_variant(a)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "tests make variant scalar" do
|
17
|
+
# special case: do not fail immediately, marshaller will do that
|
18
|
+
expect(make_variant(nil)).to eq(["b", nil])
|
19
|
+
|
20
|
+
expect(make_variant(true)).to eq(["b", true])
|
21
|
+
# Integers
|
22
|
+
# no byte
|
23
|
+
expect(make_variant(42)).to eq(["i", 42])
|
24
|
+
# 3_000_000_000 can be u or x.
|
25
|
+
# less specific test: just run it thru a loopback
|
26
|
+
expect(make_variant(3_000_000_000)).to eq(["x", 3_000_000_000])
|
27
|
+
expect(make_variant(5_000_000_000)).to eq(["x", 5_000_000_000])
|
28
|
+
|
29
|
+
expect(make_variant(3.14)).to eq(["d", 3.14])
|
30
|
+
|
31
|
+
expect(make_variant("foo")).to eq(["s", "foo"])
|
32
|
+
expect(make_variant(:bar)).to eq(["s", "bar"])
|
33
|
+
|
34
|
+
# left: strruct, array, dict
|
35
|
+
# object path: detect exported objects?, signature
|
36
|
+
|
37
|
+
# # by Ruby types
|
38
|
+
# class Foo
|
39
|
+
# end
|
40
|
+
# make_variant(Foo.new)
|
41
|
+
# if we don;t understand a class, the error should be informative -> new exception
|
42
|
+
end
|
43
|
+
|
44
|
+
it "tests make variant array" do
|
45
|
+
ai = [1, 2, 3]
|
46
|
+
# as = ["one", "two", "three"]
|
47
|
+
# which?
|
48
|
+
# expect(make_variant(ai)).to eq(["ai", [1, 2, 3]])
|
49
|
+
expect(make_variant(ai)).to eq(["av", [["i", 1],
|
50
|
+
["i", 2],
|
51
|
+
["i", 3]]])
|
52
|
+
a0 = []
|
53
|
+
expect(make_variant(a0)).to eq(["av", []])
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
it "tests make variant hash" do
|
58
|
+
h = {"k1" => "v1", "k2" => "v2"}
|
59
|
+
expect(make_variant(h)).to eq(["a{sv}", {
|
60
|
+
"k1" => ["s", "v1"],
|
61
|
+
"k2" => ["s", "v2"],
|
62
|
+
}])
|
63
|
+
h0 = {}
|
64
|
+
expect(make_variant(h0)).to eq(["a{sv}", {}])
|
65
|
+
end
|
66
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-dbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ruby DBus Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: packaging_rake_tasks
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Pure Ruby module for interaction with D-Bus IPC system
|
28
42
|
email: ruby-dbus-devel@lists.luon.net
|
29
43
|
executables: []
|
@@ -71,34 +85,38 @@ files:
|
|
71
85
|
- lib/dbus/marshall.rb
|
72
86
|
- lib/dbus/matchrule.rb
|
73
87
|
- lib/dbus/message.rb
|
88
|
+
- lib/dbus/message_queue.rb
|
89
|
+
- lib/dbus/proxy_object.rb
|
90
|
+
- lib/dbus/proxy_object_factory.rb
|
91
|
+
- lib/dbus/proxy_object_interface.rb
|
74
92
|
- lib/dbus/type.rb
|
75
93
|
- lib/dbus/xml.rb
|
76
94
|
- ruby-dbus.gemspec
|
77
|
-
- test/
|
78
|
-
- test/
|
79
|
-
- test/
|
80
|
-
- test/
|
81
|
-
- test/
|
82
|
-
- test/
|
83
|
-
- test/
|
84
|
-
- test/
|
85
|
-
- test/
|
86
|
-
- test/
|
87
|
-
- test/
|
88
|
-
- test/
|
89
|
-
- test/
|
95
|
+
- test/async_spec.rb
|
96
|
+
- test/binding_spec.rb
|
97
|
+
- test/bus_and_xml_backend_spec.rb
|
98
|
+
- test/bus_driver_spec.rb
|
99
|
+
- test/bus_spec.rb
|
100
|
+
- test/byte_array_spec.rb
|
101
|
+
- test/err_msg_spec.rb
|
102
|
+
- test/introspect_xml_parser_spec.rb
|
103
|
+
- test/introspection_spec.rb
|
104
|
+
- test/main_loop_spec.rb
|
105
|
+
- test/property_spec.rb
|
106
|
+
- test/server_robustness_spec.rb
|
107
|
+
- test/server_spec.rb
|
90
108
|
- test/service_newapi.rb
|
91
|
-
- test/
|
92
|
-
- test/
|
93
|
-
- test/
|
94
|
-
- test/
|
109
|
+
- test/session_bus_spec_manual.rb
|
110
|
+
- test/signal_spec.rb
|
111
|
+
- test/spec_helper.rb
|
112
|
+
- test/thread_safety_spec.rb
|
95
113
|
- test/tools/dbus-launch-simple
|
96
114
|
- test/tools/dbus-limited-session.conf
|
97
115
|
- test/tools/test_env
|
98
116
|
- test/tools/test_server
|
99
|
-
- test/
|
100
|
-
- test/
|
101
|
-
- test/
|
117
|
+
- test/type_spec.rb
|
118
|
+
- test/value_spec.rb
|
119
|
+
- test/variant_spec.rb
|
102
120
|
homepage: https://trac.luon.net/ruby-dbus
|
103
121
|
licenses:
|
104
122
|
- LGPL v2.1
|
@@ -1,43 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Test the bus class
|
3
|
-
require File.expand_path("../test_helper", __FILE__)
|
4
|
-
require "test/unit"
|
5
|
-
require 'rubygems'
|
6
|
-
require 'nokogiri'
|
7
|
-
require "dbus"
|
8
|
-
|
9
|
-
class BusAndXmlBackendTest < Test::Unit::TestCase
|
10
|
-
def setup
|
11
|
-
@bus = DBus::ASessionBus.new
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_introspection_reading_rexml
|
15
|
-
DBus::IntrospectXMLParser.backend = DBus::IntrospectXMLParser::REXMLParser
|
16
|
-
@svc = @bus.service("org.ruby.service")
|
17
|
-
obj = @svc.object("/org/ruby/MyInstance")
|
18
|
-
obj.default_iface = 'org.ruby.SampleInterface'
|
19
|
-
obj.introspect
|
20
|
-
assert_nothing_raised do
|
21
|
-
assert_equal 42, obj.the_answer[0], "should respond to :the_answer"
|
22
|
-
end
|
23
|
-
assert_nothing_raised do
|
24
|
-
assert_equal "oof", obj["org.ruby.AnotherInterface"].Reverse('foo')[0], "should work with multiple interfaces"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_introspection_reading_nokogiri
|
29
|
-
# peek inside the object to see if a cleanup step worked or not
|
30
|
-
DBus::IntrospectXMLParser.backend = DBus::IntrospectXMLParser::NokogiriParser
|
31
|
-
@svc = @bus.service("org.ruby.service")
|
32
|
-
obj = @svc.object("/org/ruby/MyInstance")
|
33
|
-
obj.default_iface = 'org.ruby.SampleInterface'
|
34
|
-
obj.introspect
|
35
|
-
assert_nothing_raised do
|
36
|
-
assert_equal 42, obj.the_answer[0], "should respond to :the_answer"
|
37
|
-
end
|
38
|
-
assert_nothing_raised do
|
39
|
-
assert_equal "oof", obj["org.ruby.AnotherInterface"].Reverse('foo')[0], "should work with multiple interfaces"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|