cucu 1.0.11__tar.gz → 1.0.13__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.
- {cucu-1.0.11 → cucu-1.0.13}/.circleci/config.yml +120 -3
- {cucu-1.0.11 → cucu-1.0.13}/.github/workflows/build.yml +10 -10
- {cucu-1.0.11 → cucu-1.0.13}/.github/workflows/create_a_new_release.yml +1 -1
- {cucu-1.0.11 → cucu-1.0.13}/.github/workflows/publish-production.yml +3 -3
- {cucu-1.0.11 → cucu-1.0.13}/.github/workflows/publish-test.yml +3 -3
- {cucu-1.0.11 → cucu-1.0.13}/.gitignore +1 -0
- {cucu-1.0.11 → cucu-1.0.13}/CHANGELOG.md +11 -0
- {cucu-1.0.11 → cucu-1.0.13}/CONTRIBUTING.md +63 -2
- {cucu-1.0.11 → cucu-1.0.13}/PKG-INFO +11 -6
- {cucu-1.0.11 → cucu-1.0.13}/README.md +6 -1
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_logging.feature +1 -1
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/config.feature +9 -9
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run.feature +2 -2
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_outputs.feature +5 -5
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_hooks.feature +2 -2
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_logging.feature +6 -6
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_tags.feature +2 -2
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/vars.feature +1 -1
- {cucu-1.0.11 → cucu-1.0.13}/pyproject.toml +6 -6
- cucu-1.0.13/renovate.json +47 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/browser/selenium.py +4 -4
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/cli/core.py +2 -2
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/environment.py +1 -1
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/formatter/junit.py +23 -12
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/logger.py +2 -2
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/page_checks.py +1 -1
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/html.py +3 -3
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/table_steps.py +1 -1
- {cucu-1.0.11 → cucu-1.0.13}/uv.lock +86 -63
- cucu-1.0.11/renovate.json +0 -16
- {cucu-1.0.11 → cucu-1.0.13}/.env +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/.github/CODEOWNERS +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/.pre-commit-config.yaml +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/.python-version +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/CODE_OF_CONDUCT.md +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/CONTRIBUTORS.md +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/LICENSE +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/Makefile +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/bin/cucu +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/bin/start_seleniarm_hub.sh +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/bin/start_selenium_hub.sh +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/cortex.yaml +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/custom_step_test/custom_step.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/custom_step_test/steps/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/custom_step_test/steps/cucu_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/echo.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/environment.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_skipping_scenarios_by_file_presence.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_background.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_background_using_substeps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_failing_scenario.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_failing_scenario_with_table.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_failing_scenario_with_web.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_long_names.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_mixed_results.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_multilines_and_tables.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_passing_scenario.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_passing_scenario_with_web.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_platform_specific_scenarios.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_scenario_outline.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_scenario_using_nth_type.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_tagging.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/feature_with_xml_tags.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/multiple_scenarios_with_browser_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/scenario_stop_retry_early.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/scenario_that_fails_with_after_scenario_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/scenario_that_passes_with_after_scenario_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/scenario_with_console_logs.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/scenario_with_substeps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/scenario_with_substeps_and_logging.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/slow_features/slow_feature1.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/slow_features/slow_feature2.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/slow_features/slow_feature3.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/slow_features/slow_feature4.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/slow_features/slow_feature5.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/steps/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/steps/cucu_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/tagged_features/tagged_feature1.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/tagged_features/tagged_feature2.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/tagged_features/tagged_feature3.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/with_secret/cucurc.yml +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/features/with_secret/scenario_with_comments.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/unit/ansi.log +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/unit/ansi.log.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/broken_images.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/buttons.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/checkboxes.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/clipboard.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/comboboxes.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/console_logging.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/cookies.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/counter.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/drag_drop.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/draggables.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/dropdowns.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/duplicate_buttons.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/duplicate_inputs.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/dynamic_dropdown.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/file.txt +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/files.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/frames.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/fuzzy_rules.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/images.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/inputs.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/js/util.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/links.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/nothing_to_see_here.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/page_that_loads_forever.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/radio_buttons.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/stars.png +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/tables.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/tabs.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/data/www/text.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/browser_tab_managemenet.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/browser_window_managemenet.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/buttons.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/checkboxes.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/clipboard.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/comboboxes.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/console_logs.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/cookies.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/draggables.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/dropdowns.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/duplicate_buttons.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/duplicate_draggables.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/duplicate_inputs.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/file_downloads.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/file_upload.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/frames.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/fuzzy_rules.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/helpers.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/images.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/inputs.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/inputs_limits.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/links.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/mht.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/page_checks.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/radio_buttons.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/tables.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/tabs.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/browser/text.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/help.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/internals.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/ipdb.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/lint.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/lsp.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/report_basics.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/report_search_and_sorting.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/report_with_custom_failure_handler.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/report_with_custom_subheader.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/report_with_custom_tags.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_junit.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_report.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_thread_dumper.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/run_with_workers.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/secrets.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/cli/steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/environment.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/before_retry_handlers.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/repeating_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/run_after_scenario_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/run_and_measure.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/run_other_features.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/run_scenarios_conditionally.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/run_steps_conditionally.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/run_steps_on_element_visibilty.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/flow_control/wait_for_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/os/command_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/os/file_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/os/platform_steps.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/os/screenshot.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/os/variables.feature +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/steps/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/features/steps/cucu_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/logo.png +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/sonar-project.properties +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/ansi_parser.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/behave_tweaks.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/browser/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/browser/core.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/browser/frames.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/browser/selenium_tweaks.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/cli/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/cli/run.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/cli/steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/cli/thread_dumper.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/config.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/edgedriver_autoinstaller/README.md +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/edgedriver_autoinstaller/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/edgedriver_autoinstaller/utils.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/external/jquery/jquery-3.5.1.min.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/formatter/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/formatter/cucu.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/formatter/json.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/fuzzy/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/fuzzy/core.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/fuzzy/fuzzy.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/helpers.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/hooks.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/language_server/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/language_server/core.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/lint/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/lint/linter.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/lint/rules/format.yaml +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/matcher/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/matcher/core.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/bootstrap.min.css +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/bootstrap.min.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/dataTables.bootstrap.min.css +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/dataTables.bootstrap.min.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/jquery-3.5.1.min.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/jquery.dataTables.min.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/external/popper.min.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/favicon.png +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/templates/feature.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/templates/flat.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/templates/index.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/templates/layout.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/reporter/templates/scenario.html +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/base_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/browser_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/button_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/checkbox_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/command_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/comment_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/draggable_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/dropdown_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/file_input_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/filesystem_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/flow_control_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/image_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/input_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/link_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/menuitem_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/platform_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/radio_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/step_utils.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/tab_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/tables.js +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/text_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/variable_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/steps/webserver_steps.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/src/cucu/utils.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/__init__.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/test_behave_tweaks.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/test_browser.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/test_config.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/test_core.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/test_language_server.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/tests/test_reporter_parser.py +0 -0
- {cucu-1.0.11 → cucu-1.0.13}/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
|
|
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@
|
|
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@
|
|
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@
|
|
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"
|
|
@@ -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@
|
|
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@
|
|
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/
|
|
@@ -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
|
+
- Change - rename logger.warn to logger.warning
|
|
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
|
-
|
|
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.
|
|
3
|
+
Version: 1.0.13
|
|
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.
|
|
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.
|
|
32
|
+
Requires-Dist: coverage[toml]~=7.6.12
|
|
33
33
|
Requires-Dist: geckodriver-autoinstaller~=0.1.0
|
|
34
|
-
Requires-Dist: humanize~=4.
|
|
35
|
-
Requires-Dist: importlib-metadata~=8.
|
|
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
|
+
[](https://pypi.org/project/cucu/)
|
|
51
|
+
[](https://spdx.org/licenses/BSD-3-Clause-Clear.html)
|
|
52
|
+
[](https://dl.circleci.com/status-badge/redirect/gh/dominodatalab/cucu/tree/main)
|
|
53
|
+
[](https://dominodatalab.github.io/cucu/coverage/badge)
|
|
54
|
+
|
|
55
|
+
|
|
50
56
|
#  **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
|
-
[](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
|
+
[](https://pypi.org/project/cucu/)
|
|
2
|
+
[](https://spdx.org/licenses/BSD-3-Clause-Clear.html)
|
|
3
|
+
[](https://dl.circleci.com/status-badge/redirect/gh/dominodatalab/cucu/tree/main)
|
|
4
|
+
[](https://dominodatalab.github.io/cucu/coverage/badge)
|
|
5
|
+
|
|
6
|
+
|
|
1
7
|
#  **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
|
-
[](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.
|
|
@@ -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 "
|
|
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 "
|
|
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
|