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,244 @@
1
+ # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
+ # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
+ #
4
+ # This file is part of logilab-common.
5
+ #
6
+ # logilab-common is free software: you can redistribute it and/or modify it under
7
+ # the terms of the GNU Lesser General Public License as published by the Free
8
+ # Software Foundation, either version 2.1 of the License, or (at your option) any
9
+ # later version.
10
+ #
11
+ # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
+ # details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License along
17
+ # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
+ """
19
+ unit tests for module modutils (module manipulation utilities)
20
+ """
21
+
22
+ import sys
23
+ try:
24
+ __file__
25
+ except NameError:
26
+ __file__ = sys.argv[0]
27
+
28
+ from logilab.common.testlib import TestCase as TLTestCase, unittest_main
29
+ from logilab.common import modutils
30
+ from logilab.common.compat import set
31
+
32
+ from os import path, getcwd
33
+ from logilab import common
34
+ from logilab.common import tree
35
+
36
+ sys.path.insert(0, path.dirname(__file__))
37
+ DATADIR = path.join(path.dirname(__file__), 'data')
38
+
39
+
40
+ class TestCase(TLTestCase):
41
+ def setUp(self):
42
+ super(TestCase,self).setUp()
43
+ self.__common_in_path = common.__path__[0] in sys.path
44
+ if self.__common_in_path:
45
+ sys.path.remove(common.__path__[0])
46
+
47
+ def tearDown(self):
48
+ if self.__common_in_path:
49
+ sys.path.insert(0, common.__path__[0])
50
+ super(TestCase,self).tearDown()
51
+
52
+ class _module_file_tc(TestCase):
53
+ def test_find_zipped_module(self):
54
+ mtype, mfile = _module_file('mypypa', [path.join(DATADIR, 'MyPyPa-0.1.0-py2.5.zip')])
55
+ self.assertEquals(mtype, modutils.ZIPFILE)
56
+ self.assertEquals(mfile, '')
57
+
58
+ def test_find_egg_module(self):
59
+ mtype, mfile = _module_file('mypypa', [path.join(DATADIR, 'MyPyPa-0.1.0-py2.5.egg')])
60
+ self.assertEquals(mtype, modutils.ZIPFILE)
61
+ self.assertEquals(mfile, '')
62
+
63
+
64
+
65
+ class load_module_from_name_tc(TestCase):
66
+ """ load a python module from it's name """
67
+
68
+ def test_knownValues_load_module_from_name_1(self):
69
+ self.assertEqual(modutils.load_module_from_name('sys'), sys)
70
+
71
+ def test_knownValues_load_module_from_name_2(self):
72
+ self.assertEqual(modutils.load_module_from_name('os.path'), path)
73
+
74
+ def test_raise_load_module_from_name_1(self):
75
+ self.assertRaises(ImportError,
76
+ modutils.load_module_from_name, 'os.path', use_sys=0)
77
+
78
+
79
+ class get_module_part_tc(TestCase):
80
+ """given a dotted name return the module part of the name"""
81
+
82
+ def test_knownValues_get_module_part_1(self):
83
+ self.assertEqual(modutils.get_module_part('logilab.common.modutils'),
84
+ 'logilab.common.modutils')
85
+
86
+ def test_knownValues_get_module_part_2(self):
87
+ self.assertEqual(modutils.get_module_part('logilab.common.modutils.get_module_part'),
88
+ 'logilab.common.modutils')
89
+
90
+ def test_knownValues_get_module_part_3(self):
91
+ self.assertEqual(modutils.get_module_part('db.get_connexion', modutils.__file__),
92
+ 'db')
93
+
94
+ def test_knownValues_get_compiled_module_part(self):
95
+ self.assertEqual(modutils.get_module_part('math.log10'), 'math')
96
+ self.assertEqual(modutils.get_module_part('math.log10', __file__), 'math')
97
+
98
+ def test_knownValues_get_builtin_module_part(self):
99
+ self.assertEqual(modutils.get_module_part('sys.path'), 'sys')
100
+ self.assertEqual(modutils.get_module_part('sys.path', '__file__'), 'sys')
101
+
102
+
103
+ class modpath_from_file_tc(TestCase):
104
+ """ given an absolute file path return the python module's path as a list """
105
+
106
+ def test_knownValues_modpath_from_file_1(self):
107
+ self.assertEqual(modutils.modpath_from_file(modutils.__file__),
108
+ ['logilab', 'common', 'modutils'])
109
+
110
+ def test_knownValues_modpath_from_file_2(self):
111
+ self.assertEqual(modutils.modpath_from_file('unittest_modutils.py',
112
+ {getcwd(): 'arbitrary.pkg'}),
113
+ ['arbitrary', 'pkg', 'unittest_modutils'])
114
+
115
+ def test_raise_modpath_from_file_Exception(self):
116
+ self.assertRaises(Exception, modutils.modpath_from_file, '/turlututu')
117
+
118
+
119
+ class file_from_modpath_tc(TestCase):
120
+ """given a mod path (i.e. splited module / package name), return the
121
+ corresponding file, giving priority to source file over precompiled file
122
+ if it exists"""
123
+
124
+ def test_knownValues_file_from_modpath_1(self):
125
+ self.assertEqual(path.realpath(modutils.file_from_modpath(['logilab', 'common', 'modutils'])),
126
+ path.realpath(modutils.__file__.replace('.pyc', '.py')))
127
+
128
+ def test_knownValues_file_from_modpath_2(self):
129
+ from os import path
130
+ self.assertEqual(path.realpath(modutils.file_from_modpath(['os', 'path']).replace('.pyc', '.py')),
131
+ path.realpath(path.__file__.replace('.pyc', '.py')))
132
+
133
+ def test_knownValues_file_from_modpath_3(self):
134
+ try:
135
+ # don't fail if pyxml isn't installed
136
+ from xml.dom import ext
137
+ except ImportError:
138
+ pass
139
+ else:
140
+ self.assertEqual(path.realpath(modutils.file_from_modpath(['xml', 'dom', 'ext']).replace('.pyc', '.py')),
141
+ path.realpath(ext.__file__.replace('.pyc', '.py')))
142
+
143
+ def test_knownValues_file_from_modpath_4(self):
144
+ self.assertEqual(modutils.file_from_modpath(['sys']),
145
+ None)
146
+
147
+ def test_raise_file_from_modpath_Exception(self):
148
+ self.assertRaises(ImportError, modutils.file_from_modpath, ['turlututu'])
149
+
150
+ class get_source_file_tc(TestCase):
151
+
152
+ def test(self):
153
+ from os import path
154
+ self.assertEqual(modutils.get_source_file(path.__file__),
155
+ path.__file__.replace('.pyc', '.py'))
156
+
157
+ def test_raise(self):
158
+ self.assertRaises(modutils.NoSourceFile, modutils.get_source_file,'whatever')
159
+
160
+ class is_standard_module_tc(TestCase):
161
+ """
162
+ return true if the module may be considered as a module from the standard
163
+ library
164
+ """
165
+
166
+ def test_knownValues_is_standard_module_0(self):
167
+ self.assertEqual(modutils.is_standard_module('__builtin__'), True)
168
+
169
+ def test_knownValues_is_standard_module_1(self):
170
+ self.assertEqual(modutils.is_standard_module('sys'), True)
171
+
172
+ def test_knownValues_is_standard_module_2(self):
173
+ self.assertEqual(modutils.is_standard_module('logilab'), False)
174
+
175
+ def test_knownValues_is_standard_module_3(self):
176
+ self.assertEqual(modutils.is_standard_module('unknown'), False)
177
+
178
+ def test_knownValues_is_standard_module_4(self):
179
+ self.assertEqual(modutils.is_standard_module('StringIO'), True)
180
+
181
+ def test_knownValues_is_standard_module_5(self):
182
+ self.assertEqual(modutils.is_standard_module('data.module', (DATADIR,)), True)
183
+ self.assertEqual(modutils.is_standard_module('data.module', (path.abspath(DATADIR),)), True)
184
+
185
+
186
+ class is_relative_tc(TestCase):
187
+
188
+
189
+ def test_knownValues_is_relative_1(self):
190
+ self.assertEqual(modutils.is_relative('modutils', common.__path__[0]), True)
191
+
192
+ def test_knownValues_is_relative_2(self):
193
+ self.assertEqual(modutils.is_relative('modutils', tree.__file__), True)
194
+
195
+ def test_knownValues_is_relative_3(self):
196
+ self.assertEqual(modutils.is_relative('logilab.common.modutils',
197
+ common.__path__[0]), False)
198
+
199
+ class get_modules_tc(TestCase):
200
+
201
+ def test_knownValues_get_modules_1(self): # XXXFIXME: TOWRITE
202
+ """given a directory return a list of all available python modules, even
203
+ in subdirectories
204
+ """
205
+ import data.find_test as data
206
+ mod_path = ("data", 'find_test')
207
+ modules = modutils.get_modules(path.join(*mod_path), data.__path__[0])
208
+ modules.sort()
209
+ self.assertSetEquals(set(modules),
210
+ set([ '.'.join(mod_path + (mod, )) for mod in 'module', 'module2',
211
+ 'noendingnewline', 'nonregr']))
212
+
213
+
214
+ class get_modules_files_tc(TestCase):
215
+
216
+ def test_knownValues_get_module_files_1(self): # XXXFIXME: TOWRITE
217
+ """given a directory return a list of all available python module's files, even
218
+ in subdirectories
219
+ """
220
+ import data
221
+ modules = modutils.get_module_files(path.join(DATADIR,'find_test'), data.__path__[0])
222
+ modules.sort()
223
+ self.assertEqual(modules,
224
+ [path.join(DATADIR, 'find_test', x) for x in ['__init__.py', 'module.py', 'module2.py', 'noendingnewline.py', 'nonregr.py']])
225
+
226
+ def test_load_module_set_attribute(self):
227
+ import logilab.common.fileutils
228
+ import logilab
229
+ del logilab.common.fileutils
230
+ del sys.modules['logilab.common.fileutils']
231
+ m = modutils.load_module_from_modpath(['logilab','common', 'fileutils'])
232
+ self.assert_( hasattr(logilab, 'common') )
233
+ self.assert_( hasattr(logilab.common, 'fileutils') )
234
+ self.assert_( m is logilab.common.fileutils )
235
+
236
+ from logilab.common.testlib import DocTest
237
+ class ModuleDocTest(DocTest):
238
+ """test doc test in this module"""
239
+ from logilab.common import modutils as module
240
+ del DocTest # necessary if we don't want it to be executed (we don't...)
241
+
242
+
243
+ if __name__ == '__main__':
244
+ unittest_main()
@@ -0,0 +1,50 @@
1
+ # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
+ # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
+ #
4
+ # This file is part of logilab-common.
5
+ #
6
+ # logilab-common is free software: you can redistribute it and/or modify it under
7
+ # the terms of the GNU Lesser General Public License as published by the Free
8
+ # Software Foundation, either version 2.1 of the License, or (at your option) any
9
+ # later version.
10
+ #
11
+ # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
+ # details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License along
17
+ # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
+ from os.path import join
19
+ from logilab.common.testlib import TestCase, unittest_main
20
+ from logilab.common.pytest import *
21
+
22
+ class ModuleFunctionTC(TestCase):
23
+ def test_this_is_testdir(self):
24
+ self.assertTrue(this_is_a_testdir("test"))
25
+ self.assertTrue(this_is_a_testdir("tests"))
26
+ self.assertTrue(this_is_a_testdir("unittests"))
27
+ self.assertTrue(this_is_a_testdir("unittest"))
28
+ self.assertFalse(this_is_a_testdir("unit"))
29
+ self.assertFalse(this_is_a_testdir("units"))
30
+ self.assertFalse(this_is_a_testdir("undksjhqfl"))
31
+ self.assertFalse(this_is_a_testdir("this_is_not_a_dir_test"))
32
+ self.assertFalse(this_is_a_testdir("this_is_not_a_testdir"))
33
+ self.assertFalse(this_is_a_testdir("unittestsarenothere"))
34
+ self.assertTrue(this_is_a_testdir(join("coincoin","unittests")))
35
+ self.assertFalse(this_is_a_testdir(join("unittests","spongebob")))
36
+
37
+ def test_this_is_testfile(self):
38
+ self.assertTrue(this_is_a_testfile("test.py"))
39
+ self.assertTrue(this_is_a_testfile("testbabar.py"))
40
+ self.assertTrue(this_is_a_testfile("unittest_celestine.py"))
41
+ self.assertTrue(this_is_a_testfile("smoketest.py"))
42
+ self.assertFalse(this_is_a_testfile("test.pyc"))
43
+ self.assertFalse(this_is_a_testfile("zephir_test.py"))
44
+ self.assertFalse(this_is_a_testfile("smoketest.pl"))
45
+ self.assertFalse(this_is_a_testfile("unittest"))
46
+ self.assertTrue(this_is_a_testfile(join("coincoin","unittest_bibi.py")))
47
+ self.assertFalse(this_is_a_testfile(join("unittest","spongebob.py")))
48
+
49
+ if __name__ == '__main__':
50
+ unittest_main()
@@ -0,0 +1,248 @@
1
+ # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
+ # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
+ #
4
+ # This file is part of logilab-common.
5
+ #
6
+ # logilab-common is free software: you can redistribute it and/or modify it under
7
+ # the terms of the GNU Lesser General Public License as published by the Free
8
+ # Software Foundation, either version 2.1 of the License, or (at your option) any
9
+ # later version.
10
+ #
11
+ # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
+ # details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License along
17
+ # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
+ """unit tests for logilab.common.shellutils"""
19
+
20
+ import sys, os, tempfile, shutil
21
+ from os.path import join
22
+ import datetime, time
23
+
24
+ from logilab.common.testlib import TestCase, unittest_main
25
+
26
+ from logilab.common.shellutils import (globfind, find, ProgressBar,
27
+ acquire_lock, release_lock,
28
+ RawInput, confirm)
29
+
30
+ from logilab.common.proc import NoSuchProcess
31
+ from StringIO import StringIO
32
+
33
+ DATA_DIR = join('data','find_test')
34
+
35
+ class FindTC(TestCase):
36
+ def test_include(self):
37
+ files = set(find(DATA_DIR, '.py'))
38
+ self.assertSetEqual(files,
39
+ set([join(DATA_DIR, f) for f in ['__init__.py', 'module.py',
40
+ 'module2.py', 'noendingnewline.py',
41
+ 'nonregr.py', join('sub', 'momo.py')]]))
42
+ files = set(find(DATA_DIR, ('.py',), blacklist=('sub',)))
43
+ self.assertSetEqual(files,
44
+ set([join(DATA_DIR, f) for f in ['__init__.py', 'module.py',
45
+ 'module2.py', 'noendingnewline.py',
46
+ 'nonregr.py']]))
47
+
48
+ def test_exclude(self):
49
+ files = set(find(DATA_DIR, ('.py', '.pyc'), exclude=True))
50
+ self.assertSetEqual(files,
51
+ set([join(DATA_DIR, f) for f in ['foo.txt',
52
+ 'newlines.txt',
53
+ 'normal_file.txt',
54
+ 'test.ini',
55
+ 'test1.msg',
56
+ 'test2.msg',
57
+ 'spam.txt',
58
+ join('sub', 'doc.txt'),
59
+ 'write_protected_file.txt',
60
+ ]]))
61
+
62
+ def test_globfind(self):
63
+ files = set(globfind(DATA_DIR, '*.py'))
64
+ self.assertSetEqual(files,
65
+ set([join(DATA_DIR, f) for f in ['__init__.py', 'module.py',
66
+ 'module2.py', 'noendingnewline.py',
67
+ 'nonregr.py', join('sub', 'momo.py')]]))
68
+ files = set(globfind(DATA_DIR, 'mo*.py'))
69
+ self.assertSetEqual(files,
70
+ set([join(DATA_DIR, f) for f in ['module.py', 'module2.py',
71
+ join('sub', 'momo.py')]]))
72
+ files = set(globfind(DATA_DIR, 'mo*.py', blacklist=('sub',)))
73
+ self.assertSetEqual(files,
74
+ set([join(DATA_DIR, f) for f in ['module.py', 'module2.py']]))
75
+
76
+
77
+ class ProgressBarTC(TestCase):
78
+ def test_refresh(self):
79
+ pgb_stream = StringIO()
80
+ expected_stream = StringIO()
81
+ pgb = ProgressBar(20,stream=pgb_stream)
82
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue()) # nothing print before refresh
83
+ pgb.refresh()
84
+ expected_stream.write("\r["+' '*20+"]")
85
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
86
+
87
+ def test_refresh_g_size(self):
88
+ pgb_stream = StringIO()
89
+ expected_stream = StringIO()
90
+ pgb = ProgressBar(20,35,stream=pgb_stream)
91
+ pgb.refresh()
92
+ expected_stream.write("\r["+' '*35+"]")
93
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
94
+
95
+ def test_refresh_l_size(self):
96
+ pgb_stream = StringIO()
97
+ expected_stream = StringIO()
98
+ pgb = ProgressBar(20,3,stream=pgb_stream)
99
+ pgb.refresh()
100
+ expected_stream.write("\r["+' '*3+"]")
101
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
102
+
103
+ def _update_test(self, nbops, expected, size = None):
104
+ pgb_stream = StringIO()
105
+ expected_stream = StringIO()
106
+ if size is None:
107
+ pgb = ProgressBar(nbops, stream=pgb_stream)
108
+ size=20
109
+ else:
110
+ pgb = ProgressBar(nbops, size, stream=pgb_stream)
111
+ last = 0
112
+ for round in expected:
113
+ if not hasattr(round, '__int__'):
114
+ dots, update = round
115
+ else:
116
+ dots, update = round, None
117
+ pgb.update()
118
+ if update or (update is None and dots != last):
119
+ last = dots
120
+ expected_stream.write("\r["+('.'*dots)+(' '*(size-dots))+"]")
121
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
122
+
123
+ def test_default(self):
124
+ self._update_test(20, xrange(1,21))
125
+
126
+ def test_nbops_gt_size(self):
127
+ """Test the progress bar for nbops > size"""
128
+ def half(total):
129
+ for counter in range(1,total+1):
130
+ yield counter / 2
131
+ self._update_test(40, half(40))
132
+
133
+ def test_nbops_lt_size(self):
134
+ """Test the progress bar for nbops < size"""
135
+ def double(total):
136
+ for counter in range(1,total+1):
137
+ yield counter * 2
138
+ self._update_test(10, double(10))
139
+
140
+ def test_nbops_nomul_size(self):
141
+ """Test the progress bar for size % nbops !=0 (non int number of dots per update)"""
142
+ self._update_test(3, (6,13,20))
143
+
144
+ def test_overflow(self):
145
+ self._update_test(5, (8, 16, 25, 33, 42, (42, True)), size=42)
146
+
147
+
148
+ class AcquireLockTC(TestCase):
149
+
150
+ def setUp(self):
151
+ self.tmpdir = tempfile.mkdtemp()
152
+ self.lock = join(self.tmpdir, 'LOCK')
153
+
154
+ def tearDown(self):
155
+ shutil.rmtree(self.tmpdir)
156
+
157
+ def test_acquire_normal(self):
158
+ self.assertTrue(acquire_lock(self.lock, 1, 1))
159
+ self.assertTrue(os.path.exists(self.lock))
160
+ release_lock(self.lock)
161
+ self.assertFalse(os.path.exists(self.lock))
162
+
163
+ def test_no_possible_acquire(self):
164
+ self.assertRaises(Exception, acquire_lock, self.lock, 0)
165
+
166
+ def test_wrong_process(self):
167
+ fd = os.open(self.lock, os.O_EXCL | os.O_RDWR | os.O_CREAT)
168
+ os.write(fd, '1111111111')
169
+ os.close(fd)
170
+ self.assertTrue(os.path.exists(self.lock))
171
+ self.assertRaises(Exception, acquire_lock, self.lock, 1, 1)
172
+
173
+ def test_wrong_process_and_continue(self):
174
+ fd = os.open(self.lock, os.O_EXCL | os.O_RDWR | os.O_CREAT)
175
+ os.write(fd, '1111111111')
176
+ os.close(fd)
177
+ self.assertTrue(os.path.exists(self.lock))
178
+ self.assertTrue(acquire_lock(self.lock))
179
+
180
+ def test_locked_for_one_hour(self):
181
+ self.assertTrue(acquire_lock(self.lock))
182
+ touch = datetime.datetime.fromtimestamp(time.time() - 3601).strftime("%m%d%H%M")
183
+ os.system("touch -t %s %s" % (touch, self.lock))
184
+ self.assertRaises(UserWarning, acquire_lock, self.lock, max_try=2, delay=1)
185
+
186
+ class RawInputTC(TestCase):
187
+
188
+ def auto_input(self, *args):
189
+ self.input_args = args
190
+ return self.input_answer
191
+
192
+ def setUp(self):
193
+ null_printer = lambda x: None
194
+ self.qa = RawInput(self.auto_input, null_printer)
195
+
196
+ def test_ask_default(self):
197
+ self.input_answer = ''
198
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
199
+ self.assertEquals(answer, 'yes')
200
+ self.input_answer = ' '
201
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
202
+ self.assertEquals(answer, 'yes')
203
+
204
+ def test_ask_case(self):
205
+ self.input_answer = 'no'
206
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
207
+ self.assertEquals(answer, 'no')
208
+ self.input_answer = 'No'
209
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
210
+ self.assertEquals(answer, 'no')
211
+ self.input_answer = 'NO'
212
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
213
+ self.assertEquals(answer, 'no')
214
+ self.input_answer = 'nO'
215
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
216
+ self.assertEquals(answer, 'no')
217
+ self.input_answer = 'YES'
218
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
219
+ self.assertEquals(answer, 'yes')
220
+
221
+ def test_ask_prompt(self):
222
+ self.input_answer = ''
223
+ answer = self.qa.ask('text', ('yes','no'), 'yes')
224
+ self.assertEquals(self.input_args[0], 'text [Y(es)/n(o)]: ')
225
+ answer = self.qa.ask('text', ('y','n'), 'y')
226
+ self.assertEquals(self.input_args[0], 'text [Y/n]: ')
227
+ answer = self.qa.ask('text', ('n','y'), 'y')
228
+ self.assertEquals(self.input_args[0], 'text [n/Y]: ')
229
+ answer = self.qa.ask('text', ('yes','no','maybe','1'), 'yes')
230
+ self.assertEquals(self.input_args[0], 'text [Y(es)/n(o)/m(aybe)/1]: ')
231
+
232
+ def test_ask_ambiguous(self):
233
+ self.input_answer = 'y'
234
+ self.assertRaises(Exception, self.qa.ask, 'text', ('yes','yep'), 'yes')
235
+
236
+ def test_confirm(self):
237
+ self.input_answer = 'y'
238
+ self.assertEquals(self.qa.confirm('Say yes'), True)
239
+ self.assertEquals(self.qa.confirm('Say yes', default_is_yes=False), True)
240
+ self.input_answer = 'n'
241
+ self.assertEquals(self.qa.confirm('Say yes'), False)
242
+ self.assertEquals(self.qa.confirm('Say yes', default_is_yes=False), False)
243
+ self.input_answer = ''
244
+ self.assertEquals(self.qa.confirm('Say default'), True)
245
+ self.assertEquals(self.qa.confirm('Say default', default_is_yes=False), False)
246
+
247
+ if __name__ == '__main__':
248
+ unittest_main()