cli-test-framework 0.5.2__tar.gz → 0.5.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.
- {cli_test_framework-0.5.2/src/cli_test_framework.egg-info → cli_test_framework-0.5.4}/PKG-INFO +12 -5
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/README.md +8 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/setup.py +4 -5
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/commands/compare.py +17 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/base_runner.py +4 -1
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/csv_comparator.py +16 -1
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/factory.py +5 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4/src/cli_test_framework.egg-info}/PKG-INFO +12 -5
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/SOURCES.txt +13 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/requires.txt +3 -4
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/run_all.cpython-312.pyc +0 -0
- cli_test_framework-0.5.4/tests/e2e/__pycache__/test_user_flows.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__pycache__/test_user_flows.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/__pycache__/test_history_feature.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/__pycache__/test_history_feature.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/__pycache__/test_real_command_execution.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/__pycache__/test_real_command_execution.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.2/tests/integration/__pycache__/test_sequence.cpython-312-pytest-7.4.4.pyc → cli_test_framework-0.5.4/tests/integration/__pycache__/test_sequence.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/file_compare/__pycache__/test_binary_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/file_compare/__pycache__/test_csv_compare.cpython-312-pytest-7.4.4.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/file_compare/__pycache__/test_csv_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/file_compare/__pycache__/test_xml_compare.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_xml_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/test_csv_compare.py +46 -0
- cli_test_framework-0.5.4/tests/integration/parallel/__pycache__/test_parallel_runner.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/parallel/__pycache__/test_parallel_runner.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/integration/path_handling/__pycache__/test_spaces_in_paths.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/path_handling/__pycache__/test_spaces_in_paths.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.2/tests/unit/__pycache__/test_cli.cpython-312-pytest-9.0.3.pyc → cli_test_framework-0.5.4/tests/unit/__pycache__/test_cli.cpython-312-pytest-7.4.4.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/__pycache__/test_cli.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/__pycache__/test_h5_comparator.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/__pycache__/test_h5_comparator.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/__pycache__/test_run_all.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/__pycache__/test_run_all.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/commands/__pycache__/test_compare_command.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/commands/__pycache__/test_compare_command.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/core/__pycache__/test_assertions.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/core/__pycache__/test_history_store.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/__pycache__/test_history_store.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.2/tests/unit/core/__pycache__/test_process_worker.cpython-312-pytest-9.0.3.pyc → cli_test_framework-0.5.4/tests/unit/core/__pycache__/test_process_worker.cpython-312-pytest-7.4.4.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/core/__pycache__/test_process_worker.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/__pycache__/test_setup.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/__pycache__/test_json_yaml_runner.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/runners/__pycache__/test_test_case_filter.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/utils/__pycache__/test_junit_xml_writer.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.4/tests/unit/utils/__pycache__/test_report_generator.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/utils/__pycache__/test_report_generator.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.2/tests/e2e/__pycache__/test_user_flows.cpython-312-pytest-7.4.4.pyc +0 -0
- cli_test_framework-0.5.2/tests/integration/file_compare/__pycache__/test_binary_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.2/tests/integration/file_compare/__pycache__/test_csv_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- cli_test_framework-0.5.2/tests/integration/parallel/__pycache__/test_parallel_runner.cpython-312-pytest-7.4.4.pyc +0 -0
- cli_test_framework-0.5.2/tests/integration/path_handling/__pycache__/test_spaces_in_paths.cpython-312-pytest-7.4.4.pyc +0 -0
- cli_test_framework-0.5.2/tests/unit/runners/__pycache__/test_test_case_filter.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/MANIFEST.in +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/docs/design.md +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/docs/design_en.md +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/docs/user_manual.md +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/docs/user_manual_en.md +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/pyproject.toml +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/setup.cfg +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/cli.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/commands/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/assertions.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/execution.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/history_store.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/parallel_runner.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/process_worker.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/setup.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/test_case.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/types.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/base_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/binary_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/h5_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/json_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/result.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/text_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/file_comparator/xml_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/json_runner.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/parallel_json_runner.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/yaml_runner.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/utils/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/utils/path_resolver.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/utils/report_generator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/dependency_links.txt +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/entry_points.txt +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/top_level.txt +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/README.md +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/__init__.cpython-312.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/__init__.cpython-39.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/conftest.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/conftest.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/conftest.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/run_all.cpython-39.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/test_parallel_runner.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/test_setup_module.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/conftest.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/demos/h5_filter_demo.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/demos/manual_report_example.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/demos/perf_parallel.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__init__.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__pycache__/__init__.cpython-312.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__pycache__/__init__.cpython-39.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__pycache__/test_user_flows.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/test_user_flows.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/fixtures/test_cases.json +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/fixtures/test_cases.yaml +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/fixtures/test_cases1.json +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/fixtures/test_with_setup.json +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/fixtures/test_with_setup.yaml +0 -0
- /cli_test_framework-0.5.2/tests/integration/__pycache__/test_sequence.cpython-312-pytest-9.0.3.pyc → /cli_test_framework-0.5.4/tests/integration/__pycache__/test_sequence.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_binary_compare.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_binary_compare.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_h5_compare.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_h5_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_h5_compare.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_json_compare.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_json_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_json_compare.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_text_compare.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_text_compare.cpython-312-pytest-9.0.3.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/__pycache__/test_text_compare.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/test_binary_compare.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/test_h5_compare.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/test_json_compare.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/test_text_compare.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/file_compare/test_xml_compare.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/parallel/__pycache__/test_parallel_runner.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/parallel/test_parallel_runner.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/path_handling/__pycache__/test_spaces_in_paths.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/path_handling/test_spaces_in_paths.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/test_history_feature.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/test_real_command_execution.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/test_sequence.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/run_all.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/test_report.txt +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/commands/test_compare_command.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/__pycache__/test_setup.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/__pycache__/test_setup.cpython-39-pytest-8.3.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/test_history_store.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/test_process_worker.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/test_setup.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/__pycache__/test_json_yaml_runner.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/__pycache__/test_json_yaml_runner.cpython-39-pytest-8.3.4.pyc +0 -0
- /cli_test_framework-0.5.2/tests/unit/runners/__pycache__/test_test_case_filter.cpython-312-pytest-9.0.3.pyc → /cli_test_framework-0.5.4/tests/unit/runners/__pycache__/test_test_case_filter.cpython-312-pytest-7.4.4.pyc +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/test_json_yaml_runner.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/test_test_case_filter.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/test_cli.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/test_h5_comparator.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/test_run_all.py +0 -0
- {cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/utils/test_report_generator.py +0 -0
{cli_test_framework-0.5.2/src/cli_test_framework.egg-info → cli_test_framework-0.5.4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cli-test-framework
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: A powerful command line testing framework in Python with setup modules, parallel execution, and file comparison capabilities.
|
|
5
5
|
Home-page: https://github.com/ozil111/cli-test-framework
|
|
6
6
|
Author: Xiaotong Wang
|
|
@@ -18,10 +18,9 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
Requires-Dist: dukpy==0.5.0
|
|
21
|
-
Requires-Dist: h5py<4.0.0,>=3.
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist: numpy
|
|
24
|
-
Requires-Dist: numpy<2.0.0,>=1.26.0; python_version >= "3.12"
|
|
21
|
+
Requires-Dist: h5py<4.0.0,>=3.11.0
|
|
22
|
+
Requires-Dist: numpy>=1.21.0; python_version < "3.12"
|
|
23
|
+
Requires-Dist: numpy>=1.26.0; python_version >= "3.12"
|
|
25
24
|
Requires-Dist: setuptools>=75.8.0
|
|
26
25
|
Requires-Dist: wheel>=0.45.1
|
|
27
26
|
Dynamic: author
|
|
@@ -41,6 +40,14 @@ A lightweight automated testing framework for command-line applications. Define
|
|
|
41
40
|
|
|
42
41
|
Particularly suited for scientific computing — deep HDF5 support with regex table matching, data filtering, and tolerance-based comparison, making simulation result verification effortless.
|
|
43
42
|
|
|
43
|
+
## Why this exists
|
|
44
|
+
|
|
45
|
+
This project was created from a real need: regression testing finite-element software.
|
|
46
|
+
|
|
47
|
+
In solver-style projects, checking the exit code is not enough. A test often needs to run multiple commands, generate numerical result files, compare HDF5/CSV outputs with tolerances, and make sure old cases do not become slower over time.
|
|
48
|
+
|
|
49
|
+
CLI Test Framework was built for that workflow.
|
|
50
|
+
|
|
44
51
|
## Highlights
|
|
45
52
|
|
|
46
53
|
- **Parallel Execution** — Multi-thread / multi-process, 3-5x speedup
|
|
@@ -4,6 +4,14 @@ A lightweight automated testing framework for command-line applications. Define
|
|
|
4
4
|
|
|
5
5
|
Particularly suited for scientific computing — deep HDF5 support with regex table matching, data filtering, and tolerance-based comparison, making simulation result verification effortless.
|
|
6
6
|
|
|
7
|
+
## Why this exists
|
|
8
|
+
|
|
9
|
+
This project was created from a real need: regression testing finite-element software.
|
|
10
|
+
|
|
11
|
+
In solver-style projects, checking the exit code is not enough. A test often needs to run multiple commands, generate numerical result files, compare HDF5/CSV outputs with tolerances, and make sure old cases do not become slower over time.
|
|
12
|
+
|
|
13
|
+
CLI Test Framework was built for that workflow.
|
|
14
|
+
|
|
7
15
|
## Highlights
|
|
8
16
|
|
|
9
17
|
- **Parallel Execution** — Multi-thread / multi-process, 3-5x speedup
|
|
@@ -8,7 +8,7 @@ with open(os.path.join(this_directory, 'README.md'), encoding='utf-8') as f:
|
|
|
8
8
|
|
|
9
9
|
setup(
|
|
10
10
|
name="cli-test-framework",
|
|
11
|
-
version="0.5.
|
|
11
|
+
version="0.5.4",
|
|
12
12
|
author="Xiaotong Wang",
|
|
13
13
|
author_email="xiaotongwang98@gmail.com",
|
|
14
14
|
description="A powerful command line testing framework in Python with setup modules, parallel execution, and file comparison capabilities.",
|
|
@@ -19,10 +19,9 @@ setup(
|
|
|
19
19
|
package_dir={"": "src"},
|
|
20
20
|
install_requires=[
|
|
21
21
|
"dukpy==0.5.0",
|
|
22
|
-
"h5py>=3.
|
|
23
|
-
"
|
|
24
|
-
"numpy>=1.
|
|
25
|
-
"numpy>=1.26.0,<2.0.0; python_version>='3.12'",
|
|
22
|
+
"h5py>=3.11.0,<4.0.0",
|
|
23
|
+
"numpy>=1.21.0; python_version<'3.12'",
|
|
24
|
+
"numpy>=1.26.0; python_version>='3.12'",
|
|
26
25
|
"setuptools>=75.8.0",
|
|
27
26
|
"wheel>=0.45.1"
|
|
28
27
|
],
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/commands/compare.py
RENAMED
|
@@ -49,6 +49,17 @@ def parse_arguments():
|
|
|
49
49
|
help="When comparing binary files, compute and show similarity index")
|
|
50
50
|
parser.add_argument("--num-threads", type=int, default=4, help="Number of threads for parallel processing")
|
|
51
51
|
|
|
52
|
+
# CSV comparison options
|
|
53
|
+
csv_group = parser.add_argument_group('CSV comparison options')
|
|
54
|
+
csv_group.add_argument("--csv-rtol", type=float, default=1e-5,
|
|
55
|
+
help="Relative tolerance for numerical comparison in CSV files")
|
|
56
|
+
csv_group.add_argument("--csv-atol", type=float, default=1e-8,
|
|
57
|
+
help="Absolute tolerance for numerical comparison in CSV files")
|
|
58
|
+
csv_group.add_argument("--csv-delimiter", default=",",
|
|
59
|
+
help="CSV field delimiter (default: comma)")
|
|
60
|
+
csv_group.add_argument("--csv-quotechar", default='"',
|
|
61
|
+
help="Character used for quoting fields in CSV (default: double quote)")
|
|
62
|
+
|
|
52
63
|
# JSON comparison options
|
|
53
64
|
json_group = parser.add_argument_group('JSON comparison options')
|
|
54
65
|
json_group.add_argument("--json-compare-mode", choices=["exact", "key-based"], default="exact",
|
|
@@ -148,6 +159,12 @@ def main():
|
|
|
148
159
|
key_fields = [field.strip() for field in args.json_key_field.split(',')]
|
|
149
160
|
comparator_kwargs["key_field"] = key_fields[0] if len(key_fields) == 1 else key_fields
|
|
150
161
|
|
|
162
|
+
if file_type == "csv":
|
|
163
|
+
comparator_kwargs["rtol"] = args.csv_rtol
|
|
164
|
+
comparator_kwargs["atol"] = args.csv_atol
|
|
165
|
+
comparator_kwargs["delimiter"] = args.csv_delimiter
|
|
166
|
+
comparator_kwargs["quotechar"] = args.csv_quotechar
|
|
167
|
+
|
|
151
168
|
if file_type == "h5":
|
|
152
169
|
if args.h5_table:
|
|
153
170
|
tables = [table.strip() for table in args.h5_table.split(',')]
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/base_runner.py
RENAMED
|
@@ -20,7 +20,10 @@ class BaseRunner(ABC):
|
|
|
20
20
|
self.config_path = self.workspace / config_file
|
|
21
21
|
self.test_cases: List[TestCase] = []
|
|
22
22
|
self.test_case_filter: Optional[List[str]] = test_case_filter
|
|
23
|
-
|
|
23
|
+
if history_dir:
|
|
24
|
+
self.history_dir = str((self.workspace / history_dir).resolve())
|
|
25
|
+
else:
|
|
26
|
+
self.history_dir = None
|
|
24
27
|
self.regression_threshold = regression_threshold
|
|
25
28
|
self.results: Dict[str, Any] = {
|
|
26
29
|
"total": 0,
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
import csv
|
|
12
12
|
import io
|
|
13
|
+
import math
|
|
13
14
|
from .text_comparator import TextComparator
|
|
14
15
|
from .result import Difference
|
|
15
16
|
|
|
@@ -24,7 +25,7 @@ class CsvComparator(TextComparator):
|
|
|
24
25
|
- Configurable delimiter and quote character
|
|
25
26
|
"""
|
|
26
27
|
|
|
27
|
-
def __init__(self, encoding="utf-8", delimiter=",", quotechar='"', chunk_size=8192, verbose=False):
|
|
28
|
+
def __init__(self, encoding="utf-8", delimiter=",", quotechar='"', chunk_size=8192, verbose=False, rtol=1e-5, atol=1e-8):
|
|
28
29
|
"""
|
|
29
30
|
@brief Initialize CSV comparator with configuration
|
|
30
31
|
@param encoding str: File encoding (default: utf-8)
|
|
@@ -32,10 +33,14 @@ class CsvComparator(TextComparator):
|
|
|
32
33
|
@param quotechar str: Character used for quoting fields (default: double quote)
|
|
33
34
|
@param chunk_size int: Size of chunks for reading large files
|
|
34
35
|
@param verbose bool: Enable verbose output
|
|
36
|
+
@param rtol float: Relative tolerance for numerical comparison (default: 1e-5)
|
|
37
|
+
@param atol float: Absolute tolerance for numerical comparison (default: 1e-8)
|
|
35
38
|
"""
|
|
36
39
|
super().__init__(encoding, chunk_size, verbose)
|
|
37
40
|
self.delimiter = delimiter
|
|
38
41
|
self.quotechar = quotechar
|
|
42
|
+
self.rtol = rtol
|
|
43
|
+
self.atol = atol
|
|
39
44
|
|
|
40
45
|
def read_content(self, file_path, start_line=0, end_line=None, start_column=0, end_column=None):
|
|
41
46
|
"""
|
|
@@ -116,6 +121,14 @@ class CsvComparator(TextComparator):
|
|
|
116
121
|
# Compare column values
|
|
117
122
|
for j, (cell1, cell2) in enumerate(zip(row1, row2)):
|
|
118
123
|
if cell1 != cell2:
|
|
124
|
+
# Try numeric tolerance comparison
|
|
125
|
+
try:
|
|
126
|
+
num1 = float(cell1)
|
|
127
|
+
num2 = float(cell2)
|
|
128
|
+
if math.isclose(num1, num2, rel_tol=self.rtol, abs_tol=self.atol):
|
|
129
|
+
continue # Within tolerance, treat as equal
|
|
130
|
+
except (ValueError, TypeError):
|
|
131
|
+
pass # Non-numeric, fall through to string mismatch
|
|
119
132
|
differences.append(Difference(
|
|
120
133
|
position=f"row {i+1}, column {j+1}",
|
|
121
134
|
expected=cell1,
|
|
@@ -137,4 +150,6 @@ class CsvComparator(TextComparator):
|
|
|
137
150
|
diff_type=f"more differences not shown"
|
|
138
151
|
))
|
|
139
152
|
|
|
153
|
+
if not differences:
|
|
154
|
+
return True, []
|
|
140
155
|
return False, differences
|
|
@@ -77,6 +77,11 @@ class ComparatorFactory:
|
|
|
77
77
|
json_kwargs = {k: v for k, v in kwargs.items()
|
|
78
78
|
if k in ['encoding', 'chunk_size', 'verbose', 'compare_mode', 'key_field']}
|
|
79
79
|
return comparator_class(**json_kwargs)
|
|
80
|
+
elif file_type.lower() == 'csv':
|
|
81
|
+
# CSV comparator accepts specific parameters
|
|
82
|
+
csv_kwargs = {k: v for k, v in kwargs.items()
|
|
83
|
+
if k in ['encoding', 'delimiter', 'quotechar', 'chunk_size', 'verbose', 'rtol', 'atol']}
|
|
84
|
+
return comparator_class(**csv_kwargs)
|
|
80
85
|
else:
|
|
81
86
|
# Other comparators only accept basic parameters
|
|
82
87
|
basic_kwargs = {k: v for k, v in kwargs.items()
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4/src/cli_test_framework.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cli-test-framework
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: A powerful command line testing framework in Python with setup modules, parallel execution, and file comparison capabilities.
|
|
5
5
|
Home-page: https://github.com/ozil111/cli-test-framework
|
|
6
6
|
Author: Xiaotong Wang
|
|
@@ -18,10 +18,9 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
Requires-Dist: dukpy==0.5.0
|
|
21
|
-
Requires-Dist: h5py<4.0.0,>=3.
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist: numpy
|
|
24
|
-
Requires-Dist: numpy<2.0.0,>=1.26.0; python_version >= "3.12"
|
|
21
|
+
Requires-Dist: h5py<4.0.0,>=3.11.0
|
|
22
|
+
Requires-Dist: numpy>=1.21.0; python_version < "3.12"
|
|
23
|
+
Requires-Dist: numpy>=1.26.0; python_version >= "3.12"
|
|
25
24
|
Requires-Dist: setuptools>=75.8.0
|
|
26
25
|
Requires-Dist: wheel>=0.45.1
|
|
27
26
|
Dynamic: author
|
|
@@ -41,6 +40,14 @@ A lightweight automated testing framework for command-line applications. Define
|
|
|
41
40
|
|
|
42
41
|
Particularly suited for scientific computing — deep HDF5 support with regex table matching, data filtering, and tolerance-based comparison, making simulation result verification effortless.
|
|
43
42
|
|
|
43
|
+
## Why this exists
|
|
44
|
+
|
|
45
|
+
This project was created from a real need: regression testing finite-element software.
|
|
46
|
+
|
|
47
|
+
In solver-style projects, checking the exit code is not enough. A test often needs to run multiple commands, generate numerical result files, compare HDF5/CSV outputs with tolerances, and make sure old cases do not become slower over time.
|
|
48
|
+
|
|
49
|
+
CLI Test Framework was built for that workflow.
|
|
50
|
+
|
|
44
51
|
## Highlights
|
|
45
52
|
|
|
46
53
|
- **Parallel Execution** — Multi-thread / multi-process, 3-5x speedup
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/SOURCES.txt
RENAMED
|
@@ -75,7 +75,9 @@ tests/fixtures/test_with_setup.yaml
|
|
|
75
75
|
tests/integration/test_history_feature.py
|
|
76
76
|
tests/integration/test_real_command_execution.py
|
|
77
77
|
tests/integration/test_sequence.py
|
|
78
|
+
tests/integration/__pycache__/test_history_feature.cpython-312-pytest-7.4.4.pyc
|
|
78
79
|
tests/integration/__pycache__/test_history_feature.cpython-312-pytest-9.0.3.pyc
|
|
80
|
+
tests/integration/__pycache__/test_real_command_execution.cpython-312-pytest-7.4.4.pyc
|
|
79
81
|
tests/integration/__pycache__/test_real_command_execution.cpython-312-pytest-9.0.3.pyc
|
|
80
82
|
tests/integration/__pycache__/test_sequence.cpython-312-pytest-7.4.4.pyc
|
|
81
83
|
tests/integration/__pycache__/test_sequence.cpython-312-pytest-9.0.3.pyc
|
|
@@ -88,6 +90,7 @@ tests/integration/file_compare/test_xml_compare.py
|
|
|
88
90
|
tests/integration/file_compare/__pycache__/test_binary_compare.cpython-312-pytest-7.4.4.pyc
|
|
89
91
|
tests/integration/file_compare/__pycache__/test_binary_compare.cpython-312-pytest-9.0.3.pyc
|
|
90
92
|
tests/integration/file_compare/__pycache__/test_binary_compare.cpython-39-pytest-8.3.4.pyc
|
|
93
|
+
tests/integration/file_compare/__pycache__/test_csv_compare.cpython-312-pytest-7.4.4.pyc
|
|
91
94
|
tests/integration/file_compare/__pycache__/test_csv_compare.cpython-312-pytest-9.0.3.pyc
|
|
92
95
|
tests/integration/file_compare/__pycache__/test_h5_compare.cpython-312-pytest-7.4.4.pyc
|
|
93
96
|
tests/integration/file_compare/__pycache__/test_h5_compare.cpython-312-pytest-9.0.3.pyc
|
|
@@ -98,6 +101,7 @@ tests/integration/file_compare/__pycache__/test_json_compare.cpython-39-pytest-8
|
|
|
98
101
|
tests/integration/file_compare/__pycache__/test_text_compare.cpython-312-pytest-7.4.4.pyc
|
|
99
102
|
tests/integration/file_compare/__pycache__/test_text_compare.cpython-312-pytest-9.0.3.pyc
|
|
100
103
|
tests/integration/file_compare/__pycache__/test_text_compare.cpython-39-pytest-8.3.4.pyc
|
|
104
|
+
tests/integration/file_compare/__pycache__/test_xml_compare.cpython-312-pytest-7.4.4.pyc
|
|
101
105
|
tests/integration/file_compare/__pycache__/test_xml_compare.cpython-312-pytest-9.0.3.pyc
|
|
102
106
|
tests/integration/parallel/test_parallel_runner.py
|
|
103
107
|
tests/integration/parallel/__pycache__/test_parallel_runner.cpython-312-pytest-7.4.4.pyc
|
|
@@ -110,15 +114,22 @@ tests/integration/path_handling/__pycache__/test_spaces_in_paths.cpython-39-pyte
|
|
|
110
114
|
tests/unit/test_cli.py
|
|
111
115
|
tests/unit/test_h5_comparator.py
|
|
112
116
|
tests/unit/test_run_all.py
|
|
117
|
+
tests/unit/__pycache__/test_cli.cpython-312-pytest-7.4.4.pyc
|
|
113
118
|
tests/unit/__pycache__/test_cli.cpython-312-pytest-9.0.3.pyc
|
|
119
|
+
tests/unit/__pycache__/test_h5_comparator.cpython-312-pytest-7.4.4.pyc
|
|
114
120
|
tests/unit/__pycache__/test_h5_comparator.cpython-312-pytest-9.0.3.pyc
|
|
121
|
+
tests/unit/__pycache__/test_run_all.cpython-312-pytest-7.4.4.pyc
|
|
115
122
|
tests/unit/__pycache__/test_run_all.cpython-312-pytest-9.0.3.pyc
|
|
116
123
|
tests/unit/commands/test_compare_command.py
|
|
124
|
+
tests/unit/commands/__pycache__/test_compare_command.cpython-312-pytest-7.4.4.pyc
|
|
117
125
|
tests/unit/commands/__pycache__/test_compare_command.cpython-312-pytest-9.0.3.pyc
|
|
118
126
|
tests/unit/core/test_history_store.py
|
|
119
127
|
tests/unit/core/test_process_worker.py
|
|
120
128
|
tests/unit/core/test_setup.py
|
|
129
|
+
tests/unit/core/__pycache__/test_assertions.cpython-312-pytest-9.0.3.pyc
|
|
130
|
+
tests/unit/core/__pycache__/test_history_store.cpython-312-pytest-7.4.4.pyc
|
|
121
131
|
tests/unit/core/__pycache__/test_history_store.cpython-312-pytest-9.0.3.pyc
|
|
132
|
+
tests/unit/core/__pycache__/test_process_worker.cpython-312-pytest-7.4.4.pyc
|
|
122
133
|
tests/unit/core/__pycache__/test_process_worker.cpython-312-pytest-9.0.3.pyc
|
|
123
134
|
tests/unit/core/__pycache__/test_setup.cpython-312-pytest-7.4.4.pyc
|
|
124
135
|
tests/unit/core/__pycache__/test_setup.cpython-312-pytest-9.0.3.pyc
|
|
@@ -131,4 +142,6 @@ tests/unit/runners/__pycache__/test_json_yaml_runner.cpython-39-pytest-8.3.4.pyc
|
|
|
131
142
|
tests/unit/runners/__pycache__/test_test_case_filter.cpython-312-pytest-7.4.4.pyc
|
|
132
143
|
tests/unit/runners/__pycache__/test_test_case_filter.cpython-312-pytest-9.0.3.pyc
|
|
133
144
|
tests/unit/utils/test_report_generator.py
|
|
145
|
+
tests/unit/utils/__pycache__/test_junit_xml_writer.cpython-312-pytest-9.0.3.pyc
|
|
146
|
+
tests/unit/utils/__pycache__/test_report_generator.cpython-312-pytest-7.4.4.pyc
|
|
134
147
|
tests/unit/utils/__pycache__/test_report_generator.cpython-312-pytest-9.0.3.pyc
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/requires.txt
RENAMED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
dukpy==0.5.0
|
|
2
|
+
h5py<4.0.0,>=3.11.0
|
|
2
3
|
setuptools>=75.8.0
|
|
3
4
|
wheel>=0.45.1
|
|
4
5
|
|
|
5
6
|
[:python_version < "3.12"]
|
|
6
|
-
|
|
7
|
-
numpy<2.0.0,>=1.21.0
|
|
7
|
+
numpy>=1.21.0
|
|
8
8
|
|
|
9
9
|
[:python_version >= "3.12"]
|
|
10
|
-
|
|
11
|
-
numpy<2.0.0,>=1.26.0
|
|
10
|
+
numpy>=1.26.0
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/run_all.cpython-312.pyc
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -63,3 +63,49 @@ def test_csv_column_range_limits_scope(tmp_path):
|
|
|
63
63
|
result = compare_csv(file1, file2, start_column=0, end_column=1)
|
|
64
64
|
|
|
65
65
|
assert result.identical
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_csv_numeric_tolerance_within_range(tmp_path):
|
|
69
|
+
"""Numeric cells within tolerance should be treated as equal"""
|
|
70
|
+
file1 = tmp_path / "a.csv"
|
|
71
|
+
file2 = tmp_path / "b.csv"
|
|
72
|
+
file1.write_text("id,value\n1,1.000001\n2,3.0\n", encoding="utf-8")
|
|
73
|
+
file2.write_text("id,value\n1,1.0\n2,3.00001\n", encoding="utf-8")
|
|
74
|
+
|
|
75
|
+
result = compare_csv(file1, file2, rtol=1e-5, atol=1e-5)
|
|
76
|
+
|
|
77
|
+
assert result.identical
|
|
78
|
+
assert result.differences == []
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_csv_numeric_tolerance_exceeded(tmp_path):
|
|
82
|
+
"""Numeric cells exceeding tolerance should be reported as mismatch"""
|
|
83
|
+
file1 = tmp_path / "a.csv"
|
|
84
|
+
file2 = tmp_path / "b.csv"
|
|
85
|
+
file1.write_text("id,value\n1,1.0\n", encoding="utf-8")
|
|
86
|
+
file2.write_text("id,value\n1,2.0\n", encoding="utf-8")
|
|
87
|
+
|
|
88
|
+
result = compare_csv(file1, file2, rtol=1e-5, atol=1e-8)
|
|
89
|
+
|
|
90
|
+
assert not result.identical
|
|
91
|
+
diff = result.differences[0]
|
|
92
|
+
assert diff.diff_type == "cell_mismatch"
|
|
93
|
+
assert diff.expected == "1.0"
|
|
94
|
+
assert diff.actual == "2.0"
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_csv_numeric_tolerance_mixed_with_string(tmp_path):
|
|
98
|
+
"""Non-numeric cells should still use string comparison even with tolerance enabled"""
|
|
99
|
+
file1 = tmp_path / "a.csv"
|
|
100
|
+
file2 = tmp_path / "b.csv"
|
|
101
|
+
file1.write_text("id,name,value\n1,Ada,1.0\n", encoding="utf-8")
|
|
102
|
+
file2.write_text("id,name,value\n1,Grace,1.000001\n", encoding="utf-8")
|
|
103
|
+
|
|
104
|
+
result = compare_csv(file1, file2, rtol=1e-5, atol=1e-5)
|
|
105
|
+
|
|
106
|
+
assert not result.identical
|
|
107
|
+
# Only the string mismatch should be reported; numeric value is within tolerance
|
|
108
|
+
diff_types = [d.diff_type for d in result.differences]
|
|
109
|
+
assert "cell_mismatch" in diff_types
|
|
110
|
+
string_diffs = [d for d in result.differences if d.diff_type == "cell_mismatch"]
|
|
111
|
+
assert any(d.expected == "Ada" and d.actual == "Grace" for d in string_diffs)
|
|
Binary file
|
|
index 888d4cd..3a46082 100644
|
|
|
Binary file
|
|
Binary file
|
|
index 82e16fd..d61bc2d 100644
|
|
|
Binary file
|
|
index 2fb8ada..5b385d0 100644
|
|
|
Binary file
|
|
Binary file
|
cli_test_framework-0.5.4/tests/unit/__pycache__/test_h5_comparator.cpython-312-pytest-7.4.4.pyc
ADDED
|
Binary file
|
|
index f429017..079e1e0 100644
|
|
|
Binary file
|
|
Binary file
|
|
index 923d51f..4b2d728 100644
|
|
|
Binary file
|
|
Binary file
|
|
index 7f27490..23e9996 100644
|
|
|
Binary file
|
cli_test_framework-0.5.4/tests/unit/core/__pycache__/test_assertions.cpython-312-pytest-9.0.3.pyc
ADDED
|
Binary file
|
cli_test_framework-0.5.4/tests/unit/core/__pycache__/test_history_store.cpython-312-pytest-7.4.4.pyc
ADDED
|
Binary file
|
|
index 49357e6..26663cc 100644
|
|
|
Binary file
|
|
index e9295f0..ec77e09 100644
|
|
|
Binary file
|
|
Binary file
|
|
index 41f0884..db6fb0b 100644
|
|
|
Binary file
|
|
index 72ad708..79d07fb 100644
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
index d556062..28d53e1 100644
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/commands/__init__.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/__init__.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/assertions.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/execution.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/history_store.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/parallel_runner.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/process_worker.py
RENAMED
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/core/test_case.py
RENAMED
|
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
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/__init__.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/json_runner.py
RENAMED
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/runners/yaml_runner.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/utils/__init__.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework/utils/path_resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/src/cli_test_framework.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/__init__.cpython-312.pyc
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/__init__.cpython-39.pyc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/__pycache__/run_all.cpython-39.pyc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__pycache__/__init__.cpython-312.pyc
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/e2e/__pycache__/__init__.cpython-39.pyc
RENAMED
|
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
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/integration/test_history_feature.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/commands/test_compare_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/core/test_process_worker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/test_json_yaml_runner.py
RENAMED
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/runners/test_test_case_filter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_test_framework-0.5.2 → cli_test_framework-0.5.4}/tests/unit/utils/test_report_generator.py
RENAMED
|
File without changes
|