02d9f2c0f9ce87e7319a574f083854551fede951
[chise/ruby.git] / test / test-chisedb.rb
1 #!/usr/bin/env ruby
2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
3
4 require "common"
5
6 class TestChiseDB < Test::Unit::TestCase
7   def test_chisedb
8     @cd = CHISE::ChiseDB.instance
9
10     @cd.each_feature_name {|f|
11       assert_instance_of(String, f)
12     }
13
14     # get a feature value
15     char_id = 0x4ECF
16     feature = @cd.get_feature("ideographic-structure")
17     assert_instance_of(CHISE::FeatureDB, feature)
18     #assert_equal(true, feature.setup_db(0))
19     #assert_equal(true, feature.sync)
20     value = feature.get_value(char_id)
21     assert_equal("(?\342\277\260 ?\344\272\273 ?\345\216\266)", value)
22
23     # shortcut
24     value = @cd.load_feature(char_id, "ideographic-structure")
25     assert_equal("(?\342\277\260 ?\344\272\273 ?\345\216\266)", value)
26
27     # set a value
28     feature = @cd.get_feature("test-chisedb")
29     assert_instance_of(CHISE::FeatureDB, feature)
30     v = "testvalue"+$$.to_s
31     assert_equal(true, feature.set_value(char_id, v))
32     assert_equal(v, feature.get_value(char_id))
33     
34     # each char
35     feature = @cd.get_feature("numeric-value")
36     feature.each_char {|cid, valdatum|
37       assert_kind_of(Numeric, cid)
38       #assert_instance_of(String, valdatum)
39     }
40
41     # get a character by Daikanwa number 364.
42     ccs = @cd.get_ccs("=daikanwa")
43     assert_instance_of(CHISE::CCS_DB, ccs)
44     #assert_equal(true, ccs.setup_db(0))
45     #assert_equal(true, ccs.sync)
46     char_id = ccs.decode(364)
47     assert_equal(0x4ECF, char_id)
48
49     # shortcut
50     char_id = @cd.decode_char("=daikanwa", 364)
51     assert_equal(0x4ECF, char_id)
52
53     # set a code_point
54     ccs = @cd.get_ccs("test-ccs")
55     assert_instance_of(CHISE::CCS_DB, ccs)
56     assert_equal(true, ccs.set($$, 0x4ECF))
57     assert_equal(0x4ECF, ccs.decode($$))
58
59     @cd.close
60   end
61
62   def test_chisedb2
63     @cd = CHISE::ChiseDB.instance
64     char_id = 0x4ECF
65     value = @cd.load_feature(char_id, "=ucs")
66     assert_equal(20175, value)
67   end
68
69   def test_each_ccs
70     @cd = CHISE::ChiseDB.instance
71     @cd.each_ccs {|ccs|
72       assert_instance_of(String, ccs)
73       ccsdb = @cd.get_ccs(ccs)
74       assert_instance_of(CHISE::CCS_DB, ccsdb)
75     }
76   end
77
78   def test_ccs_each_char
79     @cd = CHISE::ChiseDB.instance
80     ccs = @cd.get_ccs("=ucs")
81     ccs.each_char {|code_point, cid|
82       assert_kind_of(Integer, code_point)
83       assert_kind_of(Integer, cid)
84     }
85   end
86
87   def test_set
88     @cd = CHISE::ChiseDB.instance
89     char_id = "字".char.char_id
90     feature = @cd.get_feature("test")
91     feature.setup_db(1) # writable
92     feature.set_value(char_id, "test1")
93     assert_equal("test1", feature.get_value(char_id))
94     #feature.sync
95
96     ds = @cd.instance_eval { @ds }
97     path = CHISE::DataSource::DB_DIR.path+"character/feature/test"
98     assert_equal(true, path.exist?)
99   end
100
101   def test_error
102     db_dir = CHISE::DataSource::DB_DIR
103     @ds = CHISE::DataSource.new(CHISE::DataSource::Berkeley_DB, db_dir, 0, 0755)
104     @feature = @ds.get_feature("nosuchfeature")
105     v = @feature.get_value(20175)
106     assert_equal(nil, v)
107   end
108
109   def test_ascii
110     @cd = CHISE::ChiseDB.instance
111     char_id = @cd.decode_char("ascii", 65)
112     assert_equal(65, char_id)
113     assert_equal("A", CHISE::Character.get(char_id).to_s)
114   end
115 end