cucu 1.0.2__tar.gz → 1.0.4__tar.gz

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.

Potentially problematic release.


This version of cucu might be problematic. Click here for more details.

Files changed (254) hide show
  1. {cucu-1.0.2 → cucu-1.0.4}/CHANGELOG.md +37 -31
  2. {cucu-1.0.2 → cucu-1.0.4}/PKG-INFO +1 -1
  3. cucu-1.0.4/data/www/drag_drop.html +89 -0
  4. {cucu-1.0.2 → cucu-1.0.4}/features/browser/file_upload.feature +6 -0
  5. {cucu-1.0.2 → cucu-1.0.4}/features/cli/report_basics.feature +1 -1
  6. {cucu-1.0.2 → cucu-1.0.4}/pyproject.toml +1 -1
  7. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/file_input_steps.py +11 -2
  8. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/utils.py +4 -0
  9. {cucu-1.0.2 → cucu-1.0.4}/uv.lock +1 -3
  10. {cucu-1.0.2 → cucu-1.0.4}/.circleci/config.yml +0 -0
  11. {cucu-1.0.2 → cucu-1.0.4}/.env +0 -0
  12. {cucu-1.0.2 → cucu-1.0.4}/.github/CODEOWNERS +0 -0
  13. {cucu-1.0.2 → cucu-1.0.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  14. {cucu-1.0.2 → cucu-1.0.4}/.github/workflows/build.yml +0 -0
  15. {cucu-1.0.2 → cucu-1.0.4}/.github/workflows/create_a_new_release.yml +0 -0
  16. {cucu-1.0.2 → cucu-1.0.4}/.github/workflows/publish-production.yml +0 -0
  17. {cucu-1.0.2 → cucu-1.0.4}/.github/workflows/publish-test.yml +0 -0
  18. {cucu-1.0.2 → cucu-1.0.4}/.gitignore +0 -0
  19. {cucu-1.0.2 → cucu-1.0.4}/.pre-commit-config.yaml +0 -0
  20. {cucu-1.0.2 → cucu-1.0.4}/.python-version +0 -0
  21. {cucu-1.0.2 → cucu-1.0.4}/CODE_OF_CONDUCT.md +0 -0
  22. {cucu-1.0.2 → cucu-1.0.4}/CONTRIBUTING.md +0 -0
  23. {cucu-1.0.2 → cucu-1.0.4}/CONTRIBUTORS.md +0 -0
  24. {cucu-1.0.2 → cucu-1.0.4}/LICENSE +0 -0
  25. {cucu-1.0.2 → cucu-1.0.4}/Makefile +0 -0
  26. {cucu-1.0.2 → cucu-1.0.4}/README.md +0 -0
  27. {cucu-1.0.2 → cucu-1.0.4}/bin/cucu +0 -0
  28. {cucu-1.0.2 → cucu-1.0.4}/bin/start_seleniarm_hub.sh +0 -0
  29. {cucu-1.0.2 → cucu-1.0.4}/bin/start_selenium_hub.sh +0 -0
  30. {cucu-1.0.2 → cucu-1.0.4}/cortex.yaml +0 -0
  31. {cucu-1.0.2 → cucu-1.0.4}/data/features/custom_step_test/custom_step.feature +0 -0
  32. {cucu-1.0.2 → cucu-1.0.4}/data/features/custom_step_test/steps/__init__.py +0 -0
  33. {cucu-1.0.2 → cucu-1.0.4}/data/features/custom_step_test/steps/cucu_steps.py +0 -0
  34. {cucu-1.0.2 → cucu-1.0.4}/data/features/echo.feature +0 -0
  35. {cucu-1.0.2 → cucu-1.0.4}/data/features/environment.py +0 -0
  36. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_skipping_scenarios_by_file_presence.feature +0 -0
  37. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_background.feature +0 -0
  38. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_background_using_substeps.feature +0 -0
  39. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_failing_scenario.feature +0 -0
  40. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_failing_scenario_with_table.feature +0 -0
  41. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_failing_scenario_with_web.feature +0 -0
  42. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_logging.feature +0 -0
  43. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_long_names.feature +0 -0
  44. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_mixed_results.feature +0 -0
  45. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_multilines_and_tables.feature +0 -0
  46. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_passing_scenario.feature +0 -0
  47. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_passing_scenario_with_web.feature +0 -0
  48. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_platform_specific_scenarios.feature +0 -0
  49. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_scenario_outline.feature +0 -0
  50. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_scenario_using_nth_type.feature +0 -0
  51. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_tagging.feature +0 -0
  52. {cucu-1.0.2 → cucu-1.0.4}/data/features/feature_with_xml_tags.feature +0 -0
  53. {cucu-1.0.2 → cucu-1.0.4}/data/features/multiple_scenarios_with_browser_steps.feature +0 -0
  54. {cucu-1.0.2 → cucu-1.0.4}/data/features/scenario_stop_retry_early.feature +0 -0
  55. {cucu-1.0.2 → cucu-1.0.4}/data/features/scenario_that_fails_with_after_scenario_steps.feature +0 -0
  56. {cucu-1.0.2 → cucu-1.0.4}/data/features/scenario_that_passes_with_after_scenario_steps.feature +0 -0
  57. {cucu-1.0.2 → cucu-1.0.4}/data/features/scenario_with_console_logs.feature +0 -0
  58. {cucu-1.0.2 → cucu-1.0.4}/data/features/scenario_with_substeps.feature +0 -0
  59. {cucu-1.0.2 → cucu-1.0.4}/data/features/scenario_with_substeps_and_logging.feature +0 -0
  60. {cucu-1.0.2 → cucu-1.0.4}/data/features/slow_features/slow_feature1.feature +0 -0
  61. {cucu-1.0.2 → cucu-1.0.4}/data/features/slow_features/slow_feature2.feature +0 -0
  62. {cucu-1.0.2 → cucu-1.0.4}/data/features/slow_features/slow_feature3.feature +0 -0
  63. {cucu-1.0.2 → cucu-1.0.4}/data/features/slow_features/slow_feature4.feature +0 -0
  64. {cucu-1.0.2 → cucu-1.0.4}/data/features/slow_features/slow_feature5.feature +0 -0
  65. {cucu-1.0.2 → cucu-1.0.4}/data/features/steps/__init__.py +0 -0
  66. {cucu-1.0.2 → cucu-1.0.4}/data/features/steps/cucu_steps.py +0 -0
  67. {cucu-1.0.2 → cucu-1.0.4}/data/features/tagged_features/tagged_feature1.feature +0 -0
  68. {cucu-1.0.2 → cucu-1.0.4}/data/features/tagged_features/tagged_feature2.feature +0 -0
  69. {cucu-1.0.2 → cucu-1.0.4}/data/features/tagged_features/tagged_feature3.feature +0 -0
  70. {cucu-1.0.2 → cucu-1.0.4}/data/features/with_secret/cucurc.yml +0 -0
  71. {cucu-1.0.2 → cucu-1.0.4}/data/features/with_secret/scenario_with_comments.feature +0 -0
  72. {cucu-1.0.2 → cucu-1.0.4}/data/unit/ansi.log +0 -0
  73. {cucu-1.0.2 → cucu-1.0.4}/data/unit/ansi.log.html +0 -0
  74. {cucu-1.0.2 → cucu-1.0.4}/data/www/broken_images.html +0 -0
  75. {cucu-1.0.2 → cucu-1.0.4}/data/www/buttons.html +0 -0
  76. {cucu-1.0.2 → cucu-1.0.4}/data/www/checkboxes.html +0 -0
  77. {cucu-1.0.2 → cucu-1.0.4}/data/www/clipboard.html +0 -0
  78. {cucu-1.0.2 → cucu-1.0.4}/data/www/comboboxes.html +0 -0
  79. {cucu-1.0.2 → cucu-1.0.4}/data/www/console_logging.html +0 -0
  80. {cucu-1.0.2 → cucu-1.0.4}/data/www/cookies.html +0 -0
  81. {cucu-1.0.2 → cucu-1.0.4}/data/www/counter.html +0 -0
  82. {cucu-1.0.2 → cucu-1.0.4}/data/www/draggables.html +0 -0
  83. {cucu-1.0.2 → cucu-1.0.4}/data/www/dropdowns.html +0 -0
  84. {cucu-1.0.2 → cucu-1.0.4}/data/www/duplicate_buttons.html +0 -0
  85. {cucu-1.0.2 → cucu-1.0.4}/data/www/duplicate_inputs.html +0 -0
  86. {cucu-1.0.2 → cucu-1.0.4}/data/www/dynamic_dropdown.html +0 -0
  87. {cucu-1.0.2 → cucu-1.0.4}/data/www/file.txt +0 -0
  88. {cucu-1.0.2 → cucu-1.0.4}/data/www/files.html +0 -0
  89. {cucu-1.0.2 → cucu-1.0.4}/data/www/frames.html +0 -0
  90. {cucu-1.0.2 → cucu-1.0.4}/data/www/fuzzy_rules.html +0 -0
  91. {cucu-1.0.2 → cucu-1.0.4}/data/www/images.html +0 -0
  92. {cucu-1.0.2 → cucu-1.0.4}/data/www/inputs.html +0 -0
  93. {cucu-1.0.2 → cucu-1.0.4}/data/www/js/util.js +0 -0
  94. {cucu-1.0.2 → cucu-1.0.4}/data/www/links.html +0 -0
  95. {cucu-1.0.2 → cucu-1.0.4}/data/www/nothing_to_see_here.html +0 -0
  96. {cucu-1.0.2 → cucu-1.0.4}/data/www/page_that_loads_forever.html +0 -0
  97. {cucu-1.0.2 → cucu-1.0.4}/data/www/radio_buttons.html +0 -0
  98. {cucu-1.0.2 → cucu-1.0.4}/data/www/stars.png +0 -0
  99. {cucu-1.0.2 → cucu-1.0.4}/data/www/tables.html +0 -0
  100. {cucu-1.0.2 → cucu-1.0.4}/data/www/tabs.html +0 -0
  101. {cucu-1.0.2 → cucu-1.0.4}/data/www/text.html +0 -0
  102. {cucu-1.0.2 → cucu-1.0.4}/features/browser/browser_tab_managemenet.feature +0 -0
  103. {cucu-1.0.2 → cucu-1.0.4}/features/browser/browser_window_managemenet.feature +0 -0
  104. {cucu-1.0.2 → cucu-1.0.4}/features/browser/buttons.feature +0 -0
  105. {cucu-1.0.2 → cucu-1.0.4}/features/browser/checkboxes.feature +0 -0
  106. {cucu-1.0.2 → cucu-1.0.4}/features/browser/clipboard.feature +0 -0
  107. {cucu-1.0.2 → cucu-1.0.4}/features/browser/comboboxes.feature +0 -0
  108. {cucu-1.0.2 → cucu-1.0.4}/features/browser/console_logs.feature +0 -0
  109. {cucu-1.0.2 → cucu-1.0.4}/features/browser/cookies.feature +0 -0
  110. {cucu-1.0.2 → cucu-1.0.4}/features/browser/draggables.feature +0 -0
  111. {cucu-1.0.2 → cucu-1.0.4}/features/browser/dropdowns.feature +0 -0
  112. {cucu-1.0.2 → cucu-1.0.4}/features/browser/duplicate_buttons.feature +0 -0
  113. {cucu-1.0.2 → cucu-1.0.4}/features/browser/duplicate_draggables.feature +0 -0
  114. {cucu-1.0.2 → cucu-1.0.4}/features/browser/duplicate_inputs.feature +0 -0
  115. {cucu-1.0.2 → cucu-1.0.4}/features/browser/file_downloads.feature +0 -0
  116. {cucu-1.0.2 → cucu-1.0.4}/features/browser/frames.feature +0 -0
  117. {cucu-1.0.2 → cucu-1.0.4}/features/browser/fuzzy_rules.feature +0 -0
  118. {cucu-1.0.2 → cucu-1.0.4}/features/browser/helpers.feature +0 -0
  119. {cucu-1.0.2 → cucu-1.0.4}/features/browser/images.feature +0 -0
  120. {cucu-1.0.2 → cucu-1.0.4}/features/browser/inputs.feature +0 -0
  121. {cucu-1.0.2 → cucu-1.0.4}/features/browser/inputs_limits.feature +0 -0
  122. {cucu-1.0.2 → cucu-1.0.4}/features/browser/links.feature +0 -0
  123. {cucu-1.0.2 → cucu-1.0.4}/features/browser/mht.feature +0 -0
  124. {cucu-1.0.2 → cucu-1.0.4}/features/browser/page_checks.feature +0 -0
  125. {cucu-1.0.2 → cucu-1.0.4}/features/browser/radio_buttons.feature +0 -0
  126. {cucu-1.0.2 → cucu-1.0.4}/features/browser/tables.feature +0 -0
  127. {cucu-1.0.2 → cucu-1.0.4}/features/browser/tabs.feature +0 -0
  128. {cucu-1.0.2 → cucu-1.0.4}/features/browser/text.feature +0 -0
  129. {cucu-1.0.2 → cucu-1.0.4}/features/cli/config.feature +0 -0
  130. {cucu-1.0.2 → cucu-1.0.4}/features/cli/help.feature +0 -0
  131. {cucu-1.0.2 → cucu-1.0.4}/features/cli/internals.feature +0 -0
  132. {cucu-1.0.2 → cucu-1.0.4}/features/cli/ipdb.feature +0 -0
  133. {cucu-1.0.2 → cucu-1.0.4}/features/cli/lint.feature +0 -0
  134. {cucu-1.0.2 → cucu-1.0.4}/features/cli/lsp.feature +0 -0
  135. {cucu-1.0.2 → cucu-1.0.4}/features/cli/report_search_and_sorting.feature +0 -0
  136. {cucu-1.0.2 → cucu-1.0.4}/features/cli/report_with_custom_failure_handler.feature +0 -0
  137. {cucu-1.0.2 → cucu-1.0.4}/features/cli/report_with_custom_subheader.feature +0 -0
  138. {cucu-1.0.2 → cucu-1.0.4}/features/cli/report_with_custom_tags.feature +0 -0
  139. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run.feature +0 -0
  140. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_outputs.feature +0 -0
  141. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_hooks.feature +0 -0
  142. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_junit.feature +0 -0
  143. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_logging.feature +0 -0
  144. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_report.feature +0 -0
  145. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_tags.feature +0 -0
  146. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_thread_dumper.feature +0 -0
  147. {cucu-1.0.2 → cucu-1.0.4}/features/cli/run_with_workers.feature +0 -0
  148. {cucu-1.0.2 → cucu-1.0.4}/features/cli/secrets.feature +0 -0
  149. {cucu-1.0.2 → cucu-1.0.4}/features/cli/steps.feature +0 -0
  150. {cucu-1.0.2 → cucu-1.0.4}/features/cli/vars.feature +0 -0
  151. {cucu-1.0.2 → cucu-1.0.4}/features/environment.py +0 -0
  152. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/before_retry_handlers.feature +0 -0
  153. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/repeating_steps.feature +0 -0
  154. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/run_after_scenario_steps.feature +0 -0
  155. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/run_and_measure.feature +0 -0
  156. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/run_other_features.feature +0 -0
  157. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/run_scenarios_conditionally.feature +0 -0
  158. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/run_steps_conditionally.feature +0 -0
  159. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/run_steps_on_element_visibilty.feature +0 -0
  160. {cucu-1.0.2 → cucu-1.0.4}/features/flow_control/wait_for_steps.feature +0 -0
  161. {cucu-1.0.2 → cucu-1.0.4}/features/os/command_steps.feature +0 -0
  162. {cucu-1.0.2 → cucu-1.0.4}/features/os/file_steps.feature +0 -0
  163. {cucu-1.0.2 → cucu-1.0.4}/features/os/platform_steps.feature +0 -0
  164. {cucu-1.0.2 → cucu-1.0.4}/features/os/screenshot.feature +0 -0
  165. {cucu-1.0.2 → cucu-1.0.4}/features/os/variables.feature +0 -0
  166. {cucu-1.0.2 → cucu-1.0.4}/features/steps/__init__.py +0 -0
  167. {cucu-1.0.2 → cucu-1.0.4}/features/steps/cucu_steps.py +0 -0
  168. {cucu-1.0.2 → cucu-1.0.4}/logo.png +0 -0
  169. {cucu-1.0.2 → cucu-1.0.4}/renovate.json +0 -0
  170. {cucu-1.0.2 → cucu-1.0.4}/sonar-project.properties +0 -0
  171. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/__init__.py +0 -0
  172. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/ansi_parser.py +0 -0
  173. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/behave_tweaks.py +0 -0
  174. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/browser/__init__.py +0 -0
  175. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/browser/core.py +0 -0
  176. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/browser/frames.py +0 -0
  177. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/browser/selenium.py +0 -0
  178. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/browser/selenium_tweaks.py +0 -0
  179. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/cli/__init__.py +0 -0
  180. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/cli/core.py +0 -0
  181. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/cli/run.py +0 -0
  182. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/cli/steps.py +0 -0
  183. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/cli/thread_dumper.py +0 -0
  184. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/config.py +0 -0
  185. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/edgedriver_autoinstaller/README.md +0 -0
  186. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/edgedriver_autoinstaller/__init__.py +0 -0
  187. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/edgedriver_autoinstaller/utils.py +0 -0
  188. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/environment.py +0 -0
  189. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/external/jquery/jquery-3.5.1.min.js +0 -0
  190. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/formatter/__init__.py +0 -0
  191. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/formatter/cucu.py +0 -0
  192. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/formatter/json.py +0 -0
  193. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/formatter/junit.py +0 -0
  194. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/fuzzy/__init__.py +0 -0
  195. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/fuzzy/core.py +0 -0
  196. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/fuzzy/fuzzy.js +0 -0
  197. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/helpers.py +0 -0
  198. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/hooks.py +0 -0
  199. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/language_server/__init__.py +0 -0
  200. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/language_server/core.py +0 -0
  201. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/lint/__init__.py +0 -0
  202. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/lint/linter.py +0 -0
  203. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/lint/rules/format.yaml +0 -0
  204. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/logger.py +0 -0
  205. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/matcher/__init__.py +0 -0
  206. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/matcher/core.py +0 -0
  207. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/page_checks.py +0 -0
  208. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/__init__.py +0 -0
  209. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/bootstrap.min.css +0 -0
  210. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/bootstrap.min.js +0 -0
  211. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/dataTables.bootstrap.min.css +0 -0
  212. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/dataTables.bootstrap.min.js +0 -0
  213. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/jquery-3.5.1.min.js +0 -0
  214. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/jquery.dataTables.min.js +0 -0
  215. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/external/popper.min.js +0 -0
  216. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/favicon.png +0 -0
  217. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/html.py +0 -0
  218. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/templates/feature.html +0 -0
  219. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/templates/flat.html +0 -0
  220. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/templates/index.html +0 -0
  221. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/templates/layout.html +0 -0
  222. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/reporter/templates/scenario.html +0 -0
  223. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/__init__.py +0 -0
  224. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/base_steps.py +0 -0
  225. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/browser_steps.py +0 -0
  226. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/button_steps.py +0 -0
  227. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/checkbox_steps.py +0 -0
  228. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/command_steps.py +0 -0
  229. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/comment_steps.py +0 -0
  230. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/draggable_steps.py +0 -0
  231. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/dropdown_steps.py +0 -0
  232. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/filesystem_steps.py +0 -0
  233. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/flow_control_steps.py +0 -0
  234. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/image_steps.py +0 -0
  235. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/input_steps.py +0 -0
  236. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/link_steps.py +0 -0
  237. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/menuitem_steps.py +0 -0
  238. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/platform_steps.py +0 -0
  239. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/radio_steps.py +0 -0
  240. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/step_utils.py +0 -0
  241. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/tab_steps.py +0 -0
  242. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/table_steps.py +0 -0
  243. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/tables.js +0 -0
  244. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/text_steps.py +0 -0
  245. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/variable_steps.py +0 -0
  246. {cucu-1.0.2 → cucu-1.0.4}/src/cucu/steps/webserver_steps.py +0 -0
  247. {cucu-1.0.2 → cucu-1.0.4}/tests/__init__.py +0 -0
  248. {cucu-1.0.2 → cucu-1.0.4}/tests/test_behave_tweaks.py +0 -0
  249. {cucu-1.0.2 → cucu-1.0.4}/tests/test_browser.py +0 -0
  250. {cucu-1.0.2 → cucu-1.0.4}/tests/test_config.py +0 -0
  251. {cucu-1.0.2 → cucu-1.0.4}/tests/test_core.py +0 -0
  252. {cucu-1.0.2 → cucu-1.0.4}/tests/test_language_server.py +0 -0
  253. {cucu-1.0.2 → cucu-1.0.4}/tests/test_reporter_parser.py +0 -0
  254. {cucu-1.0.2 → cucu-1.0.4}/tests/test_table_steps.py +0 -0
@@ -5,62 +5,68 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project closely adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## 1.0.4
9
+ - Change - for retry steps, also log before and after call messages
10
+
11
+ ## 1.0.3
12
+ - Add - functional test for drag and drop file functionality
13
+
8
14
  ## 1.0.2
9
- - chore - fix logo for pypi
15
+ - Chore - fix logo for pypi
10
16
 
11
17
  ## 1.0.1
12
- - chore - fix pyproject.toml authors and urls
13
- - change - add pre-commit to makefile
18
+ - Chore - fix pyproject.toml authors and urls
19
+ - Change - add pre-commit to makefile
14
20
 
15
21
  ## 1.0.0
16
- - change to 1.0.0!
17
- - chore - fix GH workflow for test publish
22
+ - Change to 1.0.0!
23
+ - Chore - fix GH workflow for test publish
18
24
 
19
25
  ## 0.207.0
20
- - chore - prep for publish - p2
21
- - replace poetry with uv
22
- - set default local python to 3.12
23
- - run pre-commit with uv
24
- - fix isort with ruff
26
+ - Chore - prep for publish - p2
27
+ - Replace poetry with uv
28
+ - Set default local python to 3.12
29
+ - Run pre-commit with uv
30
+ - Fix isort with ruff
25
31
 
26
32
  ## 0.206.0
27
- - chore - prep for publish
28
- - replace black with ruff
29
- - remove detect-secrets to be replaced by GH repo security
30
- - remove bandit to be replaced by GH CodeQL
31
- - cleanup makefile
33
+ - Chore - prep for publish
34
+ - Replace black with ruff
35
+ - Remove detect-secrets to be replaced by GH repo security
36
+ - Remove bandit to be replaced by GH CodeQL
37
+ - Cleanup makefile
32
38
 
33
39
  ## 0.205.0
34
- - change - increase information logged for failing before_scenario_hooks
40
+ - Change - increase information logged for failing before_scenario_hooks
35
41
 
36
42
  ## 0.204.0
37
- - chore - add gh workflows for publishing
38
- - chore - fix project metadata
43
+ - Chore - add gh workflows for publishing
44
+ - Chore - fix project metadata
39
45
 
40
46
  ## 0.203.0
41
- - chore - move repo GH org locations
42
- - chore - remove sonarqube
47
+ - Chore - move repo GH org locations
48
+ - Chore - remove sonarqube
43
49
 
44
50
  ## 0.202.0
45
- - add - wait step to saving values from any table cells to a variable
51
+ - Add - wait step to saving values from any table cells to a variable
46
52
 
47
53
  ## 0.201.0
48
- - change - add report path to the JUnit files when available
54
+ - Change - add report path to the JUnit files when available
49
55
 
50
56
  ## 0.200.0
51
- - change - increase the log level of scheduling a feature file
57
+ - Change - increase the log level of scheduling a feature file
52
58
 
53
59
  ## 0.199.0
54
- - chore - remove deprecated CI
55
- - chore - add PR template
60
+ - Chore - remove deprecated CI
61
+ - Chore - add PR template
56
62
 
57
63
  ## 0.198.0
58
- - chore - add sonarqube
59
- - chore - refactor circle config (config-drive executor, embed commands, move workflows up)
60
- - chore - configure renovate
61
- - chore - remove dependabot config (duplicates renovate)
62
- - chore - remove safety (duplicates sonarqube)
63
- - change - swap pebble for mpire, kill procs on run timeout
64
+ - Chore - add sonarqube
65
+ - Chore - refactor circle config (config-drive executor, embed commands, move workflows up)
66
+ - Chore - configure renovate
67
+ - Chore - remove dependabot config (duplicates renovate)
68
+ - Chore - remove safety (duplicates sonarqube)
69
+ - Change - swap pebble for mpire, kill procs on run timeout
64
70
 
65
71
  ## 0.197.0
66
72
  - Fix - before all hooks are now executed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: cucu
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Easy BDD web testing
5
5
  Project-URL: Homepage, https://github.com/dominodatalab/cucu
6
6
  Project-URL: Download, https://pypi.org/project/cucu/
@@ -0,0 +1,89 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Drag and Drop File Upload Test with Validation</title>
7
+ <style>
8
+ #drop-zone {
9
+ width: 500px;
10
+ height: 100px;
11
+ border: 2px dashed #0088cc;
12
+ display: flex;
13
+ justify-content: center;
14
+ align-items: center;
15
+ margin: 20px auto;
16
+ font-family: Arial, sans-serif;
17
+ color: #0088cc;
18
+ background-color: #f9f9f9;
19
+ }
20
+ #drop-zone.hover {
21
+ background-color: #f0f0f0;
22
+ }
23
+ #message {
24
+ text-align: center;
25
+ margin-top: 20px;
26
+ font-family: Arial, sans-serif;
27
+ color: #ff0000;
28
+ }
29
+ </style>
30
+ </head>
31
+ <body>
32
+
33
+ <h2>Drag and Drop File Upload Test</h2>
34
+
35
+ <!-- Drag and Drop Zone -->
36
+ <div id="drop-zone">
37
+ Click or drag file to this area to upload
38
+ </div>
39
+
40
+ <input type="file" id="myFile" style="display: none;">
41
+
42
+ <!-- Validation Message Area -->
43
+ <div id="message"></div>
44
+
45
+ <script>
46
+ const dropZone = document.getElementById('drop-zone');
47
+ const fileInput = document.getElementById('myFile');
48
+ const messageDiv = document.getElementById('message');
49
+
50
+ // Function to display validation messages
51
+ function showMessage(message, isError = false) {
52
+ messageDiv.textContent = message;
53
+ messageDiv.style.color = isError ? '#ff0000' : '#008000'; // Red for errors, green for success
54
+ }
55
+
56
+ // Trigger file input click when the drop zone is clicked
57
+ dropZone.addEventListener('click', function() {
58
+ fileInput.click();
59
+ });
60
+
61
+ // Handle drag over
62
+ dropZone.addEventListener('dragover', function(e) {
63
+ e.preventDefault();
64
+ dropZone.classList.add('hover');
65
+ });
66
+
67
+ // Handle drag leave
68
+ dropZone.addEventListener('dragleave', function() {
69
+ dropZone.classList.remove('hover');
70
+ });
71
+
72
+ // Handle file drop
73
+ dropZone.addEventListener('drop', function(e) {
74
+ e.preventDefault();
75
+ dropZone.classList.remove('hover');
76
+ const files = e.dataTransfer.files;
77
+
78
+ if (files.length > 0) {
79
+ showMessage(`File dropped: ${files[0].name}`, false);
80
+ fileInput.files = files;
81
+ }
82
+ else {
83
+ showMessage('No file was dropped.', true);
84
+ }
85
+ });
86
+ </script>
87
+
88
+ </body>
89
+ </html>
@@ -9,3 +9,9 @@ Feature: File upload
9
9
  And I click the button "upload!"
10
10
  And I save the current url to the variable "URL"
11
11
  Then I should see "{URL}" matches ".*\?filename=file_upload.feature"
12
+
13
+ Scenario: User can drag and drop to upload a file
14
+ Given I start a webserver at directory "data/www" and save the port to the variable "PORT"
15
+ And I open a browser at the url "http://{HOST_ADDRESS}:{PORT}/drag_drop.html"
16
+ When I wait to drag and drop the file "features/browser/file_upload.feature" to "Click or drag file to this area to upload"
17
+ Then I wait to see the text "File dropped: file_upload.feature"
@@ -204,7 +204,7 @@ Feature: Report basics
204
204
  @runtime-timeout
205
205
  Scenario: User can run with a runtime timeout and still produce a valid report
206
206
  Given I run the command "cucu run data/features/slow_features --runtime-timeout 9 --results {CUCU_RESULTS_DIR}/runtime_timeout_reporting_results" and expect exit code "1"
207
- Then I should see the previous step took less than "13" seconds
207
+ Then I should see the previous step took less than "14" seconds
208
208
  When I run the command "cucu report {CUCU_RESULTS_DIR}/runtime_timeout_reporting_results --output {CUCU_RESULTS_DIR}/runtime_timeout_reporting_report" and expect exit code "0"
209
209
  And I start a webserver at directory "{CUCU_RESULTS_DIR}/runtime_timeout_reporting_report/" and save the port to the variable "PORT"
210
210
  And I open a browser at the url "http://{HOST_ADDRESS}:{PORT}/index.html"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cucu"
3
- version = "1.0.2"
3
+ version = "1.0.4"
4
4
  description = "Easy BDD web testing"
5
5
  readme = "README.md"
6
6
  license = { text = "The Clear BSD License" }
@@ -2,7 +2,7 @@ import os
2
2
 
3
3
  import humanize
4
4
 
5
- from cucu import fuzzy, logger, step
5
+ from cucu import fuzzy, logger, retry, step
6
6
  from cucu.utils import take_saw_element_screenshot
7
7
 
8
8
 
@@ -69,7 +69,6 @@ JS_DROP_FILE = """
69
69
  """
70
70
 
71
71
 
72
- @step('I drag and drop the file "{filepath}" to "{name}"')
73
72
  def drag_and_drop_file(ctx, name, filepath):
74
73
  drop_target = fuzzy.find(ctx.browser, name, ["*"])
75
74
  drop_target_html = drop_target.get_attribute("outerHTML")
@@ -78,3 +77,13 @@ def drag_and_drop_file(ctx, name, filepath):
78
77
  )
79
78
  file_input = ctx.browser.execute(JS_DROP_FILE, drop_target, 0, 0)
80
79
  file_input.send_keys(os.path.abspath(filepath))
80
+
81
+
82
+ @step('I drag and drop the file "{filepath}" to "{name}"')
83
+ def should_drag_and_drop_file(ctx, filepath, name):
84
+ drag_and_drop_file(ctx, name, filepath)
85
+
86
+
87
+ @step('I wait to drag and drop the file "{filepath}" to "{name}"')
88
+ def wait_to_drag_and_drop_file(ctx, filepath, name):
89
+ retry(drag_and_drop_file)(ctx, name, filepath)
@@ -11,6 +11,8 @@ import shutil
11
11
  import humanize
12
12
  from tabulate import DataRow, TableFormat, tabulate
13
13
  from tenacity import (
14
+ after_log,
15
+ before_log,
14
16
  before_sleep_log,
15
17
  retry_if_not_exception_type,
16
18
  stop_after_delay,
@@ -119,6 +121,8 @@ def retry(func, wait_up_to_s=None, retry_after_s=None):
119
121
  stop=stop_after_delay(wait_up_to_s),
120
122
  wait=wait_fixed(retry_after_s),
121
123
  retry=retry_if_not_exception_type(StopRetryException),
124
+ before=before_log(logger, logging.DEBUG),
125
+ after=after_log(logger, logging.DEBUG),
122
126
  before_sleep=before_sleep_log(logger, logging.DEBUG),
123
127
  )
124
128
  def new_decorator(*args, **kwargs):
@@ -263,7 +263,7 @@ toml = [
263
263
 
264
264
  [[package]]
265
265
  name = "cucu"
266
- version = "1.0.2"
266
+ version = "1.0.4"
267
267
  source = { editable = "." }
268
268
  dependencies = [
269
269
  { name = "beautifulsoup4" },
@@ -771,8 +771,6 @@ version = "6.0.0"
771
771
  source = { registry = "https://pypi.org/simple" }
772
772
  sdist = { url = "https://files.pythonhosted.org/packages/18/c7/8c6872f7372eb6a6b2e4708b88419fb46b857f7a2e1892966b851cc79fc9/psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2", size = 508067 }
773
773
  wheels = [
774
- { url = "https://files.pythonhosted.org/packages/c5/66/78c9c3020f573c58101dc43a44f6855d01bbbd747e24da2f0c4491200ea3/psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35", size = 249766 },
775
- { url = "https://files.pythonhosted.org/packages/e1/3f/2403aa9558bea4d3854b0e5e567bc3dd8e9fbc1fc4453c0aa9aafeb75467/psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1", size = 253024 },
776
774
  { url = "https://files.pythonhosted.org/packages/0b/37/f8da2fbd29690b3557cca414c1949f92162981920699cd62095a984983bf/psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0", size = 250961 },
777
775
  { url = "https://files.pythonhosted.org/packages/35/56/72f86175e81c656a01c4401cd3b1c923f891b31fbcebe98985894176d7c9/psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0", size = 287478 },
778
776
  { url = "https://files.pythonhosted.org/packages/19/74/f59e7e0d392bc1070e9a70e2f9190d652487ac115bb16e2eff6b22ad1d24/psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd", size = 290455 },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes