icu4r_19 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +87 -0
- data/MIT-LICENSE +20 -0
- data/README +156 -0
- data/Rakefile +32 -0
- data/calendar.c +636 -0
- data/collator.c +233 -0
- data/converter.c +322 -0
- data/docs/FORMATTING +131 -0
- data/docs/UNICODE_REGEXPS +204 -0
- data/extconf.rb +17 -0
- data/fmt.cpp +156 -0
- data/icu4r.c +18 -0
- data/icu_common.h +45 -0
- data/lib/dummy +0 -0
- data/samples/demo_each.rb +23 -0
- data/samples/demo_locales.rb +16 -0
- data/samples/demo_regexp.rb +11 -0
- data/samples/resbundle/appmsg/root.res +0 -0
- data/samples/resbundle/appmsg/ru.res +0 -0
- data/samples/resbundle/demo_bundle.rb +4 -0
- data/samples/resbundle/mkres.sh +4 -0
- data/samples/resbundle/root.txt +10 -0
- data/samples/resbundle/ru.txt +4 -0
- data/test/test_calendar.rb +123 -0
- data/test/test_collator.rb +33 -0
- data/test/test_converter.rb +72 -0
- data/test/test_ustring.rb +508 -0
- data/tools/doc.sh +2 -0
- data/tools/km.rb +425 -0
- data/ubundle.c +223 -0
- data/ucore_ext.c +168 -0
- data/uregex.c +697 -0
- data/uregex.h +27 -0
- data/ustring.c +3039 -0
- metadata +164 -0
data/icu4r.c
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
extern void initialize_ustring(void);
|
2
|
+
extern void initialize_calendar(void);
|
3
|
+
extern void initialize_uregexp(void);
|
4
|
+
extern void initialize_ucore_ext(void);
|
5
|
+
extern void initialize_ubundle(void);
|
6
|
+
extern void initialize_converter(void);
|
7
|
+
extern void initialize_collator(void);
|
8
|
+
void Init_icu4r (void) {
|
9
|
+
|
10
|
+
initialize_ustring();
|
11
|
+
initialize_uregexp();
|
12
|
+
initialize_ucore_ext();
|
13
|
+
initialize_ubundle();
|
14
|
+
initialize_calendar();
|
15
|
+
initialize_converter();
|
16
|
+
initialize_collator();
|
17
|
+
|
18
|
+
}
|
data/icu_common.h
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
#include <unicode/utypes.h>
|
3
|
+
#include <unicode/ustring.h>
|
4
|
+
#include <unicode/ustdio.h>
|
5
|
+
#include <unicode/uchar.h>
|
6
|
+
#include <unicode/uclean.h>
|
7
|
+
#include <unicode/uregex.h>
|
8
|
+
#include <unicode/unorm.h>
|
9
|
+
#include <unicode/ubrk.h>
|
10
|
+
#include <unicode/ucnv.h>
|
11
|
+
#include <unicode/uset.h>
|
12
|
+
#include <unicode/uenum.h>
|
13
|
+
#include <unicode/utrans.h>
|
14
|
+
#include <unicode/ucol.h>
|
15
|
+
#include <unicode/usearch.h>
|
16
|
+
#include <unicode/ures.h>
|
17
|
+
#include <unicode/unum.h>
|
18
|
+
|
19
|
+
#ifdef HAVE_UNISTD_H
|
20
|
+
#include <unistd.h>
|
21
|
+
#endif
|
22
|
+
typedef struct {
|
23
|
+
long len;
|
24
|
+
long capa;
|
25
|
+
UChar *ptr;
|
26
|
+
unsigned char busy;
|
27
|
+
} ICUString ;
|
28
|
+
#define USTRING(obj) ((ICUString *)DATA_PTR(obj))
|
29
|
+
#define UREGEX(obj) ((ICURegexp *)DATA_PTR(obj))
|
30
|
+
#define ICU_PTR(str) USTRING(str)->ptr
|
31
|
+
#define ICU_LEN(str) USTRING(str)->len
|
32
|
+
#define ICU_CAPA(str) USTRING(str)->capa
|
33
|
+
#define ICU_RESIZE(str,capacity) REALLOC_N(ICU_PTR(str), UChar, (capacity)+1);
|
34
|
+
|
35
|
+
typedef struct {
|
36
|
+
URegularExpression *pattern;
|
37
|
+
int options;
|
38
|
+
} ICURegexp;
|
39
|
+
|
40
|
+
|
41
|
+
#define Check_Class(obj, klass) if(CLASS_OF(obj) != klass) rb_raise(rb_eTypeError, "Wrong type: expected %s, got %s", rb_class2name(klass), rb_class2name(rb_obj_class(obj)));
|
42
|
+
|
43
|
+
|
44
|
+
#define ICU_RAISE(status) if(U_FAILURE(status)) rb_raise(rb_eRuntimeError, u_errorName(status));
|
45
|
+
|
data/lib/dummy
ADDED
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'icu4r'
|
2
|
+
res = {}
|
3
|
+
src = <<-EOT
|
4
|
+
外国語の勉強と教え
|
5
|
+
Изучение и обучение иностранных языков
|
6
|
+
Enseñanza y estudio de idiomas
|
7
|
+
'læŋɡwidʒ 'lɘr:niŋ ænd 'ti:ʃiŋ
|
8
|
+
ללמוד וללמד את השֵפה
|
9
|
+
L'enseignement et l'étude des langues
|
10
|
+
Γλωσσική Εκμὰθηση και Διδασκαλία
|
11
|
+
เรียนและสอนภาษา
|
12
|
+
EOT
|
13
|
+
src = src.u
|
14
|
+
["line_break", "char", "sentence", "word"].each do |brk|
|
15
|
+
res[brk] = {}
|
16
|
+
["ja", "en", "th"].each do |loc|
|
17
|
+
out = []
|
18
|
+
src.send("each_#{brk}".to_sym, loc) { |s| out << s }
|
19
|
+
res[brk][loc] = out.join("|")
|
20
|
+
puts "---------#{brk}-------#{loc}---------"
|
21
|
+
puts out.join("|")
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'icu4r'
|
2
|
+
root = UResourceBundle.open(nil, "en")
|
3
|
+
today = Time.now
|
4
|
+
UString::list_locales.each do |locale|
|
5
|
+
b = UResourceBundle.open(nil, locale)
|
6
|
+
lang, ctry, var = locale.split '_', 3
|
7
|
+
ctry = var ? var : ctry
|
8
|
+
puts [
|
9
|
+
locale,
|
10
|
+
"("+root["Countries"][ctry].to_s + " : " + root["Languages"][lang].to_s+")",
|
11
|
+
"("+b["Countries"][ctry].to_s + " : " + b["Languages"][lang].to_s+")",
|
12
|
+
"[{0,date,long}]({1,number,currency})".u.fmt(locale, today, 123.45),
|
13
|
+
b["ExemplarCharacters"]
|
14
|
+
].join("\t")
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'icu4r'
|
2
|
+
str = " abcあいうえおアイウエオアイウエオ漢字,0123スクリプト".u
|
3
|
+
puts str.inspect_names
|
4
|
+
p str=~ ure('[\p{Script=Latin}]+')
|
5
|
+
p str=~ ure('[\p{Script=Hiragana}]+')
|
6
|
+
p str=~ ure('[\p{Script=Katakana}]+')
|
7
|
+
p str=~ ure('[\p{Script=Hiragana}\p{Script=Katakana}]+')
|
8
|
+
p str=~ ure('[\p{blk=CJKUnifiedIdeographs}]+')
|
9
|
+
p str=~ ure('[\p{L}]+')
|
10
|
+
p str=~ ure('\u3042') # あ
|
11
|
+
p str.scan(ure('[\p{N}]'))
|
Binary file
|
Binary file
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require './icu4r'
|
2
|
+
require 'test/unit'
|
3
|
+
# these tests are ICU 3.4 dependent
|
4
|
+
class UCalendarTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_time_zones
|
7
|
+
v = UCalendar.time_zones
|
8
|
+
assert_kind_of(Array, v)
|
9
|
+
assert_kind_of(UString, v[0])
|
10
|
+
assert(v.include?("Europe/Kiev".u))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_default
|
14
|
+
v = UCalendar.default_tz
|
15
|
+
UCalendar.default_tz ="Europe/Paris".u
|
16
|
+
assert_equal( "Europe/Paris".u, UCalendar.default_tz)
|
17
|
+
c = UCalendar.new
|
18
|
+
assert_equal( 3_600_000, c[:zone_offset])
|
19
|
+
# assert_equal( "GMT+01:00".u, c.time_zone("root")) # this should work also
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_dst
|
23
|
+
assert_equal(UCalendar.dst_savings("America/Detroit".u), 3600000)
|
24
|
+
assert_equal(UCalendar.dst_savings("Australia/Lord_Howe".u), 1800000)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_tz_for_country
|
28
|
+
zones = %w{Europe/Kiev Europe/Simferopol Europe/Uzhgorod Europe/Zaporozhye}.collect {|s| s.to_u}
|
29
|
+
assert_equal(zones, UCalendar.tz_for_country("UA"))
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_time_now
|
33
|
+
assert_equal(Time.now.to_i/100, UCalendar.now.to_i/100000)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_in_daylight
|
37
|
+
t = UCalendar.new
|
38
|
+
t.set_date(2006, 8, 22)
|
39
|
+
t.time_zone = "US/Hawaii".u
|
40
|
+
assert_equal(false, t.in_daylight_time?)
|
41
|
+
t.time_zone = "Europe/Berlin".u
|
42
|
+
assert_equal(true, t.in_daylight_time?)
|
43
|
+
end
|
44
|
+
def test_set_date
|
45
|
+
t = UCalendar.new
|
46
|
+
t.set_date(2006, 0, 22)
|
47
|
+
assert_equal(2006, t[:year])
|
48
|
+
assert_equal(0, t[:month])
|
49
|
+
assert_equal(22, t[:date])
|
50
|
+
t[:year] = 2007
|
51
|
+
t[:month] = 2
|
52
|
+
t[:date] = 23
|
53
|
+
assert_equal(2007, t[:year])
|
54
|
+
assert_equal(2, t[:month])
|
55
|
+
assert_equal(23, t[:date])
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_set_date_time
|
60
|
+
t = UCalendar.new
|
61
|
+
t.set_date_time(2006, 0, 22, 11, 22, 33)
|
62
|
+
assert_equal(11, t[:hour])
|
63
|
+
assert_equal(22, t[:minute])
|
64
|
+
assert_equal(33, t[:second])
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_millis
|
68
|
+
m = UCalendar.now
|
69
|
+
t = UCalendar.new
|
70
|
+
assert(m <= t.millis)
|
71
|
+
n = Time.now.to_i
|
72
|
+
t.millis = n * 1000.0
|
73
|
+
assert_equal(n*1000.0, t.millis)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_add_time
|
77
|
+
t = UCalendar.new
|
78
|
+
t.set_date_time(2006, 0, 22, 11, 22, 33)
|
79
|
+
t.add(:week_of_year, 1)
|
80
|
+
assert_equal(29, t[:date])
|
81
|
+
t.add(:hour, 48)
|
82
|
+
assert_equal(31, t[:date])
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_format
|
86
|
+
t = UCalendar.new
|
87
|
+
t.set_date_time(2006, 0, 22, 11, 22, 33)
|
88
|
+
t.time_zone = "Europe/London".u
|
89
|
+
assert_equal("2006/01/22 11:22:33 GMT AD".u, t.format("yyyy/MM/dd HH:mm:ss z G".u, "en"))
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_clone_and_compare
|
93
|
+
c = UCalendar.new
|
94
|
+
d = c.clone
|
95
|
+
assert(c == d)
|
96
|
+
assert(! (c < d) )
|
97
|
+
assert(! (c > d) )
|
98
|
+
assert(c.eql?(d))
|
99
|
+
c.add(:date, 1)
|
100
|
+
assert(c != d)
|
101
|
+
assert(! (c < d) )
|
102
|
+
assert( (c > d) )
|
103
|
+
assert(!c.eql?(d))
|
104
|
+
d.add(:date, 1)
|
105
|
+
assert(c.eql?(d))
|
106
|
+
d.time_zone = "Europe/Kiev".u
|
107
|
+
assert(!c.eql?(d))
|
108
|
+
assert(c == d)
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_parse_date
|
112
|
+
UCalendar.default_tz="UTC".u
|
113
|
+
t1 = UCalendar.parse("HH:mm:ss E dd/MM/yyyy z".u, "en", "20:15:01 Fri 13/01/2006 GMT+00".u)
|
114
|
+
assert_equal(2006, t1[:year])
|
115
|
+
assert_equal(0, t1[:month])
|
116
|
+
assert_equal(13, t1[:date])
|
117
|
+
assert_equal(20, t1[:hour_of_day])
|
118
|
+
assert_equal(15, t1[:minute])
|
119
|
+
assert_equal(01, t1[:second])
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require './icu4r'
|
2
|
+
require 'test/unit'
|
3
|
+
# these tests are ICU 3.4 dependent
|
4
|
+
class UCollatorTest < Test::Unit::TestCase
|
5
|
+
def test_strength
|
6
|
+
c = UCollator.new("root")
|
7
|
+
assert_equal(0, c.strcoll("a".u, "a".u))
|
8
|
+
assert_equal(1, c.strcoll("A".u, "a".u))
|
9
|
+
c.strength = UCollator::UCOL_SECONDARY
|
10
|
+
assert_equal(0, c.strcoll("A".u, "a".u))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_attrs
|
14
|
+
c = UCollator.new("root")
|
15
|
+
c[UCollator::UCOL_NUMERIC_COLLATION]= UCollator::UCOL_ON
|
16
|
+
ar = %w(100 10 20 30 200 300).map {|a| a.to_u }.sort {|a,b| c.strcoll(a,b)}.map {|s| s.to_s }
|
17
|
+
assert_equal(["10", "20", "30", "100", "200", "300"], ar)
|
18
|
+
c[UCollator::UCOL_NUMERIC_COLLATION]= UCollator::UCOL_OFF
|
19
|
+
ar = %w(100 10 20 30 200 300).map {|a| a.to_u }.sort {|a,b| c.strcoll(a,b)}.map {|s| s.to_s }
|
20
|
+
assert_equal( ["10", "100", "20", "200", "30", "300"], ar)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_sort_key
|
24
|
+
c = UCollator.new("root")
|
25
|
+
c[UCollator::UCOL_NUMERIC_COLLATION]= UCollator::UCOL_ON
|
26
|
+
ar = %w(100 10 20 30 200 300).sort_by {|a| c.sort_key(a.to_u) }
|
27
|
+
assert_equal(["10", "20", "30", "100", "200", "300"], ar)
|
28
|
+
c[UCollator::UCOL_NUMERIC_COLLATION]= UCollator::UCOL_OFF
|
29
|
+
ar = %w(100 10 20 30 200 300).sort_by {|a| c.sort_key(a.to_u) }
|
30
|
+
assert_equal( ["10", "100", "20", "200", "30", "300"], ar)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require './icu4r'
|
2
|
+
require 'test/unit'
|
3
|
+
# these tests are ICU 3.4 dependent
|
4
|
+
class UConverterTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_a_new_and_name
|
7
|
+
c = UConverter.new("UTF8")
|
8
|
+
assert_kind_of( UConverter, c)
|
9
|
+
assert_equal('UTF-8', c.name)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_b_list_avail
|
13
|
+
a = UConverter.list_available
|
14
|
+
assert_kind_of(Array, a)
|
15
|
+
assert(a.include?("UTF-8"))
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_c_all_names
|
19
|
+
a = UConverter.all_names
|
20
|
+
assert_kind_of(Array, a)
|
21
|
+
assert(a.include?("UTF-8"))
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_d_std_names
|
25
|
+
a = UConverter.std_names("koi8r", "MIME")
|
26
|
+
assert_kind_of(Array, a)
|
27
|
+
assert(a.include?("KOI8-R"))
|
28
|
+
a = UConverter.std_names("cp1251", "IANA")
|
29
|
+
assert_kind_of(Array, a)
|
30
|
+
assert(a.include?("windows-1251"))
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_e_convert_class_method
|
34
|
+
a_s = "\357\360\356\342\345\360\352\340 abcd"
|
35
|
+
u_s = UConverter.convert("utf8", "cp1251", a_s)
|
36
|
+
assert_equal("проверка abcd", u_s)
|
37
|
+
r_s = UConverter.convert("cp1251", "utf8", u_s)
|
38
|
+
assert_equal(r_s, a_s)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_f_to_from_u
|
42
|
+
c = UConverter.new("cp1251")
|
43
|
+
a_s = "\357\360\356\342\345\360\352\340 abcd"
|
44
|
+
u_s = c.to_u(a_s)
|
45
|
+
assert_kind_of(UString, u_s)
|
46
|
+
r_s = c.from_u(u_s)
|
47
|
+
assert_equal(r_s, a_s)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_g_convert_instance_method
|
51
|
+
c1 = UConverter.new("EUC-JP")
|
52
|
+
c2 = UConverter.new("Cp1251")
|
53
|
+
a_s = "\247\322\247\335\247\361!"
|
54
|
+
b_s = a_s * 1000
|
55
|
+
a1 = UConverter.convert("Cp1251", "EUC-JP", b_s)
|
56
|
+
a2 = c1.convert(c2, b_s)
|
57
|
+
assert_equal(a1.size, a2.size)
|
58
|
+
assert_equal(a2.size, 4 * 1000)
|
59
|
+
assert_equal(a1, a2)
|
60
|
+
assert_equal("\341\353\377!", c1.convert(c2, a_s))
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_h_subst_chars
|
64
|
+
c1 = UConverter.new("US-ASCII")
|
65
|
+
assert_kind_of(String, c1.subst_chars)
|
66
|
+
c1.subst_chars="!"
|
67
|
+
assert_equal( "I!t!rn!ti!n!liz!ti!n", c1.from_u("Iñtërnâtiônàlizætiøn".u))
|
68
|
+
c1.subst_chars=" "
|
69
|
+
assert_equal( "I t rn ti n liz ti n", c1.from_u("Iñtërnâtiônàlizætiøn".u))
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,508 @@
|
|
1
|
+
require './icu4r'
|
2
|
+
require 'test/unit'
|
3
|
+
class UnicodeStringTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_string
|
6
|
+
a = u("абвг", "utf8")
|
7
|
+
b = u("абвг", "utf8")
|
8
|
+
assert_equal(a,b )
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_casecmp
|
12
|
+
assert_equal(0, u("Сцуко").casecmp("сЦуКо".u))
|
13
|
+
assert_equal(-1, u("Сцук").casecmp("сЦуКо".u))
|
14
|
+
assert_equal(1, u("Сцуко").casecmp("сЦуК".u))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_match
|
18
|
+
assert_match(ure("абвг"), u("абвг"))
|
19
|
+
assert("аавг".u !~ ure("^$"))
|
20
|
+
assert("авб\n".u !~ ure("^$"))
|
21
|
+
assert("абв".u !~ ure("^г*$"))
|
22
|
+
assert_equal("".u, ("абв".u =~ ure("г*$"))[0])
|
23
|
+
assert("".u =~ ure("^$"))
|
24
|
+
assert("абвабв".u =~ ure( ".*а") )
|
25
|
+
assert("абвабв".u =~ ure( ".*в") )
|
26
|
+
assert("абвабв".u =~ ure( ".*?а") )
|
27
|
+
assert("абвабв".u =~ ure( ".*?в") )
|
28
|
+
assert(ure("(.|\n)*?\n(б|\n)") =~ u("а\nб\n\n"))
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_sub
|
32
|
+
x = "a.gif".u
|
33
|
+
assert_equal("gif".u, x.sub(ure(".*\\.([^\\.]+)$"), "$1".u))
|
34
|
+
assert_equal("b.gif".u, x.sub(ure(".*\\.([^\\.]+)$"), "b.$1".u))
|
35
|
+
assert_equal(x, "a.gif".u)
|
36
|
+
x.sub!(/gif/.U, ''.u)
|
37
|
+
assert_equal(x, "a.".u)
|
38
|
+
x= "1234561234".u
|
39
|
+
x.sub!(/123/.U, "".u)
|
40
|
+
assert_equal(x, "4561234".u)
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def test_case_fold
|
46
|
+
assert_equal("А".u, "а".u.upcase!)
|
47
|
+
assert_equal("а".u, ("А".u.downcase!))
|
48
|
+
|
49
|
+
s = "аБв".u
|
50
|
+
s.upcase
|
51
|
+
assert_equal("аБв".u, s)
|
52
|
+
s.upcase!
|
53
|
+
assert_equal("АБВ".u, s)
|
54
|
+
|
55
|
+
s = "аБв".u
|
56
|
+
s.downcase
|
57
|
+
assert_equal("аБв".u, s)
|
58
|
+
s.downcase!
|
59
|
+
assert_equal("абв".u, s)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_index
|
63
|
+
assert_equal( "hello".u.rindex('e'.u), 1)
|
64
|
+
assert_equal( "hello".u.rindex('l'.u) , 3)
|
65
|
+
assert_equal( "hello".u.rindex('a'.u), nil)
|
66
|
+
assert_equal( "hello".u.index('e'.u),1)
|
67
|
+
assert_equal( "hello".u.index('lo'.u),3)
|
68
|
+
assert_equal( "hello".u.index('a'.u), nil)
|
69
|
+
assert_equal( "hello".u.index(ure('[aeiou]'), -3), 4)
|
70
|
+
assert_equal( "hello".u.rindex(ure('[aeiou]'), -2), 1)
|
71
|
+
|
72
|
+
assert_equal(1, S("hello").index(S("ell")))
|
73
|
+
assert_equal(2, S("hello").index(/ll./.U))
|
74
|
+
|
75
|
+
assert_equal(3, S("hello").index(S("l"), 3))
|
76
|
+
assert_equal(3, S("hello").index(/l./.U, 3))
|
77
|
+
|
78
|
+
assert_nil(S("hello").index(S("z"), 3))
|
79
|
+
assert_nil(S("hello").index(/z./.U, 3))
|
80
|
+
|
81
|
+
assert_nil(S("hello").index(S("z")))
|
82
|
+
assert_nil(S("hello").index(/z./.U))
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_insert
|
87
|
+
assert_equal("abcd".u.insert(0, 'X'.u) , "Xabcd".u)
|
88
|
+
assert_equal("abcd".u.insert(3, 'X'.u) , "abcXd".u)
|
89
|
+
assert_equal("abcd".u.insert(4, 'X'.u) , "abcdX".u)
|
90
|
+
assert_equal("abcd".u.insert(-3, 'X'.u) , "abXcd".u)
|
91
|
+
assert_equal("abcd".u.insert(-1, 'X'.u) , "abcdX".u)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_include
|
95
|
+
assert( "hello".u.include?("lo".u))
|
96
|
+
assert(!("hello".u.include?("ol".u)))
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_init
|
100
|
+
assert_equal( "нах!".u, UString.new("нах!".u))
|
101
|
+
a = "ГНУ!".u
|
102
|
+
a.replace("ФИГНУ!".u)
|
103
|
+
assert_equal(a, "ФИГНУ!".u)
|
104
|
+
assert_equal(a, a.clone)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_aref
|
108
|
+
a = "hello there".u
|
109
|
+
assert_equal('e'.u, a[1]) #=> 'e'
|
110
|
+
assert_equal('ell'.u, a[1,3]) #=> "ell"
|
111
|
+
assert_equal('ell'.u, a[1..3]) #=> "ell"
|
112
|
+
assert_equal('er'.u, a[-3,2]) #=> "er"
|
113
|
+
assert_equal('her'.u, a[-4..-2]) #=> "her"
|
114
|
+
assert_nil(a[12..-1]) #=> nil
|
115
|
+
assert_equal(''.u, a[-2..-4]) #=> ""
|
116
|
+
assert_equal('ell'.u, a[ure('[aeiou](.)\1')]) #=> "ell"
|
117
|
+
assert_equal('ell'.u, a[ure('[aeiou](.)\1'), 0]) #=> "ell"
|
118
|
+
assert_equal('l'.u, a[ure('[aeiou](l)\1'), 1]) #=> "l"
|
119
|
+
assert_nil( a[ure('[aeiou](.)$1'), 2]) #=> nil
|
120
|
+
assert_equal('lo'.u, a["lo".u]) #=> "lo"
|
121
|
+
assert_nil(a["bye".u]) #=> nil
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_slice_bang
|
125
|
+
string = "this is a string".u
|
126
|
+
assert_equal(string.slice!(2) , 'i'.u)
|
127
|
+
assert_equal(string.slice!(3..6) , " is ".u)
|
128
|
+
assert_equal(string.slice!(ure("s.*t")) , "sa st".u)
|
129
|
+
assert_equal(string.slice!("r".u) , "r".u)
|
130
|
+
assert_equal(string , "thing".u)
|
131
|
+
a = "test".u
|
132
|
+
a[0] = "BEA".u
|
133
|
+
assert_equal("BEAest".u, a)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_gsub
|
137
|
+
assert_equal("hello".u.gsub(ure("[aeiou]"), '*'.u) , "h*ll*".u)
|
138
|
+
assert_equal("hello".u.gsub(ure("([aeiou])"), '<$1>'.u) , "h<e>ll<o>".u)
|
139
|
+
i = 0
|
140
|
+
assert_equal("12345".u , "hello".u.gsub(ure(".")) {|s| i+=1; i.to_s})
|
141
|
+
assert_equal("214365".u, "123456".u.gsub(ure("(.)(.)")) {|s| s[2] + s[1] })
|
142
|
+
a = "test".u
|
143
|
+
a.gsub!(/t/.U, a)
|
144
|
+
assert_equal("testestest".u, a)
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_ure_case_eq
|
148
|
+
a = "HELLO".u
|
149
|
+
v = case a
|
150
|
+
when ure("^[a-z]*$"); "Lower case"
|
151
|
+
when ure("^[A-Z]*$"); "Upper case"
|
152
|
+
else; "Mixed case"
|
153
|
+
end
|
154
|
+
assert_equal('Upper case', v)
|
155
|
+
end
|
156
|
+
|
157
|
+
# UString::strcoll("ÆSS".u, "AEß".u, "de", 0)
|
158
|
+
def test_empty
|
159
|
+
assert(! "hello".u.empty?)
|
160
|
+
assert("".empty?)
|
161
|
+
assert("test".u.clear.empty?)
|
162
|
+
assert(" \t\n".u.strip.empty?)
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_clear
|
166
|
+
a = "test".u
|
167
|
+
a.clear
|
168
|
+
assert_equal(0, a.length)
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_length
|
172
|
+
assert_equal(10, "12345АБВГД".u.length)
|
173
|
+
assert_equal(0,"".u.length)
|
174
|
+
assert_equal(3,"abc".u.length)
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_replace
|
178
|
+
s = "hello".u
|
179
|
+
s.replace("world".u)
|
180
|
+
assert_equal(s, "world".u)
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_cmp
|
184
|
+
assert_equal("абвгде".u <=> "абвгд".u , 1 )
|
185
|
+
assert_equal("абвгде".u <=> "абвгде".u , 0 )
|
186
|
+
assert_equal("абвгде".u <=> "абвгдеж".u , -1 )
|
187
|
+
assert_equal("абвгде".u <=> "АБВГДЕ".u , -1 ) # UCA
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_plus
|
191
|
+
assert_equal("сложение".u, "сло".u + "жение".u)
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_times
|
195
|
+
assert_equal("ААААА".u, "А".u * 5)
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_concat
|
199
|
+
assert_equal("сложение".u, "сло".u << "жение".u)
|
200
|
+
assert_equal("сложение".u, "сло".u.concat("жение".u))
|
201
|
+
a = "сло".u
|
202
|
+
a << "жение".u
|
203
|
+
assert_equal("сложение".u, a)
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_search
|
207
|
+
a = "A quick brown fox jumped over the lazy fox dancing foxtrote".u
|
208
|
+
assert_equal(a.search("fox".u) , [14..16, 39..41, 51..53])
|
209
|
+
assert_equal(a.search("FoX".u) , [])
|
210
|
+
assert_equal(a.search("FoX".u, :ignore_case => true) , [14..16, 39..41, 51..53])
|
211
|
+
assert_equal(a.search("FoX".u, :ignore_case => true, :whole_words => true) , [14..16, 39..41])
|
212
|
+
assert_equal(a.search("FoX".u, :ignore_case => true, :whole_words => true, :limit => 1) , [14..16])
|
213
|
+
|
214
|
+
b = "Iñtërnâtiônàlizætiøn îs cọmpłèx".u.upcase
|
215
|
+
assert_equal(b, "IÑTËRNÂTIÔNÀLIZÆTIØN ÎS CỌMPŁÈX".u)
|
216
|
+
assert_equal(b.search("nâtiôn".u, :locale => "en") , [])
|
217
|
+
assert_equal(b.search("nation".u) , [])
|
218
|
+
assert_equal(b.search("nation".u, :locale => "en", :ignore_case_accents => true) , [5..10])
|
219
|
+
assert_equal(b.search("nâtiôn".u, :locale => "en", :ignore_case => true) , [5..10])
|
220
|
+
assert_equal(b.search("zaeti".u, :locale => "en" ) , [])
|
221
|
+
assert_equal(b.search("zaeti".u, :locale => "en", :ignore_case => true) , [])
|
222
|
+
assert_equal(b.search("zaeti".u, :locale => "en", :ignore_case_accents => true) , [14..17])
|
223
|
+
assert_equal("İSTANBUL".u.search("istanbul".u, :locale => 'tr', :ignore_case => true), [0..7])
|
224
|
+
assert_equal("ёжий".u.norm_D.search("ЕЖИЙ".u, :locale => 'ru', :canonical => true, :ignore_case_accents => true), [0..4])
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_dollar_sign_regexp
|
228
|
+
assert_equal("te$et".u, "test".u.gsub(/s/.U, '$e'.u))
|
229
|
+
end
|
230
|
+
|
231
|
+
def test_codepoints
|
232
|
+
a=[0x01234, 0x0434, 0x1D7D9, ?t, ?e, ?s]
|
233
|
+
b=a.pack("U*").u
|
234
|
+
assert_equal(a, b.codepoints)
|
235
|
+
assert_equal(b, a.to_u)
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_chars
|
239
|
+
chr = ["I", "Ñ", "T", "Ë", "R", "N", "Â", "T", "I", "Ô", "N", "À", "L", "I", "Z", "Æ", "T", "I", "Ø", "N" ]
|
240
|
+
chr = chr.collect {|s| s.to_u.norm_C}
|
241
|
+
assert_equal(chr, "Iñtërnâtiônàlizætiøn".u.upcase.norm_D.chars)
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
|
246
|
+
def test_fmt
|
247
|
+
assert_equal("b a".u, "{1} {0}".u.fmt("en", "a".u, "b".u))
|
248
|
+
assert_equal("12,345.56".u, "{0, number}".u.fmt("en", 12345.56))
|
249
|
+
assert_equal("$12,345.56".u, "{0, number, currency}".u.fmt("en_US", 12345.56))
|
250
|
+
assert_equal("20:15:01 13/01/2006".u, "{0,date,HH:mm:ss dd/MM/yyyy}".u.fmt("en", Time.local(2006,"jan",13,20,15,1)))
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_norm
|
254
|
+
v="Iñtërnâtiônàlizætiøn".u
|
255
|
+
assert_equal("Iñtërnâtiônàlizætiøn".u, v.norm_C)
|
256
|
+
assert_equal("Iñtërnâtiônàlizætiøn".u, v.norm_D)
|
257
|
+
assert_equal("Iñtërnâtiônàlizætiøn".u, v.norm_D.norm_FCD)
|
258
|
+
assert_equal("Iñtërnâtiônàlizætiøn".u,v.norm_D.norm_KC)
|
259
|
+
end
|
260
|
+
|
261
|
+
def test_scan
|
262
|
+
a = "cruel world".u
|
263
|
+
assert_equal(a.scan(/\w+/.U) ,["cruel".u , "world".u ])
|
264
|
+
assert_equal(a.scan(/.../.U) ,["cru".u , "el ".u , "wor".u ])
|
265
|
+
assert_equal(a.scan(/(...)/.U) ,["cru".u , "el ".u , "wor".u ])
|
266
|
+
assert_equal(a.scan(/(..)(..)/.U) ,[["cr".u , "ue".u ], ["l ".u , "wo".u ]] )
|
267
|
+
end
|
268
|
+
def S(str)
|
269
|
+
str.to_u
|
270
|
+
end
|
271
|
+
def test_split
|
272
|
+
re = URegexp.new("[,:/]".u)
|
273
|
+
assert_equal(["split test".u , "west".u , "best".u , "east".u ], re.split("split test,west:best/east".u, nil))
|
274
|
+
assert_equal(["split test".u, "west:best/east".u], re.split("split test,west:best/east".u, 2))
|
275
|
+
assert_equal([S("a"), S("b"), S("c")], S("a b\t c").split(S("\\s+")))
|
276
|
+
assert_equal([S(" a "), S(" b "), S(" c ")], S(" a | b | c ").split(S("\\|")))
|
277
|
+
assert_equal([S("a"), S("b"), S("c")], S("aXXbXXcXX").split(/X./.U))
|
278
|
+
assert_equal([S("a|b|c")], S("a|b|c").split(S('\|'), 1))
|
279
|
+
assert_equal([S("a"), S("b|c")], S("a|b|c").split(S('\|'), 2))
|
280
|
+
assert_equal([S("a"), S("b"), S("c")], S("a|b|c").split(S('\|'), 3))
|
281
|
+
assert_equal([S("a"), S("b"), S("c")], S("a|b|c|").split(S('\|'), -1))
|
282
|
+
assert_equal([S("a"), S("b"), S("c"), S("") ], S("a|b|c||").split(S('\|'), -1))
|
283
|
+
assert_equal([S("a"), S(""), S("b"), S("c")], S("a||b|c|").split(S('\|'), -1))
|
284
|
+
end
|
285
|
+
|
286
|
+
|
287
|
+
def test_strcoll
|
288
|
+
assert_equal(0, UString::strcoll("a".u, "a".u))
|
289
|
+
assert_equal(-1, UString::strcoll("y".u, "k".u, "lv"))
|
290
|
+
assert_equal(1, UString::strcoll("я".u, "а".u))
|
291
|
+
assert_equal(1, UString::strcoll("я".u, "А".u, "ru"))
|
292
|
+
assert_equal(0, UString::strcoll("İSTANBUL".u, "istanbul".u, "tr", 0))
|
293
|
+
assert_equal(0, UString::strcoll("ой её".u, "ОЙ ЕЁ".u, "ru", 1))
|
294
|
+
end
|
295
|
+
|
296
|
+
def test_gsub_block
|
297
|
+
a = "АБРАКАДАБРА".u
|
298
|
+
r = URegexp.new("(.)(.)(А)".u, URegexp::IGNORECASE)
|
299
|
+
b = a.gsub(r) do |m|
|
300
|
+
assert_equal("ава".u, "бравада".u.gsub(r) {|v| v[3]} )
|
301
|
+
m[3] + m[2] + m[1]
|
302
|
+
end
|
303
|
+
assert_equal("ААРБКАДААРБ".u, b)
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_match_range
|
307
|
+
t = "test\ntext".u
|
308
|
+
m = (t =~ /^.+$/m.U)
|
309
|
+
assert_equal('test'.u, m[0])
|
310
|
+
assert_equal(0..3, m.range(0))
|
311
|
+
end
|
312
|
+
|
313
|
+
def test_resbundle
|
314
|
+
b = UResourceBundle.open(nil, "en")
|
315
|
+
assert_equal("Russia".u, b["Countries"]["RU"])
|
316
|
+
b = UResourceBundle.open(nil, "ru")
|
317
|
+
assert_equal("Россия".u, b["Countries"]["RU"])
|
318
|
+
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_translit
|
322
|
+
assert_equal('zees ees A tfs t'.u, "This is A test".u.translit("null".u, "a>b;b>c;c>d;d>e;e>f;i>ee;[Tt]h>z;t>\\ t".u))
|
323
|
+
assert_equal("matsumoto yukihiro".u.translit("Latin-Hiragana".u), "まつもと ゆきひろ".u)
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_parse_double
|
327
|
+
assert_equal(456, "456".u.to_f)
|
328
|
+
assert_equal("123,001".u.to_f("ru"), 123.001)
|
329
|
+
assert_equal("123,001".u.to_f("en"), 123001.0)
|
330
|
+
assert_equal("Got 123,001".u.to_f("en", "Got ###,###".u), 123001)
|
331
|
+
assert_equal(123.45, "١٢٣٫٤٥".u.to_f("ar_YE"))
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_unescape
|
335
|
+
a = '\u0054\u0068\u0069\u0073\u0020\u0069\u0073\u0020\u0041\u0020\u0074\u0065\u0073\u0074\n!'
|
336
|
+
assert_equal("This is A test\n!", a.u.unescape.to_s)
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_ranges
|
340
|
+
v = "\\x{1D7D9}\\x{1d7da}\\x{1d7db}!".u.unescape
|
341
|
+
assert_equal(7, v.length)
|
342
|
+
assert_equal(4, v.point_count)
|
343
|
+
assert_equal(0..0, v.conv_unit_range(0..1))
|
344
|
+
assert_equal(0..1, v.conv_unit_range(0..2))
|
345
|
+
assert_equal(0..3, v.conv_unit_range(0..-1))
|
346
|
+
assert_equal(2..3, v.conv_unit_range(-3..-1))
|
347
|
+
|
348
|
+
assert_equal(0..3, v.conv_point_range(0..1))
|
349
|
+
assert_equal(0..5, v.conv_point_range(0..2))
|
350
|
+
assert_equal(0..6, v.conv_point_range(0..-1))
|
351
|
+
assert_equal(4..6, v.conv_point_range(-2..-1))
|
352
|
+
end
|
353
|
+
|
354
|
+
def test_char_span
|
355
|
+
v = "ЁРШ ТВОЙУ МЕДДЬ".u.norm_D
|
356
|
+
assert_equal("ЁРШ".u, v.char_span(0,3))
|
357
|
+
assert_equal('\u0415\u0308\u0420'.u.unescape, v[0,3])
|
358
|
+
assert_equal(v.norm_C, v.char_span(0,-1))
|
359
|
+
end
|
360
|
+
|
361
|
+
def test_sentinel_bug
|
362
|
+
("test" * 10).u.gsub(/e/.U, 'abracadabra'.u)
|
363
|
+
end
|
364
|
+
|
365
|
+
def test_string_change
|
366
|
+
a = " 123456789Aa ".u
|
367
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.downcase!; m} };
|
368
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
369
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.upcase!; m} }
|
370
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
371
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.lstrip!; m} }
|
372
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
373
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.rstrip!; m} }
|
374
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
375
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.strip!; m} }
|
376
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
377
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.slice!(/Aa/.U); m} }
|
378
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
379
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.slice!("Aa".u); m} }
|
380
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
381
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.slice!(3,5); m} }
|
382
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
383
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.sub!(/Aa/.U, "BUG!".u); m} }
|
384
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
385
|
+
assert_raise(RuntimeError) { a.gsub!(/\d/.U) { |m| a.gsub!(/Aa/.U, "BUG!".u); m} }
|
386
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
387
|
+
assert_raise(RuntimeError) { a.scan(/\d/.U) { |m| a.gsub!(/Aa/.U, "BUG!".u); m} }
|
388
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
389
|
+
assert_raise(RuntimeError) { a.each_char { |m| a[2]= "BUG!".u } }
|
390
|
+
assert_equal(" 123456789Aa ".u , a); a = a.clone
|
391
|
+
|
392
|
+
end
|
393
|
+
def test_1_to_u_to_s
|
394
|
+
assert_equal(
|
395
|
+
"\355\350\367\345\343\356 \355\345 \360\340\341\356\362\340\345\362 :( ?".to_u("cp-1251").to_s("utf-8"),
|
396
|
+
"\320\275\320\270\321\207\320\265\320\263\320\276 \320\275\320\265 \321\200\320\260\320\261\320\276\321\202\320\260\320\265\321\202 :( ?")
|
397
|
+
end
|
398
|
+
|
399
|
+
def test_nested_blocks
|
400
|
+
a = "Модифицируемые строки иногда напрягают :)".u
|
401
|
+
b = "".u
|
402
|
+
assert_nothing_raised {
|
403
|
+
a.scan(/./.U) { |s|
|
404
|
+
b = a.gsub(ure('и')) { |m|
|
405
|
+
t = m[0] + "".u
|
406
|
+
a.each_char { |c|
|
407
|
+
t << c if c == 'о' .u
|
408
|
+
}
|
409
|
+
t
|
410
|
+
}
|
411
|
+
}
|
412
|
+
}
|
413
|
+
assert_equal("Модиооофиоооциоооруемые строкиооо иоооногда напрягают :)".u, b)
|
414
|
+
end
|
415
|
+
|
416
|
+
def test_AREF # '[]'
|
417
|
+
assert_equal(S("A"), S("AooBar")[0])
|
418
|
+
assert_equal(S("B"), S("FooBaB")[-1])
|
419
|
+
assert_equal(nil, S("FooBar")[6])
|
420
|
+
assert_equal(nil, S("FooBar")[-7])
|
421
|
+
|
422
|
+
assert_equal(S("Foo"), S("FooBar")[0,3])
|
423
|
+
assert_equal(S("Bar"), S("FooBar")[-3,3])
|
424
|
+
assert_equal(S(""), S("FooBar")[6,2])
|
425
|
+
assert_equal(nil, S("FooBar")[-7,10])
|
426
|
+
|
427
|
+
assert_equal(S("Foo"), S("FooBar")[0..2])
|
428
|
+
assert_equal(S("Foo"), S("FooBar")[0...3])
|
429
|
+
assert_equal(S("Bar"), S("FooBar")[-3..-1])
|
430
|
+
assert_equal(S(""), S("FooBar")[6..2])
|
431
|
+
assert_equal(nil, S("FooBar")[-10..-7])
|
432
|
+
|
433
|
+
assert_equal(S("Foo"), S("FooBar")[/^F../.U])
|
434
|
+
assert_equal(S("Bar"), S("FooBar")[/..r$/.U])
|
435
|
+
assert_equal(nil, S("FooBar")[/xyzzy/.U])
|
436
|
+
assert_equal(nil, S("FooBar")[/plugh/.U])
|
437
|
+
|
438
|
+
assert_equal(S("Foo"), S("FooBar")[S("Foo")])
|
439
|
+
assert_equal(S("Bar"), S("FooBar")[S("Bar")])
|
440
|
+
assert_equal(nil, S("FooBar")[S("xyzzy")])
|
441
|
+
assert_equal(nil, S("FooBar")[S("plugh")])
|
442
|
+
|
443
|
+
assert_equal(S("Foo"), S("FooBar")[/([A-Z]..)([A-Z]..)/.U, 1])
|
444
|
+
assert_equal(S("Bar"), S("FooBar")[/([A-Z]..)([A-Z]..)/.U, 2])
|
445
|
+
assert_equal(nil, S("FooBar")[/([A-Z]..)([A-Z]..)/.U, 3])
|
446
|
+
assert_equal(S("Bar"), S("FooBar")[/([A-Z]..)([A-Z]..)/.U, -1])
|
447
|
+
assert_equal(S("Foo"), S("FooBar")[/([A-Z]..)([A-Z]..)/.U, -2])
|
448
|
+
assert_equal(nil, S("FooBar")[ure("([A-Z]..)([A-Z]..)"), -3])
|
449
|
+
end
|
450
|
+
|
451
|
+
def test_ASET # '[]='
|
452
|
+
s = S("FooBar")
|
453
|
+
s[0] = S('A')
|
454
|
+
assert_equal(S("AooBar"), s)
|
455
|
+
|
456
|
+
s[-1]= S('B')
|
457
|
+
assert_equal(S("AooBaB"), s)
|
458
|
+
assert_raise(IndexError) { s[-7] = S("xyz") }
|
459
|
+
assert_equal(S("AooBaB"), s)
|
460
|
+
s[0] = S("ABC")
|
461
|
+
assert_equal(S("ABCooBaB"), s)
|
462
|
+
|
463
|
+
s = S("FooBar")
|
464
|
+
s[0,3] = S("A")
|
465
|
+
assert_equal(S("ABar"),s)
|
466
|
+
s[0] = S("Foo")
|
467
|
+
assert_equal(S("FooBar"), s)
|
468
|
+
s[-3,3] = S("Foo")
|
469
|
+
assert_equal(S("FooFoo"), s)
|
470
|
+
assert_raise (IndexError) { s[7,3] = S("Bar") }
|
471
|
+
assert_raise (IndexError) { s[-7,3] = S("Bar") }
|
472
|
+
|
473
|
+
s = S("FooBar")
|
474
|
+
s[0..2] = S("A")
|
475
|
+
assert_equal(S("ABar"), s)
|
476
|
+
s[1..3] = S("Foo")
|
477
|
+
assert_equal(S("AFoo"), s)
|
478
|
+
s[-4..-4] = S("Foo")
|
479
|
+
assert_equal(S("FooFoo"), s)
|
480
|
+
assert_raise (RangeError) { s[7..10] = S("Bar") }
|
481
|
+
assert_raise (RangeError) { s[-7..-10] = S("Bar") }
|
482
|
+
|
483
|
+
s = S("FooBar")
|
484
|
+
s[/^F../.U]= S("Bar")
|
485
|
+
assert_equal(S("BarBar"), s)
|
486
|
+
s[/..r$/.U] = S("Foo")
|
487
|
+
assert_equal(S("BarFoo"), s)
|
488
|
+
|
489
|
+
s[/([A-Z]..)([A-Z]..)/.U, 1] = S("Foo")
|
490
|
+
assert_equal(S("FooFoo"), s)
|
491
|
+
s[/([A-Z]..)([A-Z]..)/.U, 2] = S("Bar")
|
492
|
+
assert_equal(S("FooBar"), s)
|
493
|
+
assert_raise (IndexError) { s[/([A-Z]..)([A-Z]..)/.U, 3] = "None" }
|
494
|
+
s[ure("([A-Z]..)([A-Z]..)"), -1] = S("Foo")
|
495
|
+
assert_equal(S("FooFoo"), s)
|
496
|
+
s[/([A-Z]..)([A-Z]..)/.U, -2] = S("Bar")
|
497
|
+
assert_equal(S("BarFoo"), s)
|
498
|
+
# assert_raise (IndexError) { s[/([A-Z]..)([A-Z]..)/.U, -3] = "None" }
|
499
|
+
|
500
|
+
s = S("FooBar")
|
501
|
+
s[S("Foo")] = S("Bar")
|
502
|
+
assert_equal(S("BarBar"), s)
|
503
|
+
|
504
|
+
s = S("a string")
|
505
|
+
s[0..s.size] = S("another string")
|
506
|
+
assert_equal(S("another string"), s)
|
507
|
+
end
|
508
|
+
end
|