mirror of
https://github.com/wting/autojump
synced 2024-10-27 20:34:07 +00:00
f41d0fb7b3
The migration code was never working to begin with. Users migrating from v17 or older will be starting from an empty, new database.
224 lines
6.5 KiB
Python
Executable File
224 lines
6.5 KiB
Python
Executable File
#!/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()
|