1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
#pylint: disable=too-many-public-methods,import-error,too-few-public-methods,missing-docstring,unused-variable
import os
import shutil
import tempfile
import unittest
from gleetex import caching
def write(path, content):
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
class test_caching(unittest.TestCase):
def setUp(self):
self.pos = {'height' : 8, 'depth' : 2, 'width' : 666}
self.original_directory = os.getcwd()
self.tmpdir = tempfile.mkdtemp()
os.chdir(self.tmpdir)
def tearDown(self):
os.chdir(self.original_directory)
shutil.rmtree(self.tmpdir, ignore_errors=True)
def test_differently_spaced_formulas_are_the_same(self):
form1 = r'\tau \pi'
form2 = '\tau\\pi'
self.assertTrue(caching.normalize_formula(form1),
caching.normalize_formula(form2))
def test_trailing_and_leading_spaces_and_tabs_are_no_problem(self):
u = caching.normalize_formula
form1 = ' hi'
form2 = 'hi '
form3 = '\thi'
self.assertEqual(u(form1), u(form2))
self.assertEqual(u(form1), u(form3))
def test_that_empty_braces_are_ignored(self):
u = caching.normalize_formula
form1 = r'\sin{}x'
form2 = r'\sin x'
form3 = r'\sin{} x'
self.assertEqual(u(form1), u(form2))
self.assertEqual(u(form1), u(form3))
self.assertEqual(u(form2), u(form3))
def test_empty_cache_works_fine(self):
write('foo.png', 'muha')
c = caching.ImageCache('file.png')
formula = r"f(x) = \ln(x)"
c.add_formula(formula, self.pos, 'foo.png')
self.assertTrue(c.contains(formula, False))
def test_that_invalid_cach_entries_are_detected(self):
# entry is invalid if file doesn't exist
c = caching.ImageCache()
formula = r"f(x) = \ln(x)"
self.assertRaises(OSError, c.add_formula, formula, self.pos, 'file.png')
def test_that_correct_pos_and_path_are_returned_after_writing_the_cache_back(self):
c = caching.ImageCache()
formula = r"g(x) = \ln(x)"
write('file.png', 'dummy')
c.add_formula(formula, self.pos, 'file.png', displaymath=False)
c.write()
c = caching.ImageCache()
self.assertTrue(c.contains(formula, False))
data = c.get_data_for(formula, False)
self.assertEqual(data['pos'], self.pos)
self.assertEqual(data['path'], 'file.png')
def test_formulas_are_not_added_twice(self):
form1 = r'\ln(x) \neq e^x'
write('spass.png', 'binaryBinary_binary')
c = caching.ImageCache()
for i in range(1,10):
c.add_formula(form1, self.pos, 'spass.png')
self.assertEqual(len(c), 1)
def test_that_remove_actually_removes(self):
form1 = '\\int e^x dy'
write('happyness.png', 'binaryBinary_binary')
c = caching.ImageCache()
c.add_formula(form1, self.pos, 'happyness.png')
c.remove_formula(form1, False)
self.assertEqual(len(c), 0)
def test_removal_of_non_existing_formula_raises_exception(self):
c = caching.ImageCache()
self.assertRaises(KeyError, c.remove_formula, 'Haha!', False)
def test_that_invalid_version_is_detected(self):
c = caching.ImageCache('gladtex.cache')
c._ImageCache__set_version('invalid.stuff')
c.write()
self.assertRaises(caching.JsonParserException, caching.ImageCache, 'gladtex.cache')
def test_that_invalid_style_is_detected(self):
write('foo.png', "dummy")
c = caching.ImageCache('gladtex.cache')
c.add_formula('\\tau', self.pos, 'foo.png', False)
c.add_formula('\\theta', self.pos, 'foo.png', True)
self.assertRaises(ValueError, c.add_formula, '\\gamma', self.pos, 'foo.png',
'some stuff')
def test_that_backslash_in_path_is_replaced_through_slash(self):
c = caching.ImageCache('gladtex.cache')
os.mkdir('bilder')
write(os.path.join('bilder', 'foo.png'), str(0xdeadbeef))
c.add_formula('\\tau', self.pos, 'bilder\\foo.png', False)
self.assertTrue('/' in c.get_data_for('\\tau', False)['path'])
def test_that_absolute_paths_trigger_OSError(self):
c = caching.ImageCache('gladtex.cache')
write('foo.png', "dummy")
fn = os.path.abspath('foo.png')
self.assertRaises(OSError, c.add_formula, '\\tau', self.pos,
fn, False)
def test_that_invalid_caches_are_removed_automatically_if_desired(self):
file_was_removed = lambda x: self.assertFalse(os.path.exists(x),
"expected that file %s was removed, but it still exists" % x)
write('gladtex.cache', 'some non-json rubbish')
c = caching.ImageCache('gladtex.cache', keep_old_cache=False)
file_was_removed('gladtex.cache')
# try the same in a subdirectory
os.mkdir('foo')
cache_path = os.path.join('foo', 'gladtex.cache')
eqn1_path = os.path.join('foo', 'eqn000.png')
eqn2_path = os.path.join('foo', 'eqn003.png')
write(cache_path, 'some non-json rubbish')
write(eqn1_path, 'binary')
write(eqn2_path, 'more binary')
c = caching.ImageCache(cache_path, keep_old_cache=False)
file_was_removed(cache_path)
file_was_removed(eqn1_path)
file_was_removed(eqn2_path)
def test_that_formulas_in_cache_with_no_file_raise_key_error(self):
c = caching.ImageCache('gladtex.cache', keep_old_cache=False)
write('foo.png', 'dummy')
c.add_formula('\\tau', self.pos, 'foo.png')
c.write()
os.remove('foo.png')
c = caching.ImageCache('gladtex.cache', keep_old_cache=False)
with self.assertRaises(KeyError):
c.get_data_for('foo.png', 'False')
|