cucu 1.0.11__tar.gz → 1.0.12__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 (255) hide show
  1. {cucu-1.0.11 → cucu-1.0.12}/.circleci/config.yml +120 -3
  2. {cucu-1.0.11 → cucu-1.0.12}/.github/workflows/build.yml +10 -10
  3. {cucu-1.0.11 → cucu-1.0.12}/.github/workflows/create_a_new_release.yml +1 -1
  4. {cucu-1.0.11 → cucu-1.0.12}/.github/workflows/publish-production.yml +3 -3
  5. {cucu-1.0.11 → cucu-1.0.12}/.github/workflows/publish-test.yml +3 -3
  6. {cucu-1.0.11 → cucu-1.0.12}/.gitignore +1 -0
  7. {cucu-1.0.11 → cucu-1.0.12}/CHANGELOG.md +11 -0
  8. {cucu-1.0.11 → cucu-1.0.12}/CONTRIBUTING.md +63 -2
  9. {cucu-1.0.11 → cucu-1.0.12}/PKG-INFO +11 -6
  10. {cucu-1.0.11 → cucu-1.0.12}/README.md +6 -1
  11. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_logging.feature +1 -1
  12. {cucu-1.0.11 → cucu-1.0.12}/features/cli/config.feature +9 -9
  13. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run.feature +2 -2
  14. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_outputs.feature +5 -5
  15. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_hooks.feature +2 -2
  16. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_logging.feature +6 -6
  17. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_tags.feature +2 -2
  18. {cucu-1.0.11 → cucu-1.0.12}/features/cli/vars.feature +1 -1
  19. {cucu-1.0.11 → cucu-1.0.12}/pyproject.toml +6 -6
  20. cucu-1.0.12/renovate.json +47 -0
  21. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/browser/selenium.py +4 -4
  22. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/cli/core.py +2 -2
  23. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/environment.py +1 -1
  24. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/formatter/junit.py +23 -12
  25. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/logger.py +15 -1
  26. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/page_checks.py +1 -1
  27. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/html.py +3 -3
  28. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/table_steps.py +1 -1
  29. {cucu-1.0.11 → cucu-1.0.12}/uv.lock +86 -63
  30. cucu-1.0.11/renovate.json +0 -16
  31. {cucu-1.0.11 → cucu-1.0.12}/.env +0 -0
  32. {cucu-1.0.11 → cucu-1.0.12}/.github/CODEOWNERS +0 -0
  33. {cucu-1.0.11 → cucu-1.0.12}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  34. {cucu-1.0.11 → cucu-1.0.12}/.pre-commit-config.yaml +0 -0
  35. {cucu-1.0.11 → cucu-1.0.12}/.python-version +0 -0
  36. {cucu-1.0.11 → cucu-1.0.12}/CODE_OF_CONDUCT.md +0 -0
  37. {cucu-1.0.11 → cucu-1.0.12}/CONTRIBUTORS.md +0 -0
  38. {cucu-1.0.11 → cucu-1.0.12}/LICENSE +0 -0
  39. {cucu-1.0.11 → cucu-1.0.12}/Makefile +0 -0
  40. {cucu-1.0.11 → cucu-1.0.12}/bin/cucu +0 -0
  41. {cucu-1.0.11 → cucu-1.0.12}/bin/start_seleniarm_hub.sh +0 -0
  42. {cucu-1.0.11 → cucu-1.0.12}/bin/start_selenium_hub.sh +0 -0
  43. {cucu-1.0.11 → cucu-1.0.12}/cortex.yaml +0 -0
  44. {cucu-1.0.11 → cucu-1.0.12}/data/features/custom_step_test/custom_step.feature +0 -0
  45. {cucu-1.0.11 → cucu-1.0.12}/data/features/custom_step_test/steps/__init__.py +0 -0
  46. {cucu-1.0.11 → cucu-1.0.12}/data/features/custom_step_test/steps/cucu_steps.py +0 -0
  47. {cucu-1.0.11 → cucu-1.0.12}/data/features/echo.feature +0 -0
  48. {cucu-1.0.11 → cucu-1.0.12}/data/features/environment.py +0 -0
  49. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_skipping_scenarios_by_file_presence.feature +0 -0
  50. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_background.feature +0 -0
  51. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_background_using_substeps.feature +0 -0
  52. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_failing_scenario.feature +0 -0
  53. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_failing_scenario_with_table.feature +0 -0
  54. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_failing_scenario_with_web.feature +0 -0
  55. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_long_names.feature +0 -0
  56. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_mixed_results.feature +0 -0
  57. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_multilines_and_tables.feature +0 -0
  58. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_passing_scenario.feature +0 -0
  59. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_passing_scenario_with_web.feature +0 -0
  60. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_platform_specific_scenarios.feature +0 -0
  61. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_scenario_outline.feature +0 -0
  62. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_scenario_using_nth_type.feature +0 -0
  63. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_tagging.feature +0 -0
  64. {cucu-1.0.11 → cucu-1.0.12}/data/features/feature_with_xml_tags.feature +0 -0
  65. {cucu-1.0.11 → cucu-1.0.12}/data/features/multiple_scenarios_with_browser_steps.feature +0 -0
  66. {cucu-1.0.11 → cucu-1.0.12}/data/features/scenario_stop_retry_early.feature +0 -0
  67. {cucu-1.0.11 → cucu-1.0.12}/data/features/scenario_that_fails_with_after_scenario_steps.feature +0 -0
  68. {cucu-1.0.11 → cucu-1.0.12}/data/features/scenario_that_passes_with_after_scenario_steps.feature +0 -0
  69. {cucu-1.0.11 → cucu-1.0.12}/data/features/scenario_with_console_logs.feature +0 -0
  70. {cucu-1.0.11 → cucu-1.0.12}/data/features/scenario_with_substeps.feature +0 -0
  71. {cucu-1.0.11 → cucu-1.0.12}/data/features/scenario_with_substeps_and_logging.feature +0 -0
  72. {cucu-1.0.11 → cucu-1.0.12}/data/features/slow_features/slow_feature1.feature +0 -0
  73. {cucu-1.0.11 → cucu-1.0.12}/data/features/slow_features/slow_feature2.feature +0 -0
  74. {cucu-1.0.11 → cucu-1.0.12}/data/features/slow_features/slow_feature3.feature +0 -0
  75. {cucu-1.0.11 → cucu-1.0.12}/data/features/slow_features/slow_feature4.feature +0 -0
  76. {cucu-1.0.11 → cucu-1.0.12}/data/features/slow_features/slow_feature5.feature +0 -0
  77. {cucu-1.0.11 → cucu-1.0.12}/data/features/steps/__init__.py +0 -0
  78. {cucu-1.0.11 → cucu-1.0.12}/data/features/steps/cucu_steps.py +0 -0
  79. {cucu-1.0.11 → cucu-1.0.12}/data/features/tagged_features/tagged_feature1.feature +0 -0
  80. {cucu-1.0.11 → cucu-1.0.12}/data/features/tagged_features/tagged_feature2.feature +0 -0
  81. {cucu-1.0.11 → cucu-1.0.12}/data/features/tagged_features/tagged_feature3.feature +0 -0
  82. {cucu-1.0.11 → cucu-1.0.12}/data/features/with_secret/cucurc.yml +0 -0
  83. {cucu-1.0.11 → cucu-1.0.12}/data/features/with_secret/scenario_with_comments.feature +0 -0
  84. {cucu-1.0.11 → cucu-1.0.12}/data/unit/ansi.log +0 -0
  85. {cucu-1.0.11 → cucu-1.0.12}/data/unit/ansi.log.html +0 -0
  86. {cucu-1.0.11 → cucu-1.0.12}/data/www/broken_images.html +0 -0
  87. {cucu-1.0.11 → cucu-1.0.12}/data/www/buttons.html +0 -0
  88. {cucu-1.0.11 → cucu-1.0.12}/data/www/checkboxes.html +0 -0
  89. {cucu-1.0.11 → cucu-1.0.12}/data/www/clipboard.html +0 -0
  90. {cucu-1.0.11 → cucu-1.0.12}/data/www/comboboxes.html +0 -0
  91. {cucu-1.0.11 → cucu-1.0.12}/data/www/console_logging.html +0 -0
  92. {cucu-1.0.11 → cucu-1.0.12}/data/www/cookies.html +0 -0
  93. {cucu-1.0.11 → cucu-1.0.12}/data/www/counter.html +0 -0
  94. {cucu-1.0.11 → cucu-1.0.12}/data/www/drag_drop.html +0 -0
  95. {cucu-1.0.11 → cucu-1.0.12}/data/www/draggables.html +0 -0
  96. {cucu-1.0.11 → cucu-1.0.12}/data/www/dropdowns.html +0 -0
  97. {cucu-1.0.11 → cucu-1.0.12}/data/www/duplicate_buttons.html +0 -0
  98. {cucu-1.0.11 → cucu-1.0.12}/data/www/duplicate_inputs.html +0 -0
  99. {cucu-1.0.11 → cucu-1.0.12}/data/www/dynamic_dropdown.html +0 -0
  100. {cucu-1.0.11 → cucu-1.0.12}/data/www/file.txt +0 -0
  101. {cucu-1.0.11 → cucu-1.0.12}/data/www/files.html +0 -0
  102. {cucu-1.0.11 → cucu-1.0.12}/data/www/frames.html +0 -0
  103. {cucu-1.0.11 → cucu-1.0.12}/data/www/fuzzy_rules.html +0 -0
  104. {cucu-1.0.11 → cucu-1.0.12}/data/www/images.html +0 -0
  105. {cucu-1.0.11 → cucu-1.0.12}/data/www/inputs.html +0 -0
  106. {cucu-1.0.11 → cucu-1.0.12}/data/www/js/util.js +0 -0
  107. {cucu-1.0.11 → cucu-1.0.12}/data/www/links.html +0 -0
  108. {cucu-1.0.11 → cucu-1.0.12}/data/www/nothing_to_see_here.html +0 -0
  109. {cucu-1.0.11 → cucu-1.0.12}/data/www/page_that_loads_forever.html +0 -0
  110. {cucu-1.0.11 → cucu-1.0.12}/data/www/radio_buttons.html +0 -0
  111. {cucu-1.0.11 → cucu-1.0.12}/data/www/stars.png +0 -0
  112. {cucu-1.0.11 → cucu-1.0.12}/data/www/tables.html +0 -0
  113. {cucu-1.0.11 → cucu-1.0.12}/data/www/tabs.html +0 -0
  114. {cucu-1.0.11 → cucu-1.0.12}/data/www/text.html +0 -0
  115. {cucu-1.0.11 → cucu-1.0.12}/features/browser/browser_tab_managemenet.feature +0 -0
  116. {cucu-1.0.11 → cucu-1.0.12}/features/browser/browser_window_managemenet.feature +0 -0
  117. {cucu-1.0.11 → cucu-1.0.12}/features/browser/buttons.feature +0 -0
  118. {cucu-1.0.11 → cucu-1.0.12}/features/browser/checkboxes.feature +0 -0
  119. {cucu-1.0.11 → cucu-1.0.12}/features/browser/clipboard.feature +0 -0
  120. {cucu-1.0.11 → cucu-1.0.12}/features/browser/comboboxes.feature +0 -0
  121. {cucu-1.0.11 → cucu-1.0.12}/features/browser/console_logs.feature +0 -0
  122. {cucu-1.0.11 → cucu-1.0.12}/features/browser/cookies.feature +0 -0
  123. {cucu-1.0.11 → cucu-1.0.12}/features/browser/draggables.feature +0 -0
  124. {cucu-1.0.11 → cucu-1.0.12}/features/browser/dropdowns.feature +0 -0
  125. {cucu-1.0.11 → cucu-1.0.12}/features/browser/duplicate_buttons.feature +0 -0
  126. {cucu-1.0.11 → cucu-1.0.12}/features/browser/duplicate_draggables.feature +0 -0
  127. {cucu-1.0.11 → cucu-1.0.12}/features/browser/duplicate_inputs.feature +0 -0
  128. {cucu-1.0.11 → cucu-1.0.12}/features/browser/file_downloads.feature +0 -0
  129. {cucu-1.0.11 → cucu-1.0.12}/features/browser/file_upload.feature +0 -0
  130. {cucu-1.0.11 → cucu-1.0.12}/features/browser/frames.feature +0 -0
  131. {cucu-1.0.11 → cucu-1.0.12}/features/browser/fuzzy_rules.feature +0 -0
  132. {cucu-1.0.11 → cucu-1.0.12}/features/browser/helpers.feature +0 -0
  133. {cucu-1.0.11 → cucu-1.0.12}/features/browser/images.feature +0 -0
  134. {cucu-1.0.11 → cucu-1.0.12}/features/browser/inputs.feature +0 -0
  135. {cucu-1.0.11 → cucu-1.0.12}/features/browser/inputs_limits.feature +0 -0
  136. {cucu-1.0.11 → cucu-1.0.12}/features/browser/links.feature +0 -0
  137. {cucu-1.0.11 → cucu-1.0.12}/features/browser/mht.feature +0 -0
  138. {cucu-1.0.11 → cucu-1.0.12}/features/browser/page_checks.feature +0 -0
  139. {cucu-1.0.11 → cucu-1.0.12}/features/browser/radio_buttons.feature +0 -0
  140. {cucu-1.0.11 → cucu-1.0.12}/features/browser/tables.feature +0 -0
  141. {cucu-1.0.11 → cucu-1.0.12}/features/browser/tabs.feature +0 -0
  142. {cucu-1.0.11 → cucu-1.0.12}/features/browser/text.feature +0 -0
  143. {cucu-1.0.11 → cucu-1.0.12}/features/cli/help.feature +0 -0
  144. {cucu-1.0.11 → cucu-1.0.12}/features/cli/internals.feature +0 -0
  145. {cucu-1.0.11 → cucu-1.0.12}/features/cli/ipdb.feature +0 -0
  146. {cucu-1.0.11 → cucu-1.0.12}/features/cli/lint.feature +0 -0
  147. {cucu-1.0.11 → cucu-1.0.12}/features/cli/lsp.feature +0 -0
  148. {cucu-1.0.11 → cucu-1.0.12}/features/cli/report_basics.feature +0 -0
  149. {cucu-1.0.11 → cucu-1.0.12}/features/cli/report_search_and_sorting.feature +0 -0
  150. {cucu-1.0.11 → cucu-1.0.12}/features/cli/report_with_custom_failure_handler.feature +0 -0
  151. {cucu-1.0.11 → cucu-1.0.12}/features/cli/report_with_custom_subheader.feature +0 -0
  152. {cucu-1.0.11 → cucu-1.0.12}/features/cli/report_with_custom_tags.feature +0 -0
  153. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_junit.feature +0 -0
  154. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_report.feature +0 -0
  155. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_thread_dumper.feature +0 -0
  156. {cucu-1.0.11 → cucu-1.0.12}/features/cli/run_with_workers.feature +0 -0
  157. {cucu-1.0.11 → cucu-1.0.12}/features/cli/secrets.feature +0 -0
  158. {cucu-1.0.11 → cucu-1.0.12}/features/cli/steps.feature +0 -0
  159. {cucu-1.0.11 → cucu-1.0.12}/features/environment.py +0 -0
  160. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/before_retry_handlers.feature +0 -0
  161. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/repeating_steps.feature +0 -0
  162. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/run_after_scenario_steps.feature +0 -0
  163. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/run_and_measure.feature +0 -0
  164. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/run_other_features.feature +0 -0
  165. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/run_scenarios_conditionally.feature +0 -0
  166. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/run_steps_conditionally.feature +0 -0
  167. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/run_steps_on_element_visibilty.feature +0 -0
  168. {cucu-1.0.11 → cucu-1.0.12}/features/flow_control/wait_for_steps.feature +0 -0
  169. {cucu-1.0.11 → cucu-1.0.12}/features/os/command_steps.feature +0 -0
  170. {cucu-1.0.11 → cucu-1.0.12}/features/os/file_steps.feature +0 -0
  171. {cucu-1.0.11 → cucu-1.0.12}/features/os/platform_steps.feature +0 -0
  172. {cucu-1.0.11 → cucu-1.0.12}/features/os/screenshot.feature +0 -0
  173. {cucu-1.0.11 → cucu-1.0.12}/features/os/variables.feature +0 -0
  174. {cucu-1.0.11 → cucu-1.0.12}/features/steps/__init__.py +0 -0
  175. {cucu-1.0.11 → cucu-1.0.12}/features/steps/cucu_steps.py +0 -0
  176. {cucu-1.0.11 → cucu-1.0.12}/logo.png +0 -0
  177. {cucu-1.0.11 → cucu-1.0.12}/sonar-project.properties +0 -0
  178. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/__init__.py +0 -0
  179. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/ansi_parser.py +0 -0
  180. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/behave_tweaks.py +0 -0
  181. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/browser/__init__.py +0 -0
  182. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/browser/core.py +0 -0
  183. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/browser/frames.py +0 -0
  184. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/browser/selenium_tweaks.py +0 -0
  185. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/cli/__init__.py +0 -0
  186. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/cli/run.py +0 -0
  187. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/cli/steps.py +0 -0
  188. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/cli/thread_dumper.py +0 -0
  189. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/config.py +0 -0
  190. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/edgedriver_autoinstaller/README.md +0 -0
  191. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/edgedriver_autoinstaller/__init__.py +0 -0
  192. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/edgedriver_autoinstaller/utils.py +0 -0
  193. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/external/jquery/jquery-3.5.1.min.js +0 -0
  194. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/formatter/__init__.py +0 -0
  195. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/formatter/cucu.py +0 -0
  196. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/formatter/json.py +0 -0
  197. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/fuzzy/__init__.py +0 -0
  198. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/fuzzy/core.py +0 -0
  199. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/fuzzy/fuzzy.js +0 -0
  200. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/helpers.py +0 -0
  201. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/hooks.py +0 -0
  202. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/language_server/__init__.py +0 -0
  203. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/language_server/core.py +0 -0
  204. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/lint/__init__.py +0 -0
  205. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/lint/linter.py +0 -0
  206. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/lint/rules/format.yaml +0 -0
  207. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/matcher/__init__.py +0 -0
  208. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/matcher/core.py +0 -0
  209. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/__init__.py +0 -0
  210. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/bootstrap.min.css +0 -0
  211. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/bootstrap.min.js +0 -0
  212. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/dataTables.bootstrap.min.css +0 -0
  213. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/dataTables.bootstrap.min.js +0 -0
  214. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/jquery-3.5.1.min.js +0 -0
  215. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/jquery.dataTables.min.js +0 -0
  216. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/external/popper.min.js +0 -0
  217. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/favicon.png +0 -0
  218. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/templates/feature.html +0 -0
  219. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/templates/flat.html +0 -0
  220. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/templates/index.html +0 -0
  221. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/templates/layout.html +0 -0
  222. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/reporter/templates/scenario.html +0 -0
  223. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/__init__.py +0 -0
  224. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/base_steps.py +0 -0
  225. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/browser_steps.py +0 -0
  226. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/button_steps.py +0 -0
  227. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/checkbox_steps.py +0 -0
  228. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/command_steps.py +0 -0
  229. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/comment_steps.py +0 -0
  230. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/draggable_steps.py +0 -0
  231. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/dropdown_steps.py +0 -0
  232. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/file_input_steps.py +0 -0
  233. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/filesystem_steps.py +0 -0
  234. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/flow_control_steps.py +0 -0
  235. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/image_steps.py +0 -0
  236. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/input_steps.py +0 -0
  237. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/link_steps.py +0 -0
  238. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/menuitem_steps.py +0 -0
  239. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/platform_steps.py +0 -0
  240. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/radio_steps.py +0 -0
  241. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/step_utils.py +0 -0
  242. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/tab_steps.py +0 -0
  243. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/tables.js +0 -0
  244. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/text_steps.py +0 -0
  245. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/variable_steps.py +0 -0
  246. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/steps/webserver_steps.py +0 -0
  247. {cucu-1.0.11 → cucu-1.0.12}/src/cucu/utils.py +0 -0
  248. {cucu-1.0.11 → cucu-1.0.12}/tests/__init__.py +0 -0
  249. {cucu-1.0.11 → cucu-1.0.12}/tests/test_behave_tweaks.py +0 -0
  250. {cucu-1.0.11 → cucu-1.0.12}/tests/test_browser.py +0 -0
  251. {cucu-1.0.11 → cucu-1.0.12}/tests/test_config.py +0 -0
  252. {cucu-1.0.11 → cucu-1.0.12}/tests/test_core.py +0 -0
  253. {cucu-1.0.11 → cucu-1.0.12}/tests/test_language_server.py +0 -0
  254. {cucu-1.0.11 → cucu-1.0.12}/tests/test_reporter_parser.py +0 -0
  255. {cucu-1.0.11 → cucu-1.0.12}/tests/test_table_steps.py +0 -0
@@ -22,11 +22,16 @@ workflows:
22
22
  browser: firefox
23
23
  requires:
24
24
  - build
25
+ - coverage:
26
+ requires:
27
+ - test-chrome
28
+ - test-edge
29
+ - test-firefox
25
30
 
26
31
  jobs:
27
32
  build:
28
33
  docker:
29
- - image: cimg/python:3.12
34
+ - image: cimg/python:3.12@sha256:12ecf4f4bc4d76e6c76e631124196490ddd7f9f5887aacd6080f8a9facbca8ab
30
35
  resource_class: medium
31
36
  steps:
32
37
  - checkout
@@ -50,7 +55,7 @@ jobs:
50
55
  type: string
51
56
  default: "chrome"
52
57
  docker:
53
- - image: cimg/python:3.12
58
+ - image: cimg/python:3.12@sha256:12ecf4f4bc4d76e6c76e631124196490ddd7f9f5887aacd6080f8a9facbca8ab
54
59
  environment:
55
60
  # Starting with python 3.12 coverage could be 2x slower so use experimental COVERAGE_CORE=sysmon
56
61
  COVERAGE_CORE: sysmon
@@ -91,16 +96,18 @@ jobs:
91
96
  - run:
92
97
  name: code_coverage_check
93
98
  command: |
94
- set +eo pipefail
99
+ set -euxo pipefail
95
100
  uv run coverage combine .coverage.*
96
101
  uv run coverage html
97
102
  uv run coverage report
98
103
  uv run coverage xml
104
+ mv .coverage .coverage.<<parameters.browser>>
99
105
  mv coverage.xml coverage-<<parameters.browser>>.xml
100
106
  - persist_to_workspace:
101
107
  root: .
102
108
  paths:
103
109
  - coverage-<<parameters.browser>>.xml
110
+ - .coverage.<<parameters.browser>>
104
111
  - run:
105
112
  name: tar up results and reporting
106
113
  command: |
@@ -108,6 +115,8 @@ jobs:
108
115
  tar cvfz report.tgz report
109
116
  tar cvfz junit_results.tgz junit_results
110
117
  when: always
118
+ - store_artifacts:
119
+ path: .coverage.<<parameters.browser>>
111
120
  - store_artifacts:
112
121
  path: coverage-<<parameters.browser>>.xml
113
122
  - store_artifacts:
@@ -119,6 +128,114 @@ jobs:
119
128
  - store_test_results:
120
129
  path: junit_results
121
130
 
131
+ coverage:
132
+ docker:
133
+ - image: cimg/python:3.12@sha256:12ecf4f4bc4d76e6c76e631124196490ddd7f9f5887aacd6080f8a9facbca8ab
134
+ resource_class: small
135
+ steps:
136
+ - checkout
137
+ - inline-orb-uv/setup-uv
138
+ - attach_workspace:
139
+ at: .
140
+ - run:
141
+ name: Combine coverage reports
142
+ command: |
143
+ set -euxo pipefail
144
+ uv run coverage combine
145
+ uv run coverage xml
146
+ uv run coverage html
147
+ uv run coverage json
148
+ uv run coverage report
149
+ - store_artifacts:
150
+ path: coverage.xml
151
+ - store_artifacts:
152
+ path: coverage.json
153
+ - store_artifacts:
154
+ path: htmlcov
155
+ - run:
156
+ name: Generate shields.io badge json and redirect
157
+ command: |
158
+ set -euxo pipefail
159
+ echo "export COVERAGE=$(jq '.totals.percent_covered | round ' coverage.json)" >> $BASH_ENV
160
+ source $BASH_ENV
161
+
162
+ if [[ $COVERAGE -ge 95 ]]; then
163
+ COLOR="brightgreen"
164
+ elif [[ $COVERAGE -ge 90 ]]; then
165
+ COLOR="green"
166
+ elif [[ $COVERAGE -ge 75 ]]; then
167
+ COLOR="yellowgreen"
168
+ elif [[ $COVERAGE -ge 60 ]]; then
169
+ COLOR="yellow"
170
+ elif [[ $COVERAGE -ge 40 ]]; then
171
+ COLOR="orange"
172
+ else
173
+ COLOR="red"
174
+ fi
175
+
176
+ # escape the double less than sign for CircleCI
177
+ cat \<<EOF > cov_badge.json
178
+ {
179
+ "schemaVersion": 1,
180
+ "label": "coverage",
181
+ "message": "${COVERAGE}%",
182
+ "color": "${COLOR}"
183
+ }
184
+ EOF
185
+
186
+ # Create a simple redirect to the CircleCI build page
187
+ cat \<<EOF > cov_index.html
188
+ <html>
189
+ <head>
190
+ <meta http-equiv="refresh" content="0; url=${CIRCLE_BUILD_URL}" />
191
+ </head>
192
+ <body></body>
193
+ </html>
194
+ EOF
195
+ - store_artifacts:
196
+ path: cov_.html
197
+ - store_artifacts:
198
+ path: cov_badge.json
199
+ - run:
200
+ name: Publish to GitHub Pages
201
+ command: |
202
+ set -euxo pipefail
203
+
204
+ # Get commit hash from main branch
205
+ GIT_HASH=$(git rev-parse --short HEAD)
206
+ COMMIT_MSG="[skip ci] Update coverage to ${COVERAGE}% for commit ${GIT_HASH}"
207
+
208
+ git config --global user.name ${CIRCLE_USERNAME:-"open-source-bot"}
209
+ git config --global user.email "open-source@dominodatalab.com"
210
+
211
+ # Fetch or create gh-pages branch
212
+ git fetch origin gh-pages || git checkout --orphan gh-pages
213
+ git checkout gh-pages
214
+
215
+ # Ensure docs directory exists
216
+ COVERAGE_BADGE_DIR=docs/coverage/badge
217
+ mkdir -p $COVERAGE_BADGE_DIR
218
+
219
+ # Move and overwrite coverage badge and redirect
220
+ mv -f cov_badge.json $COVERAGE_BADGE_DIR/badge.json
221
+ mv -f cov_index.html $COVERAGE_BADGE_DIR/index.html
222
+
223
+ COVERAGE_HTML_DIR=docs/coverage/html
224
+ # Move and overwrite coverage report
225
+ rm -rf ${COVERAGE_HTML_DIR}*
226
+ mv -f htmlcov ${COVERAGE_HTML_DIR}
227
+ rm ${COVERAGE_HTML_DIR}/.gitignore
228
+
229
+ # Commit changes
230
+ git status
231
+ git add docs
232
+ git commit -m "${COMMIT_MSG}" || echo "No changes to commit"
233
+
234
+ # Push changes if main or override
235
+ if [[ "${CIRCLE_BRANCH:-}" == main || "${OVERRIDE_PAGES:-}" == true ]]; then
236
+ git push origin gh-pages
237
+ fi
238
+
122
239
  orbs:
123
240
  inline-orb-uv:
124
241
  commands:
@@ -10,9 +10,9 @@ jobs:
10
10
  lint:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
- - uses: actions/checkout@v4
13
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
14
14
  - name: Install the latest version of uv
15
- uses: astral-sh/setup-uv@v2
15
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5
16
16
  with:
17
17
  enable-cache: true
18
18
  - name: Install cucu with Python 3.12
@@ -26,9 +26,9 @@ jobs:
26
26
  needs: lint
27
27
  runs-on: ubuntu-latest
28
28
  steps:
29
- - uses: actions/checkout@v4
29
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
30
30
  - name: Install the latest version of uv
31
- uses: astral-sh/setup-uv@v2
31
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5
32
32
  with:
33
33
  enable-cache: true
34
34
  - name: Install cucu with Python 3.12
@@ -45,12 +45,12 @@ jobs:
45
45
  tar cvfz output.tgz output
46
46
  - name: save output
47
47
  if: always()
48
- uses: actions/upload-artifact@v4
48
+ uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
49
49
  with:
50
50
  name: unit-tests
51
51
  path: output.tgz
52
52
  - name: Publish Test Results
53
- uses: EnricoMi/publish-unit-test-result-action@v2
53
+ uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2
54
54
  if: always()
55
55
  with:
56
56
  check_name: "unit results"
@@ -81,9 +81,9 @@ jobs:
81
81
  SCREEN_HEIGHT: 768
82
82
 
83
83
  steps:
84
- - uses: actions/checkout@v4
84
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
85
85
  - name: Install the latest version of uv
86
- uses: astral-sh/setup-uv@v2
86
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5
87
87
  with:
88
88
  enable-cache: true
89
89
  - name: Install Python 3.12
@@ -113,12 +113,12 @@ jobs:
113
113
  tar cvfz output.tgz output
114
114
  - name: save output
115
115
  if: always()
116
- uses: actions/upload-artifact@v4
116
+ uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
117
117
  with:
118
118
  name: ${{ matrix.browser }}-tests
119
119
  path: output.tgz
120
120
  - name: Publish Test Results
121
- uses: EnricoMi/publish-unit-test-result-action@v2
121
+ uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2
122
122
  if: always()
123
123
  with:
124
124
  check_name: "${{ matrix.browser }} results"
@@ -17,7 +17,7 @@ jobs:
17
17
  steps:
18
18
  - id: check_out
19
19
  name: Check out code
20
- uses: actions/checkout@v4
20
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
21
21
  - id: release_if_needed
22
22
  name: Release on version change merged
23
23
  env:
@@ -13,12 +13,12 @@ jobs:
13
13
  contents: read # For non-public repo
14
14
  steps:
15
15
  - name: checkout main
16
- uses: actions/checkout@v4
16
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
17
17
  with:
18
18
  ref: main
19
19
  fetch-depth: 0
20
20
  - name: Install the latest version of uv
21
- uses: astral-sh/setup-uv@v2
21
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5
22
22
  with:
23
23
  enable-cache: true
24
24
  - name: Install cucu with Python 3.12
@@ -28,4 +28,4 @@ jobs:
28
28
  run: |
29
29
  uv build
30
30
  - name: publish to pypi.org
31
- uses: pypa/gh-action-pypi-publish@v1.12.4
31
+ uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
@@ -15,12 +15,12 @@ jobs:
15
15
  contents: read # For non-public repo
16
16
  steps:
17
17
  - name: checkout main
18
- uses: actions/checkout@v4
18
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
19
19
  with:
20
20
  ref: main
21
21
  fetch-depth: 0
22
22
  - name: Install the latest version of uv
23
- uses: astral-sh/setup-uv@v2
23
+ uses: astral-sh/setup-uv@f94ec6bedd8674c4426838e6b50417d36b6ab231 # v5
24
24
  with:
25
25
  version: "latest"
26
26
  - name: Install cucu with Python 3.12
@@ -30,6 +30,6 @@ jobs:
30
30
  run: |
31
31
  uv build
32
32
  - name: publish to test.pypi.org
33
- uses: pypa/gh-action-pypi-publish@v1.12.4
33
+ uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
34
34
  with:
35
35
  repository-url: https://test.pypi.org/legacy/
@@ -67,6 +67,7 @@ htmlcov/
67
67
  .cache
68
68
  nosetests.xml
69
69
  coverage.xml
70
+ coverage.json
70
71
  *.cover
71
72
  *.py,cover
72
73
  .hypothesis/
@@ -5,6 +5,17 @@ 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.13
9
+ - Chore - use warning instead of deprecated logger.warn method
10
+
11
+ ## 1.0.12
12
+ - Chore - add coverage badge
13
+ - Chore - add docs on dev automation
14
+ - CI - fix renovate config
15
+ - CI - change renovate to ignore python minor versions
16
+ - CI - fix for bots
17
+ - Chore - bump dep versions
18
+
8
19
  ## 1.0.11
9
20
  - Chore - bump psutil
10
21
 
@@ -1,13 +1,31 @@
1
- # Contributing to Cucu
1
+ # Contributing to Cucu <!-- omit from toc -->
2
+
2
3
  Thank you for your interest in contributing to Cucu!
3
4
 
4
- ## Getting started checklist
5
+
6
+ ## Getting started checklist <!-- omit from toc -->
5
7
  1. Read our [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
6
8
  2. Agree to [Developer Certificate of Origin](#developer-certificate-of-origin)
7
9
  3. Glance at the [Design](#design)
8
10
  4. Walk through [Cucu Development](#cucu-development)
9
11
 
10
12
 
13
+ # Table of Contents <!-- omit from toc -->
14
+ - [Developer Certificate of Origin](#developer-certificate-of-origin)
15
+ - [Design](#design)
16
+ - [Why Gherkin (i.e. BDD-style tests)](#why-gherkin-ie-bdd-style-tests)
17
+ - [Notable libraries used](#notable-libraries-used)
18
+ - [Dev Setup](#dev-setup)
19
+ - [Running cucu](#running-cucu)
20
+ - [Debugging cucu](#debugging-cucu)
21
+ - [Running Built In Tests](#running-built-in-tests)
22
+ - [Development Automation](#development-automation)
23
+ - [1. Pre-commit and make](#1-pre-commit-and-make)
24
+ - [2. Branch builds (CirlceCI)](#2-branch-builds-cirlceci)
25
+ - [3. Releases (GitHub Actions)](#3-releases-github-actions)
26
+ - [Backstory](#backstory)
27
+
28
+
11
29
  # Developer Certificate of Origin
12
30
  We want this experience to be great for both you and the project, so we use the DCO (https://developercertificate.org/) as a simple way to do this.
13
31
 
@@ -158,6 +176,49 @@ Easy as this (but runs a while)
158
176
  make test
159
177
  ```
160
178
 
179
+ # Development Automation
180
+ Let's descibe the automated processes used in development.
181
+ 1. Pre-commit and make
182
+ 2. Branch builds (CircleCI)
183
+ 3. Releases (GitHub Actions)
184
+
185
+ ## 1. Pre-commit and make
186
+ Everyone should know about pre-commit by now. You should install it locally and it runs on git commit automatically.
187
+ - [.pre-commit-config.yml](.pre-commit-config.yml)
188
+
189
+ You can also run `make` from the repo root for some convience commands if you have makefile installed (comes with XCode for MacOS).
190
+ - [Makefile](Makefile)
191
+
192
+ ## 2. Branch builds (CirlceCI)
193
+ We use CircleCI to run branch builds, which runs pre-commit and `make lint`, runs each browser test (chrome, edge, firefox) with unit tests, then combines the coverage results.
194
+ - [.circleci/config.yml](.circleci/config.yml)
195
+
196
+ Only the default branch publishes coverage, which works like this:
197
+ 1. The merge to default branch kicks off a regular build with build, tests, and coverage jobs
198
+ 2. The coverage job generates a json file and an index.html redirect file which are published to the repo's GitHub pages `gh-pages` branch.
199
+ 3. The README has a coverage badge link using https://img.shields.io and points back to the GitHub pages json file
200
+ 4. Once the GitHub page's cache clears (every 10 minutes) then the new coverage should be shown in the badge and the link redirects back to the coverage job that generated it.
201
+
202
+ This round about way of coverage avoids using a coverage provider, which we're not quite up to yet.
203
+
204
+ ## 3. Releases (GitHub Actions)
205
+ We use GitHub Actions to do the release process
206
+ - [.github/workflows/create_a_new_release.yml](.github/workflows/create_a_new_release.yml)
207
+ - [.github/workflows/publish-test.yml](.github/workflows/publish-test.yml)
208
+ - [.github/workflows/publish-production.yml](.github/workflows/publish-production.yml)
209
+
210
+ Here's the sequence to get a new release out on pypi.org
211
+ 1. Create a branch with the following
212
+ 1. pyproject.toml - bump the version
213
+ 2. CHANGELOG.md - add version notes
214
+ 3. uv.lock - `uv lock` to update version in file
215
+ 2. Go through the PR process, get approved and merge
216
+ 3. The merge will republish the coverage badge in CircleCI (see previous)
217
+ 4. The new version is detected and a new GitHub Release is published by create_a_new_release.yml
218
+ 5. create_a_new_release.yml starts publish-test.yml which publishes it to test.pypi.org
219
+ 6. For pypi.org we have to manually trigger publish-production.yml
220
+
221
+
161
222
  # Backstory
162
223
  Cucu was originally developed primarly by Rodney Gomes, leveraging his
163
224
  years of experience in test automation across multiple programming languages.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cucu
3
- Version: 1.0.11
3
+ Version: 1.0.12
4
4
  Summary: Easy BDD web testing
5
5
  Project-URL: Homepage, https://github.com/dominodatalab/cucu/wiki
6
6
  Project-URL: Download, https://pypi.org/project/cucu/
@@ -25,14 +25,14 @@ Classifier: Programming Language :: Python :: 3.11
25
25
  Classifier: Programming Language :: Python :: 3.12
26
26
  Classifier: Topic :: Software Development :: Testing :: BDD
27
27
  Requires-Python: >=3.9
28
- Requires-Dist: beautifulsoup4~=4.12.2
28
+ Requires-Dist: beautifulsoup4~=4.13.3
29
29
  Requires-Dist: behave~=1.2.6
30
30
  Requires-Dist: chromedriver-autoinstaller~=0.6.2
31
31
  Requires-Dist: click~=8.1.7
32
- Requires-Dist: coverage[toml]~=7.4.3
32
+ Requires-Dist: coverage[toml]~=7.6.12
33
33
  Requires-Dist: geckodriver-autoinstaller~=0.1.0
34
- Requires-Dist: humanize~=4.8.0
35
- Requires-Dist: importlib-metadata~=8.0.0
34
+ Requires-Dist: humanize~=4.12.1
35
+ Requires-Dist: importlib-metadata~=8.6.1
36
36
  Requires-Dist: ipdb~=0.13.13
37
37
  Requires-Dist: jellyfish~=1.1.3
38
38
  Requires-Dist: jinja2~=3.1.3
@@ -47,12 +47,17 @@ Requires-Dist: tabulate~=0.9.0
47
47
  Requires-Dist: tenacity~=9.0.0
48
48
  Description-Content-Type: text/markdown
49
49
 
50
+ [![pypi](https://img.shields.io/pypi/v/cucu.svg)](https://pypi.org/project/cucu/)
51
+ [![license](https://img.shields.io/pypi/l/cucu.svg)](https://spdx.org/licenses/BSD-3-Clause-Clear.html)
52
+ [![CI](https://dl.circleci.com/status-badge/img/gh/dominodatalab/cucu/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/dominodatalab/cucu/tree/main)
53
+ [![coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fdominodatalab.github.io%2Fcucu%2Fcoverage%2Fbadge%2Fbadge.json)](https://dominodatalab.github.io/cucu/coverage/badge)
54
+
55
+
50
56
  # ![Cucu Logo](https://raw.githubusercontent.com/dominodatalab/cucu/refs/heads/main/logo.png) **CUCU** - Easy BDD web testing <!-- omit from toc -->
51
57
 
52
58
  End-to-end testing framework that uses [gherkin](https://cucumber.io/docs/gherkin/)
53
59
  to drive various underlying tools/frameworks to create real world testing scenarios.
54
60
 
55
- [![CircleCI](https://dl.circleci.com/status-badge/img/gh/dominodatalab/cucu/tree/main.svg?style=svg&circle-token=CCIPRJ_FnyZPtQ9odT5vmGW3CmZNU_bf0cfd776a09729ca4225a2860d9b59c4dae88af)](https://dl.circleci.com/status-badge/redirect/gh/dominodatalab/cucu/tree/main)
56
61
 
57
62
  ## Why cucu? <!-- omit from toc -->
58
63
  1. Cucu avoids unnecessary abstractions (i.e. no Page Objects!) while keeping scenarios readable.
@@ -1,9 +1,14 @@
1
+ [![pypi](https://img.shields.io/pypi/v/cucu.svg)](https://pypi.org/project/cucu/)
2
+ [![license](https://img.shields.io/pypi/l/cucu.svg)](https://spdx.org/licenses/BSD-3-Clause-Clear.html)
3
+ [![CI](https://dl.circleci.com/status-badge/img/gh/dominodatalab/cucu/tree/main.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/dominodatalab/cucu/tree/main)
4
+ [![coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fdominodatalab.github.io%2Fcucu%2Fcoverage%2Fbadge%2Fbadge.json)](https://dominodatalab.github.io/cucu/coverage/badge)
5
+
6
+
1
7
  # ![Cucu Logo](https://raw.githubusercontent.com/dominodatalab/cucu/refs/heads/main/logo.png) **CUCU** - Easy BDD web testing <!-- omit from toc -->
2
8
 
3
9
  End-to-end testing framework that uses [gherkin](https://cucumber.io/docs/gherkin/)
4
10
  to drive various underlying tools/frameworks to create real world testing scenarios.
5
11
 
6
- [![CircleCI](https://dl.circleci.com/status-badge/img/gh/dominodatalab/cucu/tree/main.svg?style=svg&circle-token=CCIPRJ_FnyZPtQ9odT5vmGW3CmZNU_bf0cfd776a09729ca4225a2860d9b59c4dae88af)](https://dl.circleci.com/status-badge/redirect/gh/dominodatalab/cucu/tree/main)
7
12
 
8
13
  ## Why cucu? <!-- omit from toc -->
9
14
  1. Cucu avoids unnecessary abstractions (i.e. no Page Objects!) while keeping scenarios readable.
@@ -3,4 +3,4 @@ Feature: Feature with logging
3
3
  Scenario: Logging at various levels
4
4
  Given I log "hello" at level "info"
5
5
  And I log "cruel" at level "debug"
6
- And I log "world" at level "warn"
6
+ And I log "world" at level "warning"
@@ -43,15 +43,15 @@ Feature: Config
43
43
  Scenario: This scenario prints a bunch of variables
44
44
  bar
45
45
 
46
- Given I echo "\{FOO\}" # .*
46
+ Given I echo "\{FOO\}" \s*# .*
47
47
  # FOO="bar"
48
48
  booze
49
49
 
50
- And I echo "\{FIZZ\}" # .*
50
+ And I echo "\{FIZZ\}" \s*# .*
51
51
  # FIZZ="booze"
52
52
  buzz
53
53
 
54
- And I echo "\{BUZZ\}" # .*
54
+ And I echo "\{BUZZ\}" \s*# .*
55
55
  # BUZZ="buzz"
56
56
 
57
57
  1 feature passed, 0 failed, 0 skipped
@@ -67,15 +67,15 @@ Feature: Config
67
67
  Scenario: This scenario prints a bunch of variables
68
68
  bar
69
69
 
70
- Given I echo "\{FOO\}" # .*
70
+ Given I echo "\{FOO\}" \s*# .*
71
71
  # FOO="bar"
72
72
  booze
73
73
 
74
- And I echo "\{FIZZ\}" # .*
74
+ And I echo "\{FIZZ\}" \s*# .*
75
75
  # FIZZ="booze"
76
76
  buzz
77
77
 
78
- And I echo "\{BUZZ\}" # .*
78
+ And I echo "\{BUZZ\}" \s*# .*
79
79
  # BUZZ="buzz"
80
80
 
81
81
  1 feature passed, 0 failed, 0 skipped
@@ -122,15 +122,15 @@ Feature: Config
122
122
  Scenario: This scenario prints a bunch of variables
123
123
  bar
124
124
 
125
- Given I echo "\{FOO\}" # .*
125
+ Given I echo "\{FOO\}" \s*# .*
126
126
  # FOO="bar"
127
127
  booze
128
128
 
129
- And I echo "\{FIZZ\}" # .*
129
+ And I echo "\{FIZZ\}" \s*# .*
130
130
  # FIZZ="booze"
131
131
  buzz
132
132
 
133
- And I echo "\{BUZZ\}" # .*
133
+ And I echo "\{BUZZ\}" \s*# .*
134
134
  # BUZZ="buzz"
135
135
 
136
136
  1 feature passed, 0 failed, 0 skipped
@@ -27,7 +27,7 @@ Feature: Run
27
27
  Scenario: Scenario that passes
28
28
  passing
29
29
 
30
- Given I echo "passing" # .*
30
+ Given I echo "passing" \s*# .*
31
31
 
32
32
  Scenario: Scenario that fails
33
33
  Given I fail # .*
@@ -54,7 +54,7 @@ Feature: Run
54
54
  Scenario: Scenario that also passes
55
55
  passing
56
56
 
57
- Given I echo "passing" # .*
57
+ Given I echo "passing" \s*# .*
58
58
  [\s]*
59
59
  1 feature passed, 0 failed, 0 skipped
60
60
  1 scenario passed, 0 failed, 6 skipped
@@ -76,20 +76,20 @@ Feature: Run outputs
76
76
  Scenario: Scenario which now has a background using a step with substeps
77
77
  first line of the background
78
78
 
79
- Given I echo "first line of the background" # .*
79
+ Given I echo "first line of the background" \s*# .*
80
80
  hello
81
81
 
82
- ⤷ When I echo "hello" # .*
82
+ ⤷ When I echo "hello" \s*# .*
83
83
  cruel
84
84
 
85
- ⤷ And I echo "cruel" # .*
85
+ ⤷ And I echo "cruel" \s*# .*
86
86
  world
87
87
 
88
- ⤷ And I echo "world" # .*
88
+ ⤷ And I echo "world" \s*# .*
89
89
  And I use a step with substeps that log # .*
90
90
  This is from the scenario
91
91
 
92
- When I echo "This is from the scenario" # .*
92
+ When I echo "This is from the scenario" \s*# .*
93
93
 
94
94
  1 feature passed, 0 failed, 0 skipped
95
95
  1 scenario passed, 0 failed, 0 skipped
@@ -63,12 +63,12 @@ Feature: Run with hooks
63
63
  Hello
64
64
 
65
65
  .* DEBUG just logging some stuff from my after step hook
66
- Given I echo "Hello" # .*
66
+ Given I echo "Hello" \s*# .*
67
67
  .* DEBUG just logging some stuff from my before step hook
68
68
  World
69
69
 
70
70
  .* DEBUG just logging some stuff from my after step hook
71
- And I echo "World" # .*
71
+ And I echo "World" \s*# .*
72
72
  .* DEBUG No browsers - skipping MHT webpage snapshot
73
73
  .* DEBUG HOOK download_mht_data: passed ✅
74
74
  .* DEBUG just logging some stuff from my after scenario hook
@@ -10,10 +10,10 @@ Feature: Run with logging
10
10
 
11
11
  Scenario: Logging at various levels
12
12
  .* INFO hello
13
- Given I log "hello" at level "info" # .*
14
- And I log "cruel" at level "debug" # .*
13
+ Given I log "hello" at level "info" \s*# .*
14
+ And I log "cruel" at level "debug" \s*# .*
15
15
  .* WARNING world
16
- And I log "world" at level "warn" # .*
16
+ And I log "world" at level "warning" \s*# .*
17
17
 
18
18
  1 feature passed, 0 failed, 0 skipped
19
19
  1 scenario passed, 0 failed, 0 skipped
@@ -30,11 +30,11 @@ Feature: Run with logging
30
30
 
31
31
  Scenario: Logging at various levels
32
32
  .* INFO hello
33
- Given I log "hello" at level "info" # .*
33
+ Given I log "hello" at level "info" \s*# .*
34
34
  .* DEBUG cruel
35
- And I log "cruel" at level "debug" # .*
35
+ And I log "cruel" at level "debug" \s*# .*
36
36
  .* WARNING world
37
- And I log "world" at level "warn" # .*
37
+ And I log "world" at level "warning" \s*# .*
38
38
  .* DEBUG No browsers - skipping MHT webpage snapshot
39
39
  .* DEBUG HOOK download_mht_data: passed ✅
40
40
  .* DEBUG HOOK download_browser_logs: passed ✅
@@ -16,7 +16,7 @@ Feature: Run with tags
16
16
  Scenario: Scenario that is tagged with @second
17
17
  second
18
18
 
19
- Given I echo "second" # .*
19
+ Given I echo "second" \s*# .*
20
20
 
21
21
  @disabled @testrail\(123,456\)
22
22
  Scenario: Scenario that is skipped
@@ -39,7 +39,7 @@ Feature: Run with tags
39
39
  Scenario: Scenario that is tagged with @first
40
40
  first
41
41
 
42
- Given I echo "first" # .*
42
+ Given I echo "first" \s*# .*
43
43
 
44
44
  @second
45
45
  Scenario: Scenario that is tagged with @second
@@ -101,7 +101,7 @@ Feature: Vars
101
101
  Scenario: That simply prints a custom variable
102
102
  booyah
103
103
 
104
- Given I echo "\{CUSTOM_VARIABLE\}" # .*
104
+ Given I echo "\{CUSTOM_VARIABLE\}" \s*# .*
105
105
  # CUSTOM_VARIABLE="booyah"
106
106
 
107
107
  1 feature passed, 0 failed, 0 skipped