|
|
@ -1,227 +0,0 @@ |
|
|
|
#!/usr/bin/env python2 |
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
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_decrease(self): |
|
|
|
self.db.add('/1', 10) |
|
|
|
self.db.decrease('/1', 50) |
|
|
|
self.assertEquals(self.db.get_weight('/1'), 0) |
|
|
|
self.db.add('/2', 100) |
|
|
|
self.db.decrease('/2', 50) |
|
|
|
self.assertEquals(self.db.get_weight('/2'), 50) |
|
|
|
|
|
|
|
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() |