2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
7 class TestCharacter < Test::Unit::TestCase
9 @char = Character.get("字") #UTF8で与えること
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")
24 test_char(Character.get("字"))
25 test_char(Character.new("字"))
31 # assert_equal(23383, Character.parse_char_id("字"))
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"], "[]=, []")
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)
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")
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式の展開が必要なものは、また後程扱うべし。
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, "⿰", "ids er")
75 assert_equal(char.bidi_category, "ON", "ids bidi")
79 char = Character.get("逢")
80 assert_instance_of(String, char.get_attributes)
81 char = Character.get("学")
82 assert_instance_of(String, char.get_attributes)
86 char1 = Character.new("字")
87 char2 = Character.new("字") #.newで生成した場合は別々のinstanceになるのだ
88 assert_equal(char1, char2) #==ではある
89 assert_not_same(char1, char2) #equal?かというと違う
91 cf = CharacterFactory.instance
94 assert_equal(char1, char2, "factory") #==である
95 assert_same(char1, char2, "factory") #かつ同じinstanceであることが保証される
97 char1 = Character.get("字") #Character.newの代りにCharacter.getを使うとCharacterFactoryを使ったのと同じ効果がある。
98 char2 = Character.get("字")
99 assert_equal(char1, char2) #==である
100 assert_same(char1, char2) #かつ同じinstanceであることが保証される
104 p er.de_er.char.inspect_all
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?) #渡
114 p_er("&J83-4D63;") #翼
116 p_er("&J83-3958;") #購
121 assert_equal("字", "&U5B57;".de_er)
122 assert_equal("字", "&U-5B57;".de_er)
123 assert_equal("字", "&U+5B57;".de_er)
124 assert_equal("字", "字".de_er)
128 assert_raises(NameError, message=""){
131 assert_equal(23383, "字".ucs)
132 assert_equal(0x5B57, "字".ucs)
133 assert_equal(0x5B57, @char.ucs)
135 assert_equal(0xfa55, "突".char["=>ucs@jis"])
136 assert_equal(0xfa55, "突".map_ucs_at_jis)
138 char1 = Character.get("23383")
139 char2 = Character.get(23383)
140 assert_equal(char1, char2)
142 char1 = Character.get("2")
143 char2 = Character.get(2)
144 assert_not_equal(char1, char2)
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)
153 #===== PRINT_ALL [字] MCS-00005B57 &J90-3B7A; =====
154 #chinese-gb2312: 0x5756
155 #chinese-isoir165: 0x5756
156 #korean-ksc5601: 0x6D2E
158 #chinese-cns11643-1: 0x4773
159 #chinese-big5: 0xA672
161 # test_print(Character.get("&CDP-8B42;"))
162 # test_print(Character.get("&I-CDP-8AF6;"))
163 #===== PRINT_ALL [舛] MCS-00ECA524 &K0-743F; =====