• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

# -*- coding: utf-8 -*-
 
from __future__ import absolute_import
 
import unittest, time
from jbparse import edict
 
SRC_NAME = "edict"
SRC_DIR = "../../dicts"
 
SRC_NAME = "/".join((SRC_DIR, SRC_NAME))
 
class EdictTest(unittest.TestCase):
 
    def setUp(self):
        self.parser = edict.EdictParser(SRC_NAME)
 
    def test_japanese_search(self):
        """EDICT: Search for Japanese word/phrase"""
        query = u"日本"
        l = [entry for entry in self.parser.search(query)]
        self.assertTrue(len(l) > 0)
 
    def test_native_search(self):
        """EDICT: Search for non-Japanese word/phrase"""
        query = u"Japan"
        l = [entry for entry in self.parser.search(query)]
        self.assertTrue(len(l) > 0)
 
    def test_unparsed(self):
        """EDICT: Check for unhandled EDICT fields"""
        l = [k for k in self.parser.search(u"")]
        unparsed = set()
        for key, entry in self.parser.cache.iteritems():
            for item in entry.unparsed: unparsed.add(item)
        if unparsed:
            #self.fail(u"Unhandled fields found: %s" % u", ".join(unparsed))
            print u"\n\tWARNING: Unhandled fields found: %s" \
                  % u", ".join(unparsed)
 
    def test_caching(self):
        """EDICT: Check that caching is working"""
        self.assertFalse(self.parser.cache)
        t = time.time()
        self.test_japanese_search()
        first_t = time.time() - t
 
        self.assertTrue(self.parser.cache)
        t = time.time()
        self.test_japanese_search()
        second_t = time.time() - t
 
        print "\n\tFirst query time:  %f" % first_t
        print "\tSecond query time: %f" % second_t
        self.assertTrue(second_t <= first_t)
 
    def test_no_cache(self):
        """EDICT: Check that parser works without caching."""
        self.parser = edict.EdictParser(SRC_NAME, use_cache=False)
 
        self.assertFalse(self.parser.cache)
        t = time.time()
        self.test_japanese_search()
        first_t = time.time() - t
 
        self.assertFalse(self.parser.cache)
        t = time.time()
        self.test_japanese_search()
        second_t = time.time() - t
 
        print "\n\tFirst query time:  %f" % first_t
        print "\tSecond query time: %f" % second_t
 
    def tearDown(self):
        self.parser = None
 
if __name__ == "__main__":
    unittest.main()