glib2 3.0.8 → 3.0.9
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 +4 -4
- data/Rakefile +2 -2
- data/ext/glib2/extconf.rb +0 -1
- data/ext/glib2/rbglib-variant-type.c +5 -1
- data/ext/glib2/rbglib-variant.c +21 -7
- data/ext/glib2/rbglib.c +0 -38
- data/ext/glib2/rbglib.h +2 -2
- data/ext/glib2/rbglib_convert.c +3 -9
- data/ext/glib2/rbglib_matchinfo.c +4 -0
- data/ext/glib2/rbglib_regex.c +12 -1
- data/ext/glib2/rbgobj_object.c +112 -10
- data/ext/glib2/rbgobj_signal.c +12 -1
- data/ext/glib2/rbgobj_type.c +7 -1
- data/ext/glib2/rbgobject.c +0 -6
- data/ext/glib2/rbgprivate.h +0 -4
- data/ext/glib2/rbgutil.c +0 -2
- data/ext/glib2/rbgutil.h +1 -3
- data/lib/glib2.rb +7 -0
- data/lib/gnome2/rake/external-package.rb +118 -2
- data/lib/gnome2/rake/package-task.rb +63 -3
- data/lib/gnome2/rake/windows-binary-build-task.rb +343 -337
- data/lib/gnome2/rake/windows-binary-download-task.rb +151 -148
- data/lib/mkmf-gnome2.rb +11 -30
- data/test/test-binding.rb +157 -66
- data/test/test_glib2.rb +21 -6
- metadata +3 -3
@@ -6,174 +6,177 @@ require 'open-uri'
|
|
6
6
|
require 'rubygems'
|
7
7
|
require 'mechanize'
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
module GNOME2
|
10
|
+
module Rake
|
11
|
+
class WindowsBinaryDownloadTask
|
12
|
+
include ::Rake::DSL
|
13
|
+
|
14
|
+
URL_BASE = "http://ftp.gnome.org/pub/gnome/binaries"
|
15
|
+
def initialize(package)
|
16
|
+
@package = package
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
19
|
+
def define
|
20
|
+
namespace :windows do
|
21
|
+
namespace :downloader do
|
22
|
+
task :before
|
23
|
+
|
24
|
+
download_tasks = []
|
25
|
+
namespace :download do
|
26
|
+
directory dist_dir.to_s
|
27
|
+
task :prepare => [dist_dir.to_s]
|
28
|
+
|
29
|
+
packages.each do |package|
|
30
|
+
desc "download #{package}"
|
31
|
+
task package => [:prepare] do
|
32
|
+
download_package(package)
|
33
|
+
end
|
34
|
+
download_tasks << package
|
35
|
+
end
|
36
|
+
|
37
|
+
dependencies.each do |dependency|
|
38
|
+
name, version = dependency
|
39
|
+
desc "download #{name}"
|
40
|
+
task name => [:prepare] do
|
41
|
+
download_dependency(dependency)
|
42
|
+
end
|
43
|
+
download_tasks << name
|
44
|
+
end
|
33
45
|
end
|
34
|
-
download_tasks << package
|
35
|
-
end
|
36
46
|
|
37
|
-
|
38
|
-
|
39
|
-
desc "download #{name}"
|
40
|
-
task name => [:prepare] do
|
41
|
-
download_dependency(dependency)
|
47
|
+
download_tasks = download_tasks.collect do |task|
|
48
|
+
"windows:downloader:download:#{task}"
|
42
49
|
end
|
43
|
-
|
44
|
-
|
45
|
-
end
|
50
|
+
desc "download Windows binaries into #{dist_dir}"
|
51
|
+
task :download => download_tasks
|
46
52
|
|
47
|
-
|
48
|
-
|
53
|
+
task :after
|
54
|
+
end
|
55
|
+
desc "download Windows binaries"
|
56
|
+
task :download => ["windows:downloader:before",
|
57
|
+
"windows:downloader:download",
|
58
|
+
"windows:downloader:after"]
|
49
59
|
end
|
50
|
-
|
51
|
-
task :download => download_tasks
|
60
|
+
end
|
52
61
|
|
53
|
-
|
62
|
+
private
|
63
|
+
def dist_dir
|
64
|
+
@package.windows.absolute_binary_dir
|
54
65
|
end
|
55
|
-
desc "download Windows binaries"
|
56
|
-
task :download => ["windows:downloader:before",
|
57
|
-
"windows:downloader:download",
|
58
|
-
"windows:downloader:after"]
|
59
|
-
end
|
60
|
-
end
|
61
66
|
|
62
|
-
|
63
|
-
|
64
|
-
|
67
|
+
def packages
|
68
|
+
@package.windows.packages
|
69
|
+
end
|
65
70
|
|
66
|
-
|
67
|
-
|
68
|
-
|
71
|
+
def dependencies
|
72
|
+
@package.windows.dependencies
|
73
|
+
end
|
69
74
|
|
70
|
-
|
71
|
-
|
72
|
-
|
75
|
+
def build_architecture_suffix
|
76
|
+
@package.windows.build_architecture_suffix
|
77
|
+
end
|
73
78
|
|
74
|
-
|
75
|
-
|
76
|
-
|
79
|
+
def download_package(package)
|
80
|
+
suffix = build_architecture_suffix
|
81
|
+
version_page_url = "#{URL_BASE}/#{suffix}/#{package}"
|
82
|
+
version_page = agent.get(version_page_url)
|
83
|
+
latest_version_link = version_page.links.sort_by do |link|
|
84
|
+
if /\A(\d+\.\d+)\/\z/ =~ link.href
|
85
|
+
$1.split(/\./).collect {|component| component.to_i}
|
86
|
+
else
|
87
|
+
[-1]
|
88
|
+
end
|
89
|
+
end.last
|
90
|
+
|
91
|
+
escaped_package = Regexp.escape(package)
|
92
|
+
latest_version_page = latest_version_link.click
|
93
|
+
latest_version = latest_version_page.links.collect do |link|
|
94
|
+
case link.href
|
95
|
+
when /#{escaped_package}_([\d\.\-]+)_#{suffix}\.zip\z/,
|
96
|
+
/#{escaped_package}-([\d\.\-]+)-#{suffix}\.zip\z/, # old
|
97
|
+
/#{escaped_package}-([\d\.\-]+)\.zip\z/ # old
|
98
|
+
version = $1
|
99
|
+
normalized_version = version.split(/[\.\-]/).collect do |component|
|
100
|
+
component.to_i
|
101
|
+
end
|
102
|
+
[normalized_version, version]
|
103
|
+
else
|
104
|
+
[[-1], nil]
|
105
|
+
end
|
106
|
+
end.sort_by do |normalized_version, version|
|
107
|
+
normalized_version
|
108
|
+
end.last[1]
|
77
109
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
escaped_package = Regexp.escape(package)
|
91
|
-
latest_version_page = latest_version_link.click
|
92
|
-
latest_version = latest_version_page.links.collect do |link|
|
93
|
-
case link.href
|
94
|
-
when /#{escaped_package}_([\d\.\-]+)_#{suffix}\.zip\z/,
|
95
|
-
/#{escaped_package}-([\d\.\-]+)-#{suffix}\.zip\z/, # old
|
96
|
-
/#{escaped_package}-([\d\.\-]+)\.zip\z/ # old
|
97
|
-
version = $1
|
98
|
-
normalized_version = version.split(/[\.\-]/).collect do |component|
|
99
|
-
component.to_i
|
110
|
+
if latest_version.nil?
|
111
|
+
raise "can't find package: <#{package}>:<#{version_page_url}>"
|
112
|
+
end
|
113
|
+
escaped_latest_version = Regexp.escape(latest_version)
|
114
|
+
latest_version_page.links.each do |link|
|
115
|
+
case link.href
|
116
|
+
when /#{escaped_package}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/,
|
117
|
+
/#{escaped_package}(?:-dev)?-#{escaped_latest_version}-#{suffix}\.zip\z/, # old
|
118
|
+
/#{escaped_package}(?:-dev)?-#{escaped_latest_version}\.zip\z/ # old
|
119
|
+
click_zip_link(link)
|
120
|
+
end
|
100
121
|
end
|
101
|
-
[normalized_version, version]
|
102
|
-
else
|
103
|
-
[[-1], nil]
|
104
122
|
end
|
105
|
-
end.sort_by do |normalized_version, version|
|
106
|
-
normalized_version
|
107
|
-
end.last[1]
|
108
123
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
124
|
+
def download_dependency(dependency)
|
125
|
+
suffix = build_architecture_suffix
|
126
|
+
dependency_version = "any"
|
127
|
+
dependency_version_re = /[\d\.\-]+/
|
128
|
+
if dependency.is_a?(Array)
|
129
|
+
dependency, dependency_version = dependency
|
130
|
+
dependency_version_re = /#{Regexp.escape(dependency_version)}/
|
131
|
+
end
|
132
|
+
escaped_dependency = Regexp.escape(dependency)
|
133
|
+
dependencies_url = "#{URL_BASE}/dependencies"
|
134
|
+
dependencies_page = agent.get(dependencies_url)
|
135
|
+
latest_version = dependencies_page.links.collect do |link|
|
136
|
+
case link.href
|
137
|
+
when /\A#{escaped_dependency}_(#{dependency_version_re})_#{suffix}\.zip\z/
|
138
|
+
version = $1
|
139
|
+
[version.split(/[\.\-]/).collect {|component| component.to_i}, version]
|
140
|
+
else
|
141
|
+
[[-1], nil]
|
142
|
+
end
|
143
|
+
end.sort_by do |normalized_version, version|
|
144
|
+
normalized_version
|
145
|
+
end.last[1]
|
146
|
+
|
147
|
+
if latest_version.nil?
|
148
|
+
message = "can't find dependency package: " +
|
149
|
+
"<#{dependency}>(#{dependency_version}):<#{dependencies_url}>"
|
150
|
+
raise message
|
151
|
+
end
|
152
|
+
escaped_latest_version = Regexp.escape(latest_version)
|
153
|
+
dependencies_page.links.each do |link|
|
154
|
+
case link.href
|
155
|
+
when /\A#{escaped_dependency}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/
|
156
|
+
click_zip_link(link)
|
157
|
+
end
|
158
|
+
end
|
119
159
|
end
|
120
|
-
end
|
121
|
-
end
|
122
160
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
dependency_version_re = /[\d\.\-]+/
|
127
|
-
if dependency.is_a?(Array)
|
128
|
-
dependency, dependency_version = dependency
|
129
|
-
dependency_version_re = /#{Regexp.escape(dependency_version)}/
|
130
|
-
end
|
131
|
-
escaped_dependency = Regexp.escape(dependency)
|
132
|
-
dependencies_url = "#{URL_BASE}/dependencies"
|
133
|
-
dependencies_page = agent.get(dependencies_url)
|
134
|
-
latest_version = dependencies_page.links.collect do |link|
|
135
|
-
case link.href
|
136
|
-
when /\A#{escaped_dependency}_(#{dependency_version_re})_#{suffix}\.zip\z/
|
137
|
-
version = $1
|
138
|
-
[version.split(/[\.\-]/).collect {|component| component.to_i}, version]
|
139
|
-
else
|
140
|
-
[[-1], nil]
|
161
|
+
private
|
162
|
+
def agent
|
163
|
+
@agent ||= Mechanize.new
|
141
164
|
end
|
142
|
-
end.sort_by do |normalized_version, version|
|
143
|
-
normalized_version
|
144
|
-
end.last[1]
|
145
|
-
|
146
|
-
if latest_version.nil?
|
147
|
-
message = "can't find dependency package: " +
|
148
|
-
"<#{dependency}>(#{dependency_version}):<#{dependencies_url}>"
|
149
|
-
raise message
|
150
|
-
end
|
151
|
-
escaped_latest_version = Regexp.escape(latest_version)
|
152
|
-
dependencies_page.links.each do |link|
|
153
|
-
case link.href
|
154
|
-
when /\A#{escaped_dependency}(?:-dev)?_#{escaped_latest_version}_#{suffix}\.zip\z/
|
155
|
-
click_zip_link(link)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
private
|
161
|
-
def agent
|
162
|
-
@agent ||= Mechanize.new
|
163
|
-
end
|
164
165
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
166
|
+
def click_zip_link(link)
|
167
|
+
zip = link.click
|
168
|
+
Dir.chdir(dist_dir) do
|
169
|
+
open(zip.filename, "wb") do |file|
|
170
|
+
file.print(zip.body)
|
171
|
+
end
|
172
|
+
system("unzip", "-o", zip.filename)
|
173
|
+
Dir.glob("lib/pkgconfig/*.pc") do |pc_path|
|
174
|
+
pc = File.read(pc_path)
|
175
|
+
pc = pc.gsub(/\Aprefix=.+$/) {"prefix=#{dist_dir}"}
|
176
|
+
File.open(pc_path, "w") do |pc_file|
|
177
|
+
pc_file.print(pc)
|
178
|
+
end
|
179
|
+
end
|
177
180
|
end
|
178
181
|
end
|
179
182
|
end
|
data/lib/mkmf-gnome2.rb
CHANGED
@@ -151,8 +151,16 @@ def find_gem_spec(package)
|
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
|
+
def setup_homebrew_libffi
|
155
|
+
return unless package_platform == :homebrew
|
156
|
+
|
157
|
+
PKGConfig.add_path("/usr/local/opt/libffi/lib/pkgconfig")
|
158
|
+
end
|
159
|
+
|
154
160
|
#add_depend_package("glib2", "ext/glib2", "/...../ruby-gnome2")
|
155
161
|
def add_depend_package(target_name, target_srcdir, top_srcdir, options={})
|
162
|
+
setup_homebrew_libffi if target_name == "gobject-introspection"
|
163
|
+
|
156
164
|
gem_spec = find_gem_spec(target_name)
|
157
165
|
if gem_spec
|
158
166
|
target_source_dir = File.join(gem_spec.full_gem_path, "ext/#{target_name}")
|
@@ -410,34 +418,6 @@ def make_version_header(app_name, pkgname, dir = "src")
|
|
410
418
|
out.close
|
411
419
|
end
|
412
420
|
|
413
|
-
def check_ruby_func
|
414
|
-
#Other options
|
415
|
-
ruby_header = "ruby.h"
|
416
|
-
have_func("rb_define_alloc_func", ruby_header) # for ruby-1.8
|
417
|
-
have_func("rb_block_proc", ruby_header) # for ruby-1.8
|
418
|
-
|
419
|
-
STDOUT.print("checking for new allocation framework... ") # for ruby-1.7
|
420
|
-
if Object.respond_to? :allocate
|
421
|
-
STDOUT.print "yes\n"
|
422
|
-
$defs << "-DHAVE_OBJECT_ALLOCATE"
|
423
|
-
else
|
424
|
-
STDOUT.print "no\n"
|
425
|
-
end
|
426
|
-
|
427
|
-
STDOUT.print("checking for attribute assignment... ") # for ruby-1.7
|
428
|
-
STDOUT.flush
|
429
|
-
if defined? try_compile and try_compile <<SRC
|
430
|
-
#include "ruby.h"
|
431
|
-
#include "node.h"
|
432
|
-
int node_attrasgn = (int)NODE_ATTRASGN;
|
433
|
-
SRC
|
434
|
-
STDOUT.print "yes\n"
|
435
|
-
$defs << "-DHAVE_NODE_ATTRASGN"
|
436
|
-
else
|
437
|
-
STDOUT.print "no\n"
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
421
|
def add_obj(name)
|
442
422
|
ensure_objs
|
443
423
|
$objs << name unless $objs.index(name)
|
@@ -617,6 +597,9 @@ def required_pkg_config_package(package_info, native_package_info=nil)
|
|
617
597
|
else
|
618
598
|
required_package_info = [package_info]
|
619
599
|
end
|
600
|
+
if required_package_info.include?("gobject-introspection-1.0")
|
601
|
+
setup_homebrew_libffi
|
602
|
+
end
|
620
603
|
return true if PKGConfig.have_package(*required_package_info)
|
621
604
|
|
622
605
|
native_package_info ||= {}
|
@@ -635,8 +618,6 @@ end
|
|
635
618
|
add_include_path.call("sitearchdir")
|
636
619
|
add_include_path.call("vendorarchdir")
|
637
620
|
|
638
|
-
check_ruby_func
|
639
|
-
|
640
621
|
if /mingw/ =~ RUBY_PLATFORM
|
641
622
|
$ruby.gsub!('\\', '/')
|
642
623
|
end
|
data/test/test-binding.rb
CHANGED
@@ -16,82 +16,173 @@
|
|
16
16
|
|
17
17
|
class TestGLibBinding < Test::Unit::TestCase
|
18
18
|
include GLibTestUtils
|
19
|
+
sub_test_case "bind_property" do
|
20
|
+
class DataObjectDefault < GLib::Object
|
21
|
+
type_register
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
@target = value
|
54
|
-
notify("target")
|
23
|
+
install_property(GLib::Param::Int.new("source", # name
|
24
|
+
"Source", # nick
|
25
|
+
"The source data", # blurb
|
26
|
+
0, # min
|
27
|
+
100, # max
|
28
|
+
0, # default
|
29
|
+
GLib::Param::READABLE |
|
30
|
+
GLib::Param::WRITABLE))
|
31
|
+
install_property(GLib::Param::Int.new("target", # name
|
32
|
+
"Target", # nick
|
33
|
+
"The target data", # blurb
|
34
|
+
0, # min
|
35
|
+
100, # max
|
36
|
+
0, # default
|
37
|
+
GLib::Param::READABLE |
|
38
|
+
GLib::Param::WRITABLE))
|
39
|
+
|
40
|
+
attr_reader :source, :target
|
41
|
+
def initialize
|
42
|
+
@source = 0
|
43
|
+
@target = 0
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def source=(value)
|
48
|
+
@source = value
|
49
|
+
notify("source")
|
50
|
+
end
|
51
|
+
|
52
|
+
def target=(value)
|
53
|
+
@target = value
|
54
|
+
notify("target")
|
55
|
+
end
|
55
56
|
end
|
56
|
-
end
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
setup do
|
59
|
+
only_glib_version(2, 26, 0)
|
60
|
+
end
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
setup do
|
63
|
+
@source = DataObjectDefault.new
|
64
|
+
@target = DataObjectDefault.new
|
65
|
+
@binding = @source.bind_property("source", @target, "target", :default)
|
66
|
+
end
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
test "#source" do
|
69
|
+
assert_equal(@source, @binding.source)
|
70
|
+
end
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
test "#source_property" do
|
73
|
+
assert_equal("source", @binding.source_property)
|
74
|
+
end
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
|
76
|
+
test "#target" do
|
77
|
+
assert_equal(@target, @binding.target)
|
78
|
+
end
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
|
80
|
+
test "#target_property" do
|
81
|
+
assert_equal("target", @binding.target_property)
|
82
|
+
end
|
83
83
|
|
84
|
-
|
85
|
-
|
84
|
+
test "#flags" do
|
85
|
+
assert_equal(GLib::BindingFlags::DEFAULT, @binding.flags)
|
86
|
+
end
|
87
|
+
|
88
|
+
test "#unbind" do
|
89
|
+
only_glib_version(2, 38, 0)
|
90
|
+
assert_equal(0, @target.target)
|
91
|
+
@source.source = 10
|
92
|
+
assert_equal(10, @target.target)
|
93
|
+
@binding.unbind
|
94
|
+
@source.source = 20
|
95
|
+
assert_equal(10, @target.target)
|
96
|
+
end
|
86
97
|
end
|
98
|
+
sub_test_case "bind_property_full" do
|
99
|
+
class DataObjectBidir < GLib::Object
|
100
|
+
type_register
|
101
|
+
|
102
|
+
install_property(GLib::Param::Int.new("source", # name
|
103
|
+
"Source", # nick
|
104
|
+
"The source data", # blurb
|
105
|
+
0, # min
|
106
|
+
100, # max
|
107
|
+
0, # default
|
108
|
+
GLib::Param::READABLE |
|
109
|
+
GLib::Param::WRITABLE))
|
110
|
+
install_property(GLib::Param::String.new("target", # name
|
111
|
+
"Target", # nick
|
112
|
+
"The target data", # blurb
|
113
|
+
"", # default
|
114
|
+
GLib::Param::READABLE |
|
115
|
+
GLib::Param::WRITABLE))
|
116
|
+
|
117
|
+
attr_reader :source, :target
|
118
|
+
def initialize
|
119
|
+
@source = 0
|
120
|
+
@target = "nan"
|
121
|
+
super
|
122
|
+
end
|
87
123
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
124
|
+
def source=(value)
|
125
|
+
@source = value
|
126
|
+
notify("source")
|
127
|
+
end
|
128
|
+
|
129
|
+
def target=(value)
|
130
|
+
@target = value
|
131
|
+
notify("target")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
setup do
|
136
|
+
only_glib_version(2, 26, 0)
|
137
|
+
end
|
138
|
+
|
139
|
+
setup do
|
140
|
+
@source = DataObjectBidir.new
|
141
|
+
@target = DataObjectBidir.new
|
142
|
+
transform_to_callback = proc do |source_value|
|
143
|
+
source_value.to_s
|
144
|
+
end
|
145
|
+
|
146
|
+
transform_from_callback = proc do |target_value|
|
147
|
+
target_value.to_i
|
148
|
+
end
|
149
|
+
|
150
|
+
@binding = @source.bind_property("source", @target, "target",
|
151
|
+
:bidirectional,
|
152
|
+
:transform_to => transform_to_callback,
|
153
|
+
:transform_from => transform_from_callback)
|
154
|
+
end
|
155
|
+
|
156
|
+
test "#source" do
|
157
|
+
assert_equal(@source, @binding.source)
|
158
|
+
end
|
159
|
+
|
160
|
+
test "#source_property" do
|
161
|
+
assert_equal("source", @binding.source_property)
|
162
|
+
end
|
163
|
+
|
164
|
+
test "#target" do
|
165
|
+
assert_equal(@target, @binding.target)
|
166
|
+
end
|
167
|
+
|
168
|
+
test "#target_property" do
|
169
|
+
assert_equal("target", @binding.target_property)
|
170
|
+
end
|
171
|
+
|
172
|
+
test "#flags" do
|
173
|
+
assert_equal(GLib::BindingFlags::BIDIRECTIONAL, @binding.flags)
|
174
|
+
end
|
175
|
+
|
176
|
+
test "#unbind" do
|
177
|
+
only_glib_version(2, 38, 0)
|
178
|
+
assert_equal("nan", @target.target)
|
179
|
+
@source.source = 10
|
180
|
+
assert_equal("10", @target.target)
|
181
|
+
@target.target = "30"
|
182
|
+
assert_equal(30, @source.source)
|
183
|
+
@binding.unbind
|
184
|
+
@source.source = 20
|
185
|
+
assert_equal("30", @target.target)
|
186
|
+
end
|
96
187
|
end
|
97
188
|
end
|