[svn r37395] Fixed some small issues in source nav, turned namespace_tree into an instance
var (finally! :), changed the api nav so it now shows the full tree with the current item unfolded + siblings of itself and all parents (+ children if it's a namespace item). --HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									b67ef229df
								
							
						
					
					
						commit
						3c08f6a614
					
				|  | @ -14,11 +14,7 @@ from py.__.apigen import project | ||||||
| def get_documentable_items(pkgdir): | def get_documentable_items(pkgdir): | ||||||
|     sys.path.insert(0, str(pkgdir.dirpath())) |     sys.path.insert(0, str(pkgdir.dirpath())) | ||||||
|     rootmod = __import__(pkgdir.basename) |     rootmod = __import__(pkgdir.basename) | ||||||
|     #rootmod = import_pkgdir(pkgdir) |     return rootmod | ||||||
|     if hasattr(rootmod, '__package__'): |  | ||||||
|         return rootmod |  | ||||||
|     # XXX fix non-initpkg situations(?) |  | ||||||
|     return {} |  | ||||||
| 
 | 
 | ||||||
| def build(pkgdir, dsa): | def build(pkgdir, dsa): | ||||||
|     l = linker.Linker() |     l = linker.Linker() | ||||||
|  | @ -32,15 +28,14 @@ def build(pkgdir, dsa): | ||||||
| 
 | 
 | ||||||
|     all_names = dsa._get_names(filter=lambda x, y: True) |     all_names = dsa._get_names(filter=lambda x, y: True) | ||||||
|     namespace_tree = htmlgen.create_namespace_tree(all_names) |     namespace_tree = htmlgen.create_namespace_tree(all_names) | ||||||
|     apb = htmlgen.ApiPageBuilder(targetdir, l, dsa, pkgdir) |     apb = htmlgen.ApiPageBuilder(targetdir, l, dsa, pkgdir, namespace_tree) | ||||||
|     spb = htmlgen.SourcePageBuilder(targetdir, l, pkgdir) |     spb = htmlgen.SourcePageBuilder(targetdir, l, pkgdir) | ||||||
| 
 | 
 | ||||||
|     ns_data = apb.prepare_namespace_pages(namespace_tree) |     ns_data = apb.prepare_namespace_pages() | ||||||
|     class_names = dsa.get_class_names() |     class_names = dsa.get_class_names() | ||||||
|     class_data = apb.prepare_class_pages(namespace_tree, |     class_data = apb.prepare_class_pages(class_names) | ||||||
|                                                       class_names) |  | ||||||
|     function_names = dsa.get_function_names() |     function_names = dsa.get_function_names() | ||||||
|     func_data = apb.prepare_function_pages(namespace_tree, function_names) |     func_data = apb.prepare_function_pages(function_names) | ||||||
|     source_data = spb.prepare_pages(pkgdir) |     source_data = spb.prepare_pages(pkgdir) | ||||||
| 
 | 
 | ||||||
|     apb.build_namespace_pages(ns_data, proj) |     apb.build_namespace_pages(ns_data, proj) | ||||||
|  |  | ||||||
|  | @ -180,16 +180,17 @@ class SourcePageBuilder(AbstractPageBuilder): | ||||||
|         path = relpath.split(os.path.sep) |         path = relpath.split(os.path.sep) | ||||||
|         indent = 0 |         indent = 0 | ||||||
|         # build links to parents |         # build links to parents | ||||||
|         for i in xrange(len(path)): |         if relpath != '': | ||||||
|             dirpath = os.path.sep.join(path[:i]) |             for i in xrange(len(path)): | ||||||
|             abspath = self.projroot.join(dirpath).strpath |                 dirpath = os.path.sep.join(path[:i]) | ||||||
|             if i == 0: |                 abspath = self.projroot.join(dirpath).strpath | ||||||
|                 text = 'root' |                 if i == 0: | ||||||
|             else: |                     text = self.projroot.basename | ||||||
|                 text = path[i-1] |                 else: | ||||||
|             nav.append(build_navitem_html(self.linker, text, abspath, |                     text = path[i-1] | ||||||
|                                           indent, False)) |                 nav.append(build_navitem_html(self.linker, text, abspath, | ||||||
|             indent += 1 |                                               indent, False)) | ||||||
|  |                 indent += 1 | ||||||
|         # build siblings or children and self |         # build siblings or children and self | ||||||
|         if fspath.check(dir=True): |         if fspath.check(dir=True): | ||||||
|             # we're a dir, build ourselves and our children |             # we're a dir, build ourselves and our children | ||||||
|  | @ -296,12 +297,13 @@ class SourcePageBuilder(AbstractPageBuilder): | ||||||
| 
 | 
 | ||||||
| class ApiPageBuilder(AbstractPageBuilder): | class ApiPageBuilder(AbstractPageBuilder): | ||||||
|     """ builds the html for an api docs page """ |     """ builds the html for an api docs page """ | ||||||
|     def __init__(self, base, linker, dsa, projroot): |     def __init__(self, base, linker, dsa, projroot, namespace_tree): | ||||||
|         self.base = base |         self.base = base | ||||||
|         self.linker = linker |         self.linker = linker | ||||||
|         self.dsa = dsa |         self.dsa = dsa | ||||||
|         self.projroot = projroot |         self.projroot = projroot | ||||||
|         self.projpath = py.path.local(projroot) |         self.projpath = py.path.local(projroot) | ||||||
|  |         self.namespace_tree = namespace_tree | ||||||
|          |          | ||||||
|     def build_callable_view(self, dotted_name): |     def build_callable_view(self, dotted_name): | ||||||
|         """ build the html for a class method """ |         """ build the html for a class method """ | ||||||
|  | @ -428,18 +430,17 @@ class ApiPageBuilder(AbstractPageBuilder): | ||||||
|             ) |             ) | ||||||
|         return snippet |         return snippet | ||||||
| 
 | 
 | ||||||
|     def prepare_class_pages(self, namespace_tree, classes_dotted_names): |     def prepare_class_pages(self, classes_dotted_names): | ||||||
|         passed = [] |         passed = [] | ||||||
|         for dotted_name in sorted(classes_dotted_names): |         for dotted_name in sorted(classes_dotted_names): | ||||||
|             parent_dotted_name, _ = split_of_last_part(dotted_name) |             parent_dotted_name, _ = split_of_last_part(dotted_name) | ||||||
|             try: |             try: | ||||||
|                 sibling_dotted_names = namespace_tree[parent_dotted_name] |                 sibling_dotted_names = self.namespace_tree[parent_dotted_name] | ||||||
|             except KeyError: |             except KeyError: | ||||||
|                 # no siblings (built-in module or sth) |                 # no siblings (built-in module or sth) | ||||||
|                 sibling_dotted_names = [] |                 sibling_dotted_names = [] | ||||||
|             tag = H.Content(self.build_class_view(dotted_name)) |             tag = H.Content(self.build_class_view(dotted_name)) | ||||||
|             nav = self.build_navigation(parent_dotted_name, |             nav = self.build_navigation(dotted_name, False) | ||||||
|                                         sibling_dotted_names, dotted_name) |  | ||||||
|             reltargetpath = "api/%s.html" % (dotted_name,) |             reltargetpath = "api/%s.html" % (dotted_name,) | ||||||
|             self.linker.set_link(dotted_name, reltargetpath) |             self.linker.set_link(dotted_name, reltargetpath) | ||||||
|             passed.append((dotted_name, tag, nav, reltargetpath)) |             passed.append((dotted_name, tag, nav, reltargetpath)) | ||||||
|  | @ -451,17 +452,16 @@ class ApiPageBuilder(AbstractPageBuilder): | ||||||
|             title = 'api documentation for %s' % (dotted_name,) |             title = 'api documentation for %s' % (dotted_name,) | ||||||
|             self.write_page(title, reltargetpath, project, tag, nav) |             self.write_page(title, reltargetpath, project, tag, nav) | ||||||
| 
 | 
 | ||||||
|     def prepare_method_pages(self, namespace_tree, method_dotted_names): |     def prepare_method_pages(self, method_dotted_names): | ||||||
|         # XXX note that even though these pages are still built, there's no nav |         # XXX note that even though these pages are still built, there's no nav | ||||||
|         # pointing to them anymore... |         # pointing to them anymore... | ||||||
|         passed = [] |         passed = [] | ||||||
|         for dotted_name in sorted(method_dotted_names): |         for dotted_name in sorted(method_dotted_names): | ||||||
|             parent_dotted_name, _ = split_of_last_part(dotted_name) |             parent_dotted_name, _ = split_of_last_part(dotted_name) | ||||||
|             module_dotted_name, _ = split_of_last_part(parent_dotted_name) |             module_dotted_name, _ = split_of_last_part(parent_dotted_name) | ||||||
|             sibling_dotted_names = namespace_tree[module_dotted_name] |             sibling_dotted_names = self.namespace_tree[module_dotted_name] | ||||||
|             tag = self.build_callable_view(dotted_name) |             tag = self.build_callable_view(dotted_name) | ||||||
|             nav = self.build_navigation(parent_dotted_name, |             nav = self.build_navigation(dotted_name, False) | ||||||
|                                         sibling_dotted_names, dotted_name) |  | ||||||
|             reltargetpath = "api/%s.html" % (dotted_name,) |             reltargetpath = "api/%s.html" % (dotted_name,) | ||||||
|             self.linker.set_link(dotted_name, reltargetpath) |             self.linker.set_link(dotted_name, reltargetpath) | ||||||
|             passed.append((dotted_name, tag, nav, reltargetpath)) |             passed.append((dotted_name, tag, nav, reltargetpath)) | ||||||
|  | @ -472,15 +472,14 @@ class ApiPageBuilder(AbstractPageBuilder): | ||||||
|             title = 'api documentation for %s' % (dotted_name,) |             title = 'api documentation for %s' % (dotted_name,) | ||||||
|             self.write_page(title, reltargetpath, project, tag, nav) |             self.write_page(title, reltargetpath, project, tag, nav) | ||||||
| 
 | 
 | ||||||
|     def prepare_function_pages(self, namespace_tree, method_dotted_names): |     def prepare_function_pages(self, method_dotted_names): | ||||||
|         passed = [] |         passed = [] | ||||||
|         for dotted_name in sorted(method_dotted_names): |         for dotted_name in sorted(method_dotted_names): | ||||||
|             # XXX should we create a build_function_view instead? |             # XXX should we create a build_function_view instead? | ||||||
|             parent_dotted_name, _ = split_of_last_part(dotted_name) |             parent_dotted_name, _ = split_of_last_part(dotted_name) | ||||||
|             sibling_dotted_names = namespace_tree[parent_dotted_name] |             sibling_dotted_names = self.namespace_tree[parent_dotted_name] | ||||||
|             tag = H.Content(self.build_callable_view(dotted_name)) |             tag = H.Content(self.build_callable_view(dotted_name)) | ||||||
|             nav = self.build_navigation(parent_dotted_name, |             nav = self.build_navigation(dotted_name, False) | ||||||
|                                         sibling_dotted_names, dotted_name) |  | ||||||
|             reltargetpath = "api/%s.html" % (dotted_name,) |             reltargetpath = "api/%s.html" % (dotted_name,) | ||||||
|             self.linker.set_link(dotted_name, reltargetpath) |             self.linker.set_link(dotted_name, reltargetpath) | ||||||
|             passed.append((dotted_name, tag, nav, reltargetpath)) |             passed.append((dotted_name, tag, nav, reltargetpath)) | ||||||
|  | @ -491,22 +490,21 @@ class ApiPageBuilder(AbstractPageBuilder): | ||||||
|             title = 'api documentation for %s' % (dotted_name,) |             title = 'api documentation for %s' % (dotted_name,) | ||||||
|             self.write_page(title, reltargetpath, project, tag, nav) |             self.write_page(title, reltargetpath, project, tag, nav) | ||||||
| 
 | 
 | ||||||
|     def prepare_namespace_pages(self, namespace_tree): |     def prepare_namespace_pages(self): | ||||||
|         passed = [] |         passed = [] | ||||||
|         module_name = self.dsa.get_module_name().split('/')[-1] |         module_name = self.dsa.get_module_name().split('/')[-1] | ||||||
| 
 | 
 | ||||||
|         names = namespace_tree.keys() |         names = self.namespace_tree.keys() | ||||||
|         names.sort() |         names.sort() | ||||||
|         function_names = self.dsa.get_function_names() |         function_names = self.dsa.get_function_names() | ||||||
|         class_names = self.dsa.get_class_names() |         class_names = self.dsa.get_class_names() | ||||||
|         for dotted_name in sorted(names): |         for dotted_name in sorted(names): | ||||||
|             if dotted_name in function_names or dotted_name in class_names: |             if dotted_name in function_names or dotted_name in class_names: | ||||||
|                 continue |                 continue | ||||||
|             subitem_dotted_names = namespace_tree[dotted_name] |             subitem_dotted_names = self.namespace_tree[dotted_name] | ||||||
|             tag = H.Content(self.build_namespace_view(dotted_name, |             tag = H.Content(self.build_namespace_view(dotted_name, | ||||||
|                                                       subitem_dotted_names)) |                                                       subitem_dotted_names)) | ||||||
|             nav = self.build_navigation(dotted_name, subitem_dotted_names, |             nav = self.build_navigation(dotted_name, True) | ||||||
|                                         dotted_name) |  | ||||||
|             if dotted_name == '': |             if dotted_name == '': | ||||||
|                 reltargetpath = 'api/index.html' |                 reltargetpath = 'api/index.html' | ||||||
|             else: |             else: | ||||||
|  | @ -522,7 +520,39 @@ class ApiPageBuilder(AbstractPageBuilder): | ||||||
|             title = 'index of %s namespace' % (dotted_name,) |             title = 'index of %s namespace' % (dotted_name,) | ||||||
|             self.write_page(title, reltargetpath, project, tag, nav) |             self.write_page(title, reltargetpath, project, tag, nav) | ||||||
| 
 | 
 | ||||||
|     def build_navigation(self, dotted_name, item_dotted_names, selection): |     def build_navigation(self, dotted_name, build_children=True): | ||||||
|  |         navitems = [] | ||||||
|  | 
 | ||||||
|  |         # top namespace, index.html | ||||||
|  |         module_name = self.dsa.get_module_name().split('/')[-1] | ||||||
|  |         navitems.append(build_navitem_html(self.linker, module_name, '', 0, | ||||||
|  |                                            True)) | ||||||
|  |         def build_nav_level(dotted_name, depth=1): | ||||||
|  |             navitems = [] | ||||||
|  |             path = dotted_name.split('.')[:depth] | ||||||
|  |             siblings = self.namespace_tree.get('.'.join(path[:-1])) | ||||||
|  |             for dn in sorted(siblings): | ||||||
|  |                 selected = dn == '.'.join(path) | ||||||
|  |                 sibpath = dn.split('.') | ||||||
|  |                 navitems.append(build_navitem_html(self.linker, sibpath[-1], | ||||||
|  |                                                    dn, depth, | ||||||
|  |                                                    selected)) | ||||||
|  |                 if selected: | ||||||
|  |                     lastlevel = dn.count('.') == dotted_name.count('.') | ||||||
|  |                     if not lastlevel: | ||||||
|  |                         navitems += build_nav_level(dotted_name, depth+1) | ||||||
|  |                     elif lastlevel and build_children: | ||||||
|  |                         # XXX hack | ||||||
|  |                         navitems += build_nav_level('%s.' % (dotted_name,), | ||||||
|  |                                                     depth+2) | ||||||
|  | 
 | ||||||
|  |             return navitems | ||||||
|  | 
 | ||||||
|  |         navitems += build_nav_level(dotted_name) | ||||||
|  |         return H.Navigation(*navitems) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |      | ||||||
|         navitems = [] |         navitems = [] | ||||||
| 
 | 
 | ||||||
|         # top namespace, index.html |         # top namespace, index.html | ||||||
|  |  | ||||||
|  | @ -104,15 +104,19 @@ class AbstractBuilderTest(object): | ||||||
|         self.base = base = py.test.ensuretemp('%s_%s' % ( |         self.base = base = py.test.ensuretemp('%s_%s' % ( | ||||||
|                             self.__class__.__name__, meth.im_func.func_name)) |                             self.__class__.__name__, meth.im_func.func_name)) | ||||||
|         self.linker = linker = LinkerForTests() |         self.linker = linker = LinkerForTests() | ||||||
|         self.apb = ApiPageBuilder(base, linker, self.dsa, self.fs_root) |         namespace_tree = create_namespace_tree(['main.sub', | ||||||
|         self.spb = SourcePageBuilder(base, linker, self.fs_root) |                                                 'main.sub.func', | ||||||
|         self.namespace_tree = create_namespace_tree(['main.sub', |                                                 'main.SomeClass', | ||||||
|                                                      'main.sub.func', |                                                 'main.SomeSubClass', | ||||||
|                                                      'main.SomeClass', |                                                 'main.SomeInstance', | ||||||
|                                                      'main.SomeSubClass', |                                                 'other.foo', | ||||||
|                                                      'main.SomeInstance', |                                                 'other.bar']) | ||||||
|                                                      'other.foo', |         self.namespace_tree = namespace_tree | ||||||
|                                                      'other.bar']) |         self.apb = ApiPageBuilder(base, linker, self.dsa, | ||||||
|  |                                   self.fs_root.join(self.pkg_name), | ||||||
|  |                                   namespace_tree) | ||||||
|  |         self.spb = SourcePageBuilder(base, linker, | ||||||
|  |                                      self.fs_root.join(self.pkg_name)) | ||||||
| 
 | 
 | ||||||
| class TestApiPageBuilder(AbstractBuilderTest): | class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|     def test_build_callable_view(self): |     def test_build_callable_view(self): | ||||||
|  | @ -123,7 +127,8 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         pkg.main.sub.func(10) |         pkg.main.sub.func(10) | ||||||
|         pkg.main.sub.func(pkg.main.SomeClass(10)) |         pkg.main.sub.func(pkg.main.SomeClass(10)) | ||||||
|         t.end_tracing() |         t.end_tracing() | ||||||
|         apb = ApiPageBuilder(self.base, self.linker, dsa, self.fs_root) |         apb = ApiPageBuilder(self.base, self.linker, dsa, self.fs_root, | ||||||
|  |                              self.namespace_tree) | ||||||
|         snippet = apb.build_callable_view('main.sub.func') |         snippet = apb.build_callable_view('main.sub.func') | ||||||
|         html = snippet.unicode() |         html = snippet.unicode() | ||||||
|         print html |         print html | ||||||
|  | @ -149,8 +154,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtmlsnippet(html) |         _checkhtmlsnippet(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_function_pages(self): |     def test_build_function_pages(self): | ||||||
|         data = self.apb.prepare_function_pages(self.namespace_tree, |         data = self.apb.prepare_function_pages(['main.sub.func']) | ||||||
|                                                ['main.sub.func']) |  | ||||||
|         self.apb.build_function_pages(data, self.project) |         self.apb.build_function_pages(data, self.project) | ||||||
|         funcfile = self.base.join('api/main.sub.func.html') |         funcfile = self.base.join('api/main.sub.func.html') | ||||||
|         assert funcfile.check() |         assert funcfile.check() | ||||||
|  | @ -163,8 +167,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtmlsnippet(html) |         _checkhtmlsnippet(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_class_pages(self): |     def test_build_class_pages(self): | ||||||
|         data = self.apb.prepare_class_pages(self.namespace_tree, |         data = self.apb.prepare_class_pages(['main.SomeClass', | ||||||
|                                             ['main.SomeClass', |  | ||||||
|                                              'main.SomeSubClass']) |                                              'main.SomeSubClass']) | ||||||
|         self.apb.build_class_pages(data, self.project) |         self.apb.build_class_pages(data, self.project) | ||||||
|         clsfile = self.base.join('api/main.SomeClass.html') |         clsfile = self.base.join('api/main.SomeClass.html') | ||||||
|  | @ -173,8 +176,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(html) |         _checkhtml(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_class_pages_instance(self): |     def test_build_class_pages_instance(self): | ||||||
|         data = self.apb.prepare_class_pages(self.namespace_tree, |         data = self.apb.prepare_class_pages(['main.SomeClass', | ||||||
|                                             ['main.SomeClass', |  | ||||||
|                                              'main.SomeSubClass', |                                              'main.SomeSubClass', | ||||||
|                                              'main.SomeInstance']) |                                              'main.SomeInstance']) | ||||||
|         self.apb.build_class_pages(data, self.project) |         self.apb.build_class_pages(data, self.project) | ||||||
|  | @ -187,8 +189,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         ]) |         ]) | ||||||
| 
 | 
 | ||||||
|     def test_build_class_pages_nav_links(self): |     def test_build_class_pages_nav_links(self): | ||||||
|         data = self.apb.prepare_class_pages(self.namespace_tree, |         data = self.apb.prepare_class_pages(['main.SomeSubClass', | ||||||
|                                             ['main.SomeSubClass', |  | ||||||
|                                              'main.SomeClass']) |                                              'main.SomeClass']) | ||||||
|         # fake some stuff that would be built from other methods |         # fake some stuff that would be built from other methods | ||||||
|         self.linker.set_link('', 'api/index.html') |         self.linker.set_link('', 'api/index.html') | ||||||
|  | @ -212,8 +213,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(html) |         _checkhtml(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_class_pages_base_link(self): |     def test_build_class_pages_base_link(self): | ||||||
|         data = self.apb.prepare_class_pages(self.namespace_tree, |         data = self.apb.prepare_class_pages(['main.SomeSubClass', | ||||||
|                                             ['main.SomeSubClass', |  | ||||||
|                                              'main.SomeClass']) |                                              'main.SomeClass']) | ||||||
|         self.apb.build_class_pages(data, self.project) |         self.apb.build_class_pages(data, self.project) | ||||||
|         clsfile = self.base.join('api/main.SomeSubClass.html') |         clsfile = self.base.join('api/main.SomeSubClass.html') | ||||||
|  | @ -227,8 +227,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(html) |         _checkhtml(html) | ||||||
| 
 | 
 | ||||||
|     def test_source_links(self): |     def test_source_links(self): | ||||||
|         data = self.apb.prepare_class_pages(self.namespace_tree, |         data = self.apb.prepare_class_pages(['main.SomeSubClass', | ||||||
|                                             ['main.SomeSubClass', |  | ||||||
|                                              'main.SomeClass']) |                                              'main.SomeClass']) | ||||||
|         sourcedata = self.spb.prepare_pages(self.fs_root) |         sourcedata = self.spb.prepare_pages(self.fs_root) | ||||||
|         self.apb.build_class_pages(data, self.project) |         self.apb.build_class_pages(data, self.project) | ||||||
|  | @ -238,7 +237,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(funchtml) |         _checkhtml(funchtml) | ||||||
| 
 | 
 | ||||||
|     def test_build_namespace_pages(self): |     def test_build_namespace_pages(self): | ||||||
|         data = self.apb.prepare_namespace_pages(self.namespace_tree) |         data = self.apb.prepare_namespace_pages() | ||||||
|         self.apb.build_namespace_pages(data, self.project) |         self.apb.build_namespace_pages(data, self.project) | ||||||
|         mainfile = self.base.join('api/main.html') |         mainfile = self.base.join('api/main.html') | ||||||
|         assert mainfile.check() |         assert mainfile.check() | ||||||
|  | @ -258,7 +257,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(otherhtml) |         _checkhtml(otherhtml) | ||||||
| 
 | 
 | ||||||
|     def test_build_namespace_pages_index(self): |     def test_build_namespace_pages_index(self): | ||||||
|         data = self.apb.prepare_namespace_pages(self.namespace_tree) |         data = self.apb.prepare_namespace_pages() | ||||||
|         self.apb.build_namespace_pages(data, self.project) |         self.apb.build_namespace_pages(data, self.project) | ||||||
|         pkgfile = self.base.join('api/index.html') |         pkgfile = self.base.join('api/index.html') | ||||||
|         assert pkgfile.check() |         assert pkgfile.check() | ||||||
|  | @ -267,7 +266,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(html) |         _checkhtml(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_namespace_pages_subnamespace(self): |     def test_build_namespace_pages_subnamespace(self): | ||||||
|         data = self.apb.prepare_namespace_pages(self.namespace_tree) |         data = self.apb.prepare_namespace_pages() | ||||||
|         self.apb.build_namespace_pages(data, self.project) |         self.apb.build_namespace_pages(data, self.project) | ||||||
|         subfile = self.base.join('api/main.sub.html') |         subfile = self.base.join('api/main.sub.html') | ||||||
|         assert subfile.check() |         assert subfile.check() | ||||||
|  | @ -275,8 +274,7 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(html) |         _checkhtml(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_function_api_pages_nav(self): |     def test_build_function_api_pages_nav(self): | ||||||
|         data = self.apb.prepare_function_pages(self.namespace_tree, |         data = self.apb.prepare_function_pages(['main.sub.func']) | ||||||
|                                                    ['main.sub.func']) |  | ||||||
|         self.linker.set_link('', 'api/index.html') |         self.linker.set_link('', 'api/index.html') | ||||||
|         self.linker.set_link('main', 'api/main.html') |         self.linker.set_link('main', 'api/main.html') | ||||||
|         self.linker.set_link('main.sub', 'api/main.sub.html') |         self.linker.set_link('main.sub', 'api/main.sub.html') | ||||||
|  | @ -293,22 +291,30 @@ class TestApiPageBuilder(AbstractBuilderTest): | ||||||
|         _checkhtml(html) |         _checkhtml(html) | ||||||
| 
 | 
 | ||||||
|     def test_build_function_navigation(self): |     def test_build_function_navigation(self): | ||||||
|         self.apb.prepare_namespace_pages(self.namespace_tree) |         self.apb.prepare_namespace_pages() | ||||||
|         self.apb.prepare_function_pages(self.namespace_tree, ['main.sub.func']) |         self.apb.prepare_function_pages(['main.sub.func']) | ||||||
|         nav = self.apb.build_navigation('main.sub', ['main.sub.func'], |         self.apb.prepare_class_pages(['main.SomeClass', | ||||||
|                                         'main.sub.func') |                                              'main.SomeSubClass', | ||||||
|  |                                              'main.SomeInstance']) | ||||||
|  |         nav = self.apb.build_navigation('main.sub.func', False) | ||||||
|         html = nav.unicode(indent=0) |         html = nav.unicode(indent=0) | ||||||
|         print html.encode('UTF-8') |         print html.encode('UTF-8') | ||||||
|         assert (u'<div><a href="api/index.html">pkg</a></div>' |         assert (u'<div class="selected"><a href="api/index.html">pkg</a></div>' | ||||||
|                 u'<div>\xa0\xa0<a href="api/main.html">main</a></div>' |                 u'<div class="selected">\xa0\xa0<a href="api/main.html">main</a></div>' | ||||||
|                 u'<div>\xa0\xa0\xa0\xa0' |                 u'<div>\xa0\xa0\xa0\xa0<a href="api/main.SomeClass.html">' | ||||||
|  |                     u'SomeClass</a></div>' | ||||||
|  |                 u'<div>\xa0\xa0\xa0\xa0<a href="api/main.SomeInstance.html">' | ||||||
|  |                     u'SomeInstance</a></div>' | ||||||
|  |                 u'<div>\xa0\xa0\xa0\xa0<a href="api/main.SomeSubClass.html">' | ||||||
|  |                     u'SomeSubClass</a></div>' | ||||||
|  |                 u'<div class="selected">\xa0\xa0\xa0\xa0' | ||||||
|                     u'<a href="api/main.sub.html">sub</a></div>' |                     u'<a href="api/main.sub.html">sub</a></div>' | ||||||
|                 u'<div class="selected">\xa0\xa0\xa0\xa0\xa0\xa0' |                 u'<div class="selected">\xa0\xa0\xa0\xa0\xa0\xa0' | ||||||
|                     u'<a href="api/main.sub.func.html">func</a></div>' |                     u'<a href="api/main.sub.func.html">func</a></div>' | ||||||
|         ) in html |         ) in html | ||||||
| 
 | 
 | ||||||
|     def test_build_root_namespace_view(self): |     def test_build_root_namespace_view(self): | ||||||
|         data = self.apb.prepare_namespace_pages(self.namespace_tree) |         data = self.apb.prepare_namespace_pages() | ||||||
|         self.apb.build_namespace_pages(data, self.project) |         self.apb.build_namespace_pages(data, self.project) | ||||||
|         rootfile = self.base.join('api/index.html') |         rootfile = self.base.join('api/index.html') | ||||||
|         assert rootfile.check() |         assert rootfile.check() | ||||||
|  | @ -332,7 +338,6 @@ class TestSourcePageBuilder(AbstractBuilderTest): | ||||||
|         print html |         print html | ||||||
|         run_string_sequence_test(html, [ |         run_string_sequence_test(html, [ | ||||||
|             'href="../../style.css"', |             'href="../../style.css"', | ||||||
|             '<a href="../index.html">root</a>', |  | ||||||
|             '<a href="index.html">pkg</a>', |             '<a href="index.html">pkg</a>', | ||||||
|             '<a href="someclass.py.html">someclass.py</a>', |             '<a href="someclass.py.html">someclass.py</a>', | ||||||
|             '<a href="somesubclass.py.html">somesubclass.py</a>', |             '<a href="somesubclass.py.html">somesubclass.py</a>', | ||||||
|  | @ -347,7 +352,6 @@ class TestSourcePageBuilder(AbstractBuilderTest): | ||||||
|         print html |         print html | ||||||
|         run_string_sequence_test(html, [ |         run_string_sequence_test(html, [ | ||||||
|             'href="../../style.css"', |             'href="../../style.css"', | ||||||
|             '<a href="../index.html">root</a>', |  | ||||||
|             '<a href="index.html">pkg</a>', |             '<a href="index.html">pkg</a>', | ||||||
|             '<a href="func.py.html">func.py</a>', |             '<a href="func.py.html">func.py</a>', | ||||||
|             '<a href="someclass.py.html">someclass.py</a>', |             '<a href="someclass.py.html">someclass.py</a>', | ||||||
|  | @ -362,7 +366,6 @@ class TestSourcePageBuilder(AbstractBuilderTest): | ||||||
|         html = nav.unicode(indent=0) |         html = nav.unicode(indent=0) | ||||||
|         print html.encode('UTF-8') |         print html.encode('UTF-8') | ||||||
|         run_string_sequence_test(html, [ |         run_string_sequence_test(html, [ | ||||||
|             'href="source/index.html">root', |  | ||||||
|             'href="source/pkg/index.html">pkg', |             'href="source/pkg/index.html">pkg', | ||||||
|             'href="source/pkg/func.py.html">func.py', |             'href="source/pkg/func.py.html">func.py', | ||||||
|             'href="source/pkg/someclass.py.html">someclass.py', |             'href="source/pkg/someclass.py.html">someclass.py', | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| import py | import py | ||||||
|  | from py.__.apigen import apigen | ||||||
| 
 | 
 | ||||||
| def setup_fs_project(): | def setup_fs_project(): | ||||||
|     temp = py.test.ensuretemp('apigen_functional') |     temp = py.test.ensuretemp('apigen_functional') | ||||||
|  | @ -70,6 +71,13 @@ def setup_fs_project(): | ||||||
|     """)) |     """)) | ||||||
|     return temp, 'pkg' |     return temp, 'pkg' | ||||||
| 
 | 
 | ||||||
|  | def test_get_documentable_items(): | ||||||
|  |     fs_root, package_name = setup_fs_project() | ||||||
|  |     documentable = apigen.get_documentable_items(fs_root.join(package_name)) | ||||||
|  |     assert documentable.__package__.exportdefs.keys() == [ | ||||||
|  |         'main.sub.func', 'main.func', 'main.SomeTestSubClass', | ||||||
|  |         'main.SomeTestClass'] | ||||||
|  | 
 | ||||||
| def test_apigen_functional(): | def test_apigen_functional(): | ||||||
|     fs_root, package_name = setup_fs_project() |     fs_root, package_name = setup_fs_project() | ||||||
|     tempdir = py.test.ensuretemp('test_apigen_functional_results') |     tempdir = py.test.ensuretemp('test_apigen_functional_results') | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue