update.
[chise/ruby.git] / test / test-chisedb.rb
diff --git a/test/test-chisedb.rb b/test/test-chisedb.rb
new file mode 100755 (executable)
index 0000000..f52547a
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/env ruby
+# Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
+
+require "common"
+
+class TestChiseDB < Test::Unit::TestCase
+  def test_libchise_r
+    db_dir = CHISE::DataSource::DB_DIR
+    assert_match(/chise-db\Z/, db_dir)
+
+    @ds = CHISE::DataSource.new(CHISE::DataSource::Berkeley_DB, db_dir, 0, 0755)
+    assert_instance_of(CHISE::DataSource, @ds)
+
+    @ct = @ds.get_ccs("=daikanwa")
+    assert_instance_of(CHISE::CCS, @ct)
+    char_id = @ct.decode(364) # get a character by Daikanwa number 364.
+    assert_equal(20175, char_id)
+    #str = format_char_id(20175)
+    #assert_equal("?\344\273\217", str)
+
+    char_id = @ds.decode_char("=daikanwa", 364)
+    assert_equal(20175, char_id)
+
+    @ft = @ds.get_feature("ideographic-structure")
+    assert_instance_of(CHISE::Feature, @ft)
+    value = @ft.get_value(char_id)
+    assert_instance_of(String, value)
+    assert_equal("(?\342\277\260 ?\344\272\273 ?\345\216\266)", value)
+
+    value = @ds.load_feature(char_id, "ideographic-structure")
+    assert_equal("(?\342\277\260 ?\344\272\273 ?\345\216\266)", value)
+    return
+
+    @ds.each_feature_name {|f|
+      assert_instance_of(String, f)
+      ft = @ds.get_feature(f)
+      v = ft.get_value(23383)
+      #ft.close
+    }
+
+    @ft.each_char {|k, v|
+      assert_kind_of(Integer, k)
+      assert_instance_of(String, v)
+    }
+
+    ft = @ds.get_feature("numeric-value")
+    ft.each {|k, v|
+      assert_kind_of(Integer, k)
+      assert_instance_of(String, v)
+    }
+  end
+
+  def nu_test_each_ccs
+    @ds = CHISE::DataSource.new
+    @ds.each_ccs {|ccs|
+      assert_instance_of(String, ccs)
+      ct = @ds.get_ccs(ccs)
+      assert_instance_of(CHISE::CCSTable, ct)
+    }
+
+    ct = @ds.get_ccs("=ucs")
+    ct.each {|k, v|
+      assert_kind_of(Integer, k)
+      assert_kind_of(Integer, v)
+    }
+    #ct.close
+  end
+
+  def test_error
+    db_dir = CHISE::DataSource::DB_DIR
+    @ds = CHISE::DataSource.new(CHISE::DataSource::Berkeley_DB, db_dir, 0, 0755)
+    @ft = @ds.get_feature("nosuchfeature")
+    v = @ft.get_value(20175)
+    assert_equal(nil, v)
+  end
+
+  def test_chisedb
+    @cd = CHISE::ChiseDB.instance
+
+    char_id = @cd.decode_char("=daikanwa", 364)
+    assert_equal(20175, char_id)
+
+    value = @cd.load_feature(char_id, "ideographic-structure")
+    assert_equal("(?\342\277\260 ?\344\272\273 ?\345\216\266)", value)
+
+    value = @cd.load_feature(char_id, "=ucs")
+    assert_equal("20175", value)
+
+    @cd.each_feature_name {|f|
+      assert_instance_of(String, f)
+    }
+
+    ft = @cd.get_feature("numeric-value")
+    ft.each_char {|k, v|
+      assert_kind_of(Integer, k)
+      assert_instance_of(String, v)
+    }
+  end
+
+  def test_ascii
+    @cd = CHISE::ChiseDB.instance
+    ct = @cd.get_ccs("ascii")
+    char_id = ct.decode(65)
+    assert_equal(65, char_id)
+    assert_equal("A", CHISE::Character.get(char_id).to_s)
+#   assert_equal("A", char.to_s)
+  end
+
+  def test_put
+    @cd = CHISE::ChiseDB.instance
+    char_id = "字".char.char_id
+    ft = @cd.get_feature("test")
+    ft.setup_db(1)
+    ft.set_value(char_id, "test1")
+    assert_equal("test1", ft.get_value(char_id))
+    ft.sync
+
+    ds = @cd.instance_eval { @ds }
+    path = CHISE::DataSource::DB_DIR.path+"character/feature/test"
+    assert_equal(true, path.exist?)
+  end
+end