glib2 3.0.7 → 3.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -122,12 +122,14 @@ rbgobj_gvalue_to_rvalue(const GValue* value)
122
122
  return func(value);
123
123
  }
124
124
  }
125
+ #if GLIB_CHECK_VERSION(2, 26, 0)
125
126
  case G_TYPE_VARIANT:
126
127
  {
127
128
  GVariant *variant = g_value_peek_pointer(value);
128
129
  rvalue = rbg_variant_to_ruby(variant);
129
130
  return rvalue;
130
131
  }
132
+ #endif
131
133
  default:
132
134
  if (!rbgobj_convert_gvalue2rvalue(fundamental_type, value, &rvalue)) {
133
135
  GValueToRValueFunc func;
@@ -308,7 +310,11 @@ rbgobj_rvalue_to_gvalue(VALUE val, GValue* result)
308
310
  return;
309
311
  }
310
312
  }
311
-
313
+ #if GLIB_CHECK_VERSION(2, 26, 0)
314
+ case G_TYPE_VARIANT:
315
+ g_value_set_variant(result, rbg_variant_from_ruby(val));
316
+ break;
317
+ #endif
312
318
  default:
313
319
  if (!rbgobj_convert_rvalue2gvalue(fundamental_type, val, result)) {
314
320
  RValueToGValueFunc func =
@@ -152,6 +152,8 @@ G_GNUC_INTERNAL void Init_glib_keyfile(void);
152
152
  G_GNUC_INTERNAL void Init_glib_bookmark_file(void);
153
153
  G_GNUC_INTERNAL void Init_glib_variant_type(void);
154
154
  G_GNUC_INTERNAL void Init_glib_variant(void);
155
+ G_GNUC_INTERNAL void Init_glib_regex(void);
156
+ G_GNUC_INTERNAL void Init_glib_matchinfo(void);
155
157
 
156
158
  G_GNUC_INTERNAL void Init_gobject_convert(void);
157
159
  G_GNUC_INTERNAL void Init_gobject_gtype(void);
@@ -201,6 +201,13 @@ rbg_name_to_nick(const gchar *name)
201
201
  return nick;
202
202
  }
203
203
 
204
+ void *
205
+ rbg_memzero(void *pointer, size_t size)
206
+ {
207
+ memset(pointer, 0, size);
208
+ return pointer;
209
+ }
210
+
204
211
  void
205
212
  Init_gutil(void)
206
213
  {
@@ -109,6 +109,8 @@ extern GSource *rbg_interrupt_source_new(void);
109
109
 
110
110
  extern gchar *rbg_name_to_nick(const gchar *name);
111
111
 
112
+ extern void *rbg_memzero(void *poitner, size_t size);
113
+
112
114
  /*< protected >*/
113
115
  RUBY_GLIB2_VAR ID rbgutil_id_module_eval;
114
116
  extern void rbgutil_glibid_r2g_func(VALUE from, GValue* to);
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2005-2015 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2005-2016 Ruby-GNOME2 Project Team
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -241,6 +241,7 @@ GLib::Log.set_log_domain(GLib::Thread::LOG_DOMAIN)
241
241
  GLib::Log.set_log_domain(GLib::Module::LOG_DOMAIN)
242
242
 
243
243
  require 'glib2/version'
244
+ require "glib2/regex"
244
245
  =begin
245
246
  Don't we need this?
246
247
  ObjectSpace.define_finalizer(GLib) {
@@ -0,0 +1,29 @@
1
+ # Copyright (C) 2016 Ruby-GNOME2 Project Team
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+
17
+ module GLib
18
+ class Regex
19
+ class << self
20
+ def match?(pattern, string, options={})
21
+ new(pattern, options).match(string, options).matches?
22
+ end
23
+
24
+ def split(pattern, string, options={})
25
+ new(pattern, options).split(string, options)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -123,7 +123,8 @@ module GNOME2
123
123
  :need_autogen,
124
124
  :need_autoreconf,
125
125
  :build_concurrently,
126
- :use_cc_environment_variable)
126
+ :use_cc_environment_variable,
127
+ :gobject_introspection_compiler_split_args)
127
128
  def initialize(properties)
128
129
  super()
129
130
  properties.each do |key, value|
@@ -178,6 +179,10 @@ module GNOME2
178
179
  def use_cc_environment_variable?
179
180
  use_cc_environment_variable.nil? ? true : use_cc_environment_variable
180
181
  end
182
+
183
+ def gobject_introspection_compiler_split_args?
184
+ gobject_introspection_compiler_split_args
185
+ end
181
186
  end
182
187
 
183
188
  class NativeConfiguration < Struct.new(:build,
@@ -119,7 +119,7 @@ module GNOME2
119
119
  s.author = @author
120
120
  s.email = @email
121
121
  s.homepage = @homepage
122
- s.licenses = ["LGPLv2.1 or later"]
122
+ s.licenses = ["LGPLv2.1+"]
123
123
  s.version = version
124
124
  extensions = FileList["ext/#{@name}/extconf.rb"]
125
125
  extensions.existing!
@@ -126,6 +126,15 @@ module GNOME2
126
126
  end
127
127
  end
128
128
 
129
+ def build_arch
130
+ case build_architecture
131
+ when "x86"
132
+ "i686"
133
+ when "x64"
134
+ "x86_64"
135
+ end
136
+ end
137
+
129
138
  def build_architecture
130
139
  ENV["RUBY_GNOME2_BUILD_ARCHITECTURE"] || "x86"
131
140
  end
@@ -120,7 +120,7 @@ class GNOME2WindowsBinaryBuildTask
120
120
  if package.windows.use_cc_environment_variable?
121
121
  common_make_args << cc_env(package)
122
122
  end
123
- add_gobject_introspection_make_args(common_make_args)
123
+ add_gobject_introspection_make_args(package, common_make_args)
124
124
  build_make_args = common_make_args.dup
125
125
  install_make_args = common_make_args.dup
126
126
  if package.windows.build_concurrently?
@@ -128,6 +128,9 @@ class GNOME2WindowsBinaryBuildTask
128
128
  build_make_args << "-j#{make_n_jobs}" if make_n_jobs
129
129
  end
130
130
  ENV["GREP_OPTIONS"] = "--text"
131
+ # ENV["GI_SCANNER_DEBUG"] = "save-temps"
132
+ # build_make_args << "--debug"
133
+ # build_make_args << "V=1"
131
134
  sh("nice", "make", *build_make_args) or exit(false)
132
135
  sh("make", "install", *install_make_args) or exit(false)
133
136
 
@@ -152,9 +155,10 @@ class GNOME2WindowsBinaryBuildTask
152
155
 
153
156
  def configure(package)
154
157
  sh("./autogen.sh") if package.windows.need_autogen?
155
- sh("autoreconf --install") if package.windows.need_autoreconf?
158
+ sh("autoreconf", "--install", "--force") if package.windows.need_autoreconf?
156
159
  sh("./configure",
157
160
  cc_env(package),
161
+ dlltool_env,
158
162
  "CPPFLAGS=#{cppflags(package)}",
159
163
  "LDFLAGS=#{ldflags(package)}",
160
164
  "--prefix=#{dist_dir}",
@@ -177,6 +181,10 @@ class GNOME2WindowsBinaryBuildTask
177
181
  "CC=#{cc(package)}"
178
182
  end
179
183
 
184
+ def dlltool_env
185
+ "DLLTOOL=#{dlltool}"
186
+ end
187
+
180
188
  def build_packages
181
189
  packages = @package.external_packages.select do |package|
182
190
  package.windows.build?
@@ -241,6 +249,10 @@ class GNOME2WindowsBinaryBuildTask
241
249
  cxx_command_line.compact.join(" ")
242
250
  end
243
251
 
252
+ def dlltool
253
+ "#{@package.windows.build_host}-dlltool"
254
+ end
255
+
244
256
  def cppflags(package)
245
257
  include_paths = package.windows.include_paths
246
258
  if @package.windows.build_dependencies.include?("glib2")
@@ -282,7 +294,7 @@ class GNOME2WindowsBinaryBuildTask
282
294
  paths
283
295
  end
284
296
 
285
- def add_gobject_introspection_make_args(common_make_args)
297
+ def add_gobject_introspection_make_args(package, common_make_args)
286
298
  unless @package.windows.build_dependencies.include?("gobject-introspection")
287
299
  return
288
300
  end
@@ -299,21 +311,33 @@ class GNOME2WindowsBinaryBuildTask
299
311
  ]
300
312
  dependencies += @package.windows.gobject_introspection_dependencies
301
313
 
302
- compute_base_dir = lambda do |package|
303
- "#{@package.project_root_dir}/#{package}/vendor/local"
314
+ compute_base_dir = lambda do |dependent_package|
315
+ "#{@package.project_root_dir}/#{dependent_package}/vendor/local"
304
316
  end
305
317
 
306
318
  gi_base_dir = compute_base_dir.call("gobject-introspection")
307
319
  introspection_compiler = "INTROSPECTION_COMPILER="
308
320
  introspection_compiler << "#{gi_base_dir}/bin/g-ir-compiler.exe"
309
- dependencies.each do |package|
310
- gir_dir = "#{compute_base_dir.call(package)}/share/gir-1.0"
311
- introspection_compiler << " --includedir=#{gir_dir}"
321
+ introspection_compiler_args = ""
322
+ dependencies.each do |dependent_package|
323
+ gir_dir = "#{compute_base_dir.call(dependent_package)}/share/gir-1.0"
324
+ introspection_compiler_args << " --includedir=#{gir_dir}"
325
+ end
326
+ if package.windows.gobject_introspection_compiler_split_args?
327
+ common_make_args << introspection_compiler
328
+ common_make_args <<
329
+ "INTROSPECTION_COMPILER_ARGS=#{introspection_compiler_args}"
330
+ common_make_args <<
331
+ "INTROSPECTION_COMPILER_OPTS=#{introspection_compiler_args}"
332
+ else
333
+ introspection_compiler << " #{introspection_compiler_args}"
334
+ common_make_args << introspection_compiler
312
335
  end
313
- common_make_args << introspection_compiler
314
336
 
315
- data_dirs = dependencies.collect do |package|
316
- "#{compute_base_dir.call(package)}/share"
337
+ common_make_args << dlltool_env
338
+
339
+ data_dirs = dependencies.collect do |dependent_package|
340
+ "#{compute_base_dir.call(dependent_package)}/share"
317
341
  end
318
342
  common_make_args << "XDG_DATA_DIRS=#{data_dirs.join(File::PATH_SEPARATOR)}"
319
343
  end
@@ -503,6 +503,8 @@ def package_platform
503
503
  :redhat
504
504
  elsif File.exist?("/etc/SuSE-release")
505
505
  :suse
506
+ elsif File.exist?("/etc/altlinux-release")
507
+ :altlinux
506
508
  elsif find_executable("pacman")
507
509
  :arch
508
510
  elsif find_executable("brew")
@@ -536,7 +538,7 @@ def install_missing_native_package(native_package_info)
536
538
  package_command_line = [package_name, *options].join(" ")
537
539
  need_super_user_priviledge = true
538
540
  case platform
539
- when :debian
541
+ when :debian, :altlinux
540
542
  install_command = "apt-get install -V -y #{package_command_line}"
541
543
  when :fedora, :redhat
542
544
  install_command = "yum install -y #{package_command_line}"
@@ -0,0 +1,113 @@
1
+ # Copyright (C) 2015-2016 Ruby-GNOME2 Project Team
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+
17
+ class TestMatchInfo < Test::Unit::TestCase
18
+ def test_string
19
+ regex = GLib::Regex.new("[A-Z]+")
20
+ match_info = regex.match("abc def")
21
+ assert_equal("abc def", match_info.string)
22
+ end
23
+
24
+ def test_regex
25
+ regex = GLib::Regex.new("[A-Z]+")
26
+ match_info = regex.match("abc def")
27
+ assert_equal("[A-Z]+", match_info.regex.pattern)
28
+ end
29
+
30
+ def test_partial_match
31
+ flags = GLib::RegexMatchFlags::PARTIAL_SOFT
32
+ regex = GLib::Regex.new("jan")
33
+ match_info = regex.match_all("ja", :match_options => flags)
34
+ assert do
35
+ !match_info.matches?
36
+ end
37
+ assert do
38
+ match_info.partial_match?
39
+ end
40
+ end
41
+
42
+ sub_test_case "fetch" do
43
+ test "Integer" do
44
+ regex = GLib::Regex.new("[A-Z]+")
45
+ match_info = regex.match_all("abc DEF ghi JKL mnop")
46
+ assert_equal("DEF", match_info.fetch(0))
47
+ assert_equal("DE", match_info.fetch(1))
48
+ end
49
+
50
+ test "String" do
51
+ regex = GLib::Regex.new("(?<a_name>fo+)")
52
+ match_info = regex.match("tatafoo")
53
+ assert_equal("foo", match_info.fetch("a_name"))
54
+ end
55
+
56
+ test "Symbol" do
57
+ regex = GLib::Regex.new("(?<a_name>fo+)")
58
+ match_info = regex.match("tatafoo")
59
+ assert_equal("foo", match_info.fetch(:a_name))
60
+ end
61
+
62
+ test "[]" do
63
+ regex = GLib::Regex.new("(?<a_name>fo+)")
64
+ match_info = regex.match("tatafoo")
65
+ assert_equal("foo", match_info[:a_name])
66
+ end
67
+ end
68
+
69
+ sub_test_case "fetch_pos" do
70
+ test "Integer" do
71
+ regex = GLib::Regex.new("[A-Z]+")
72
+ match_info = regex.match_all("abc DEF ghi JKL mnop")
73
+ assert_equal([4, 7], match_info.fetch_pos(0))
74
+ assert_equal([4, 6], match_info.fetch_pos(1))
75
+ end
76
+
77
+ test "String" do
78
+ regex = GLib::Regex.new("(?<a_name>fo+)")
79
+ match_info = regex.match("tatafoo")
80
+ assert_equal([4, 7], match_info.fetch_pos("a_name"))
81
+ end
82
+
83
+ test "Symbol" do
84
+ regex = GLib::Regex.new("(?<a_name>fo+)")
85
+ match_info = regex.match("tatafoo")
86
+ assert_equal([4, 7], match_info.fetch_pos(:a_name))
87
+ end
88
+ end
89
+
90
+ def test_fetch_all
91
+ regex = GLib::Regex.new("[A-Z]+")
92
+ str = "abc DEF ghi JKL mnop"
93
+ match_info = regex.match_all(str)
94
+ assert_equal(["DEF", "DE", "D"], match_info.fetch_all)
95
+ end
96
+
97
+ def test_next
98
+ regex = GLib::Regex.new("[A-Z]+")
99
+ str = "abc DEF ghi JKL mnop"
100
+ match_info = regex.match(str)
101
+ assert_equal("DEF", match_info[0])
102
+ assert {match_info.next}
103
+ assert_equal("JKL", match_info[0])
104
+ assert {!match_info.next}
105
+ end
106
+
107
+ def test_expand_references
108
+ regex = GLib::Regex.new("a(?P<G>.)c")
109
+ match_info = regex.match("xabcy")
110
+ expanded_string = match_info.expand_references("X\\g<G>X")
111
+ assert_equal("XbX", expanded_string)
112
+ end
113
+ end
@@ -0,0 +1,320 @@
1
+ # Copyright (C) 2015-2016 Ruby-GNOME2 Project Team
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+
17
+ class TestRegex < Test::Unit::TestCase
18
+ def test_enum_match_flags
19
+ assert_const_defined(GLib, :RegexMatchFlags)
20
+ assert_kind_of(GLib::RegexMatchFlags, GLib::RegexMatchFlags::PARTIAL_HARD)
21
+ end
22
+
23
+ def test_enum_compile_flags
24
+ assert_const_defined(GLib, :RegexCompileFlags)
25
+ assert_kind_of(GLib::RegexCompileFlags, GLib::RegexCompileFlags::CASELESS)
26
+ end
27
+
28
+ def test_pattern
29
+ regex = GLib::Regex.new("to??")
30
+ assert_equal("to??", regex.pattern)
31
+ end
32
+
33
+ def test_compile_flags
34
+ flags = GLib::RegexCompileFlags::CASELESS
35
+ regex = GLib::Regex.new("to??", :compile_options => flags)
36
+ assert_equal(flags, regex.compile_flags)
37
+ end
38
+
39
+ def test_match_flags
40
+ flags = GLib::RegexMatchFlags::PARTIAL_HARD
41
+ regex = GLib::Regex.new("to??", :match_options => flags)
42
+ assert_equal(flags, regex.match_flags)
43
+ end
44
+
45
+ sub_test_case "split" do
46
+ test "no options" do
47
+ regex = GLib::Regex.new("\s")
48
+ string_to_split = "a bc"
49
+ splited_strings = regex.split(string_to_split)
50
+ assert_equal(["a", "bc"], splited_strings)
51
+ end
52
+
53
+ test "start_position" do
54
+ regex = GLib::Regex.new("\s")
55
+ string_to_split = "a bc"
56
+ splited_strings = regex.split(string_to_split, :start_position => 2)
57
+ assert_equal(["bc"], splited_strings)
58
+ end
59
+
60
+ test "max_tokens" do
61
+ regex = GLib::Regex.new("\s")
62
+ string_to_split = "a bc de fg"
63
+ splited_strings = regex.split(string_to_split, :max_tokens => 2)
64
+ assert_equal(["a", "bc de fg"], splited_strings)
65
+ end
66
+
67
+ test "match_options" do
68
+ regex = GLib::Regex.new("a?b?")
69
+ string_to_split = "toto ab"
70
+ splited_strings = regex.split(string_to_split)
71
+ assert_equal(["t", "o", "t", "o", " "],
72
+ splited_strings)
73
+ splited_strings = regex.split(string_to_split,
74
+ :match_options => :notempty)
75
+ assert_equal(["toto ", ""], splited_strings)
76
+ end
77
+ end
78
+
79
+ sub_test_case "match" do
80
+ setup do
81
+ @regex = GLib::Regex.new("[A-Z]+")
82
+ end
83
+
84
+ test "no match no options" do
85
+ match_info = @regex.match("abc def")
86
+ assert do
87
+ not match_info.matches?
88
+ end
89
+ end
90
+
91
+ test "matched no options" do
92
+ match_info = @regex.match("abc DEF")
93
+ assert do
94
+ match_info.matches?
95
+ end
96
+ end
97
+
98
+ test "no match and start position option" do
99
+ match_info = @regex.match("abc def", :start_position => 4)
100
+ assert do
101
+ not match_info.matches?
102
+ end
103
+ end
104
+
105
+ test "matched and start position option" do
106
+ match_info = @regex.match("abc DEF", :start_position => 4)
107
+ assert do
108
+ match_info.matches?
109
+ end
110
+ end
111
+ end
112
+
113
+ sub_test_case "max_backref" do
114
+ test "none" do
115
+ regex = GLib::Regex.new("to?o")
116
+ assert_equal(0, regex.max_backref)
117
+ end
118
+
119
+ test "one" do
120
+ regex = GLib::Regex.new("(to(?)o)\\g1")
121
+ assert_equal(1, regex.max_backref)
122
+ end
123
+ end
124
+
125
+ sub_test_case "capture_count" do
126
+ test "none" do
127
+ regex = GLib::Regex.new("to?o")
128
+ assert_equal(0, regex.capture_count)
129
+ end
130
+
131
+ test "one" do
132
+ regex = GLib::Regex.new("(to(\?)o)")
133
+ assert_equal(1, regex.capture_count)
134
+ end
135
+
136
+ test "three" do
137
+ regex = GLib::Regex.new("((red|white) (king|queen))")
138
+ assert_equal(3, regex.capture_count)
139
+ end
140
+ end
141
+
142
+ sub_test_case "has_cr_or_lf" do
143
+ test "none" do
144
+ regex = GLib::Regex.new("to?o")
145
+ assert do
146
+ not regex.has_cr_or_lf?
147
+ end
148
+ end
149
+
150
+ test "both" do
151
+ regex = GLib::Regex.new("to\no")
152
+ assert do
153
+ regex.has_cr_or_lf?
154
+ end
155
+ end
156
+
157
+ test "cr" do
158
+ regex = GLib::Regex.new("to\rtiti")
159
+ assert do
160
+ regex.has_cr_or_lf?
161
+ end
162
+ end
163
+ end
164
+
165
+ sub_test_case "max_lookbehind" do
166
+ test "none" do
167
+ regex = GLib::Regex.new("to?o")
168
+ assert_equal(0, regex.max_lookbehind)
169
+ end
170
+
171
+ test "three" do
172
+ regex = GLib::Regex.new("(?<!foo)bar")
173
+ assert_equal(3, regex.max_lookbehind)
174
+ end
175
+ end
176
+
177
+ sub_test_case "string_number" do
178
+ test "none" do
179
+ regex = GLib::Regex.new("too")
180
+ assert_equal(-1, regex.string_number("a_name"))
181
+ end
182
+
183
+ test "one" do
184
+ regex = GLib::Regex.new("(?<a_name>foo)bar")
185
+ assert_equal(1, regex.string_number("a_name"))
186
+ end
187
+
188
+ test "two" do
189
+ regex = GLib::Regex.new("(?<another_name>foo)(?<a_name>bar)")
190
+ assert_equal(2, regex.string_number("a_name"))
191
+ end
192
+ end
193
+
194
+ def test_regex_escape_string
195
+ assert_equal("a\\.b\\*c", GLib::Regex.escape_string("a.b*c"))
196
+ end
197
+
198
+ sub_test_case "match?" do
199
+ test "true" do
200
+ assert do
201
+ GLib::Regex.match?("to", "tatota")
202
+ end
203
+ end
204
+
205
+ test "false" do
206
+ assert do
207
+ not GLib::Regex.match?("ti", "tatota")
208
+ end
209
+ end
210
+ end
211
+
212
+ sub_test_case "match_all" do
213
+ test "no match" do
214
+ regex = GLib::Regex.new("[A-Z]+")
215
+ assert do
216
+ not regex.match_all("abc def").matches?
217
+ end
218
+ end
219
+
220
+ test ":start_position" do
221
+ regex = GLib::Regex.new("[A-Z]")
222
+ assert do
223
+ regex.match_all("a B c", :start_position => 2).matches?
224
+ end
225
+ assert do
226
+ not regex.match_all("a B c", :start_position => 3).matches?
227
+ end
228
+ end
229
+
230
+ test "match all" do
231
+ regex = GLib::Regex.new("<.*>")
232
+ assert_equal(3, regex.match_all("<a> <b> <c>").match_count)
233
+ end
234
+ end
235
+
236
+ sub_test_case "split simple" do
237
+ test "no options" do
238
+ splited_strings = GLib::Regex.split("\s", "a bc")
239
+ assert_equal(["a", "bc"], splited_strings)
240
+ end
241
+
242
+ test "match_options" do
243
+ splited_strings = GLib::Regex.split("a?b?", "toto ab")
244
+ assert_equal(["t", "o", "t", "o", " "], splited_strings)
245
+
246
+ splited_strings = GLib::Regex.split("a?b?",
247
+ "toto ab",
248
+ :match_options => :notempty)
249
+ assert_equal(["toto ", ""], splited_strings)
250
+ end
251
+ end
252
+
253
+ sub_test_case "replace" do
254
+ test "simple" do
255
+ regex = GLib::Regex.new("\\s")
256
+ assert_equal("a_bc", regex.replace("a bc", "_"))
257
+ end
258
+
259
+ test "back reference" do
260
+ regex = GLib::Regex.new("\\s")
261
+ assert_equal("a_ _bc", regex.replace("a bc", "_\\0_"))
262
+ end
263
+
264
+ test "literal" do
265
+ regex = GLib::Regex.new("\\s")
266
+ assert_equal("a_\\0_bc",
267
+ regex.replace("a bc",
268
+ "_\\0_",
269
+ :literal => true))
270
+ end
271
+
272
+ sub_test_case "eval" do
273
+ test "all" do
274
+ regex = GLib::Regex.new("1|2|3|4")
275
+ modified_string = regex.replace(" 4 3 2 1") do |match_info|
276
+ "to"
277
+ end
278
+ assert_equal(" to to to to", modified_string)
279
+ end
280
+
281
+ test "break" do
282
+ regex = GLib::Regex.new("1|2|3|4")
283
+ modified_string = regex.replace(" 4 3 2 1") do |match_info|
284
+ break "to"
285
+ end
286
+ assert_equal(" to 3 2 1", modified_string)
287
+ end
288
+ end
289
+ end
290
+
291
+ sub_test_case "check_replacement" do
292
+ test "no references" do
293
+ assert_true(GLib::Regex.check_replacement("foo\\n"))
294
+ end
295
+
296
+ test "with references" do
297
+ assert_true(GLib::Regex.check_replacement("\\0\\1"))
298
+ end
299
+
300
+ test "invalid" do
301
+ assert_raise(GLib::Error) do
302
+ GLib::Regex.check_replacement("\\")
303
+ end
304
+ end
305
+ end
306
+
307
+ sub_test_case "have_reference?" do
308
+ test "no references" do
309
+ assert do
310
+ not GLib::Regex.have_reference?("foo\\n")
311
+ end
312
+ end
313
+
314
+ test "with references" do
315
+ assert do
316
+ GLib::Regex.have_reference?("\\0\\1")
317
+ end
318
+ end
319
+ end
320
+ end