bee_python 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +202 -0
- data/build/README +23 -0
- data/egg/egg/build.yml +70 -0
- data/egg/egg/ez_setup.py +280 -0
- data/egg/egg/script.py +12 -0
- data/egg/egg/setup.erb +11 -0
- data/egg/egg/suite.py +37 -0
- data/egg/egg/test.py +31 -0
- data/egg/egg.yml +69 -0
- data/egg/http/build.erb +53 -0
- data/egg/http/server.py +34 -0
- data/egg/http.yml +50 -0
- data/egg/mysql/mysql.py +43 -0
- data/egg/mysql.yml +44 -0
- data/egg/project/build.erb +77 -0
- data/egg/project/script.py +42 -0
- data/egg/project/test.py +31 -0
- data/egg/project.yml +59 -0
- data/egg/script/build.erb +35 -0
- data/egg/script/script.py +42 -0
- data/egg/script.yml +50 -0
- data/egg/soap/build.erb +52 -0
- data/egg/soap/client.py +18 -0
- data/egg/soap/server.py +30 -0
- data/egg/soap.yml +58 -0
- data/egg/source/source.py +42 -0
- data/egg/source.yml +47 -0
- data/egg/test/test.py +28 -0
- data/egg/test.yml +44 -0
- data/egg/xmlrpc/build.erb +52 -0
- data/egg/xmlrpc/client.py +22 -0
- data/egg/xmlrpc/server.py +24 -0
- data/egg/xmlrpc.yml +51 -0
- data/lib/bee_task_python.rb +390 -0
- data/test/build.yml +16 -0
- data/test/tc_bee_task_python.rb +27 -0
- data/test/test_build.rb +26 -0
- data/test/test_build_listener.rb +62 -0
- data/test/ts_bee_python.rb +26 -0
- data/tools/common/__init__.py +5 -0
- data/tools/common/common/__init__.py +140 -0
- data/tools/common/common/__pkginfo__.py +43 -0
- data/tools/common/common/adbh.py +35 -0
- data/tools/common/common/cache.py +114 -0
- data/tools/common/common/changelog.py +234 -0
- data/tools/common/common/clcommands.py +181 -0
- data/tools/common/common/cli.py +212 -0
- data/tools/common/common/compat.py +328 -0
- data/tools/common/common/configuration.py +1087 -0
- data/tools/common/common/contexts.py +58 -0
- data/tools/common/common/corbautils.py +117 -0
- data/tools/common/common/daemon.py +171 -0
- data/tools/common/common/date.py +279 -0
- data/tools/common/common/db.py +49 -0
- data/tools/common/common/dbf.py +229 -0
- data/tools/common/common/debugger.py +208 -0
- data/tools/common/common/decorators.py +190 -0
- data/tools/common/common/deprecation.py +118 -0
- data/tools/common/common/fileutils.py +409 -0
- data/tools/common/common/graph.py +259 -0
- data/tools/common/common/html.py +142 -0
- data/tools/common/common/interface.py +76 -0
- data/tools/common/common/logging_ext.py +166 -0
- data/tools/common/common/modutils.py +670 -0
- data/tools/common/common/optik_ext.py +383 -0
- data/tools/common/common/optparser.py +92 -0
- data/tools/common/common/pdf_ext.py +111 -0
- data/tools/common/common/proc.py +276 -0
- data/tools/common/common/pyro_ext.py +146 -0
- data/tools/common/common/pytest.py +754 -0
- data/tools/common/common/shellutils.py +383 -0
- data/tools/common/common/sphinx_ext.py +87 -0
- data/tools/common/common/sphinxutils.py +122 -0
- data/tools/common/common/sqlgen.py +31 -0
- data/tools/common/common/table.py +930 -0
- data/tools/common/common/tasksqueue.py +97 -0
- data/tools/common/common/test/__init__.py +1 -0
- data/tools/common/common/test/data/ChangeLog +184 -0
- data/tools/common/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/common/common/test/data/__init__.py +1 -0
- data/tools/common/common/test/data/content_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/content_differ_dir/README +1 -0
- data/tools/common/common/test/data/content_differ_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/file_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/file_differ_dir/README +1 -0
- data/tools/common/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
- data/tools/common/common/test/data/find_test/__init__.py +0 -0
- data/tools/common/common/test/data/find_test/foo.txt +0 -0
- data/tools/common/common/test/data/find_test/module.py +0 -0
- data/tools/common/common/test/data/find_test/module2.py +0 -0
- data/tools/common/common/test/data/find_test/newlines.txt +0 -0
- data/tools/common/common/test/data/find_test/noendingnewline.py +0 -0
- data/tools/common/common/test/data/find_test/nonregr.py +0 -0
- data/tools/common/common/test/data/find_test/normal_file.txt +0 -0
- data/tools/common/common/test/data/find_test/spam.txt +0 -0
- data/tools/common/common/test/data/find_test/sub/doc.txt +0 -0
- data/tools/common/common/test/data/find_test/sub/momo.py +0 -0
- data/tools/common/common/test/data/find_test/test.ini +0 -0
- data/tools/common/common/test/data/find_test/test1.msg +0 -0
- data/tools/common/common/test/data/find_test/test2.msg +0 -0
- data/tools/common/common/test/data/find_test/write_protected_file.txt +0 -0
- data/tools/common/common/test/data/foo.txt +9 -0
- data/tools/common/common/test/data/module.py +88 -0
- data/tools/common/common/test/data/module2.py +77 -0
- data/tools/common/common/test/data/newlines.txt +3 -0
- data/tools/common/common/test/data/noendingnewline.py +36 -0
- data/tools/common/common/test/data/nonregr.py +14 -0
- data/tools/common/common/test/data/normal_file.txt +0 -0
- data/tools/common/common/test/data/reference_dir/NOTHING +0 -0
- data/tools/common/common/test/data/reference_dir/README +1 -0
- data/tools/common/common/test/data/reference_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/reference_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/same_dir/NOTHING +0 -0
- data/tools/common/common/test/data/same_dir/README +1 -0
- data/tools/common/common/test/data/same_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/same_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/spam.txt +9 -0
- data/tools/common/common/test/data/sub/doc.txt +1 -0
- data/tools/common/common/test/data/sub/momo.py +1 -0
- data/tools/common/common/test/data/subdir_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/subdir_differ_dir/README +1 -0
- data/tools/common/common/test/data/subdir_differ_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/test.ini +20 -0
- data/tools/common/common/test/data/test1.msg +30 -0
- data/tools/common/common/test/data/test2.msg +42 -0
- data/tools/common/common/test/data/write_protected_file.txt +0 -0
- data/tools/common/common/test/foomod.py +17 -0
- data/tools/common/common/test/unittest_cache.py +129 -0
- data/tools/common/common/test/unittest_changelog.py +37 -0
- data/tools/common/common/test/unittest_compat.py +239 -0
- data/tools/common/common/test/unittest_configuration.py +348 -0
- data/tools/common/common/test/unittest_date.py +154 -0
- data/tools/common/common/test/unittest_decorators.py +62 -0
- data/tools/common/common/test/unittest_deprecation.py +76 -0
- data/tools/common/common/test/unittest_fileutils.py +133 -0
- data/tools/common/common/test/unittest_graph.py +50 -0
- data/tools/common/common/test/unittest_html.py +76 -0
- data/tools/common/common/test/unittest_interface.py +87 -0
- data/tools/common/common/test/unittest_modutils.py +244 -0
- data/tools/common/common/test/unittest_pytest.py +50 -0
- data/tools/common/common/test/unittest_shellutils.py +248 -0
- data/tools/common/common/test/unittest_table.py +448 -0
- data/tools/common/common/test/unittest_taskqueue.py +71 -0
- data/tools/common/common/test/unittest_testlib.py +956 -0
- data/tools/common/common/test/unittest_textutils.py +247 -0
- data/tools/common/common/test/unittest_tree.py +248 -0
- data/tools/common/common/test/unittest_umessage.py +55 -0
- data/tools/common/common/test/unittest_ureports_html.py +64 -0
- data/tools/common/common/test/unittest_ureports_text.py +105 -0
- data/tools/common/common/test/unittest_xmlutils.py +75 -0
- data/tools/common/common/test/utils.py +87 -0
- data/tools/common/common/testlib.py +1927 -0
- data/tools/common/common/textutils.py +476 -0
- data/tools/common/common/tree.py +372 -0
- data/tools/common/common/umessage.py +161 -0
- data/tools/common/common/ureports/__init__.py +174 -0
- data/tools/common/common/ureports/docbook_writer.py +139 -0
- data/tools/common/common/ureports/html_writer.py +131 -0
- data/tools/common/common/ureports/nodes.py +201 -0
- data/tools/common/common/ureports/text_writer.py +140 -0
- data/tools/common/common/vcgutils.py +216 -0
- data/tools/common/common/visitor.py +107 -0
- data/tools/common/common/xmlrpcutils.py +136 -0
- data/tools/common/common/xmlutils.py +61 -0
- data/tools/compile/compile.py +16 -0
- data/tools/coverage/coverage.py +602 -0
- data/tools/epydoc/__init__.py +227 -0
- data/tools/epydoc/__init__.pyc +0 -0
- data/tools/epydoc/apidoc.py +2203 -0
- data/tools/epydoc/apidoc.pyc +0 -0
- data/tools/epydoc/checker.py +349 -0
- data/tools/epydoc/checker.pyc +0 -0
- data/tools/epydoc/cli.py +1470 -0
- data/tools/epydoc/cli.pyc +0 -0
- data/tools/epydoc/compat.py +250 -0
- data/tools/epydoc/compat.pyc +0 -0
- data/tools/epydoc/docbuilder.py +1358 -0
- data/tools/epydoc/docbuilder.pyc +0 -0
- data/tools/epydoc/docintrospecter.py +1056 -0
- data/tools/epydoc/docintrospecter.pyc +0 -0
- data/tools/epydoc/docparser.py +2113 -0
- data/tools/epydoc/docparser.pyc +0 -0
- data/tools/epydoc/docstringparser.py +1111 -0
- data/tools/epydoc/docstringparser.pyc +0 -0
- data/tools/epydoc/docwriter/__init__.py +12 -0
- data/tools/epydoc/docwriter/__init__.pyc +0 -0
- data/tools/epydoc/docwriter/dotgraph.py +1351 -0
- data/tools/epydoc/docwriter/dotgraph.pyc +0 -0
- data/tools/epydoc/docwriter/html.py +3491 -0
- data/tools/epydoc/docwriter/html.pyc +0 -0
- data/tools/epydoc/docwriter/html_colorize.py +909 -0
- data/tools/epydoc/docwriter/html_colorize.pyc +0 -0
- data/tools/epydoc/docwriter/html_css.py +550 -0
- data/tools/epydoc/docwriter/html_css.pyc +0 -0
- data/tools/epydoc/docwriter/html_help.py +190 -0
- data/tools/epydoc/docwriter/html_help.pyc +0 -0
- data/tools/epydoc/docwriter/latex.py +1187 -0
- data/tools/epydoc/docwriter/latex.pyc +0 -0
- data/tools/epydoc/docwriter/plaintext.py +276 -0
- data/tools/epydoc/docwriter/plaintext.pyc +0 -0
- data/tools/epydoc/docwriter/xlink.py +505 -0
- data/tools/epydoc/docwriter/xlink.pyc +0 -0
- data/tools/epydoc/gui.py +1148 -0
- data/tools/epydoc/gui.pyc +0 -0
- data/tools/epydoc/log.py +204 -0
- data/tools/epydoc/log.pyc +0 -0
- data/tools/epydoc/markup/__init__.py +623 -0
- data/tools/epydoc/markup/__init__.pyc +0 -0
- data/tools/epydoc/markup/doctest.py +311 -0
- data/tools/epydoc/markup/doctest.pyc +0 -0
- data/tools/epydoc/markup/epytext.py +2116 -0
- data/tools/epydoc/markup/epytext.pyc +0 -0
- data/tools/epydoc/markup/javadoc.py +250 -0
- data/tools/epydoc/markup/javadoc.pyc +0 -0
- data/tools/epydoc/markup/plaintext.py +78 -0
- data/tools/epydoc/markup/plaintext.pyc +0 -0
- data/tools/epydoc/markup/pyval_repr.py +532 -0
- data/tools/epydoc/markup/pyval_repr.pyc +0 -0
- data/tools/epydoc/markup/restructuredtext.py +906 -0
- data/tools/epydoc/markup/restructuredtext.pyc +0 -0
- data/tools/epydoc/test/__init__.py +97 -0
- data/tools/epydoc/test/__init__.pyc +0 -0
- data/tools/epydoc/test/util.py +226 -0
- data/tools/epydoc/test/util.pyc +0 -0
- data/tools/epydoc/util.py +289 -0
- data/tools/epydoc/util.pyc +0 -0
- data/tools/logilab/logilab/__init__.py +5 -0
- data/tools/logilab/logilab/astng/__init__.py +82 -0
- data/tools/logilab/logilab/astng/__pkginfo__.py +76 -0
- data/tools/logilab/logilab/astng/_exceptions.py +64 -0
- data/tools/logilab/logilab/astng/_nodes_ast.py +667 -0
- data/tools/logilab/logilab/astng/_nodes_compiler.py +758 -0
- data/tools/logilab/logilab/astng/bases.py +608 -0
- data/tools/logilab/logilab/astng/builder.py +239 -0
- data/tools/logilab/logilab/astng/inference.py +426 -0
- data/tools/logilab/logilab/astng/inspector.py +289 -0
- data/tools/logilab/logilab/astng/manager.py +421 -0
- data/tools/logilab/logilab/astng/mixins.py +165 -0
- data/tools/logilab/logilab/astng/node_classes.py +848 -0
- data/tools/logilab/logilab/astng/nodes.py +85 -0
- data/tools/logilab/logilab/astng/nodes_as_string.py +389 -0
- data/tools/logilab/logilab/astng/patchcomptransformer.py +159 -0
- data/tools/logilab/logilab/astng/protocols.py +333 -0
- data/tools/logilab/logilab/astng/raw_building.py +212 -0
- data/tools/logilab/logilab/astng/rebuilder.py +307 -0
- data/tools/logilab/logilab/astng/scoped_nodes.py +951 -0
- data/tools/logilab/logilab/astng/test/__init__.py +19 -0
- data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.zip +0 -0
- data/tools/logilab/logilab/astng/test/data/SSL1/Connection1.py +33 -0
- data/tools/logilab/logilab/astng/test/data/SSL1/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/data/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/data/all.py +29 -0
- data/tools/logilab/logilab/astng/test/data/appl/__init__.py +23 -0
- data/tools/logilab/logilab/astng/test/data/appl/myConnection.py +30 -0
- data/tools/logilab/logilab/astng/test/data/format.py +34 -0
- data/tools/logilab/logilab/astng/test/data/module.py +90 -0
- data/tools/logilab/logilab/astng/test/data/module2.py +112 -0
- data/tools/logilab/logilab/astng/test/data/noendingnewline.py +57 -0
- data/tools/logilab/logilab/astng/test/data/nonregr.py +76 -0
- data/tools/logilab/logilab/astng/test/data/notall.py +28 -0
- data/tools/logilab/logilab/astng/test/data2/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/data2/clientmodule_test.py +51 -0
- data/tools/logilab/logilab/astng/test/data2/suppliermodule_test.py +32 -0
- data/tools/logilab/logilab/astng/test/regrtest.py +135 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/absimport.py +22 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/descriptor_crash.py +31 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/import_package_subpackage_module.py +68 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/package/__init__.py +24 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/module.py +20 -0
- data/tools/logilab/logilab/astng/test/unittest_builder.py +684 -0
- data/tools/logilab/logilab/astng/test/unittest_inference.py +1112 -0
- data/tools/logilab/logilab/astng/test/unittest_inspector.py +105 -0
- data/tools/logilab/logilab/astng/test/unittest_lookup.py +302 -0
- data/tools/logilab/logilab/astng/test/unittest_manager.py +98 -0
- data/tools/logilab/logilab/astng/test/unittest_nodes.py +302 -0
- data/tools/logilab/logilab/astng/test/unittest_scoped_nodes.py +501 -0
- data/tools/logilab/logilab/astng/test/unittest_utils.py +104 -0
- data/tools/logilab/logilab/astng/utils.py +342 -0
- data/tools/logilab/logilab/common/__init__.py +140 -0
- data/tools/logilab/logilab/common/__pkginfo__.py +43 -0
- data/tools/logilab/logilab/common/adbh.py +35 -0
- data/tools/logilab/logilab/common/cache.py +114 -0
- data/tools/logilab/logilab/common/changelog.py +234 -0
- data/tools/logilab/logilab/common/clcommands.py +181 -0
- data/tools/logilab/logilab/common/cli.py +212 -0
- data/tools/logilab/logilab/common/compat.py +328 -0
- data/tools/logilab/logilab/common/configuration.py +1087 -0
- data/tools/logilab/logilab/common/contexts.py +58 -0
- data/tools/logilab/logilab/common/corbautils.py +117 -0
- data/tools/logilab/logilab/common/daemon.py +171 -0
- data/tools/logilab/logilab/common/date.py +279 -0
- data/tools/logilab/logilab/common/db.py +49 -0
- data/tools/logilab/logilab/common/dbf.py +229 -0
- data/tools/logilab/logilab/common/debugger.py +208 -0
- data/tools/logilab/logilab/common/decorators.py +190 -0
- data/tools/logilab/logilab/common/deprecation.py +118 -0
- data/tools/logilab/logilab/common/fileutils.py +409 -0
- data/tools/logilab/logilab/common/graph.py +259 -0
- data/tools/logilab/logilab/common/html.py +142 -0
- data/tools/logilab/logilab/common/interface.py +76 -0
- data/tools/logilab/logilab/common/logging_ext.py +166 -0
- data/tools/logilab/logilab/common/modutils.py +670 -0
- data/tools/logilab/logilab/common/optik_ext.py +383 -0
- data/tools/logilab/logilab/common/optparser.py +92 -0
- data/tools/logilab/logilab/common/pdf_ext.py +111 -0
- data/tools/logilab/logilab/common/proc.py +276 -0
- data/tools/logilab/logilab/common/pyro_ext.py +146 -0
- data/tools/logilab/logilab/common/pytest.py +754 -0
- data/tools/logilab/logilab/common/shellutils.py +383 -0
- data/tools/logilab/logilab/common/sphinx_ext.py +87 -0
- data/tools/logilab/logilab/common/sphinxutils.py +122 -0
- data/tools/logilab/logilab/common/sqlgen.py +31 -0
- data/tools/logilab/logilab/common/table.py +930 -0
- data/tools/logilab/logilab/common/tasksqueue.py +97 -0
- data/tools/logilab/logilab/common/test/__init__.py +1 -0
- data/tools/logilab/logilab/common/test/data/ChangeLog +184 -0
- data/tools/logilab/logilab/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/logilab/logilab/common/test/data/__init__.py +1 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/__init__.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/foo.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/module.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/module2.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/newlines.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/noendingnewline.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/nonregr.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/normal_file.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/spam.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/sub/doc.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/sub/momo.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/test.ini +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/test1.msg +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/test2.msg +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/write_protected_file.txt +0 -0
- data/tools/logilab/logilab/common/test/data/foo.txt +9 -0
- data/tools/logilab/logilab/common/test/data/module.py +88 -0
- data/tools/logilab/logilab/common/test/data/module2.py +77 -0
- data/tools/logilab/logilab/common/test/data/newlines.txt +3 -0
- data/tools/logilab/logilab/common/test/data/noendingnewline.py +36 -0
- data/tools/logilab/logilab/common/test/data/nonregr.py +14 -0
- data/tools/logilab/logilab/common/test/data/normal_file.txt +0 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/same_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/same_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/same_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/same_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/spam.txt +9 -0
- data/tools/logilab/logilab/common/test/data/sub/doc.txt +1 -0
- data/tools/logilab/logilab/common/test/data/sub/momo.py +1 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/test.ini +20 -0
- data/tools/logilab/logilab/common/test/data/test1.msg +30 -0
- data/tools/logilab/logilab/common/test/data/test2.msg +42 -0
- data/tools/logilab/logilab/common/test/data/write_protected_file.txt +0 -0
- data/tools/logilab/logilab/common/test/foomod.py +17 -0
- data/tools/logilab/logilab/common/test/unittest_cache.py +129 -0
- data/tools/logilab/logilab/common/test/unittest_changelog.py +37 -0
- data/tools/logilab/logilab/common/test/unittest_compat.py +239 -0
- data/tools/logilab/logilab/common/test/unittest_configuration.py +348 -0
- data/tools/logilab/logilab/common/test/unittest_date.py +154 -0
- data/tools/logilab/logilab/common/test/unittest_decorators.py +62 -0
- data/tools/logilab/logilab/common/test/unittest_deprecation.py +76 -0
- data/tools/logilab/logilab/common/test/unittest_fileutils.py +133 -0
- data/tools/logilab/logilab/common/test/unittest_graph.py +50 -0
- data/tools/logilab/logilab/common/test/unittest_html.py +76 -0
- data/tools/logilab/logilab/common/test/unittest_interface.py +87 -0
- data/tools/logilab/logilab/common/test/unittest_modutils.py +244 -0
- data/tools/logilab/logilab/common/test/unittest_pytest.py +50 -0
- data/tools/logilab/logilab/common/test/unittest_shellutils.py +248 -0
- data/tools/logilab/logilab/common/test/unittest_table.py +448 -0
- data/tools/logilab/logilab/common/test/unittest_taskqueue.py +71 -0
- data/tools/logilab/logilab/common/test/unittest_testlib.py +956 -0
- data/tools/logilab/logilab/common/test/unittest_textutils.py +247 -0
- data/tools/logilab/logilab/common/test/unittest_tree.py +248 -0
- data/tools/logilab/logilab/common/test/unittest_umessage.py +55 -0
- data/tools/logilab/logilab/common/test/unittest_ureports_html.py +64 -0
- data/tools/logilab/logilab/common/test/unittest_ureports_text.py +105 -0
- data/tools/logilab/logilab/common/test/unittest_xmlutils.py +75 -0
- data/tools/logilab/logilab/common/test/utils.py +87 -0
- data/tools/logilab/logilab/common/testlib.py +1927 -0
- data/tools/logilab/logilab/common/textutils.py +476 -0
- data/tools/logilab/logilab/common/tree.py +372 -0
- data/tools/logilab/logilab/common/umessage.py +161 -0
- data/tools/logilab/logilab/common/ureports/__init__.py +174 -0
- data/tools/logilab/logilab/common/ureports/docbook_writer.py +139 -0
- data/tools/logilab/logilab/common/ureports/html_writer.py +131 -0
- data/tools/logilab/logilab/common/ureports/nodes.py +201 -0
- data/tools/logilab/logilab/common/ureports/text_writer.py +140 -0
- data/tools/logilab/logilab/common/vcgutils.py +216 -0
- data/tools/logilab/logilab/common/visitor.py +107 -0
- data/tools/logilab/logilab/common/xmlrpcutils.py +136 -0
- data/tools/logilab/logilab/common/xmlutils.py +61 -0
- data/tools/pychecker/COPYRIGHT +31 -0
- data/tools/pychecker/ChangeLog +349 -0
- data/tools/pychecker/CodeChecks.py +1969 -0
- data/tools/pychecker/CodeChecks.pyc +0 -0
- data/tools/pychecker/CodeChecks.pyo +0 -0
- data/tools/pychecker/Config.py +475 -0
- data/tools/pychecker/Config.pyc +0 -0
- data/tools/pychecker/Config.pyo +0 -0
- data/tools/pychecker/KNOWN_BUGS +100 -0
- data/tools/pychecker/MAINTAINERS +81 -0
- data/tools/pychecker/NEWS +406 -0
- data/tools/pychecker/OP.py +131 -0
- data/tools/pychecker/OP.pyc +0 -0
- data/tools/pychecker/OP.pyo +0 -0
- data/tools/pychecker/OptionTypes.py +117 -0
- data/tools/pychecker/OptionTypes.pyc +0 -0
- data/tools/pychecker/OptionTypes.pyo +0 -0
- data/tools/pychecker/README +152 -0
- data/tools/pychecker/Stack.py +115 -0
- data/tools/pychecker/Stack.pyc +0 -0
- data/tools/pychecker/Stack.pyo +0 -0
- data/tools/pychecker/TODO +101 -0
- data/tools/pychecker/VERSION +1 -0
- data/tools/pychecker/Warning.py +50 -0
- data/tools/pychecker/Warning.pyc +0 -0
- data/tools/pychecker/Warning.pyo +0 -0
- data/tools/pychecker/__init__.py +17 -0
- data/tools/pychecker/__init__.pyc +0 -0
- data/tools/pychecker/__init__.pyo +0 -0
- data/tools/pychecker/checker.py +961 -0
- data/tools/pychecker/checker.pyc +0 -0
- data/tools/pychecker/checker.pyo +0 -0
- data/tools/pychecker/function.py +159 -0
- data/tools/pychecker/function.pyc +0 -0
- data/tools/pychecker/function.pyo +0 -0
- data/tools/pychecker/msgs.py +175 -0
- data/tools/pychecker/msgs.pyc +0 -0
- data/tools/pychecker/msgs.pyo +0 -0
- data/tools/pychecker/options.py +275 -0
- data/tools/pychecker/options.pyc +0 -0
- data/tools/pychecker/options.pyo +0 -0
- data/tools/pychecker/pcmodules.py +19 -0
- data/tools/pychecker/pcmodules.pyc +0 -0
- data/tools/pychecker/pcmodules.pyo +0 -0
- data/tools/pychecker/printer.py +47 -0
- data/tools/pychecker/printer.pyc +0 -0
- data/tools/pychecker/printer.pyo +0 -0
- data/tools/pychecker/python.py +427 -0
- data/tools/pychecker/python.pyc +0 -0
- data/tools/pychecker/python.pyo +0 -0
- data/tools/pychecker/utils.py +102 -0
- data/tools/pychecker/utils.pyc +0 -0
- data/tools/pychecker/utils.pyo +0 -0
- data/tools/pychecker/warn.py +778 -0
- data/tools/pychecker/warn.pyc +0 -0
- data/tools/pychecker/warn.pyo +0 -0
- data/tools/pylint2/pylint/__init__.py +16 -0
- data/tools/pylint2/pylint/__pkginfo__.py +67 -0
- data/tools/pylint2/pylint/checkers/__init__.py +155 -0
- data/tools/pylint2/pylint/checkers/base.py +749 -0
- data/tools/pylint2/pylint/checkers/classes.py +527 -0
- data/tools/pylint2/pylint/checkers/design_analysis.py +344 -0
- data/tools/pylint2/pylint/checkers/exceptions.py +183 -0
- data/tools/pylint2/pylint/checkers/format.py +367 -0
- data/tools/pylint2/pylint/checkers/imports.py +379 -0
- data/tools/pylint2/pylint/checkers/logging.py +98 -0
- data/tools/pylint2/pylint/checkers/misc.py +128 -0
- data/tools/pylint2/pylint/checkers/newstyle.py +107 -0
- data/tools/pylint2/pylint/checkers/raw_metrics.py +125 -0
- data/tools/pylint2/pylint/checkers/similar.py +333 -0
- data/tools/pylint2/pylint/checkers/string_format.py +239 -0
- data/tools/pylint2/pylint/checkers/typecheck.py +364 -0
- data/tools/pylint2/pylint/checkers/utils.py +208 -0
- data/tools/pylint2/pylint/checkers/variables.py +498 -0
- data/tools/pylint2/pylint/config.py +149 -0
- data/tools/pylint2/pylint/epylint.py +149 -0
- data/tools/pylint2/pylint/gui.py +433 -0
- data/tools/pylint2/pylint/interfaces.py +98 -0
- data/tools/pylint2/pylint/lint.py +914 -0
- data/tools/pylint2/pylint/pyreverse/__init__.py +5 -0
- data/tools/pylint2/pylint/pyreverse/diadefslib.py +229 -0
- data/tools/pylint2/pylint/pyreverse/diagrams.py +247 -0
- data/tools/pylint2/pylint/pyreverse/main.py +123 -0
- data/tools/pylint2/pylint/pyreverse/utils.py +131 -0
- data/tools/pylint2/pylint/pyreverse/writer.py +196 -0
- data/tools/pylint2/pylint/reporters/__init__.py +67 -0
- data/tools/pylint2/pylint/reporters/guireporter.py +36 -0
- data/tools/pylint2/pylint/reporters/html.py +69 -0
- data/tools/pylint2/pylint/reporters/text.py +156 -0
- data/tools/pylint2/pylint/utils.py +518 -0
- data/tools/pylint2/pylint.py +16 -0
- data/tools/test/suite.py +35 -0
- metadata +566 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
# Copyright (c) 2003-2006 LOGILAB S.A. (Paris, FRANCE).
|
2
|
+
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify it under
|
5
|
+
# the terms of the GNU Lesser General Public License as published by the Free Software
|
6
|
+
# Foundation; either version 2 of the License, or (at your option) any later
|
7
|
+
# version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
10
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
11
|
+
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public License along with
|
14
|
+
# this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
16
|
+
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
17
|
+
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
18
|
+
# copyright 2003-2010 Sylvain Thenault, all rights reserved.
|
19
|
+
# contact mailto:thenault@gmail.com
|
20
|
+
#
|
21
|
+
# This file is part of logilab-astng.
|
22
|
+
#
|
23
|
+
# logilab-astng is free software: you can redistribute it and/or modify it
|
24
|
+
# under the terms of the GNU Lesser General Public License as published by the
|
25
|
+
# Free Software Foundation, either version 2.1 of the License, or (at your
|
26
|
+
# option) any later version.
|
27
|
+
#
|
28
|
+
# logilab-astng is distributed in the hope that it will be useful, but
|
29
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
30
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
31
|
+
# for more details.
|
32
|
+
#
|
33
|
+
# You should have received a copy of the GNU Lesser General Public License along
|
34
|
+
# with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
|
35
|
+
"""
|
36
|
+
unittest for the visitors.diadefs module
|
37
|
+
"""
|
38
|
+
|
39
|
+
import unittest
|
40
|
+
import sys
|
41
|
+
|
42
|
+
from logilab.astng import MANAGER, nodes, inspector
|
43
|
+
from logilab.astng.bases import Instance, YES
|
44
|
+
|
45
|
+
def astng_wrapper(func, modname):
|
46
|
+
return func(modname)
|
47
|
+
|
48
|
+
|
49
|
+
class LinkerTC(unittest.TestCase):
|
50
|
+
|
51
|
+
def setUp(self):
|
52
|
+
self.project = MANAGER.project_from_files(['data2'], astng_wrapper)
|
53
|
+
self.linker = inspector.Linker(self.project)
|
54
|
+
self.linker.visit(self.project)
|
55
|
+
|
56
|
+
def test_class_implements(self):
|
57
|
+
klass = self.project.get_module('data2.clientmodule_test')['Ancestor']
|
58
|
+
self.assert_(hasattr(klass, 'implements'))
|
59
|
+
self.assertEqual(len(klass.implements), 1)
|
60
|
+
self.assert_(isinstance(klass.implements[0], nodes.Class))
|
61
|
+
self.assertEqual(klass.implements[0].name, "Interface")
|
62
|
+
klass = self.project.get_module('data2.clientmodule_test')['Specialization']
|
63
|
+
self.assert_(hasattr(klass, 'implements'))
|
64
|
+
self.assertEqual(len(klass.implements), 0)
|
65
|
+
|
66
|
+
def test_locals_assignment_resolution(self):
|
67
|
+
klass = self.project.get_module('data2.clientmodule_test')['Specialization']
|
68
|
+
self.assert_(hasattr(klass, 'locals_type'))
|
69
|
+
type_dict = klass.locals_type
|
70
|
+
self.assertEqual(len(type_dict), 2)
|
71
|
+
keys = type_dict.keys()
|
72
|
+
keys.sort()
|
73
|
+
self.assertEqual(keys, ['TYPE', 'top'])
|
74
|
+
self.assertEqual(len(type_dict['TYPE']), 1)
|
75
|
+
self.assertEqual(type_dict['TYPE'][0].value, 'final class')
|
76
|
+
self.assertEqual(len(type_dict['top']), 1)
|
77
|
+
self.assertEqual(type_dict['top'][0].value, 'class')
|
78
|
+
|
79
|
+
def test_instance_attrs_resolution(self):
|
80
|
+
klass = self.project.get_module('data2.clientmodule_test')['Specialization']
|
81
|
+
self.assert_(hasattr(klass, 'instance_attrs_type'))
|
82
|
+
type_dict = klass.instance_attrs_type
|
83
|
+
self.assertEqual(len(type_dict), 3)
|
84
|
+
keys = type_dict.keys()
|
85
|
+
keys.sort()
|
86
|
+
self.assertEqual(keys, ['_id', 'relation', 'toto'])
|
87
|
+
self.assert_(isinstance(type_dict['relation'][0], Instance), type_dict['relation'])
|
88
|
+
self.assertEqual(type_dict['relation'][0].name, 'DoNothing')
|
89
|
+
self.assert_(isinstance(type_dict['toto'][0], Instance), type_dict['toto'])
|
90
|
+
self.assertEqual(type_dict['toto'][0].name, 'Toto')
|
91
|
+
self.assert_(type_dict['_id'][0] is YES, type_dict['_id'])
|
92
|
+
|
93
|
+
|
94
|
+
class LinkerTC2(LinkerTC):
|
95
|
+
|
96
|
+
def setUp(self):
|
97
|
+
self.project = MANAGER.from_directory('data2')
|
98
|
+
self.linker = inspector.Linker(self.project)
|
99
|
+
self.linker.visit(self.project)
|
100
|
+
|
101
|
+
__all__ = ('LinkerTC', 'LinkerTC2')
|
102
|
+
|
103
|
+
|
104
|
+
if __name__ == '__main__':
|
105
|
+
unittest.main()
|
@@ -0,0 +1,302 @@
|
|
1
|
+
# This program is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the GNU Lesser General Public License as published by the Free Software
|
3
|
+
# Foundation; either version 2 of the License, or (at your option) any later
|
4
|
+
# version.
|
5
|
+
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
6
|
+
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
7
|
+
# copyright 2003-2010 Sylvain Thenault, all rights reserved.
|
8
|
+
# contact mailto:thenault@gmail.com
|
9
|
+
#
|
10
|
+
# This file is part of logilab-astng.
|
11
|
+
#
|
12
|
+
# logilab-astng is free software: you can redistribute it and/or modify it
|
13
|
+
# under the terms of the GNU Lesser General Public License as published by the
|
14
|
+
# Free Software Foundation, either version 2.1 of the License, or (at your
|
15
|
+
# option) any later version.
|
16
|
+
#
|
17
|
+
# logilab-astng is distributed in the hope that it will be useful, but
|
18
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
20
|
+
# for more details.
|
21
|
+
#
|
22
|
+
# You should have received a copy of the GNU Lesser General Public License along
|
23
|
+
# with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
|
24
|
+
|
25
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
26
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
27
|
+
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
28
|
+
|
29
|
+
# You should have received a copy of the GNU Lesser General Public License along with
|
30
|
+
# this program; if not, write to the Free Software Foundation, Inc.,
|
31
|
+
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
32
|
+
"""tests for the astng variable lookup capabilities
|
33
|
+
"""
|
34
|
+
import sys
|
35
|
+
from os.path import join, abspath
|
36
|
+
from logilab.common.testlib import TestCase, unittest_main
|
37
|
+
|
38
|
+
from logilab.astng import builder, nodes, scoped_nodes, \
|
39
|
+
InferenceError, NotFoundError
|
40
|
+
from logilab.astng.scoped_nodes import builtin_lookup
|
41
|
+
from unittest_inference import get_name_node
|
42
|
+
|
43
|
+
builder = builder.ASTNGBuilder()
|
44
|
+
MODULE = builder.file_build('data/module.py', 'data.module')
|
45
|
+
MODULE2 = builder.file_build('data/module2.py', 'data.module2')
|
46
|
+
NONREGR = builder.file_build('data/nonregr.py', 'data.nonregr')
|
47
|
+
|
48
|
+
class LookupTC(TestCase):
|
49
|
+
|
50
|
+
def test_limit(self):
|
51
|
+
code = '''
|
52
|
+
l = [a
|
53
|
+
for a,b in list]
|
54
|
+
|
55
|
+
a = 1
|
56
|
+
b = a
|
57
|
+
a = None
|
58
|
+
|
59
|
+
def func():
|
60
|
+
c = 1
|
61
|
+
'''
|
62
|
+
astng = builder.string_build(code, __name__, __file__)
|
63
|
+
names = astng.nodes_of_class(nodes.Name)
|
64
|
+
a = names.next()
|
65
|
+
stmts = a.lookup('a')[1]
|
66
|
+
self.failUnlessEqual(len(stmts), 1)
|
67
|
+
b = astng.locals['b'][1]
|
68
|
+
#self.failUnlessEqual(len(b.lookup('b')[1]), 1)
|
69
|
+
self.failUnlessEqual(len(astng.lookup('b')[1]), 2)
|
70
|
+
b_infer = b.infer()
|
71
|
+
b_value = b_infer.next()
|
72
|
+
self.failUnlessEqual(b_value.value, 1)
|
73
|
+
self.failUnlessRaises(StopIteration, b_infer.next)
|
74
|
+
func = astng.locals['func'][0]
|
75
|
+
self.failUnlessEqual(len(func.lookup('c')[1]), 1)
|
76
|
+
|
77
|
+
def test_module(self):
|
78
|
+
astng = builder.string_build('pass', __name__, __file__)
|
79
|
+
# built-in objects
|
80
|
+
none = astng.ilookup('None').next()
|
81
|
+
self.assertEquals(none.value, None)
|
82
|
+
obj = astng.ilookup('object').next()
|
83
|
+
self.assertIsInstance(obj, nodes.Class)
|
84
|
+
self.assertEquals(obj.name, 'object')
|
85
|
+
self.assertRaises(InferenceError, astng.ilookup('YOAA').next)
|
86
|
+
|
87
|
+
# XXX
|
88
|
+
self.assertEquals(len(list(NONREGR.ilookup('enumerate'))), 2)
|
89
|
+
|
90
|
+
def test_class_ancestor_name(self):
|
91
|
+
code = '''
|
92
|
+
class A:
|
93
|
+
pass
|
94
|
+
|
95
|
+
class A(A):
|
96
|
+
pass
|
97
|
+
'''
|
98
|
+
astng = builder.string_build(code, __name__, __file__)
|
99
|
+
cls1 = astng.locals['A'][0]
|
100
|
+
cls2 = astng.locals['A'][1]
|
101
|
+
name = cls2.nodes_of_class(nodes.Name).next()
|
102
|
+
self.assertEquals(name.infer().next(), cls1)
|
103
|
+
|
104
|
+
### backport those test to inline code
|
105
|
+
def test_method(self):
|
106
|
+
method = MODULE['YOUPI']['method']
|
107
|
+
my_dict = method.ilookup('MY_DICT').next()
|
108
|
+
self.assert_(isinstance(my_dict, nodes.Dict), my_dict)
|
109
|
+
none = method.ilookup('None').next()
|
110
|
+
self.assertEquals(none.value, None)
|
111
|
+
self.assertRaises(InferenceError, method.ilookup('YOAA').next)
|
112
|
+
|
113
|
+
|
114
|
+
def test_function_argument_with_default(self):
|
115
|
+
make_class = MODULE2['make_class']
|
116
|
+
base = make_class.ilookup('base').next()
|
117
|
+
self.assert_(isinstance(base, nodes.Class), base.__class__)
|
118
|
+
self.assertEquals(base.name, 'YO')
|
119
|
+
self.assertEquals(base.root().name, 'data.module')
|
120
|
+
|
121
|
+
|
122
|
+
def test_class(self):
|
123
|
+
klass = MODULE['YOUPI']
|
124
|
+
my_dict = klass.ilookup('MY_DICT').next()
|
125
|
+
self.assertIsInstance(my_dict, nodes.Dict)
|
126
|
+
none = klass.ilookup('None').next()
|
127
|
+
self.assertEquals(none.value, None)
|
128
|
+
obj = klass.ilookup('object').next()
|
129
|
+
self.assertIsInstance(obj, nodes.Class)
|
130
|
+
self.assertEquals(obj.name, 'object')
|
131
|
+
self.assertRaises(InferenceError, klass.ilookup('YOAA').next)
|
132
|
+
|
133
|
+
|
134
|
+
def test_inner_classes(self):
|
135
|
+
ccc = NONREGR['Ccc']
|
136
|
+
self.assertEquals(ccc.ilookup('Ddd').next().name, 'Ddd')
|
137
|
+
|
138
|
+
|
139
|
+
def test_loopvar_hiding(self):
|
140
|
+
astng = builder.string_build("""
|
141
|
+
x = 10
|
142
|
+
for x in range(5):
|
143
|
+
print x
|
144
|
+
|
145
|
+
if x > 0:
|
146
|
+
print '#' * x
|
147
|
+
""", __name__, __file__)
|
148
|
+
xnames = [n for n in astng.nodes_of_class(nodes.Name) if n.name == 'x']
|
149
|
+
# inside the loop, only one possible assignment
|
150
|
+
self.assertEquals(len(xnames[0].lookup('x')[1]), 1)
|
151
|
+
# outside the loop, two possible assignments
|
152
|
+
self.assertEquals(len(xnames[1].lookup('x')[1]), 2)
|
153
|
+
self.assertEquals(len(xnames[2].lookup('x')[1]), 2)
|
154
|
+
|
155
|
+
def test_list_comps(self):
|
156
|
+
if sys.version_info < (2, 4):
|
157
|
+
self.skip('this test require python >= 2.4')
|
158
|
+
astng = builder.string_build("""
|
159
|
+
print [ i for i in range(10) ]
|
160
|
+
print [ i for i in range(10) ]
|
161
|
+
print list( i for i in range(10) )
|
162
|
+
""", __name__, __file__)
|
163
|
+
xnames = [n for n in astng.nodes_of_class(nodes.Name) if n.name == 'i']
|
164
|
+
self.assertEquals(len(xnames[0].lookup('i')[1]), 1)
|
165
|
+
self.assertEquals(xnames[0].lookup('i')[1][0].lineno, 2)
|
166
|
+
self.assertEquals(len(xnames[1].lookup('i')[1]), 1)
|
167
|
+
self.assertEquals(xnames[1].lookup('i')[1][0].lineno, 3)
|
168
|
+
self.assertEquals(len(xnames[2].lookup('i')[1]), 1)
|
169
|
+
self.assertEquals(xnames[2].lookup('i')[1][0].lineno, 4)
|
170
|
+
|
171
|
+
|
172
|
+
def test_explicit___name__(self):
|
173
|
+
code = '''
|
174
|
+
class Pouet:
|
175
|
+
__name__ = "pouet"
|
176
|
+
p1 = Pouet()
|
177
|
+
|
178
|
+
class PouetPouet(Pouet): pass
|
179
|
+
p2 = Pouet()
|
180
|
+
|
181
|
+
class NoName: pass
|
182
|
+
p3 = NoName()
|
183
|
+
'''
|
184
|
+
astng = builder.string_build(code, __name__, __file__)
|
185
|
+
p1 = astng['p1'].infer().next()
|
186
|
+
self.failUnless(p1.getattr('__name__'))
|
187
|
+
p2 = astng['p2'].infer().next()
|
188
|
+
self.failUnless(p2.getattr('__name__'))
|
189
|
+
self.failUnless(astng['NoName'].getattr('__name__'))
|
190
|
+
p3 = astng['p3'].infer().next()
|
191
|
+
self.assertRaises(NotFoundError, p3.getattr, '__name__')
|
192
|
+
|
193
|
+
|
194
|
+
def test_function_module_special(self):
|
195
|
+
astng = builder.string_build('''
|
196
|
+
def initialize(linter):
|
197
|
+
"""initialize linter with checkers in this package """
|
198
|
+
package_load(linter, __path__[0])
|
199
|
+
''', 'data.__init__', 'data/__init__.py')
|
200
|
+
path = [n for n in astng.nodes_of_class(nodes.Name) if n.name == '__path__'][0]
|
201
|
+
self.assertEquals(len(path.lookup('__path__')[1]), 1)
|
202
|
+
|
203
|
+
|
204
|
+
def test_builtin_lookup(self):
|
205
|
+
self.assertEquals(builtin_lookup('__dict__')[1], ())
|
206
|
+
intstmts = builtin_lookup('int')[1]
|
207
|
+
self.assertEquals(len(intstmts), 1)
|
208
|
+
self.assertIsInstance(intstmts[0], nodes.Class)
|
209
|
+
self.assertEquals(intstmts[0].name, 'int')
|
210
|
+
self.assertIs(intstmts[0], nodes.const_factory(1)._proxied)
|
211
|
+
|
212
|
+
|
213
|
+
def test_decorator_arguments_lookup(self):
|
214
|
+
if sys.version_info < (2, 4):
|
215
|
+
self.skip('this test require python >= 2.4')
|
216
|
+
code = '''
|
217
|
+
def decorator(value):
|
218
|
+
def wrapper(function):
|
219
|
+
return function
|
220
|
+
return wrapper
|
221
|
+
|
222
|
+
class foo:
|
223
|
+
member = 10
|
224
|
+
|
225
|
+
@decorator(member) #This will cause pylint to complain
|
226
|
+
def test(self):
|
227
|
+
pass
|
228
|
+
'''
|
229
|
+
astng = builder.string_build(code, __name__, __file__)
|
230
|
+
member = get_name_node(astng['foo'], 'member')
|
231
|
+
it = member.infer()
|
232
|
+
obj = it.next()
|
233
|
+
self.assertIsInstance(obj, nodes.Const)
|
234
|
+
self.assertEquals(obj.value, 10)
|
235
|
+
self.assertRaises(StopIteration, it.next)
|
236
|
+
|
237
|
+
|
238
|
+
def test_inner_decorator_member_lookup(self):
|
239
|
+
if sys.version_info < (2, 4):
|
240
|
+
self.skip('this test require python >= 2.4')
|
241
|
+
code = '''
|
242
|
+
class FileA:
|
243
|
+
def decorator(bla):
|
244
|
+
return bla
|
245
|
+
|
246
|
+
@decorator
|
247
|
+
def funcA():
|
248
|
+
return 4
|
249
|
+
'''
|
250
|
+
astng = builder.string_build(code, __name__, __file__)
|
251
|
+
decname = get_name_node(astng['FileA'], 'decorator')
|
252
|
+
it = decname.infer()
|
253
|
+
obj = it.next()
|
254
|
+
self.assertIsInstance(obj, nodes.Function)
|
255
|
+
self.assertRaises(StopIteration, it.next)
|
256
|
+
|
257
|
+
|
258
|
+
def test_static_method_lookup(self):
|
259
|
+
if sys.version_info < (2, 4):
|
260
|
+
self.skip('this test require python >= 2.4')
|
261
|
+
code = '''
|
262
|
+
class FileA:
|
263
|
+
@staticmethod
|
264
|
+
def funcA():
|
265
|
+
return 4
|
266
|
+
|
267
|
+
|
268
|
+
class Test:
|
269
|
+
FileA = [1,2,3]
|
270
|
+
|
271
|
+
def __init__(self):
|
272
|
+
print FileA.funcA()
|
273
|
+
'''
|
274
|
+
astng = builder.string_build(code, __name__, __file__)
|
275
|
+
it = astng['Test']['__init__'].ilookup('FileA')
|
276
|
+
obj = it.next()
|
277
|
+
self.assertIsInstance(obj, nodes.Class)
|
278
|
+
self.assertRaises(StopIteration, it.next)
|
279
|
+
|
280
|
+
|
281
|
+
def test_global_delete(self):
|
282
|
+
code = '''
|
283
|
+
def run2():
|
284
|
+
f = Frobble()
|
285
|
+
|
286
|
+
class Frobble:
|
287
|
+
pass
|
288
|
+
Frobble.mumble = True
|
289
|
+
|
290
|
+
del Frobble
|
291
|
+
|
292
|
+
def run1():
|
293
|
+
f = Frobble()
|
294
|
+
'''
|
295
|
+
astng = builder.string_build(code, __name__, __file__)
|
296
|
+
stmts = astng['run2'].lookup('Frobbel')[1]
|
297
|
+
self.failUnlessEqual(len(stmts), 0)
|
298
|
+
stmts = astng['run1'].lookup('Frobbel')[1]
|
299
|
+
self.failUnlessEqual(len(stmts), 0)
|
300
|
+
|
301
|
+
if __name__ == '__main__':
|
302
|
+
unittest_main()
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
2
|
+
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
3
|
+
# copyright 2003-2010 Sylvain Thenault, all rights reserved.
|
4
|
+
# contact mailto:thenault@gmail.com
|
5
|
+
#
|
6
|
+
# This file is part of logilab-astng.
|
7
|
+
#
|
8
|
+
# logilab-astng is free software: you can redistribute it and/or modify it
|
9
|
+
# under the terms of the GNU Lesser General Public License as published by the
|
10
|
+
# Free Software Foundation, either version 2.1 of the License, or (at your
|
11
|
+
# option) any later version.
|
12
|
+
#
|
13
|
+
# logilab-astng is distributed in the hope that it will be useful, but
|
14
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
16
|
+
# for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public License along
|
19
|
+
# with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
|
20
|
+
import unittest
|
21
|
+
import os
|
22
|
+
import sys
|
23
|
+
from os.path import join, dirname
|
24
|
+
from logilab.astng.manager import ASTNGManager
|
25
|
+
|
26
|
+
|
27
|
+
class ASTNGManagerTC(unittest.TestCase):
|
28
|
+
def setUp(self):
|
29
|
+
self.manager = ASTNGManager(borg=False)
|
30
|
+
|
31
|
+
def test_astng_from_module(self):
|
32
|
+
astng = self.manager.astng_from_module(unittest)
|
33
|
+
self.assertEquals(astng.pure_python, True)
|
34
|
+
import time
|
35
|
+
astng = self.manager.astng_from_module(time)
|
36
|
+
self.assertEquals(astng.pure_python, False)
|
37
|
+
|
38
|
+
def test_astng_from_class(self):
|
39
|
+
astng = self.manager.astng_from_class(file)
|
40
|
+
self.assertEquals(astng.name, 'file')
|
41
|
+
self.assertEquals(astng.parent.frame().name, '__builtin__')
|
42
|
+
|
43
|
+
astng = self.manager.astng_from_class(object)
|
44
|
+
self.assertEquals(astng.name, 'object')
|
45
|
+
self.assertEquals(astng.parent.frame().name, '__builtin__')
|
46
|
+
self.failUnless('__setattr__' in astng)
|
47
|
+
|
48
|
+
def _test_astng_from_zip(self, archive):
|
49
|
+
origpath = sys.path[:]
|
50
|
+
sys.modules.pop('mypypa', None)
|
51
|
+
sys.path.insert(0, join(dirname(__file__), 'data', archive))
|
52
|
+
try:
|
53
|
+
module = self.manager.astng_from_module_name('mypypa')
|
54
|
+
self.assertEquals(module.name, 'mypypa')
|
55
|
+
self.failUnless(module.file.endswith('%s/mypypa' % archive),
|
56
|
+
module.file)
|
57
|
+
finally:
|
58
|
+
sys.path = origpath
|
59
|
+
|
60
|
+
def test_astng_from_module_name_egg(self):
|
61
|
+
self._test_astng_from_zip('MyPyPa-0.1.0-py2.5.egg')
|
62
|
+
|
63
|
+
def test_astng_from_module_name_zip(self):
|
64
|
+
self._test_astng_from_zip('MyPyPa-0.1.0-py2.5.zip')
|
65
|
+
|
66
|
+
def test_from_directory(self):
|
67
|
+
obj = self.manager.from_directory('data')
|
68
|
+
self.assertEquals(obj.name, 'data')
|
69
|
+
self.assertEquals(obj.path, join(os.getcwd(), 'data'))
|
70
|
+
|
71
|
+
def test_package_node(self):
|
72
|
+
obj = self.manager.from_directory('data')
|
73
|
+
expected_short = ['SSL1', '__init__', 'all', 'appl', 'format', 'module', 'module2',
|
74
|
+
'noendingnewline', 'nonregr', 'notall']
|
75
|
+
expected_long = ['SSL1', 'data', 'data.all', 'appl', 'data.format', 'data.module',
|
76
|
+
'data.module2', 'data.noendingnewline', 'data.nonregr',
|
77
|
+
'data.notall']
|
78
|
+
self.assertEquals(obj.keys(), expected_short)
|
79
|
+
self.assertEquals([m.name for m in obj.values()], expected_long)
|
80
|
+
self.assertEquals([m for m in list(obj)], expected_short)
|
81
|
+
self.assertEquals([(name, m.name) for name, m in obj.items()],
|
82
|
+
zip(expected_short, expected_long))
|
83
|
+
self.assertEquals([(name, m.name) for name, m in obj.items()],
|
84
|
+
zip(expected_short, expected_long))
|
85
|
+
|
86
|
+
self.assertEquals('module' in obj, True)
|
87
|
+
self.assertEquals(obj.has_key('module'), True)
|
88
|
+
self.assertEquals(obj.get('module').name, 'data.module')
|
89
|
+
self.assertEquals(obj['module'].name, 'data.module')
|
90
|
+
self.assertEquals(obj.get('whatever'), None)
|
91
|
+
self.assertEquals(obj.fullname(), 'data')
|
92
|
+
# FIXME: test fullname on a subpackage
|
93
|
+
|
94
|
+
|
95
|
+
if __name__ == '__main__':
|
96
|
+
unittest.main()
|
97
|
+
|
98
|
+
|