168 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| import py
 | |
| from py.__.apigen import htmlgen
 | |
| from py.__.apigen.linker import Linker
 | |
| 
 | |
| def assert_eq_string(string1, string2):
 | |
|     if string1 == string2:
 | |
|         return
 | |
|     __tracebackhide__ = True
 | |
|     for i, (c1, c2) in py.builtin.enumerate(zip(string1, string2)):
 | |
|         if c1 != c2:
 | |
|             start = max(0, i-20)
 | |
|             end = i + 20
 | |
|             py.test.fail("strings not equal in position i=%d\n"
 | |
|                          "string1[%d:%d] = %r\n"
 | |
|                          "string2[%d:%d] = %r\n"
 | |
|                          "string1 = %r\n"
 | |
|                          "string2 = %r\n" 
 | |
|                          % (i, 
 | |
|                             start, end, string1[start:end], 
 | |
|                             start, end, string2[start:end], 
 | |
|                             string1, string2
 | |
|                         ))
 | |
| 
 | |
| def test_create_namespace_tree():
 | |
|     tree = htmlgen.create_namespace_tree(['foo.bar.baz'])
 | |
|     assert tree == {'': ['foo'],
 | |
|                     'foo': ['foo.bar'],
 | |
|                     'foo.bar': ['foo.bar.baz']}
 | |
|     tree = htmlgen.create_namespace_tree(['foo.bar.baz', 'foo.bar.qux'])
 | |
|     assert tree == {'': ['foo'],
 | |
|                     'foo': ['foo.bar'],
 | |
|                     'foo.bar': ['foo.bar.baz', 'foo.bar.qux']}
 | |
|     tree = htmlgen.create_namespace_tree(['pkg.sub.func',
 | |
|                                           'pkg.SomeClass',
 | |
|                                           'pkg.SomeSubClass'])
 | |
|     assert tree == {'': ['pkg'],
 | |
|                     'pkg.sub': ['pkg.sub.func'],
 | |
|                     'pkg': ['pkg.sub', 'pkg.SomeClass',
 | |
|                             'pkg.SomeSubClass']}
 | |
| 
 | |
| def test_source_dirs_files():
 | |
|     temp = py.test.ensuretemp('test_source_dirs_files')
 | |
|     temp.join('dir').ensure(dir=True)
 | |
|     temp.join('dir/file1.py').ensure(file=True)
 | |
|     temp.join('dir/file2.pyc').ensure(file=True)
 | |
|     temp.join('dir/file3.c').ensure(file=True)
 | |
|     temp.join('dir/.hidden_file').ensure(file=True)
 | |
|     temp.join('dir/sub').ensure(dir=True)
 | |
|     temp.join('dir/.hidden_dir').ensure(dir=True)
 | |
|     dirs, files = htmlgen.source_dirs_files(temp.join('dir'))
 | |
|     dirnames = py.builtin.sorted([d.basename for d in dirs])
 | |
|     filenames = py.builtin.sorted([f.basename for f in files])
 | |
|     assert dirnames == ['sub']
 | |
|     assert filenames == ['file1.py', 'file3.c']
 | |
| 
 | |
| def test_deindent():
 | |
|     assert htmlgen.deindent('foo\n\n    bar\n    ') == 'foo\n\nbar\n'
 | |
|     assert htmlgen.deindent(' foo\n\n    bar\n    ') == 'foo\n\nbar\n'
 | |
|     assert htmlgen.deindent('foo\n\n    bar\n    baz') == 'foo\n\nbar\nbaz\n'
 | |
|     assert htmlgen.deindent(' foo\n\n    bar\n      baz\n') == (
 | |
|         'foo\n\nbar\n  baz\n')
 | |
|     assert htmlgen.deindent('foo\n\n      bar\n    baz\n') == (
 | |
|         'foo\n\n  bar\nbaz\n')
 | |
| 
 | |
| def test_enumerate_and_color():
 | |
|     colored = htmlgen.enumerate_and_color(['def foo():', '  print "bar"'], 0,
 | |
|                                           'ascii')
 | |
|     div = py.xml.html.div(colored).unicode(indent=0)
 | |
|     print repr(div)
 | |
|     assert_eq_string(div,
 | |
|                     u'<div>'
 | |
|                     '<table class="codeblock">'
 | |
|                     '<tbody>'
 | |
|                     '<tr>'
 | |
|                     '<td style="width: 1%">'
 | |
|                     '<table>'
 | |
|                     '<tbody>'
 | |
|                     '<tr><td class="lineno">1</td></tr>'
 | |
|                     '<tr><td class="lineno">2</td></tr>'
 | |
|                     '</tbody>'
 | |
|                     '</table>'
 | |
|                     '</td>'
 | |
|                     '<td>'
 | |
|                     '<table>'
 | |
|                     '<tbody>'
 | |
|                     '<tr><td class="codecell">'
 | |
|                     '<pre class="code">'
 | |
|                     '<span class="alt_keyword">def</span> foo():'
 | |
|                     '</pre>'
 | |
|                     '</td></tr>'
 | |
|                     '<tr><td class="codecell">'
 | |
|                     '<pre class="code">'
 | |
|                     '  <span class="alt_keyword">print</span>'
 | |
|                     ' <span class="string">"bar"</span>'
 | |
|                     '</pre>'
 | |
|                     '</td></tr>'
 | |
|                     '</tbody>'
 | |
|                     '</table>'
 | |
|                     '</td>'
 | |
|                     '</tr>'
 | |
|                     '</tbody>'
 | |
|                     '</table>'
 | |
|                     '</div>')
 | |
| 
 | |
| def test_enumerate_and_color_multiline():
 | |
|     colored = htmlgen.enumerate_and_color(['code = """\\', 'foo bar', '"""'],
 | |
|                                           0, 'ascii')
 | |
|     div = py.xml.html.div(colored).unicode(indent=0)
 | |
|     print repr(div)
 | |
|     assert_eq_string (div,
 | |
|                     u'<div>'
 | |
|                     '<table class="codeblock">'
 | |
|                     '<tbody>'
 | |
|                     '<tr>'
 | |
|                     '<td style="width: 1%">'
 | |
|                     '<table>'
 | |
|                     '<tbody>'
 | |
|                     '<tr><td class="lineno">1</td></tr>'
 | |
|                     '<tr><td class="lineno">2</td></tr>'
 | |
|                     '<tr><td class="lineno">3</td></tr>'
 | |
|                     '</tbody>'
 | |
|                     '</table>'
 | |
|                     '</td>'
 | |
|                     '<td>'
 | |
|                     '<table>'
 | |
|                     '<tbody>'
 | |
|                     '<tr><td class="codecell">'
 | |
|                     '<pre class="code">'
 | |
|                     'code = <span class="string">"""\\</span>'
 | |
|                     '</pre>'
 | |
|                     '</td></tr>'
 | |
|                     '<tr><td class="codecell">'
 | |
|                     '<pre class="code">'
 | |
|                     '<span class="string">foo bar</span>'
 | |
|                     '</pre>'
 | |
|                     '</td></tr>'
 | |
|                     '<tr><td class="codecell">'
 | |
|                     '<pre class="code">'
 | |
|                     '<span class="string">"""</span>'
 | |
|                     '</pre>'
 | |
|                     '</td></tr>'
 | |
|                     '</tbody>'
 | |
|                     '</table>'
 | |
|                     '</td>'
 | |
|                     '</tr>'
 | |
|                     '</tbody>'
 | |
|                     '</table>'
 | |
|                     '</div>')
 | |
| 
 | |
| def test_show_property():
 | |
|     assert htmlgen.show_property('foo')
 | |
|     assert not htmlgen.show_property('_foo')
 | |
|     assert htmlgen.show_property('__foo__')
 | |
|     assert not htmlgen.show_property('__doc__')
 | |
|     assert not htmlgen.show_property('__dict__')
 | |
|     assert not htmlgen.show_property('__name__')
 | |
|     assert not htmlgen.show_property('__class__')
 | |
| 
 | |
| def test_get_rel_sourcepath():
 | |
|     projpath = py.path.local('/proj')
 | |
|     assert (htmlgen.get_rel_sourcepath(projpath, py.path.local('/proj/foo')) ==
 | |
|             'foo')
 | |
|     assert (htmlgen.get_rel_sourcepath(projpath, py.path.local('/foo')) is
 | |
|             None)
 | |
|     assert (htmlgen.get_rel_sourcepath(projpath, py.path.local('<string>')) is
 | |
|             None)
 | |
| 
 |