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.
Files changed (503) hide show
  1. data/LICENSE +202 -0
  2. data/build/README +23 -0
  3. data/egg/egg/build.yml +70 -0
  4. data/egg/egg/ez_setup.py +280 -0
  5. data/egg/egg/script.py +12 -0
  6. data/egg/egg/setup.erb +11 -0
  7. data/egg/egg/suite.py +37 -0
  8. data/egg/egg/test.py +31 -0
  9. data/egg/egg.yml +69 -0
  10. data/egg/http/build.erb +53 -0
  11. data/egg/http/server.py +34 -0
  12. data/egg/http.yml +50 -0
  13. data/egg/mysql/mysql.py +43 -0
  14. data/egg/mysql.yml +44 -0
  15. data/egg/project/build.erb +77 -0
  16. data/egg/project/script.py +42 -0
  17. data/egg/project/test.py +31 -0
  18. data/egg/project.yml +59 -0
  19. data/egg/script/build.erb +35 -0
  20. data/egg/script/script.py +42 -0
  21. data/egg/script.yml +50 -0
  22. data/egg/soap/build.erb +52 -0
  23. data/egg/soap/client.py +18 -0
  24. data/egg/soap/server.py +30 -0
  25. data/egg/soap.yml +58 -0
  26. data/egg/source/source.py +42 -0
  27. data/egg/source.yml +47 -0
  28. data/egg/test/test.py +28 -0
  29. data/egg/test.yml +44 -0
  30. data/egg/xmlrpc/build.erb +52 -0
  31. data/egg/xmlrpc/client.py +22 -0
  32. data/egg/xmlrpc/server.py +24 -0
  33. data/egg/xmlrpc.yml +51 -0
  34. data/lib/bee_task_python.rb +390 -0
  35. data/test/build.yml +16 -0
  36. data/test/tc_bee_task_python.rb +27 -0
  37. data/test/test_build.rb +26 -0
  38. data/test/test_build_listener.rb +62 -0
  39. data/test/ts_bee_python.rb +26 -0
  40. data/tools/common/__init__.py +5 -0
  41. data/tools/common/common/__init__.py +140 -0
  42. data/tools/common/common/__pkginfo__.py +43 -0
  43. data/tools/common/common/adbh.py +35 -0
  44. data/tools/common/common/cache.py +114 -0
  45. data/tools/common/common/changelog.py +234 -0
  46. data/tools/common/common/clcommands.py +181 -0
  47. data/tools/common/common/cli.py +212 -0
  48. data/tools/common/common/compat.py +328 -0
  49. data/tools/common/common/configuration.py +1087 -0
  50. data/tools/common/common/contexts.py +58 -0
  51. data/tools/common/common/corbautils.py +117 -0
  52. data/tools/common/common/daemon.py +171 -0
  53. data/tools/common/common/date.py +279 -0
  54. data/tools/common/common/db.py +49 -0
  55. data/tools/common/common/dbf.py +229 -0
  56. data/tools/common/common/debugger.py +208 -0
  57. data/tools/common/common/decorators.py +190 -0
  58. data/tools/common/common/deprecation.py +118 -0
  59. data/tools/common/common/fileutils.py +409 -0
  60. data/tools/common/common/graph.py +259 -0
  61. data/tools/common/common/html.py +142 -0
  62. data/tools/common/common/interface.py +76 -0
  63. data/tools/common/common/logging_ext.py +166 -0
  64. data/tools/common/common/modutils.py +670 -0
  65. data/tools/common/common/optik_ext.py +383 -0
  66. data/tools/common/common/optparser.py +92 -0
  67. data/tools/common/common/pdf_ext.py +111 -0
  68. data/tools/common/common/proc.py +276 -0
  69. data/tools/common/common/pyro_ext.py +146 -0
  70. data/tools/common/common/pytest.py +754 -0
  71. data/tools/common/common/shellutils.py +383 -0
  72. data/tools/common/common/sphinx_ext.py +87 -0
  73. data/tools/common/common/sphinxutils.py +122 -0
  74. data/tools/common/common/sqlgen.py +31 -0
  75. data/tools/common/common/table.py +930 -0
  76. data/tools/common/common/tasksqueue.py +97 -0
  77. data/tools/common/common/test/__init__.py +1 -0
  78. data/tools/common/common/test/data/ChangeLog +184 -0
  79. data/tools/common/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  80. data/tools/common/common/test/data/__init__.py +1 -0
  81. data/tools/common/common/test/data/content_differ_dir/NOTHING +0 -0
  82. data/tools/common/common/test/data/content_differ_dir/README +1 -0
  83. data/tools/common/common/test/data/content_differ_dir/subdir/coin +1 -0
  84. data/tools/common/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
  85. data/tools/common/common/test/data/file_differ_dir/NOTHING +0 -0
  86. data/tools/common/common/test/data/file_differ_dir/README +1 -0
  87. data/tools/common/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
  88. data/tools/common/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
  89. data/tools/common/common/test/data/find_test/__init__.py +0 -0
  90. data/tools/common/common/test/data/find_test/foo.txt +0 -0
  91. data/tools/common/common/test/data/find_test/module.py +0 -0
  92. data/tools/common/common/test/data/find_test/module2.py +0 -0
  93. data/tools/common/common/test/data/find_test/newlines.txt +0 -0
  94. data/tools/common/common/test/data/find_test/noendingnewline.py +0 -0
  95. data/tools/common/common/test/data/find_test/nonregr.py +0 -0
  96. data/tools/common/common/test/data/find_test/normal_file.txt +0 -0
  97. data/tools/common/common/test/data/find_test/spam.txt +0 -0
  98. data/tools/common/common/test/data/find_test/sub/doc.txt +0 -0
  99. data/tools/common/common/test/data/find_test/sub/momo.py +0 -0
  100. data/tools/common/common/test/data/find_test/test.ini +0 -0
  101. data/tools/common/common/test/data/find_test/test1.msg +0 -0
  102. data/tools/common/common/test/data/find_test/test2.msg +0 -0
  103. data/tools/common/common/test/data/find_test/write_protected_file.txt +0 -0
  104. data/tools/common/common/test/data/foo.txt +9 -0
  105. data/tools/common/common/test/data/module.py +88 -0
  106. data/tools/common/common/test/data/module2.py +77 -0
  107. data/tools/common/common/test/data/newlines.txt +3 -0
  108. data/tools/common/common/test/data/noendingnewline.py +36 -0
  109. data/tools/common/common/test/data/nonregr.py +14 -0
  110. data/tools/common/common/test/data/normal_file.txt +0 -0
  111. data/tools/common/common/test/data/reference_dir/NOTHING +0 -0
  112. data/tools/common/common/test/data/reference_dir/README +1 -0
  113. data/tools/common/common/test/data/reference_dir/subdir/coin +1 -0
  114. data/tools/common/common/test/data/reference_dir/subdir/toto.txt +53 -0
  115. data/tools/common/common/test/data/same_dir/NOTHING +0 -0
  116. data/tools/common/common/test/data/same_dir/README +1 -0
  117. data/tools/common/common/test/data/same_dir/subdir/coin +1 -0
  118. data/tools/common/common/test/data/same_dir/subdir/toto.txt +53 -0
  119. data/tools/common/common/test/data/spam.txt +9 -0
  120. data/tools/common/common/test/data/sub/doc.txt +1 -0
  121. data/tools/common/common/test/data/sub/momo.py +1 -0
  122. data/tools/common/common/test/data/subdir_differ_dir/NOTHING +0 -0
  123. data/tools/common/common/test/data/subdir_differ_dir/README +1 -0
  124. data/tools/common/common/test/data/subdir_differ_dir/subdir/coin +1 -0
  125. data/tools/common/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
  126. data/tools/common/common/test/data/test.ini +20 -0
  127. data/tools/common/common/test/data/test1.msg +30 -0
  128. data/tools/common/common/test/data/test2.msg +42 -0
  129. data/tools/common/common/test/data/write_protected_file.txt +0 -0
  130. data/tools/common/common/test/foomod.py +17 -0
  131. data/tools/common/common/test/unittest_cache.py +129 -0
  132. data/tools/common/common/test/unittest_changelog.py +37 -0
  133. data/tools/common/common/test/unittest_compat.py +239 -0
  134. data/tools/common/common/test/unittest_configuration.py +348 -0
  135. data/tools/common/common/test/unittest_date.py +154 -0
  136. data/tools/common/common/test/unittest_decorators.py +62 -0
  137. data/tools/common/common/test/unittest_deprecation.py +76 -0
  138. data/tools/common/common/test/unittest_fileutils.py +133 -0
  139. data/tools/common/common/test/unittest_graph.py +50 -0
  140. data/tools/common/common/test/unittest_html.py +76 -0
  141. data/tools/common/common/test/unittest_interface.py +87 -0
  142. data/tools/common/common/test/unittest_modutils.py +244 -0
  143. data/tools/common/common/test/unittest_pytest.py +50 -0
  144. data/tools/common/common/test/unittest_shellutils.py +248 -0
  145. data/tools/common/common/test/unittest_table.py +448 -0
  146. data/tools/common/common/test/unittest_taskqueue.py +71 -0
  147. data/tools/common/common/test/unittest_testlib.py +956 -0
  148. data/tools/common/common/test/unittest_textutils.py +247 -0
  149. data/tools/common/common/test/unittest_tree.py +248 -0
  150. data/tools/common/common/test/unittest_umessage.py +55 -0
  151. data/tools/common/common/test/unittest_ureports_html.py +64 -0
  152. data/tools/common/common/test/unittest_ureports_text.py +105 -0
  153. data/tools/common/common/test/unittest_xmlutils.py +75 -0
  154. data/tools/common/common/test/utils.py +87 -0
  155. data/tools/common/common/testlib.py +1927 -0
  156. data/tools/common/common/textutils.py +476 -0
  157. data/tools/common/common/tree.py +372 -0
  158. data/tools/common/common/umessage.py +161 -0
  159. data/tools/common/common/ureports/__init__.py +174 -0
  160. data/tools/common/common/ureports/docbook_writer.py +139 -0
  161. data/tools/common/common/ureports/html_writer.py +131 -0
  162. data/tools/common/common/ureports/nodes.py +201 -0
  163. data/tools/common/common/ureports/text_writer.py +140 -0
  164. data/tools/common/common/vcgutils.py +216 -0
  165. data/tools/common/common/visitor.py +107 -0
  166. data/tools/common/common/xmlrpcutils.py +136 -0
  167. data/tools/common/common/xmlutils.py +61 -0
  168. data/tools/compile/compile.py +16 -0
  169. data/tools/coverage/coverage.py +602 -0
  170. data/tools/epydoc/__init__.py +227 -0
  171. data/tools/epydoc/__init__.pyc +0 -0
  172. data/tools/epydoc/apidoc.py +2203 -0
  173. data/tools/epydoc/apidoc.pyc +0 -0
  174. data/tools/epydoc/checker.py +349 -0
  175. data/tools/epydoc/checker.pyc +0 -0
  176. data/tools/epydoc/cli.py +1470 -0
  177. data/tools/epydoc/cli.pyc +0 -0
  178. data/tools/epydoc/compat.py +250 -0
  179. data/tools/epydoc/compat.pyc +0 -0
  180. data/tools/epydoc/docbuilder.py +1358 -0
  181. data/tools/epydoc/docbuilder.pyc +0 -0
  182. data/tools/epydoc/docintrospecter.py +1056 -0
  183. data/tools/epydoc/docintrospecter.pyc +0 -0
  184. data/tools/epydoc/docparser.py +2113 -0
  185. data/tools/epydoc/docparser.pyc +0 -0
  186. data/tools/epydoc/docstringparser.py +1111 -0
  187. data/tools/epydoc/docstringparser.pyc +0 -0
  188. data/tools/epydoc/docwriter/__init__.py +12 -0
  189. data/tools/epydoc/docwriter/__init__.pyc +0 -0
  190. data/tools/epydoc/docwriter/dotgraph.py +1351 -0
  191. data/tools/epydoc/docwriter/dotgraph.pyc +0 -0
  192. data/tools/epydoc/docwriter/html.py +3491 -0
  193. data/tools/epydoc/docwriter/html.pyc +0 -0
  194. data/tools/epydoc/docwriter/html_colorize.py +909 -0
  195. data/tools/epydoc/docwriter/html_colorize.pyc +0 -0
  196. data/tools/epydoc/docwriter/html_css.py +550 -0
  197. data/tools/epydoc/docwriter/html_css.pyc +0 -0
  198. data/tools/epydoc/docwriter/html_help.py +190 -0
  199. data/tools/epydoc/docwriter/html_help.pyc +0 -0
  200. data/tools/epydoc/docwriter/latex.py +1187 -0
  201. data/tools/epydoc/docwriter/latex.pyc +0 -0
  202. data/tools/epydoc/docwriter/plaintext.py +276 -0
  203. data/tools/epydoc/docwriter/plaintext.pyc +0 -0
  204. data/tools/epydoc/docwriter/xlink.py +505 -0
  205. data/tools/epydoc/docwriter/xlink.pyc +0 -0
  206. data/tools/epydoc/gui.py +1148 -0
  207. data/tools/epydoc/gui.pyc +0 -0
  208. data/tools/epydoc/log.py +204 -0
  209. data/tools/epydoc/log.pyc +0 -0
  210. data/tools/epydoc/markup/__init__.py +623 -0
  211. data/tools/epydoc/markup/__init__.pyc +0 -0
  212. data/tools/epydoc/markup/doctest.py +311 -0
  213. data/tools/epydoc/markup/doctest.pyc +0 -0
  214. data/tools/epydoc/markup/epytext.py +2116 -0
  215. data/tools/epydoc/markup/epytext.pyc +0 -0
  216. data/tools/epydoc/markup/javadoc.py +250 -0
  217. data/tools/epydoc/markup/javadoc.pyc +0 -0
  218. data/tools/epydoc/markup/plaintext.py +78 -0
  219. data/tools/epydoc/markup/plaintext.pyc +0 -0
  220. data/tools/epydoc/markup/pyval_repr.py +532 -0
  221. data/tools/epydoc/markup/pyval_repr.pyc +0 -0
  222. data/tools/epydoc/markup/restructuredtext.py +906 -0
  223. data/tools/epydoc/markup/restructuredtext.pyc +0 -0
  224. data/tools/epydoc/test/__init__.py +97 -0
  225. data/tools/epydoc/test/__init__.pyc +0 -0
  226. data/tools/epydoc/test/util.py +226 -0
  227. data/tools/epydoc/test/util.pyc +0 -0
  228. data/tools/epydoc/util.py +289 -0
  229. data/tools/epydoc/util.pyc +0 -0
  230. data/tools/logilab/logilab/__init__.py +5 -0
  231. data/tools/logilab/logilab/astng/__init__.py +82 -0
  232. data/tools/logilab/logilab/astng/__pkginfo__.py +76 -0
  233. data/tools/logilab/logilab/astng/_exceptions.py +64 -0
  234. data/tools/logilab/logilab/astng/_nodes_ast.py +667 -0
  235. data/tools/logilab/logilab/astng/_nodes_compiler.py +758 -0
  236. data/tools/logilab/logilab/astng/bases.py +608 -0
  237. data/tools/logilab/logilab/astng/builder.py +239 -0
  238. data/tools/logilab/logilab/astng/inference.py +426 -0
  239. data/tools/logilab/logilab/astng/inspector.py +289 -0
  240. data/tools/logilab/logilab/astng/manager.py +421 -0
  241. data/tools/logilab/logilab/astng/mixins.py +165 -0
  242. data/tools/logilab/logilab/astng/node_classes.py +848 -0
  243. data/tools/logilab/logilab/astng/nodes.py +85 -0
  244. data/tools/logilab/logilab/astng/nodes_as_string.py +389 -0
  245. data/tools/logilab/logilab/astng/patchcomptransformer.py +159 -0
  246. data/tools/logilab/logilab/astng/protocols.py +333 -0
  247. data/tools/logilab/logilab/astng/raw_building.py +212 -0
  248. data/tools/logilab/logilab/astng/rebuilder.py +307 -0
  249. data/tools/logilab/logilab/astng/scoped_nodes.py +951 -0
  250. data/tools/logilab/logilab/astng/test/__init__.py +19 -0
  251. data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  252. data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.zip +0 -0
  253. data/tools/logilab/logilab/astng/test/data/SSL1/Connection1.py +33 -0
  254. data/tools/logilab/logilab/astng/test/data/SSL1/__init__.py +20 -0
  255. data/tools/logilab/logilab/astng/test/data/__init__.py +20 -0
  256. data/tools/logilab/logilab/astng/test/data/all.py +29 -0
  257. data/tools/logilab/logilab/astng/test/data/appl/__init__.py +23 -0
  258. data/tools/logilab/logilab/astng/test/data/appl/myConnection.py +30 -0
  259. data/tools/logilab/logilab/astng/test/data/format.py +34 -0
  260. data/tools/logilab/logilab/astng/test/data/module.py +90 -0
  261. data/tools/logilab/logilab/astng/test/data/module2.py +112 -0
  262. data/tools/logilab/logilab/astng/test/data/noendingnewline.py +57 -0
  263. data/tools/logilab/logilab/astng/test/data/nonregr.py +76 -0
  264. data/tools/logilab/logilab/astng/test/data/notall.py +28 -0
  265. data/tools/logilab/logilab/astng/test/data2/__init__.py +20 -0
  266. data/tools/logilab/logilab/astng/test/data2/clientmodule_test.py +51 -0
  267. data/tools/logilab/logilab/astng/test/data2/suppliermodule_test.py +32 -0
  268. data/tools/logilab/logilab/astng/test/regrtest.py +135 -0
  269. data/tools/logilab/logilab/astng/test/regrtest_data/absimport.py +22 -0
  270. data/tools/logilab/logilab/astng/test/regrtest_data/descriptor_crash.py +31 -0
  271. data/tools/logilab/logilab/astng/test/regrtest_data/import_package_subpackage_module.py +68 -0
  272. data/tools/logilab/logilab/astng/test/regrtest_data/package/__init__.py +24 -0
  273. data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/__init__.py +20 -0
  274. data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/module.py +20 -0
  275. data/tools/logilab/logilab/astng/test/unittest_builder.py +684 -0
  276. data/tools/logilab/logilab/astng/test/unittest_inference.py +1112 -0
  277. data/tools/logilab/logilab/astng/test/unittest_inspector.py +105 -0
  278. data/tools/logilab/logilab/astng/test/unittest_lookup.py +302 -0
  279. data/tools/logilab/logilab/astng/test/unittest_manager.py +98 -0
  280. data/tools/logilab/logilab/astng/test/unittest_nodes.py +302 -0
  281. data/tools/logilab/logilab/astng/test/unittest_scoped_nodes.py +501 -0
  282. data/tools/logilab/logilab/astng/test/unittest_utils.py +104 -0
  283. data/tools/logilab/logilab/astng/utils.py +342 -0
  284. data/tools/logilab/logilab/common/__init__.py +140 -0
  285. data/tools/logilab/logilab/common/__pkginfo__.py +43 -0
  286. data/tools/logilab/logilab/common/adbh.py +35 -0
  287. data/tools/logilab/logilab/common/cache.py +114 -0
  288. data/tools/logilab/logilab/common/changelog.py +234 -0
  289. data/tools/logilab/logilab/common/clcommands.py +181 -0
  290. data/tools/logilab/logilab/common/cli.py +212 -0
  291. data/tools/logilab/logilab/common/compat.py +328 -0
  292. data/tools/logilab/logilab/common/configuration.py +1087 -0
  293. data/tools/logilab/logilab/common/contexts.py +58 -0
  294. data/tools/logilab/logilab/common/corbautils.py +117 -0
  295. data/tools/logilab/logilab/common/daemon.py +171 -0
  296. data/tools/logilab/logilab/common/date.py +279 -0
  297. data/tools/logilab/logilab/common/db.py +49 -0
  298. data/tools/logilab/logilab/common/dbf.py +229 -0
  299. data/tools/logilab/logilab/common/debugger.py +208 -0
  300. data/tools/logilab/logilab/common/decorators.py +190 -0
  301. data/tools/logilab/logilab/common/deprecation.py +118 -0
  302. data/tools/logilab/logilab/common/fileutils.py +409 -0
  303. data/tools/logilab/logilab/common/graph.py +259 -0
  304. data/tools/logilab/logilab/common/html.py +142 -0
  305. data/tools/logilab/logilab/common/interface.py +76 -0
  306. data/tools/logilab/logilab/common/logging_ext.py +166 -0
  307. data/tools/logilab/logilab/common/modutils.py +670 -0
  308. data/tools/logilab/logilab/common/optik_ext.py +383 -0
  309. data/tools/logilab/logilab/common/optparser.py +92 -0
  310. data/tools/logilab/logilab/common/pdf_ext.py +111 -0
  311. data/tools/logilab/logilab/common/proc.py +276 -0
  312. data/tools/logilab/logilab/common/pyro_ext.py +146 -0
  313. data/tools/logilab/logilab/common/pytest.py +754 -0
  314. data/tools/logilab/logilab/common/shellutils.py +383 -0
  315. data/tools/logilab/logilab/common/sphinx_ext.py +87 -0
  316. data/tools/logilab/logilab/common/sphinxutils.py +122 -0
  317. data/tools/logilab/logilab/common/sqlgen.py +31 -0
  318. data/tools/logilab/logilab/common/table.py +930 -0
  319. data/tools/logilab/logilab/common/tasksqueue.py +97 -0
  320. data/tools/logilab/logilab/common/test/__init__.py +1 -0
  321. data/tools/logilab/logilab/common/test/data/ChangeLog +184 -0
  322. data/tools/logilab/logilab/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  323. data/tools/logilab/logilab/common/test/data/__init__.py +1 -0
  324. data/tools/logilab/logilab/common/test/data/content_differ_dir/NOTHING +0 -0
  325. data/tools/logilab/logilab/common/test/data/content_differ_dir/README +1 -0
  326. data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/coin +1 -0
  327. data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
  328. data/tools/logilab/logilab/common/test/data/file_differ_dir/NOTHING +0 -0
  329. data/tools/logilab/logilab/common/test/data/file_differ_dir/README +1 -0
  330. data/tools/logilab/logilab/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
  331. data/tools/logilab/logilab/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
  332. data/tools/logilab/logilab/common/test/data/find_test/__init__.py +0 -0
  333. data/tools/logilab/logilab/common/test/data/find_test/foo.txt +0 -0
  334. data/tools/logilab/logilab/common/test/data/find_test/module.py +0 -0
  335. data/tools/logilab/logilab/common/test/data/find_test/module2.py +0 -0
  336. data/tools/logilab/logilab/common/test/data/find_test/newlines.txt +0 -0
  337. data/tools/logilab/logilab/common/test/data/find_test/noendingnewline.py +0 -0
  338. data/tools/logilab/logilab/common/test/data/find_test/nonregr.py +0 -0
  339. data/tools/logilab/logilab/common/test/data/find_test/normal_file.txt +0 -0
  340. data/tools/logilab/logilab/common/test/data/find_test/spam.txt +0 -0
  341. data/tools/logilab/logilab/common/test/data/find_test/sub/doc.txt +0 -0
  342. data/tools/logilab/logilab/common/test/data/find_test/sub/momo.py +0 -0
  343. data/tools/logilab/logilab/common/test/data/find_test/test.ini +0 -0
  344. data/tools/logilab/logilab/common/test/data/find_test/test1.msg +0 -0
  345. data/tools/logilab/logilab/common/test/data/find_test/test2.msg +0 -0
  346. data/tools/logilab/logilab/common/test/data/find_test/write_protected_file.txt +0 -0
  347. data/tools/logilab/logilab/common/test/data/foo.txt +9 -0
  348. data/tools/logilab/logilab/common/test/data/module.py +88 -0
  349. data/tools/logilab/logilab/common/test/data/module2.py +77 -0
  350. data/tools/logilab/logilab/common/test/data/newlines.txt +3 -0
  351. data/tools/logilab/logilab/common/test/data/noendingnewline.py +36 -0
  352. data/tools/logilab/logilab/common/test/data/nonregr.py +14 -0
  353. data/tools/logilab/logilab/common/test/data/normal_file.txt +0 -0
  354. data/tools/logilab/logilab/common/test/data/reference_dir/NOTHING +0 -0
  355. data/tools/logilab/logilab/common/test/data/reference_dir/README +1 -0
  356. data/tools/logilab/logilab/common/test/data/reference_dir/subdir/coin +1 -0
  357. data/tools/logilab/logilab/common/test/data/reference_dir/subdir/toto.txt +53 -0
  358. data/tools/logilab/logilab/common/test/data/same_dir/NOTHING +0 -0
  359. data/tools/logilab/logilab/common/test/data/same_dir/README +1 -0
  360. data/tools/logilab/logilab/common/test/data/same_dir/subdir/coin +1 -0
  361. data/tools/logilab/logilab/common/test/data/same_dir/subdir/toto.txt +53 -0
  362. data/tools/logilab/logilab/common/test/data/spam.txt +9 -0
  363. data/tools/logilab/logilab/common/test/data/sub/doc.txt +1 -0
  364. data/tools/logilab/logilab/common/test/data/sub/momo.py +1 -0
  365. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/NOTHING +0 -0
  366. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/README +1 -0
  367. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/coin +1 -0
  368. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
  369. data/tools/logilab/logilab/common/test/data/test.ini +20 -0
  370. data/tools/logilab/logilab/common/test/data/test1.msg +30 -0
  371. data/tools/logilab/logilab/common/test/data/test2.msg +42 -0
  372. data/tools/logilab/logilab/common/test/data/write_protected_file.txt +0 -0
  373. data/tools/logilab/logilab/common/test/foomod.py +17 -0
  374. data/tools/logilab/logilab/common/test/unittest_cache.py +129 -0
  375. data/tools/logilab/logilab/common/test/unittest_changelog.py +37 -0
  376. data/tools/logilab/logilab/common/test/unittest_compat.py +239 -0
  377. data/tools/logilab/logilab/common/test/unittest_configuration.py +348 -0
  378. data/tools/logilab/logilab/common/test/unittest_date.py +154 -0
  379. data/tools/logilab/logilab/common/test/unittest_decorators.py +62 -0
  380. data/tools/logilab/logilab/common/test/unittest_deprecation.py +76 -0
  381. data/tools/logilab/logilab/common/test/unittest_fileutils.py +133 -0
  382. data/tools/logilab/logilab/common/test/unittest_graph.py +50 -0
  383. data/tools/logilab/logilab/common/test/unittest_html.py +76 -0
  384. data/tools/logilab/logilab/common/test/unittest_interface.py +87 -0
  385. data/tools/logilab/logilab/common/test/unittest_modutils.py +244 -0
  386. data/tools/logilab/logilab/common/test/unittest_pytest.py +50 -0
  387. data/tools/logilab/logilab/common/test/unittest_shellutils.py +248 -0
  388. data/tools/logilab/logilab/common/test/unittest_table.py +448 -0
  389. data/tools/logilab/logilab/common/test/unittest_taskqueue.py +71 -0
  390. data/tools/logilab/logilab/common/test/unittest_testlib.py +956 -0
  391. data/tools/logilab/logilab/common/test/unittest_textutils.py +247 -0
  392. data/tools/logilab/logilab/common/test/unittest_tree.py +248 -0
  393. data/tools/logilab/logilab/common/test/unittest_umessage.py +55 -0
  394. data/tools/logilab/logilab/common/test/unittest_ureports_html.py +64 -0
  395. data/tools/logilab/logilab/common/test/unittest_ureports_text.py +105 -0
  396. data/tools/logilab/logilab/common/test/unittest_xmlutils.py +75 -0
  397. data/tools/logilab/logilab/common/test/utils.py +87 -0
  398. data/tools/logilab/logilab/common/testlib.py +1927 -0
  399. data/tools/logilab/logilab/common/textutils.py +476 -0
  400. data/tools/logilab/logilab/common/tree.py +372 -0
  401. data/tools/logilab/logilab/common/umessage.py +161 -0
  402. data/tools/logilab/logilab/common/ureports/__init__.py +174 -0
  403. data/tools/logilab/logilab/common/ureports/docbook_writer.py +139 -0
  404. data/tools/logilab/logilab/common/ureports/html_writer.py +131 -0
  405. data/tools/logilab/logilab/common/ureports/nodes.py +201 -0
  406. data/tools/logilab/logilab/common/ureports/text_writer.py +140 -0
  407. data/tools/logilab/logilab/common/vcgutils.py +216 -0
  408. data/tools/logilab/logilab/common/visitor.py +107 -0
  409. data/tools/logilab/logilab/common/xmlrpcutils.py +136 -0
  410. data/tools/logilab/logilab/common/xmlutils.py +61 -0
  411. data/tools/pychecker/COPYRIGHT +31 -0
  412. data/tools/pychecker/ChangeLog +349 -0
  413. data/tools/pychecker/CodeChecks.py +1969 -0
  414. data/tools/pychecker/CodeChecks.pyc +0 -0
  415. data/tools/pychecker/CodeChecks.pyo +0 -0
  416. data/tools/pychecker/Config.py +475 -0
  417. data/tools/pychecker/Config.pyc +0 -0
  418. data/tools/pychecker/Config.pyo +0 -0
  419. data/tools/pychecker/KNOWN_BUGS +100 -0
  420. data/tools/pychecker/MAINTAINERS +81 -0
  421. data/tools/pychecker/NEWS +406 -0
  422. data/tools/pychecker/OP.py +131 -0
  423. data/tools/pychecker/OP.pyc +0 -0
  424. data/tools/pychecker/OP.pyo +0 -0
  425. data/tools/pychecker/OptionTypes.py +117 -0
  426. data/tools/pychecker/OptionTypes.pyc +0 -0
  427. data/tools/pychecker/OptionTypes.pyo +0 -0
  428. data/tools/pychecker/README +152 -0
  429. data/tools/pychecker/Stack.py +115 -0
  430. data/tools/pychecker/Stack.pyc +0 -0
  431. data/tools/pychecker/Stack.pyo +0 -0
  432. data/tools/pychecker/TODO +101 -0
  433. data/tools/pychecker/VERSION +1 -0
  434. data/tools/pychecker/Warning.py +50 -0
  435. data/tools/pychecker/Warning.pyc +0 -0
  436. data/tools/pychecker/Warning.pyo +0 -0
  437. data/tools/pychecker/__init__.py +17 -0
  438. data/tools/pychecker/__init__.pyc +0 -0
  439. data/tools/pychecker/__init__.pyo +0 -0
  440. data/tools/pychecker/checker.py +961 -0
  441. data/tools/pychecker/checker.pyc +0 -0
  442. data/tools/pychecker/checker.pyo +0 -0
  443. data/tools/pychecker/function.py +159 -0
  444. data/tools/pychecker/function.pyc +0 -0
  445. data/tools/pychecker/function.pyo +0 -0
  446. data/tools/pychecker/msgs.py +175 -0
  447. data/tools/pychecker/msgs.pyc +0 -0
  448. data/tools/pychecker/msgs.pyo +0 -0
  449. data/tools/pychecker/options.py +275 -0
  450. data/tools/pychecker/options.pyc +0 -0
  451. data/tools/pychecker/options.pyo +0 -0
  452. data/tools/pychecker/pcmodules.py +19 -0
  453. data/tools/pychecker/pcmodules.pyc +0 -0
  454. data/tools/pychecker/pcmodules.pyo +0 -0
  455. data/tools/pychecker/printer.py +47 -0
  456. data/tools/pychecker/printer.pyc +0 -0
  457. data/tools/pychecker/printer.pyo +0 -0
  458. data/tools/pychecker/python.py +427 -0
  459. data/tools/pychecker/python.pyc +0 -0
  460. data/tools/pychecker/python.pyo +0 -0
  461. data/tools/pychecker/utils.py +102 -0
  462. data/tools/pychecker/utils.pyc +0 -0
  463. data/tools/pychecker/utils.pyo +0 -0
  464. data/tools/pychecker/warn.py +778 -0
  465. data/tools/pychecker/warn.pyc +0 -0
  466. data/tools/pychecker/warn.pyo +0 -0
  467. data/tools/pylint2/pylint/__init__.py +16 -0
  468. data/tools/pylint2/pylint/__pkginfo__.py +67 -0
  469. data/tools/pylint2/pylint/checkers/__init__.py +155 -0
  470. data/tools/pylint2/pylint/checkers/base.py +749 -0
  471. data/tools/pylint2/pylint/checkers/classes.py +527 -0
  472. data/tools/pylint2/pylint/checkers/design_analysis.py +344 -0
  473. data/tools/pylint2/pylint/checkers/exceptions.py +183 -0
  474. data/tools/pylint2/pylint/checkers/format.py +367 -0
  475. data/tools/pylint2/pylint/checkers/imports.py +379 -0
  476. data/tools/pylint2/pylint/checkers/logging.py +98 -0
  477. data/tools/pylint2/pylint/checkers/misc.py +128 -0
  478. data/tools/pylint2/pylint/checkers/newstyle.py +107 -0
  479. data/tools/pylint2/pylint/checkers/raw_metrics.py +125 -0
  480. data/tools/pylint2/pylint/checkers/similar.py +333 -0
  481. data/tools/pylint2/pylint/checkers/string_format.py +239 -0
  482. data/tools/pylint2/pylint/checkers/typecheck.py +364 -0
  483. data/tools/pylint2/pylint/checkers/utils.py +208 -0
  484. data/tools/pylint2/pylint/checkers/variables.py +498 -0
  485. data/tools/pylint2/pylint/config.py +149 -0
  486. data/tools/pylint2/pylint/epylint.py +149 -0
  487. data/tools/pylint2/pylint/gui.py +433 -0
  488. data/tools/pylint2/pylint/interfaces.py +98 -0
  489. data/tools/pylint2/pylint/lint.py +914 -0
  490. data/tools/pylint2/pylint/pyreverse/__init__.py +5 -0
  491. data/tools/pylint2/pylint/pyreverse/diadefslib.py +229 -0
  492. data/tools/pylint2/pylint/pyreverse/diagrams.py +247 -0
  493. data/tools/pylint2/pylint/pyreverse/main.py +123 -0
  494. data/tools/pylint2/pylint/pyreverse/utils.py +131 -0
  495. data/tools/pylint2/pylint/pyreverse/writer.py +196 -0
  496. data/tools/pylint2/pylint/reporters/__init__.py +67 -0
  497. data/tools/pylint2/pylint/reporters/guireporter.py +36 -0
  498. data/tools/pylint2/pylint/reporters/html.py +69 -0
  499. data/tools/pylint2/pylint/reporters/text.py +156 -0
  500. data/tools/pylint2/pylint/utils.py +518 -0
  501. data/tools/pylint2/pylint.py +16 -0
  502. data/tools/test/suite.py +35 -0
  503. 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
+