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'
' '' '' '' '' '' '
1
2
' '' '' '' '' '' '
' 'def foo():' '
' ' print' ' "bar"' '
' '
') 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'
' '' '' '' '' '' '' '
1
2
3
' '' '' '' '' '' '' '
' 'code = """\\' '
' 'foo bar' '
' '"""' '
' '
') 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('')) is None)