start Ruby/CHISE
[chise/ruby.git] / t / tc_char.rb
1 #!/usr/bin/env ruby
2 # by eto 2003-0112
3
4 require 'test/unit'
5 $LOAD_PATH << '../src'
6 require 'chise'
7 include CHISE
8
9 class TC_Character < Test::Unit::TestCase
10   def setup() @char = Character.get("字") end #UTF8で与えること
11   def test_char(char)
12     assert_equal(23383, char.char_id, "translate to char_id")
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.chinese_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   def test_chars
23     test_char(Character.get("字"))
24     test_char(Character.new("字"))
25     test_char("字")
26   end
27   def test_create
28     assert_equal(23383, Character.parse_char_id("字"))
29   end
30   def test_put_attributes
31     @char.put_char_attribute('test_attribute', 'test')
32     assert_equal('test', @char.get_char_attribute('test_attribute'), "put, get")
33     @char['test_attribute'] = 'test'
34     assert_equal('test', @char['test_attribute'], "[]=, []")
35   end
36   def test_method
37     assert_instance_of(Hash, @char.char_attribute_alist, "returns Hash")
38     assert_instance_of(Hash, @char.alist, ".alist returns Hash")
39     assert_instance_of(Array, @char.char_attribute_list, "returns Array")
40     assert_instance_of(Array, @char.list, ".list returns Array")
41     assert_instance_of(String, @char.inspect)
42   end
43   def test_er
44     assert_equal(Character.get("&J90-3B7A;"), @char, "jisx0208")
45 #    assert_equal("&J90-3B7A;", @char.to_er, "jisx0208")
46     assert_equal(Character.get("&MCS-00005B57;"), @char, "mcs")
47     assert_equal(Character.get("&M-06942;"), @char, "ideograph-daikanwa, Morohashi")
48   end
49   def test_latin
50     char = Character.get("A")
51     assert_equal(char.ascii, 65, "ascii")
52     assert_equal(char.bidi_category, "L", "bidi")
53     assert_equal(char.name, "LATIN CAPITAL LETTER A", "name")
54     assert_equal(char.ucs, 65, "ucs")
55     assert_equal(char.latin_jisx0201, 65, "jisx0201")
56     assert_equal(char.latin_viscii, 65, "viscii") #って何?
57 #->fullwidth: (((name . "FULLWIDTH LATIN CAPITAL LETTER A") (ucs . 65313)))
58 #->lowercase: (((name . "LATIN SMALL LETTER A") (ucs . 97)))
59 #general-category: (letter uppercase)
60 #このへんのS式の展開が必要なものは、また後程扱うべし。
61   end
62   def test_ids
63     char = Character.get("⿰")
64     assert_equal(char.name, "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT", "ids name")
65     assert_equal(char.to_er, "&U+2FF0;", "ids er")
66     assert_equal(char.bidi_category, "ON", "ids bidi")
67   end
68   def test_jis
69     char = Character.get("逢")
70     assert_instance_of(String, char.get_attributes)
71     char = Character.get("学")
72     assert_instance_of(String, char.get_attributes)
73   end
74   def test_flyweight
75     char1 = Character.new("字")
76     char2 = Character.new("字") #.newで生成した場合は別々のinstanceになるのだ
77     assert_equal(char1, char2) #==ではある
78     assert_not_same(char1, char2) #equal?かというと違う
79
80     cf = CharacterFactory.instance
81     char1 = cf.get("字")
82     char2 = cf.get("字")
83     assert_equal(char1, char2, "factory") #==である
84     assert_same(char1, char2, "factory") #かつ同じinstanceであることが保証される    
85
86     char1 = Character.get("字") #Character.newの代りにCharacter.getを使うとCharacterFactoryを使ったのと同じ効果がある。
87     char2 = Character.get("字")
88     assert_equal(char1, char2) #==ではある
89     assert_same(char1, char2) #equal?かというと違う
90   end
91   def p_er(er)
92     p er.de_er.char.inspect_all
93   end
94   def nu_test_has_attribute
95     assert("&J90-4833;".de_er.char.has_attribute?) #罪
96     assert(! "&MCS-00E06E9B;;".de_er.char.has_attribute?) #罪のisolated character, attributeを持ってない
97     assert("&C1-602E;".de_er.char.has_attribute?) #渡
98     assert("&J90-454F;".de_er.char.has_attribute?) #渡
99     p_er("&C1-602E;") #渡
100     p_er("&J90-454F;")
101     p_er("&J83-4D63;") #翼
102     p_er("&J90-4D63;")
103     p_er("&J83-3958;") #購
104     p_er("&J90-3958;")
105   end
106   def teardown() @char = nil  end
107 end
108
109 #===== PRINT_ALL [字] MCS-00005B57 &J90-3B7A; =====
110 #chinese-gb2312: 0x5756
111 #chinese-isoir165: 0x5756
112 #korean-ksc5601: 0x6D2E
113 #ucs: 0x5B57
114 #chinese-cns11643-1: 0x4773
115 #chinese-big5: 0xA672
116
117 #  test_print(Character.get("&CDP-8B42;"))
118 #  test_print(Character.get("&I-CDP-8AF6;"))
119 #===== PRINT_ALL [舛] MCS-00ECA524 &K0-743F; =====
120
121 #----------------------------------------------------------------------end.