summaryrefslogtreecommitdiff
path: root/tests/test_locator.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_locator.py')
-rw-r--r--tests/test_locator.py150
1 files changed, 150 insertions, 0 deletions
diff --git a/tests/test_locator.py b/tests/test_locator.py
new file mode 100644
index 0000000..94a55ad
--- /dev/null
+++ b/tests/test_locator.py
@@ -0,0 +1,150 @@
+# encoding: utf-8
+
+"""
+Contains locator.py unit tests.
+
+"""
+
+from datetime import datetime
+import os
+import sys
+import unittest
+
+# TODO: remove this alias.
+from pystache.loader import Loader as Reader
+from pystache.locator import Locator
+
+from tests.common import DATA_DIR
+from data.views import SayHello
+
+
+class LocatorTests(unittest.TestCase):
+
+ def _locator(self):
+ return Locator(search_dirs=DATA_DIR)
+
+ def test_init__extension(self):
+ # Test the default value.
+ locator = Locator()
+ self.assertEquals(locator.template_extension, 'mustache')
+
+ locator = Locator(extension='txt')
+ self.assertEquals(locator.template_extension, 'txt')
+
+ locator = Locator(extension=False)
+ self.assertTrue(locator.template_extension is False)
+
+ def test_get_object_directory(self):
+ locator = Locator()
+
+ obj = SayHello()
+ actual = locator.get_object_directory(obj)
+
+ self.assertEquals(actual, os.path.abspath(DATA_DIR))
+
+ def test_get_object_directory__not_hasattr_module(self):
+ locator = Locator()
+
+ obj = datetime(2000, 1, 1)
+ self.assertFalse(hasattr(obj, '__module__'))
+ self.assertEquals(locator.get_object_directory(obj), None)
+
+ self.assertFalse(hasattr(None, '__module__'))
+ self.assertEquals(locator.get_object_directory(None), None)
+
+ def test_make_file_name(self):
+ locator = Locator()
+
+ locator.template_extension = 'bar'
+ self.assertEquals(locator.make_file_name('foo'), 'foo.bar')
+
+ locator.template_extension = False
+ self.assertEquals(locator.make_file_name('foo'), 'foo')
+
+ locator.template_extension = ''
+ self.assertEquals(locator.make_file_name('foo'), 'foo.')
+
+ def test_make_file_name__template_extension_argument(self):
+ locator = Locator()
+
+ self.assertEquals(locator.make_file_name('foo', template_extension='bar'), 'foo.bar')
+
+ def test_find_name(self):
+ locator = Locator()
+ path = locator.find_name(search_dirs=['examples'], template_name='simple')
+
+ self.assertEquals(os.path.basename(path), 'simple.mustache')
+
+ def test_find_name__using_list_of_paths(self):
+ locator = Locator()
+ path = locator.find_name(search_dirs=['doesnt_exist', 'examples'], template_name='simple')
+
+ self.assertTrue(path)
+
+ def test_find_name__precedence(self):
+ """
+ Test the order in which find_name() searches directories.
+
+ """
+ locator = Locator()
+
+ dir1 = DATA_DIR
+ dir2 = os.path.join(DATA_DIR, 'locator')
+
+ self.assertTrue(locator.find_name(search_dirs=[dir1], template_name='duplicate'))
+ self.assertTrue(locator.find_name(search_dirs=[dir2], template_name='duplicate'))
+
+ path = locator.find_name(search_dirs=[dir2, dir1], template_name='duplicate')
+ dirpath = os.path.dirname(path)
+ dirname = os.path.split(dirpath)[-1]
+
+ self.assertEquals(dirname, 'locator')
+
+ def test_find_name__non_existent_template_fails(self):
+ locator = Locator()
+
+ self.assertRaises(IOError, locator.find_name, search_dirs=[], template_name='doesnt_exist')
+
+ def test_find_object(self):
+ locator = Locator()
+
+ obj = SayHello()
+
+ actual = locator.find_object(search_dirs=[], obj=obj, file_name='sample_view.mustache')
+ expected = os.path.abspath(os.path.join(DATA_DIR, 'sample_view.mustache'))
+
+ self.assertEquals(actual, expected)
+
+ def test_find_object__none_file_name(self):
+ locator = Locator()
+
+ obj = SayHello()
+
+ actual = locator.find_object(search_dirs=[], obj=obj)
+ expected = os.path.abspath(os.path.join(DATA_DIR, 'say_hello.mustache'))
+
+ self.assertEquals(actual, expected)
+
+ def test_find_object__none_object_directory(self):
+ locator = Locator()
+
+ obj = None
+ self.assertEquals(None, locator.get_object_directory(obj))
+
+ actual = locator.find_object(search_dirs=[DATA_DIR], obj=obj, file_name='say_hello.mustache')
+ expected = os.path.join(DATA_DIR, 'say_hello.mustache')
+
+ self.assertEquals(actual, expected)
+
+ def test_make_template_name(self):
+ """
+ Test make_template_name().
+
+ """
+ locator = Locator()
+
+ class FooBar(object):
+ pass
+ foo = FooBar()
+
+ self.assertEquals(locator.make_template_name(foo), 'foo_bar')