|
|
- #!/usr/bin/env python2
- # -*- coding: utf-8 -*-
- """
- Tests autojump.
- """
-
- from __future__ import division
- import autojump
- import contextlib
- import random
- import os
- import shutil
- import sys
- import tempfile
- import unittest
-
- @contextlib.contextmanager
- def no_stderr():
- savestderr = sys.stderr
- class DevNull(object):
- def write(self, _): pass
- sys.stderr = DevNull()
- yield
- sys.stderr = savestderr
-
- # test suite
- class TestAutojump(unittest.TestCase):
-
- def setUp(self):
- autojump.CONFIG_DIR = tempfile.mkdtemp()
- autojump.TESTING = True
- self.fd, self.fname = tempfile.mkstemp()
- self.db = autojump.Database(self.fname)
-
- random.seed()
-
- def tearDown(self):
- os.remove(self.fname)
- if os.path.isfile(self.fname + ".bak"):
- os.remove(self.fname + ".bak")
- if (os.path.exists(autojump.CONFIG_DIR) and
- ('tmp' in autojump.CONFIG_DIR or 'temp' in autojump.CONFIG_DIR)):
- shutil.rmtree(autojump.CONFIG_DIR)
-
- def test_config(self):
- self.assertEqual(autojump.COMPLETION_SEPARATOR, '__')
-
- def test_db_add(self):
- self.db.add('/1', 100)
- self.assertEqual(self.db.get_weight('/1'), 100)
- self.db.add('/2', 10)
- self.assertEqual(self.db.get_weight('/2'), 10)
- self.db.add('/2', 10)
- self.assertEqual(self.db.get_weight('/2'), 14.142135623730951)
-
- def test_db_get_weight(self):
- self.assertEqual(self.db.get_weight('/'), 0)
-
- def test_db_decay(self):
- self.db.add('/1', 10)
- self.db.decay()
- self.assertTrue(self.db.get_weight('/1') < 10)
-
- def test_db_load_existing(self):
- self.db = autojump.Database('tests/database.txt')
- self.assertTrue(len(self.db) > 0)
-
- def test_db_load_empty(self):
- # setup
- _, fname = tempfile.mkstemp()
- db = autojump.Database(fname)
-
- try:
- # test
- self.assertEquals(len(self.db), 0)
- finally:
- # teardown
- os.remove(fname)
-
- def test_db_load_backup(self):
- # setup
- fname = '/tmp/autojump_test_db_load_backup_' + str(random.randint(0,32678))
- db = autojump.Database(fname)
- db.add('/1')
- os.rename(fname, fname + '.bak')
-
- try:
- # test
- with no_stderr():
- db = autojump.Database(fname)
- self.assertTrue(len(db.data) > 0)
- self.assertTrue(os.path.isfile(fname))
- finally:
- # teardown
- os.remove(fname)
- os.remove(fname + '.bak')
-
- def test_db_purge(self):
- self.db.add('/1')
- self.db.purge()
- self.assertEquals(len(self.db), 0)
-
- def test_db_save(self):
- # setup
- fname = '/tmp/autojump_test_db_save_' + str(random.randint(0,32678)) + '.txt'
- db = autojump.Database(fname)
-
- try:
- # test
- db.save()
- self.assertTrue(os.path.isfile(fname))
- finally:
- # teardown
- os.remove(fname)
- os.remove(fname + '.bak')
-
- def test_db_trim(self):
- self.db.add('/1')
- self.db.add('/2')
- self.db.add('/3')
- self.db.add('/4')
- self.db.add('/5')
- self.db.add('/6')
- self.db.add('/7')
- self.db.add('/8')
- self.db.add('/9')
- self.db.add('/10')
- self.assertEquals(len(self.db), 10)
- self.db.trim()
- self.assertEquals(len(self.db), 9)
-
- def test_db_decode(self):
- #FIXME
- self.assertEquals(autojump.decode('foo'), 'foo')
-
- def test_db_unico(self):
- #FIXME
- self.assertEquals(autojump.unico('foo'), u'foo')
-
- def test_match_normal(self):
- max_matches = 1
- self.db.add('/foo', 10)
- self.db.add('/foo/bar', 20)
-
- patterns = [u'']
- results = autojump.find_matches(self.db, patterns, max_matches)
- self.assertEquals(results[0], '/foo/bar')
-
- patterns = [u'random']
- results = autojump.find_matches(self.db, patterns, max_matches)
- self.assertTrue(len(results) == 0)
-
- patterns = [u'fo']
- results = autojump.find_matches(self.db, patterns, max_matches)
- self.assertEquals(results[0], '/foo')
-
- self.db.add('/foo/bat', 15)
- patterns = [u'ba']
- results = autojump.find_matches(self.db, patterns, max_matches)
- self.assertEquals(results[0], '/foo/bar')
-
- self.db.add('/code/inbox', 5)
- self.db.add('/home/user/inbox', 10)
- patterns = [u'inbox']
- results = autojump.find_matches(self.db, patterns, max_matches)
- self.assertEquals(results[0], '/home/user/inbox')
- patterns = [u'co', u'in']
- results = autojump.find_matches(self.db, patterns, max_matches)
- self.assertEquals(results[0], '/code/inbox')
-
- def test_match_completion(self):
- max_matches = 9
- ignore_case = True
- self.db.add('/1')
- self.db.add('/2')
- self.db.add('/3')
- self.db.add('/4')
- self.db.add('/5', 20)
- self.db.add('/6', 15)
- self.db.add('/7')
- self.db.add('/8')
- self.db.add('/9')
-
- patterns = [u'']
- results = autojump.find_matches(self.db, patterns, max_matches, ignore_case)
- self.assertEquals(results, ['/5', '/6', '/9', '/8', '/7', '/4', '/3', '/2', '/1'])
-
- def test_match_case_insensitive(self):
- max_matches = 1
- ignore_case = True
- self.db.add('/FOO', 20)
- self.db.add('/foo', 10)
-
- patterns = [u'fo']
- results = autojump.find_matches(self.db, patterns, max_matches, ignore_case)
- self.assertEquals(results[0], '/FOO')
-
- def test_match_fuzzy(self):
- max_matches = 1
- ignore_case = True
- fuzzy_search = True
- self.db.add('/foo', 10)
- self.db.add('/foo/bar', 20)
- self.db.add('/abcdefg', 10)
-
- patterns = [u'random']
- results = autojump.find_matches(self.db, patterns, max_matches, ignore_case, fuzzy_search)
- self.assertTrue(len(results) == 0)
-
- patterns = [u'abcdefg']
- results = autojump.find_matches(self.db, patterns, max_matches, ignore_case, fuzzy_search)
- self.assertEquals(results[0], '/abcdefg')
-
- patterns = [u'abcefg']
- results = autojump.find_matches(self.db, patterns, max_matches, ignore_case, fuzzy_search)
- self.assertEquals(results[0], '/abcdefg')
-
- patterns = [u'bacef']
- results = autojump.find_matches(self.db, patterns, max_matches, ignore_case, fuzzy_search)
- self.assertEquals(results[0], '/abcdefg')
-
- if __name__ == '__main__':
- unittest.main()
|