i
[chise/ruby.git] / test / test-char.rb
1 #!/usr/bin/env ruby
2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
3 # by eto 2003-0112
4
5 require "common"
6
7 class TestCharacter < Test::Unit::TestCase
8   def setup()
9     @char = Character.get("字") #UTF8で与えること
10   end
11
12   def test_char(char)
13 #    assert_equal(6, char.get_char_attribute("total_strokes"), "get total strokes by XEmacs UTF-2000 like method")
14     assert_equal(6, char["total_strokes"], "get total strokes by Hash like method") if char.is_a? Character
15     assert_equal(6, char.total_strokes, "get total strokes by method")
16     assert_equal(23383, char.ucs, "translate to ucs")
17     assert_equal(22358, char.gb2312, "get character code in chinese GB2312")
18     assert_equal(1777, char.shinjigen_2, "get shinjigen 2")
19     assert_equal(3, char.ideographic_strokes, "get")
20     assert_equal(39, char.ideographic_radical, "get")
21   end
22
23   def test_chars
24     test_char(Character.get("字"))
25     test_char(Character.new("字"))
26     test_char("字".char)
27     test_char("字")
28   end
29
30 #  def test_create
31 #    assert_equal(23383, Character.parse_char_id("字"))
32 #  end
33
34   def test_put_attributes
35     @char.put_char_attribute("test_attribute", "test")
36     assert_equal("test", @char.get_char_attribute("test_attribute"), "put, get")
37     @char["test_attribute"] = "test"
38     assert_equal("test", @char["test_attribute"], "[]=, []")
39   end
40
41   def test_method
42     assert_instance_of(Hash, @char.char_attribute_alist, "returns Hash")
43     assert_instance_of(Hash, @char.alist, ".alist returns Hash")
44     assert_instance_of(Array, @char.char_attribute_list, "returns Array")
45     assert_instance_of(Array, @char.list, ".list returns Array")
46     assert_instance_of(String, @char.inspect)
47   end
48
49   def test_er
50     assert_equal(@char, Character.get("&J90-3B7A;"), "jisx0208") #まだ継承関係を実装していない。
51 #    assert_equal("&J90-3B7A;", @char.to_er, "jisx0208")
52     assert_equal(@char, Character.get("&MCS-00005B57;"), "mcs")
53     assert_equal(@char, Character.get("&M-06942;"), "ideograph-daikanwa, Morohashi")
54   end
55
56   def test_latin
57     char = Character.get("A")
58     assert_equal(65, char.ascii, "ascii")
59     assert_equal(char.bidi_category, "L", "bidi")
60     assert_equal(char.name, "LATIN CAPITAL LETTER A", "name")
61     assert_equal(65, char.ucs, "ucs")
62     assert_equal(char.latin_jisx0201, 65, "jisx0201")
63     assert_equal(char.latin_viscii, 65, "viscii") #って何?
64 #->fullwidth: (((name . "FULLWIDTH LATIN CAPITAL LETTER A") (ucs . 65313)))
65 #->lowercase: (((name . "LATIN SMALL LETTER A") (ucs . 97)))
66 #general-category: (letter uppercase)
67 #このへんのS式の展開が必要なものは、また後程扱うべし。
68   end
69
70   def test_ids
71     char = Character.get("⿰")
72     assert_equal("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT", char.name, "ids name")
73     #assert_equal(char.to_er, "&U+2FF0;", "ids er")
74     assert_equal(char.to_er, "&#x2ff0;", "ids er")
75     assert_equal(char.bidi_category, "ON", "ids bidi")
76   end
77
78   def test_jis
79     char = Character.get("逢")
80     assert_instance_of(String, char.get_attributes)
81     char = Character.get("学")
82     assert_instance_of(String, char.get_attributes)
83   end
84
85   def test_flyweight
86     char1 = Character.new("字")
87     char2 = Character.new("字") #.newで生成した場合は別々のinstanceになるのだ
88     assert_equal(char1, char2) #==ではある
89     assert_not_same(char1, char2) #equal?かというと違う
90
91     cf = CharacterFactory.instance
92     char1 = cf.get("字")
93     char2 = cf.get("字")
94     assert_equal(char1, char2, "factory") #==である
95     assert_same(char1, char2, "factory") #かつ同じinstanceであることが保証される
96
97     char1 = Character.get("字") #Character.newの代りにCharacter.getを使うとCharacterFactoryを使ったのと同じ効果がある。
98     char2 = Character.get("字")
99     assert_equal(char1, char2) #==である
100     assert_same(char1, char2) #かつ同じinstanceであることが保証される
101   end
102
103   def p_er(er)
104     p er.de_er.char.inspect_all
105   end
106
107   def nu_test_has_attribute
108     assert("&J90-4833;".de_er.char.has_attribute?) #罪
109     assert(! "&MCS-00E06E9B;;".de_er.char.has_attribute?) #罪のisolated character, attributeを持ってない
110     assert("&C1-602E;".de_er.char.has_attribute?) #渡
111     assert("&J90-454F;".de_er.char.has_attribute?) #渡
112     p_er("&C1-602E;") #渡
113     p_er("&J90-454F;")
114     p_er("&J83-4D63;") #翼
115     p_er("&J90-4D63;")
116     p_er("&J83-3958;") #購
117     p_er("&J90-3958;")
118   end
119
120   def test_read_ucs
121     assert_equal("字", "&U5B57;".de_er)
122     assert_equal("字", "&U-5B57;".de_er)
123     assert_equal("字", "&U+5B57;".de_er)
124     assert_equal("字", "&#x5B57;".de_er)
125   end
126
127   def test_alias
128     assert_raises(NameError, message=""){
129       t = "字字".ucs
130     }
131     assert_equal(23383, "字".ucs)
132     assert_equal(0x5B57, "字".ucs)
133     assert_equal(0x5B57, @char.ucs)
134
135     assert_equal(0xfa55, "突".char["=>ucs@jis"])
136     assert_equal(0xfa55, "突".map_ucs_at_jis)
137
138     char1 = Character.get("23383")
139     char2 = Character.get(23383)
140     assert_equal(char1, char2)
141
142     char1 = Character.get("2")
143     char2 = Character.get(2)
144     assert_not_equal(char1, char2)
145
146     assert_equal("(((name . \"FULLWIDTH DIGIT ONE\") (=ucs . 65297)))", "1".char["->fullwidth"])
147     assert_equal("(((name . \"FULLWIDTH DIGIT ONE\") (=ucs . 65297)))", "1".char.to_fullwidth)
148     assert_equal("(((name . \"DIGIT ONE\") (=ucs . 49)))", "1".char["<-fullwidth"])
149     assert_equal("(((name . \"DIGIT ONE\") (=ucs . 49)))", "1".char.from_fullwidth)
150   end
151 end
152
153 #===== PRINT_ALL [字] MCS-00005B57 &J90-3B7A; =====
154 #chinese-gb2312: 0x5756
155 #chinese-isoir165: 0x5756
156 #korean-ksc5601: 0x6D2E
157 #ucs: 0x5B57
158 #chinese-cns11643-1: 0x4773
159 #chinese-big5: 0xA672
160
161 #  test_print(Character.get("&CDP-8B42;"))
162 #  test_print(Character.get("&I-CDP-8AF6;"))
163 #===== PRINT_ALL [舛] MCS-00ECA524 &K0-743F; =====