class TestCleanUrls: def setup_class(self): settings.GENERATE_ABSOLUTE_FS_URLS = False settings.GENERATE_CLEAN_URLS = True settings.APPEND_SLASH = False # See Also: TestCleanUrlsAppendSlash settings.LISTING_PAGE_NAMES = ['listing'] self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() settings.site = self.site.content_node def test_homepage(self): """Regardless of whether APPEND_SLASH is true, the homepage's url cannot be blank""" assert self.site.content_node.listing_url == "/" def test_regular_page(self): """Tests a non-listing page""" page = self.site.content_node.children[1].children[2].pages[0] assert page.name == "introducing-hyde.html" assert page.url == "/blog/2009/introducing-hyde" def test_auto_listing_page(self): """Tests listing pages whose filenames match the name of their enclosing folders.""" blog = self.site.content_node.children[1] assert blog.name == "blog" assert blog.listing_url == "/blog" def test_lpn_listing_page(self): """Tests listing pages whose names are in the LISTING_PAGE_NAMES setting""" page = self.site.content_node.children[1].children[0].listing_page assert page.name == "listing.html" assert page.url == "/blog/2007"
class TestNormalUrls: """This is to make sure that the clean url generator hasn't interfered with regular urls""" def setup_class(self): settings.GENERATE_ABSOLUTE_FS_URLS = False settings.GENERATE_CLEAN_URLS = False settings.LISTING_PAGE_NAMES = ['listing'] self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() settings.site = self.site.content_node def test_homepage(self): assert self.site.content_node.listing_url == "/index.html" def test_regular_page(self): """Tests a non-listing page""" page = self.site.content_node.children[1].children[2].pages[0] assert page.name == "introducing-hyde.html" assert page.url == "/blog/2009/introducing-hyde.html" def test_auto_listing_page(self): """Tests listing pages whose filenames match the name of their enclosing folders.""" blog = self.site.content_node.children[1] assert blog.name == "blog" assert blog.listing_url == "/blog/blog.html" def test_lpn_listing_page(self): """Tests listing pages whose names are in the LISTING_PAGE_NAMES setting""" print self.site.content_node.children[1].children[0] page = self.site.content_node.children[1].children[0].listing_page assert page.name == "listing.html" assert page.url == "/blog/2007/listing.html"
class BaseHandler(tornado.web.RequestHandler): def init_site(self, site, force=False): if not site in self.settings['sites']: raise Exception("Site [%s] is not configured." % (site, )) self.site_path = FileSystemEntity( self.settings['sites'][site]["path"]).humblepath if not hasattr(settings, 'siteinfo'): setup_env(self.site_path) setattr(settings, 'siteinfo', {}) if not site in settings.siteinfo or force: self.siteinfo = SiteInfo(settings, self.site_path) self.siteinfo.refresh() settings.siteinfo[site] = self.siteinfo else: self.siteinfo = settings.siteinfo[site] def get(self, site): self.init_site(site) self.doget(site) def doget(self, site): abstract def post(self, site): self.init_site(site) self.dopost(site) def dopost(self, site): abstract
def setup_class(self): settings.GENERATE_ABSOLUTE_FS_URLS = False settings.GENERATE_CLEAN_URLS = False settings.LISTING_PAGE_NAMES = ['listing'] self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() settings.site = self.site.content_node
def setup_class(self): settings.GENERATE_ABSOLUTE_FS_URLS = False settings.GENERATE_CLEAN_URLS = True settings.APPEND_SLASH = False # See Also: TestCleanUrlsAppendSlash settings.LISTING_PAGE_NAMES = ['listing'] self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() settings.site = self.site.content_node
def test_recent_posts(self): site = SiteInfo(settings, TEST_SITE.path) site.refresh() self.generator = Generator(TEST_SITE.path) self.generator.build_siteinfo() self.generator.pre_process(site) actual_resource = site.find_resource(File(site.content_folder.child('recent_posts.html'))) self.generator.process(actual_resource) expected_text = File( TEST_ROOT.child("recent_posts_dest.html")).read_all() actual_text = actual_resource.temp_file.read_all() assert expected_text == actual_text
def test_recent_posts(self): site = SiteInfo(settings, TEST_SITE.path) site.refresh() self.generator = Generator(TEST_SITE.path) self.generator.build_siteinfo() self.generator.pre_process(site) actual_resource = site.find_resource( File(site.content_folder.child('recent_posts.html'))) self.generator.process(actual_resource) expected_text = File( TEST_ROOT.child("recent_posts_dest.html")).read_all() actual_text = actual_resource.temp_file.read_all() if ORIGINAL_PRE_PROCESSORS: settings.SITE_PRE_PROCESSORS = ORIGINAL_PRE_PROCESSORS assert_html_equals(expected_text, actual_text)
def init_site(self, site, force=False): if not site in self.settings['sites']: raise Exception("Site [%s] is not configured." % (site, )) self.site_path = FileSystemEntity( self.settings['sites'][site]["path"]).humblepath if not hasattr(settings, 'siteinfo'): setup_env(self.site_path) setattr(settings, 'siteinfo', {}) if not site in settings.siteinfo or force: self.siteinfo = SiteInfo(settings, self.site_path) self.siteinfo.refresh() settings.siteinfo[site] = self.siteinfo else: self.siteinfo = settings.siteinfo[site]
def test_render_direct(self): render_folder = TEST_SITE.child_folder('content/render'); render_folder.make() template_folder = TEST_SITE.child_folder('layout'); template_folder.make() File(TEST_ROOT.child("render_tag/template.html") ).copy_to(template_folder.child('render.html')) source = File(TEST_ROOT.child("render_tag/source.html")).copy_to(render_folder) site = SiteInfo(settings, TEST_SITE.path) site.refresh() self.generator = Generator(TEST_SITE.path) self.generator.build_siteinfo() self.generator.pre_process(site) actual_resource = site.find_resource(source) self.generator.process(actual_resource) expected_text = File(TEST_ROOT.child("render_tag/dest.html")).read_all() actual_text = actual_resource.temp_file.read_all() if ORIGINAL_PRE_PROCESSORS: settings.SITE_PRE_PROCESSORS = ORIGINAL_PRE_PROCESSORS assert_html_equals(expected_text, actual_text)
def test_render_direct(self): render_folder = TEST_SITE.child_folder('content/render') render_folder.make() template_folder = TEST_SITE.child_folder('layout') template_folder.make() File(TEST_ROOT.child("render_tag/template.html")).copy_to( template_folder.child('render.html')) source = File( TEST_ROOT.child("render_tag/source.html")).copy_to(render_folder) site = SiteInfo(settings, TEST_SITE.path) site.refresh() self.generator = Generator(TEST_SITE.path) self.generator.build_siteinfo() self.generator.pre_process(site) actual_resource = site.find_resource(source) self.generator.process(actual_resource) expected_text = File( TEST_ROOT.child("render_tag/dest.html")).read_all() actual_text = actual_resource.temp_file.read_all() if ORIGINAL_PRE_PROCESSORS: settings.SITE_PRE_PROCESSORS = ORIGINAL_PRE_PROCESSORS assert_html_equals(expected_text, actual_text)
class MonitorTests(object): def clean_queue(self): while not self.queue.empty(): try: self.queue.get() self.queue.task_done() except Empty: break def setup_class(cls): cls.site = None cls.queue = Queue() def teardown_class(cls): if cls.site: cls.site.dont_monitor() def setup_method(self, method): self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() self.exception_queue = Queue() self.clean_queue() assert self.queue.empty()
def init_site(self, site, force=False): if not site in self.settings["sites"]: raise Exception("Site [%s] is not configured." % (site,)) self.site_path = FileSystemEntity(self.settings["sites"][site]["path"]).humblepath if not hasattr(settings, "siteinfo"): setup_env(self.site_path) setattr(settings, "siteinfo", {}) if not site in settings.siteinfo or force: self.siteinfo = SiteInfo(settings, self.site_path) self.siteinfo.refresh() settings.siteinfo[site] = self.siteinfo else: self.siteinfo = settings.siteinfo[site]
def test_filters(self): site = SiteInfo(settings, TEST_SITE.path) for name in [".banjo", ".hidden", "junk.abc~"]: f = File(site.content_folder.child(name)) self.files.append(f) f.write("junk") git = site.content_folder.child_folder(".git") git_child = git.child_folder("child") git_child_pack = File(git_child.child("pack")) git.make() git_child.make() git_index = File(git.child("index")) git_index.write("junk") git_child_pack.write("junk") original_exclude = settings.FILTER['exclude'] original_include = settings.FILTER['include'] settings.FILTER = {} site = SiteInfo(settings, TEST_SITE.path) site.refresh() for f in self.files: assert site.find_resource(f) assert site.find_node(git) assert site.find_resource(git_index) assert site.find_node(git_child) assert site.find_resource(git_child_pack) settings.FILTER = { 'include': (), 'exclude': (".*","*~") } site = SiteInfo(settings, TEST_SITE.path) site.refresh() for f in self.files: assert not site.find_resource(f) assert not site.find_node(git) assert not site.find_resource(git_index) assert not site.find_node(git_child) assert not site.find_resource(git_child_pack) settings.FILTER = { 'include': (".banjo",), 'exclude': (".*","*~") } site = SiteInfo(settings, TEST_SITE.path) site.refresh() for f in self.files: if f.name == ".banjo": assert site.find_resource(f) else: assert not site.find_resource(f) assert not site.find_node(git) assert not site.find_resource(git_index) settings.FILTER['exclude'] = original_exclude settings.FILTER['include'] = original_include self.files.append(git)
class TestSiteInfo: def setup_method(self, method): self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() def assert_node_complete(self, node, folder): assert node.folder.path == folder.path test_case = self class Visitor(object): def visit_folder(self, folder): if not folder.allow(**test_case.site.settings.FILTER): return child = node.find_child(folder) assert child test_case.assert_node_complete(child, folder) def visit_file(self, a_file): if not a_file.allow(**test_case.site.settings.FILTER): return assert node.find_resource(a_file) folder.list(Visitor()) def test_population(self): assert self.site.name == "Your Site" self.assert_node_complete(self.site.content_node, TEST_SITE.child_folder("content")) self.assert_node_complete(self.site.media_node, TEST_SITE.child_folder("media")) self.assert_node_complete(self.site.layout_node, TEST_SITE.child_folder("layout")) def test_type(self): def assert_node_type(node_dir, type): node = self.site.find_child(Folder(node_dir)) assert node assert Folder(node_dir).same_as(node.folder) for child in node.walk(): assert child.type == type assert_node_type(settings.CONTENT_DIR, "content") assert_node_type(settings.MEDIA_DIR, "media") assert_node_type(settings.LAYOUT_DIR, "layout") def test_attributes(self): for node in self.site.walk(): self.assert_node_attributes(node) for resource in node.resources: self.assert_resource_attributes(resource) def assert_node_attributes(self, node): fragment = self.get_node_fragment(node) if node.type == "content": fragment = node.folder.get_fragment(self.site.content_folder) elif node.type == "media": fragment = node.folder.get_fragment(self.site.folder) if node.type in ("content", "media"): fragment = ("/" + fragment.strip("/")).rstrip("/") assert fragment == node.url assert settings.SITE_WWW_URL + fragment == node.full_url else: assert not node.url assert not node.full_url if node.type == "content": for ancestor in node.ancestors: assert( ancestor.folder.is_ancestor_of(node.folder) or ancestor.folder.same_as(node.folder)) assert node.source_folder == node.folder if not node == self.site and node.type not in ("content", "media"): assert not node.target_folder assert not node.temp_folder else: assert node.target_folder.same_as(Folder( os.path.join(settings.DEPLOY_DIR, fragment.lstrip("/")))) assert node.temp_folder.same_as(Folder( os.path.join(settings.TMP_DIR, fragment.lstrip("/")))) def assert_resource_attributes(self, resource): node = resource.node fragment = self.get_node_fragment(node) assert resource.name == resource.file.name assert resource.file.size == os.path.getsize(resource.file.path) if resource.node.type in ("content", "media"): assert (resource.url == url.join(node.url, resource.file.name)) assert (resource.full_url == url.join(node.full_url, resource.file.name)) assert resource.target_file.same_as( File(node.target_folder.child( resource.file.name))) assert resource.temp_file.same_as( File(node.temp_folder.child(resource.file.name))) else: assert not resource.url assert not resource.full_url if resource.node.type == "content": self.assert_page_attributes(resource) def assert_page_attributes(self, page): if page.page_name in ( "about", "blog", "listing", "2008", "2009", "index"): assert page.listing assert page.node.listing_page assert page.node.listing_page == page assert not page.display_in_list else: assert not page.listing if page.file.kind == "html": assert page.display_in_list assert page.module == page.node.module assert page.source_file.parent.same_as(page.node.folder) assert page.source_file.name == page.file.name def get_node_fragment(self, node): fragment = '' if node.type == "content": fragment = node.folder.get_fragment(self.site.content_folder) elif node.type == "media": fragment = node.folder.get_fragment(self.site.folder) return fragment
def setup_method(self, method): self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() self.exception_queue = Queue() self.clean_queue() assert self.queue.empty()
def setup_method(self, method): self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh()
class TestSiteInfo: def setup_method(self, method): self.site = SiteInfo(settings, TEST_SITE.path) self.site.refresh() def assert_node_complete(self, node, folder): assert node.folder.path == folder.path test_case = self class Visitor(object): def visit_folder(self, folder): child = node.find_child(folder) assert child test_case.assert_node_complete(child, folder) def visit_file(self, a_file): assert node.find_resource(a_file) folder.list(Visitor()) def test_population(self): assert self.site.name == "Your Site" self.assert_node_complete(self.site.content_node, TEST_SITE.child_folder("content")) self.assert_node_complete(self.site.media_node, TEST_SITE.child_folder("media")) self.assert_node_complete(self.site.layout_node, TEST_SITE.child_folder("layout")) def test_type(self): def assert_node_type(node_dir, type): node = self.site.find_child(Folder(node_dir)) assert node assert Folder(node_dir).same_as(node.folder) for child in node.walk(): assert child.type == type assert_node_type(settings.CONTENT_DIR, "content") assert_node_type(settings.MEDIA_DIR, "media") assert_node_type(settings.LAYOUT_DIR, "layout") def test_attributes(self): for node in self.site.walk(): self.assert_node_attributes(node) for resource in node.resources: self.assert_resource_attributes(resource) def assert_node_attributes(self, node): fragment = self.get_node_fragment(node) if node.type == "content": fragment = node.folder.get_fragment(self.site.content_folder) elif node.type == "media": fragment = node.folder.get_fragment(self.site.folder) if node.type in ("content", "media"): fragment = ("/" + fragment.strip("/")).rstrip("/") assert fragment == node.url assert settings.SITE_WWW_URL + fragment == node.full_url else: assert not node.url assert not node.full_url if node.type == "content": for ancestor in node.ancestors: assert( ancestor.folder.is_ancestor_of(node.folder) or ancestor.folder.same_as(node.folder)) assert node.source_folder == node.folder if not node == self.site and node.type not in ("content", "media"): assert not node.target_folder assert not node.temp_folder else: assert node.target_folder.same_as(Folder( os.path.join(settings.DEPLOY_DIR, fragment.lstrip("/")))) assert node.temp_folder.same_as(Folder( os.path.join(settings.TMP_DIR, fragment.lstrip("/")))) def assert_resource_attributes(self, resource): node = resource.node fragment = self.get_node_fragment(node) assert resource.name == resource.file.name if resource.node.type in ("content", "media"): assert (resource.url == url.join(node.url, resource.file.name)) assert (resource.full_url == url.join(node.full_url, resource.file.name)) assert resource.target_file.same_as( File(node.target_folder.child( resource.file.name))) assert resource.temp_file.same_as( File(node.temp_folder.child(resource.file.name))) else: assert not resource.url assert not resource.full_url if resource.node.type == "content": self.assert_page_attributes(resource) def assert_page_attributes(self, page): if page.page_name in ( "about", "blog", "2008", "2009", "index"): assert page.listing assert page.node.listing_page assert page.node.listing_page == page assert not page.display_in_list else: assert not page.listing if page.file.kind == "html": assert page.display_in_list assert page.module == page.node.module assert page.source_file.parent.same_as(page.node.folder) assert page.source_file.name == page.file.name def get_node_fragment(self, node): fragment = '' if node.type == "content": fragment = node.folder.get_fragment(self.site.content_folder) elif node.type == "media": fragment = node.folder.get_fragment(self.site.folder) return fragment