From 44372cf7332e3bda66e7658ce5b871c68518ee06 Mon Sep 17 00:00:00 2001 From: github actions Date: Wed, 19 Feb 2025 01:21:31 +0500 Subject: [PATCH 1/4] ! F upgraded dependencies and some minor fix --- .github/workflows/auto_deploy.yml | 3 - .github/workflows/build_and_test.yml | 3 - .github/workflows/mdsnippets.yml | 3 - .github/workflows/publish.yml | 2 - .../.vscode => .vscode}/tasks.json | 0 .../CHANGELOG.md => CHANGELOG.md | 4 +- packages/approval_tests/LICENSE => LICENSE | 0 LICENSE.md | 202 ------ README.md | 103 +-- ...ysis_options.yaml => analysis_options.yaml | 4 +- .../bash => bash}/build_and_test.sh | 0 .../bash => bash}/gen_coverage_report.sh | 0 .../bash => bash}/push_release.sh | 0 .../approval_tests/bin => bin}/review.dart | 0 .../example => example}/main.dart | 0 .../main.verify_combinations.approved.txt | 0 .../verify_methods/verify/verify_test.dart | 0 .../verify_test.verify_method.approved.txt | 0 .../verify_all/verify_all_test.dart | 0 ...ify_all_test.verify_all_items.approved.txt | 0 .../verify_all_combinations_test.dart | 0 ...ions_test.verify_combinations.approved.txt | 0 .../verify_as_json/json_test.dart | 0 .../json_test.test_JSON_object.approved.txt | 0 .../verify_as_json/verify_as_json_test.dart | 0 ...ify_as_json_test.verify_model.approved.txt | 0 .../verify_query/verify_db_query_test.dart | 0 ...db_query_test.verify_db_query.approved.txt | 0 .../verify_network_query_test.dart | 0 ...ery_test.verify_network_query.approved.txt | 0 .../verify_sequence/verify_sequence_test.dart | 0 ...sequence_test.verify_sequence.approved.txt | 0 examples/dart_example/pubspec.yaml | 6 +- examples/flutter_example/pubspec.yaml | 8 +- .../lib => lib}/approval_tests.dart | 0 .../lib => lib}/src/approvals.dart | 0 .../src/comparator/file_comparator.dart | 0 .../lib => lib}/src/core/approval_number.dart | 0 .../lib => lib}/src/core/approval_writer.dart | 0 .../lib => lib}/src/core/comparator.dart | 0 .../src/core/constants/constants.dart | 0 .../src/core/enums/comporator_ide.dart | 0 .../lib => lib}/src/core/enums/file_type.dart | 0 .../approval_string_extensions.dart | 0 .../lib => lib}/src/core/logger/logger.dart | 35 +- .../lib => lib}/src/core/options.dart | 0 .../src/core/platform_wrapper.dart | 0 .../lib => lib}/src/core/reporter.dart | 0 .../lib => lib}/src/core/scrubber.dart | 0 .../src/core/stack_trace_fetcher/fetcher.dart | 0 .../stack_trace_fetcher.dart | 0 .../lib => lib}/src/core/utils/converter.dart | 0 .../src/core/utils/executable_query.dart | 0 .../src/core/utils/file_path_extractor.dart | 0 .../lib => lib}/src/core/utils/utils.dart | 0 .../exceptions/doesnt_match_exception.dart | 0 .../exceptions/file_not_found_exception.dart | 0 .../exceptions/no_diff_tool_exception.dart | 0 .../src/namer/file_namer_options.dart | 0 .../lib => lib}/src/namer/namer.dart | 0 .../command_line/command_line_reporter.dart | 0 .../src/reporters/diff_tool/diff_info.dart | 0 .../diff_tool/diff_tool_reporter.dart | 0 .../src/reporters/diff_tool/diff_tools.dart | 0 .../lib => lib}/src/reporters/git.dart | 0 .../src/scrubbers/date_scrubber.dart | 0 .../src/scrubbers/nothing_scrubber.dart | 0 .../src/scrubbers/reg_exp_scrubber.dart | 0 .../src/writers/approval_text_writer.dart | 0 packages/approval_tests/.gitignore | 21 - packages/approval_tests/CHANGELOG.md | 162 ----- packages/approval_tests/README.md | 307 --------- packages/approval_tests_flutter/.gitignore | 42 -- packages/approval_tests_flutter/.metadata | 10 - packages/approval_tests_flutter/LICENSE | 202 ------ packages/approval_tests_flutter/README.md | 335 ---------- .../analysis_options.yaml | 116 ---- .../lib/approval_tests_flutter.dart | 4 - .../lib/src/common.dart | 15 - .../lib/src/get_widget_names.dart | 176 ------ .../approval_tests_flutter/lib/src/src.dart | 119 ---- .../collect_widgets_meta_data.dart | 586 ------------------ .../lib/src/widget_meta/expect_meta.dart | 18 - .../lib/src/widget_meta/load_string_en.dart | 49 -- .../lib/src/widget_meta/matcher_types.dart | 25 - .../lib/src/widget_meta/register_types.dart | 6 - .../lib/src/widget_meta/widget_meta.dart | 171 ----- .../widget_meta/widget_tester_extension.dart | 102 --- packages/approval_tests_flutter/pubspec.yaml | 34 - .../test/approval_tests_flutter_test.dart | 42 -- ...tests_flutter_test.smoke_test.approved.txt | 1 - .../test/approved/class_names.txt | 5 - .../pubspec.yaml => pubspec.yaml | 12 +- .../test => test}/approval_test.dart | 0 ...th_filenamer.test_description.approved.txt | 0 .../approval_test.verify.approved.txt | 0 .../approval_test.verify_all.approved.txt | 0 ..._test.verify_all_combinations.approved.txt | 0 ...fy_all_combinations_exception.approved.txt | 0 .../approval_test.verify_as_json.approved.txt | 0 ...test.verify_as_json_exception.approved.txt | 0 ...val_test.verify_as_model_json.approved.txt | 0 ...oval_test.verify_custom_scrub.approved.txt | 0 ...proval_test.verify_date_scrub.approved.txt | 0 ...pproval_test.verify_exception.approved.txt | 0 .../approval_test.verify_query.approved.txt | 0 ...l_test.verify_query_exception.approved.txt | 0 .../approval_test.verify_scrub.approved.txt | 0 ...approval_test.verify_sequence.approved.txt | 0 ...est.verify_sequence_exception.approved.txt | 0 ...est.verify_without_class_name.approved.txt | 0 .../test => test}/constants/lines.dart | 0 .../test => test}/example/example_test.dart | 0 ...example_test.test_JSON_object.approved.txt | 2 + .../groups/diff_tools_tests.dart | 0 .../test => test}/groups/exception_tests.dart | 0 .../test => test}/groups/minor_tests.dart | 0 ...n_with_namer.test_description.approved.txt | 0 .../test => test}/groups/verify_tests.dart | 0 .../mock/testable_file_path_extractor.dart | 0 .../mock/testable_platform_wrapper.dart | 0 .../test => test}/models/item.dart | 0 .../queries/db_request_query.dart | 0 .../queries/network_request_query.dart | 0 .../test => test}/utils/helper.dart | 0 125 files changed, 66 insertions(+), 2869 deletions(-) rename {packages/approval_tests/.vscode => .vscode}/tasks.json (100%) rename packages/approval_tests_flutter/CHANGELOG.md => CHANGELOG.md (99%) rename packages/approval_tests/LICENSE => LICENSE (100%) delete mode 100644 LICENSE.md rename packages/approval_tests/analysis_options.yaml => analysis_options.yaml (97%) rename {packages/approval_tests/bash => bash}/build_and_test.sh (100%) rename {packages/approval_tests/bash => bash}/gen_coverage_report.sh (100%) rename {packages/approval_tests/bash => bash}/push_release.sh (100%) rename {packages/approval_tests/bin => bin}/review.dart (100%) rename {packages/approval_tests/example => example}/main.dart (100%) rename {packages/approval_tests/example => example}/main.verify_combinations.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify/verify_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify/verify_test.verify_method.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_all/verify_all_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_all/verify_all_test.verify_all_items.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_all_combinations/verify_all_combinations_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_all_combinations/verify_all_combinations_test.verify_combinations.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_as_json/json_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_as_json/json_test.test_JSON_object.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_as_json/verify_as_json_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_as_json/verify_as_json_test.verify_model.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_query/verify_db_query_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_query/verify_db_query_test.verify_db_query.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_query/verify_network_query_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_query/verify_network_query_test.verify_network_query.approved.txt (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_sequence/verify_sequence_test.dart (100%) rename {packages/approval_tests/example => example}/verify_methods/verify_sequence/verify_sequence_test.verify_sequence.approved.txt (100%) rename {packages/approval_tests/lib => lib}/approval_tests.dart (100%) rename {packages/approval_tests/lib => lib}/src/approvals.dart (100%) rename {packages/approval_tests/lib => lib}/src/comparator/file_comparator.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/approval_number.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/approval_writer.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/comparator.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/constants/constants.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/enums/comporator_ide.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/enums/file_type.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/extensions/approval_string_extensions.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/logger/logger.dart (71%) rename {packages/approval_tests/lib => lib}/src/core/options.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/platform_wrapper.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/reporter.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/scrubber.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/stack_trace_fetcher/fetcher.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/stack_trace_fetcher/stack_trace_fetcher.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/utils/converter.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/utils/executable_query.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/utils/file_path_extractor.dart (100%) rename {packages/approval_tests/lib => lib}/src/core/utils/utils.dart (100%) rename {packages/approval_tests/lib => lib}/src/exceptions/doesnt_match_exception.dart (100%) rename {packages/approval_tests/lib => lib}/src/exceptions/file_not_found_exception.dart (100%) rename {packages/approval_tests/lib => lib}/src/exceptions/no_diff_tool_exception.dart (100%) rename {packages/approval_tests/lib => lib}/src/namer/file_namer_options.dart (100%) rename {packages/approval_tests/lib => lib}/src/namer/namer.dart (100%) rename {packages/approval_tests/lib => lib}/src/reporters/command_line/command_line_reporter.dart (100%) rename {packages/approval_tests/lib => lib}/src/reporters/diff_tool/diff_info.dart (100%) rename {packages/approval_tests/lib => lib}/src/reporters/diff_tool/diff_tool_reporter.dart (100%) rename {packages/approval_tests/lib => lib}/src/reporters/diff_tool/diff_tools.dart (100%) rename {packages/approval_tests/lib => lib}/src/reporters/git.dart (100%) rename {packages/approval_tests/lib => lib}/src/scrubbers/date_scrubber.dart (100%) rename {packages/approval_tests/lib => lib}/src/scrubbers/nothing_scrubber.dart (100%) rename {packages/approval_tests/lib => lib}/src/scrubbers/reg_exp_scrubber.dart (100%) rename {packages/approval_tests/lib => lib}/src/writers/approval_text_writer.dart (100%) delete mode 100644 packages/approval_tests/.gitignore delete mode 100644 packages/approval_tests/CHANGELOG.md delete mode 100644 packages/approval_tests/README.md delete mode 100644 packages/approval_tests_flutter/.gitignore delete mode 100644 packages/approval_tests_flutter/.metadata delete mode 100644 packages/approval_tests_flutter/LICENSE delete mode 100644 packages/approval_tests_flutter/README.md delete mode 100644 packages/approval_tests_flutter/analysis_options.yaml delete mode 100644 packages/approval_tests_flutter/lib/approval_tests_flutter.dart delete mode 100644 packages/approval_tests_flutter/lib/src/common.dart delete mode 100644 packages/approval_tests_flutter/lib/src/get_widget_names.dart delete mode 100644 packages/approval_tests_flutter/lib/src/src.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/collect_widgets_meta_data.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/expect_meta.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/load_string_en.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/matcher_types.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/register_types.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/widget_meta.dart delete mode 100644 packages/approval_tests_flutter/lib/src/widget_meta/widget_tester_extension.dart delete mode 100644 packages/approval_tests_flutter/pubspec.yaml delete mode 100644 packages/approval_tests_flutter/test/approval_tests_flutter_test.dart delete mode 100644 packages/approval_tests_flutter/test/approval_tests_flutter_test.smoke_test.approved.txt delete mode 100644 packages/approval_tests_flutter/test/approved/class_names.txt rename packages/approval_tests/pubspec.yaml => pubspec.yaml (82%) rename {packages/approval_tests/test => test}/approval_test.dart (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.description_with_filenamer.test_description.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_all.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_all_combinations.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_all_combinations_exception.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_as_json.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_as_json_exception.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_as_model_json.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_custom_scrub.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_date_scrub.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_exception.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_query.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_query_exception.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_scrub.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_sequence.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_sequence_exception.approved.txt (100%) rename {packages/approval_tests/test => test}/approved_files/approval_test.verify_without_class_name.approved.txt (100%) rename {packages/approval_tests/test => test}/constants/lines.dart (100%) rename {packages/approval_tests/test => test}/example/example_test.dart (100%) rename {packages/approval_tests/test => test}/example/example_test.test_JSON_object.approved.txt (57%) rename {packages/approval_tests/test => test}/groups/diff_tools_tests.dart (100%) rename {packages/approval_tests/test => test}/groups/exception_tests.dart (100%) rename {packages/approval_tests/test => test}/groups/minor_tests.dart (100%) rename {packages/approval_tests/test => test}/groups/minor_tests.description_with_namer.test_description.approved.txt (100%) rename {packages/approval_tests/test => test}/groups/verify_tests.dart (100%) rename {packages/approval_tests/test => test}/mock/testable_file_path_extractor.dart (100%) rename {packages/approval_tests/test => test}/mock/testable_platform_wrapper.dart (100%) rename {packages/approval_tests/test => test}/models/item.dart (100%) rename {packages/approval_tests/test => test}/queries/db_request_query.dart (100%) rename {packages/approval_tests/test => test}/queries/network_request_query.dart (100%) rename {packages/approval_tests/test => test}/utils/helper.dart (100%) diff --git a/.github/workflows/auto_deploy.yml b/.github/workflows/auto_deploy.yml index 3c30e87..81426de 100644 --- a/.github/workflows/auto_deploy.yml +++ b/.github/workflows/auto_deploy.yml @@ -8,9 +8,6 @@ on: jobs: build: - defaults: - run: - working-directory: packages/approval_tests runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 218a841..48db5be 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -4,9 +4,6 @@ on: [push, pull_request] jobs: build: - defaults: - run: - working-directory: packages/approval_tests runs-on: ${{ matrix.os }} strategy: fail-fast: true diff --git a/.github/workflows/mdsnippets.yml b/.github/workflows/mdsnippets.yml index 670c45c..f8520fd 100644 --- a/.github/workflows/mdsnippets.yml +++ b/.github/workflows/mdsnippets.yml @@ -4,9 +4,6 @@ on: jobs: format_and_snippets: runs-on: ubuntu-latest - defaults: - run: - working-directory: packages/approval_tests steps: - name: 📚 Git Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f51d120..67ee621 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,8 +10,6 @@ jobs: permissions: id-token: write # Required for authentication using OIDC uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1 - with: - working-directory: packages/approval_tests # with: # working-directory: path/to/package/within/repository create_release: diff --git a/packages/approval_tests/.vscode/tasks.json b/.vscode/tasks.json similarity index 100% rename from packages/approval_tests/.vscode/tasks.json rename to .vscode/tasks.json diff --git a/packages/approval_tests_flutter/CHANGELOG.md b/CHANGELOG.md similarity index 99% rename from packages/approval_tests_flutter/CHANGELOG.md rename to CHANGELOG.md index f44a0f3..01a143e 100644 --- a/packages/approval_tests_flutter/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.1.4 +- Upgraded all dependencies to actuals. + ## 1.1.3 - Updated README.md file: fix links. @@ -13,7 +16,6 @@ ## 1.1.1 - Updated README.md file. - ## 1.1.0 - **Breaking release**: diff --git a/packages/approval_tests/LICENSE b/LICENSE similarity index 100% rename from packages/approval_tests/LICENSE rename to LICENSE diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 9cc816b..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 shodev.live - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index 28c545a..6699061 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,12 @@

-

Approval Tests implementation in Dart / Flutter 🚀

+

Approval Tests implementation in Dart 🚀


codecov Pub - License: APACHE + License: APACHE Repository views Stars

@@ -36,8 +36,6 @@ In normal unit testing, you say `expect(person.getAge(), 5)`. Approvals allow yo I am writing an implementation of **[Approval Tests](https://approvaltests.com/)** in Dart. If anyone wants to help, please **[text](https://t.me/yelmuratoff)** me. 🙏 -Thanks to **[Richard Coutts](https://github.com/buttonsrtoys)** for special contributions to the `approval_tests_flutter` package. - ## Packages ApprovalTests is designed for two level: Dart and Flutter.
@@ -54,68 +52,27 @@ ApprovalTests is designed for two level: Dart and Flutter.
- If there's a difference, a `reporter` tool will highlight the mismatch and the test fails. - If the test is passed, the `received` file is deleted automatically. You can change this by changing the `deleteReceivedFile` value in `options`. If the test fails, the received file remains for analysis. -Instead of writing: -```dart - testWidgets('home page', (WidgetTester tester) async { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - expect(find.text('You have pushed the button this many times:'), findsOneWidget); - expect(find.text('0'), findsOneWidget); - expect(find.byWidgetPredicate( - (Widget widget) => widget is Text && widget.data == 'hello' && - widget.key == ValueKey('myKey'), - ), findsOneWidget); - expect(find.text('Approved Example'), findsOneWidget); - }); -``` - -Write this: -```dart - testWidgets('smoke test', (WidgetTester tester) async { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - await tester.approvalTest(); - }); -``` - -Suppose you wanted to confirm that a page loaded with all the widget you expected. To do this, -perform an approval test by calling `tester.approvalTest`, and give your test a suitable name: - -```dart - testWidget('home page', () { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - await tester.approvalTest(description: 'all widgets load correctly'); - }); -``` - -To include your project's custom widget types in your test, and to perform post-test checks, add -calls to `Approved.setUpAll()` to your tests' `setUpAll` calls, like so: - -```dart - main() { - setUpAll(() { - Approved.setUpAll(); - }); - } -``` ## 📦 Installation Add the following to your `pubspec.yaml` file: ```yaml dependencies: - approval_tests: ^1.1.3 - approval_tests_flutter: ^1.1.3 # If you need. This package is needed for widget and integration tests. You can remove `approval_tests` if you use flutter package. + approval_tests: ^1.1.0 ``` ## 👀 Getting Started -The best way to get started is to download and open the example project: -* [Flutter example project](https://github.com/approvals/ApprovalTests.Dart/tree/main/examples/flutter_example) +The best way to get started is to download and open the starter project: +* [Approvaltests.Dart.StarterProject](https://github.com/approvals/Approvaltests.Dart.StarterProject) + +This is a standard project that can be imported into any editor or IDE and also includes CI with GitHub Actions. + +It comes ready with: + +- A suitable `.gitignore` to exclude approval artifacts +- A ready linter with all rules in place +- A GitHub action to run tests and you can always check the status of the tests on the badge in the `README.md` file. ## 📚 How to use @@ -149,25 +106,11 @@ After running the command, the files will be analyzed and you will be asked to c - `n` - Reject the received file. - `v`iew - View the differences between the received and approved files. After selecting `v` you will be asked which IDE you want to use to view the differences. -The command `dart run approval_tests:review` has additional options, including listing files, selecting - files to review from this list by index, and more. For its current capabilities, run - ```bash - dart run approval_tests:review --help - ``` - Typing 'dart run approval_tests:review' is tedious! To reduce your typing, alias the command in your - `.zshrc` or `.bashrc` file - ``` - alias review='dart run approval_tests:review' - ``` - or PowerShell profile - ```shell - function review { - dart run approval_tests:review - } - ``` #### • Via approveResult property If you want the result to be automatically saved after running the test, you need to use the `approveResult` property in `Options`: + + ```dart void main() { test('test JSON object', () { @@ -186,10 +129,13 @@ void main() { }); } ``` +snippet source | anchor + this will result in the following file `example_test.test_JSON_object.approved.txt` - + + ```txt { "name": "JsonTest", @@ -200,6 +146,8 @@ this will result in the following file "version": 0.1 } ``` +snippet source | anchor + #### • Via file rename You can just rename the `.received` file to `.approved`. @@ -242,6 +190,8 @@ And the `verify_methods` folder has small examples of using different `ApprovalT ### JSON example With `verifyAsJson`, if you pass data models as `JsonItem`, with nested other models as `AnotherItem` and `SubItem`, then you need to add an `toJson` method to each model for the serialization to succeed. + + ```dart void main() { const jsonItem = JsonItem( @@ -271,10 +221,13 @@ void main() { }); } ``` +snippet source | anchor + this will result in the following file `verify_as_json_test.verify_model.approved.txt` - + + ```txt { "jsonItem": { @@ -301,6 +254,8 @@ this will result in the following file } } ``` +snippet source | anchor + Passed test example diff --git a/packages/approval_tests/analysis_options.yaml b/analysis_options.yaml similarity index 97% rename from packages/approval_tests/analysis_options.yaml rename to analysis_options.yaml index 543849e..5e3c239 100644 --- a/packages/approval_tests/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,5 +1,3 @@ -include: package:sizzle_lints/sizzle_lints.yaml - analyzer: errors: depend_on_referenced_packages: ignore @@ -112,4 +110,4 @@ dart_code_metrics: - unnecessary-trailing-comma - prefer-declaring-const-constructor - prefer-single-widget-per-file: - ignore-private-widgets: true \ No newline at end of file + ignore-private-widgets: true diff --git a/packages/approval_tests/bash/build_and_test.sh b/bash/build_and_test.sh similarity index 100% rename from packages/approval_tests/bash/build_and_test.sh rename to bash/build_and_test.sh diff --git a/packages/approval_tests/bash/gen_coverage_report.sh b/bash/gen_coverage_report.sh similarity index 100% rename from packages/approval_tests/bash/gen_coverage_report.sh rename to bash/gen_coverage_report.sh diff --git a/packages/approval_tests/bash/push_release.sh b/bash/push_release.sh similarity index 100% rename from packages/approval_tests/bash/push_release.sh rename to bash/push_release.sh diff --git a/packages/approval_tests/bin/review.dart b/bin/review.dart similarity index 100% rename from packages/approval_tests/bin/review.dart rename to bin/review.dart diff --git a/packages/approval_tests/example/main.dart b/example/main.dart similarity index 100% rename from packages/approval_tests/example/main.dart rename to example/main.dart diff --git a/packages/approval_tests/example/main.verify_combinations.approved.txt b/example/main.verify_combinations.approved.txt similarity index 100% rename from packages/approval_tests/example/main.verify_combinations.approved.txt rename to example/main.verify_combinations.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify/verify_test.dart b/example/verify_methods/verify/verify_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify/verify_test.dart rename to example/verify_methods/verify/verify_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify/verify_test.verify_method.approved.txt b/example/verify_methods/verify/verify_test.verify_method.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify/verify_test.verify_method.approved.txt rename to example/verify_methods/verify/verify_test.verify_method.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_all/verify_all_test.dart b/example/verify_methods/verify_all/verify_all_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_all/verify_all_test.dart rename to example/verify_methods/verify_all/verify_all_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_all/verify_all_test.verify_all_items.approved.txt b/example/verify_methods/verify_all/verify_all_test.verify_all_items.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_all/verify_all_test.verify_all_items.approved.txt rename to example/verify_methods/verify_all/verify_all_test.verify_all_items.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_all_combinations/verify_all_combinations_test.dart b/example/verify_methods/verify_all_combinations/verify_all_combinations_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_all_combinations/verify_all_combinations_test.dart rename to example/verify_methods/verify_all_combinations/verify_all_combinations_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_all_combinations/verify_all_combinations_test.verify_combinations.approved.txt b/example/verify_methods/verify_all_combinations/verify_all_combinations_test.verify_combinations.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_all_combinations/verify_all_combinations_test.verify_combinations.approved.txt rename to example/verify_methods/verify_all_combinations/verify_all_combinations_test.verify_combinations.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_as_json/json_test.dart b/example/verify_methods/verify_as_json/json_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_as_json/json_test.dart rename to example/verify_methods/verify_as_json/json_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_as_json/json_test.test_JSON_object.approved.txt b/example/verify_methods/verify_as_json/json_test.test_JSON_object.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_as_json/json_test.test_JSON_object.approved.txt rename to example/verify_methods/verify_as_json/json_test.test_JSON_object.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_as_json/verify_as_json_test.dart b/example/verify_methods/verify_as_json/verify_as_json_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_as_json/verify_as_json_test.dart rename to example/verify_methods/verify_as_json/verify_as_json_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_as_json/verify_as_json_test.verify_model.approved.txt b/example/verify_methods/verify_as_json/verify_as_json_test.verify_model.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_as_json/verify_as_json_test.verify_model.approved.txt rename to example/verify_methods/verify_as_json/verify_as_json_test.verify_model.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_query/verify_db_query_test.dart b/example/verify_methods/verify_query/verify_db_query_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_query/verify_db_query_test.dart rename to example/verify_methods/verify_query/verify_db_query_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_query/verify_db_query_test.verify_db_query.approved.txt b/example/verify_methods/verify_query/verify_db_query_test.verify_db_query.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_query/verify_db_query_test.verify_db_query.approved.txt rename to example/verify_methods/verify_query/verify_db_query_test.verify_db_query.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_query/verify_network_query_test.dart b/example/verify_methods/verify_query/verify_network_query_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_query/verify_network_query_test.dart rename to example/verify_methods/verify_query/verify_network_query_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_query/verify_network_query_test.verify_network_query.approved.txt b/example/verify_methods/verify_query/verify_network_query_test.verify_network_query.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_query/verify_network_query_test.verify_network_query.approved.txt rename to example/verify_methods/verify_query/verify_network_query_test.verify_network_query.approved.txt diff --git a/packages/approval_tests/example/verify_methods/verify_sequence/verify_sequence_test.dart b/example/verify_methods/verify_sequence/verify_sequence_test.dart similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_sequence/verify_sequence_test.dart rename to example/verify_methods/verify_sequence/verify_sequence_test.dart diff --git a/packages/approval_tests/example/verify_methods/verify_sequence/verify_sequence_test.verify_sequence.approved.txt b/example/verify_methods/verify_sequence/verify_sequence_test.verify_sequence.approved.txt similarity index 100% rename from packages/approval_tests/example/verify_methods/verify_sequence/verify_sequence_test.verify_sequence.approved.txt rename to example/verify_methods/verify_sequence/verify_sequence_test.verify_sequence.approved.txt diff --git a/examples/dart_example/pubspec.yaml b/examples/dart_example/pubspec.yaml index 4c2b227..26af55d 100644 --- a/examples/dart_example/pubspec.yaml +++ b/examples/dart_example/pubspec.yaml @@ -1,7 +1,7 @@ name: dart_application description: A sample command-line application. version: 1.0.0 -publish_to: 'none' +publish_to: "none" environment: sdk: ^3.4.0 @@ -9,8 +9,8 @@ environment: # Add regular dependencies here. dependencies: approval_tests: - path: ../../packages/approval_tests + path: ../../ dev_dependencies: lints: ^4.0.0 - test: ^1.24.0 \ No newline at end of file + test: ^1.24.0 diff --git a/examples/flutter_example/pubspec.yaml b/examples/flutter_example/pubspec.yaml index 44a9347..0a4e4f4 100644 --- a/examples/flutter_example/pubspec.yaml +++ b/examples/flutter_example/pubspec.yaml @@ -1,11 +1,11 @@ name: flutter_example description: "A new Flutter project." -publish_to: 'none' +publish_to: "none" version: 1.0.0+1 environment: - sdk: '>=3.4.1 <4.0.0' + sdk: ">=3.4.1 <4.0.0" dependencies: flutter: @@ -13,10 +13,10 @@ dependencies: flutter_test: sdk: flutter approval_tests_flutter: - path: ../../packages/approval_tests_flutter + path: ../../../ApprovalTests.Dart.Flutter/ dev_dependencies: flutter_lints: ^4.0.0 flutter: - uses-material-design: true \ No newline at end of file + uses-material-design: true diff --git a/packages/approval_tests/lib/approval_tests.dart b/lib/approval_tests.dart similarity index 100% rename from packages/approval_tests/lib/approval_tests.dart rename to lib/approval_tests.dart diff --git a/packages/approval_tests/lib/src/approvals.dart b/lib/src/approvals.dart similarity index 100% rename from packages/approval_tests/lib/src/approvals.dart rename to lib/src/approvals.dart diff --git a/packages/approval_tests/lib/src/comparator/file_comparator.dart b/lib/src/comparator/file_comparator.dart similarity index 100% rename from packages/approval_tests/lib/src/comparator/file_comparator.dart rename to lib/src/comparator/file_comparator.dart diff --git a/packages/approval_tests/lib/src/core/approval_number.dart b/lib/src/core/approval_number.dart similarity index 100% rename from packages/approval_tests/lib/src/core/approval_number.dart rename to lib/src/core/approval_number.dart diff --git a/packages/approval_tests/lib/src/core/approval_writer.dart b/lib/src/core/approval_writer.dart similarity index 100% rename from packages/approval_tests/lib/src/core/approval_writer.dart rename to lib/src/core/approval_writer.dart diff --git a/packages/approval_tests/lib/src/core/comparator.dart b/lib/src/core/comparator.dart similarity index 100% rename from packages/approval_tests/lib/src/core/comparator.dart rename to lib/src/core/comparator.dart diff --git a/packages/approval_tests/lib/src/core/constants/constants.dart b/lib/src/core/constants/constants.dart similarity index 100% rename from packages/approval_tests/lib/src/core/constants/constants.dart rename to lib/src/core/constants/constants.dart diff --git a/packages/approval_tests/lib/src/core/enums/comporator_ide.dart b/lib/src/core/enums/comporator_ide.dart similarity index 100% rename from packages/approval_tests/lib/src/core/enums/comporator_ide.dart rename to lib/src/core/enums/comporator_ide.dart diff --git a/packages/approval_tests/lib/src/core/enums/file_type.dart b/lib/src/core/enums/file_type.dart similarity index 100% rename from packages/approval_tests/lib/src/core/enums/file_type.dart rename to lib/src/core/enums/file_type.dart diff --git a/packages/approval_tests/lib/src/core/extensions/approval_string_extensions.dart b/lib/src/core/extensions/approval_string_extensions.dart similarity index 100% rename from packages/approval_tests/lib/src/core/extensions/approval_string_extensions.dart rename to lib/src/core/extensions/approval_string_extensions.dart diff --git a/packages/approval_tests/lib/src/core/logger/logger.dart b/lib/src/core/logger/logger.dart similarity index 71% rename from packages/approval_tests/lib/src/core/logger/logger.dart rename to lib/src/core/logger/logger.dart index f558752..ef5b89b 100644 --- a/packages/approval_tests/lib/src/core/logger/logger.dart +++ b/lib/src/core/logger/logger.dart @@ -28,13 +28,13 @@ final class ApprovalLogger { settings: TalkerSettings( titles: _defaultTitles, colors: { - TalkerLogType.critical: AnsiPen()..red(), - TalkerLogType.warning: AnsiPen()..yellow(), - TalkerLogType.verbose: AnsiPen()..gray(), - TalkerLogType.info: AnsiPen()..cyan(), - TalkerLogType.debug: AnsiPen()..gray(), - TalkerLogType.error: ApprovalUtils.hexToAnsiPen('de7979'), - TalkerLogType.exception: ApprovalUtils.hexToAnsiPen('de7979'), + TalkerLogType.critical.key: AnsiPen()..red(), + TalkerLogType.warning.key: AnsiPen()..yellow(), + TalkerLogType.verbose.key: AnsiPen()..gray(), + TalkerLogType.info.key: AnsiPen()..cyan(), + TalkerLogType.debug.key: AnsiPen()..gray(), + TalkerLogType.error.key: ApprovalUtils.hexToAnsiPen('de7979'), + TalkerLogType.exception.key: ApprovalUtils.hexToAnsiPen('de7979'), }, ), ), @@ -47,22 +47,23 @@ final class ApprovalLogger { static const _approvalTitle = "ApprovalTests"; // Define default titles for different log types. - static const _defaultTitles = { - TalkerLogType.critical: '💀 $_approvalTitle', - TalkerLogType.warning: '🟡 $_approvalTitle', - TalkerLogType.verbose: '🐛 $_approvalTitle', - TalkerLogType.info: '🔍 $_approvalTitle', - TalkerLogType.debug: '🐛 $_approvalTitle', - TalkerLogType.error: '🔴 $_approvalTitle', - TalkerLogType.exception: '🔴 $_approvalTitle', + static Map _defaultTitles = { + TalkerLogType.critical.key: '💀 $_approvalTitle', + TalkerLogType.warning.key: '🟡 $_approvalTitle', + TalkerLogType.verbose.key: '🐛 $_approvalTitle', + TalkerLogType.info.key: '🔍 $_approvalTitle', + TalkerLogType.debug.key: '🐛 $_approvalTitle', + TalkerLogType.error.key: '🔴 $_approvalTitle', + TalkerLogType.exception.key: '🔴 $_approvalTitle', }; /// `log` method to log messages with debug log level. static void log(String message) => _instance._logger.debug(message); /// `info` method to log messages with success log level. - static void success(String message) => - _instance._logger.logTyped(_SuccessLog(message)); + static void success(String message) => _instance._logger.logCustom( + _SuccessLog(message), + ); /// `warning` method to log messages with warning log level. static void warning(String message) => _instance._logger.warning(message); diff --git a/packages/approval_tests/lib/src/core/options.dart b/lib/src/core/options.dart similarity index 100% rename from packages/approval_tests/lib/src/core/options.dart rename to lib/src/core/options.dart diff --git a/packages/approval_tests/lib/src/core/platform_wrapper.dart b/lib/src/core/platform_wrapper.dart similarity index 100% rename from packages/approval_tests/lib/src/core/platform_wrapper.dart rename to lib/src/core/platform_wrapper.dart diff --git a/packages/approval_tests/lib/src/core/reporter.dart b/lib/src/core/reporter.dart similarity index 100% rename from packages/approval_tests/lib/src/core/reporter.dart rename to lib/src/core/reporter.dart diff --git a/packages/approval_tests/lib/src/core/scrubber.dart b/lib/src/core/scrubber.dart similarity index 100% rename from packages/approval_tests/lib/src/core/scrubber.dart rename to lib/src/core/scrubber.dart diff --git a/packages/approval_tests/lib/src/core/stack_trace_fetcher/fetcher.dart b/lib/src/core/stack_trace_fetcher/fetcher.dart similarity index 100% rename from packages/approval_tests/lib/src/core/stack_trace_fetcher/fetcher.dart rename to lib/src/core/stack_trace_fetcher/fetcher.dart diff --git a/packages/approval_tests/lib/src/core/stack_trace_fetcher/stack_trace_fetcher.dart b/lib/src/core/stack_trace_fetcher/stack_trace_fetcher.dart similarity index 100% rename from packages/approval_tests/lib/src/core/stack_trace_fetcher/stack_trace_fetcher.dart rename to lib/src/core/stack_trace_fetcher/stack_trace_fetcher.dart diff --git a/packages/approval_tests/lib/src/core/utils/converter.dart b/lib/src/core/utils/converter.dart similarity index 100% rename from packages/approval_tests/lib/src/core/utils/converter.dart rename to lib/src/core/utils/converter.dart diff --git a/packages/approval_tests/lib/src/core/utils/executable_query.dart b/lib/src/core/utils/executable_query.dart similarity index 100% rename from packages/approval_tests/lib/src/core/utils/executable_query.dart rename to lib/src/core/utils/executable_query.dart diff --git a/packages/approval_tests/lib/src/core/utils/file_path_extractor.dart b/lib/src/core/utils/file_path_extractor.dart similarity index 100% rename from packages/approval_tests/lib/src/core/utils/file_path_extractor.dart rename to lib/src/core/utils/file_path_extractor.dart diff --git a/packages/approval_tests/lib/src/core/utils/utils.dart b/lib/src/core/utils/utils.dart similarity index 100% rename from packages/approval_tests/lib/src/core/utils/utils.dart rename to lib/src/core/utils/utils.dart diff --git a/packages/approval_tests/lib/src/exceptions/doesnt_match_exception.dart b/lib/src/exceptions/doesnt_match_exception.dart similarity index 100% rename from packages/approval_tests/lib/src/exceptions/doesnt_match_exception.dart rename to lib/src/exceptions/doesnt_match_exception.dart diff --git a/packages/approval_tests/lib/src/exceptions/file_not_found_exception.dart b/lib/src/exceptions/file_not_found_exception.dart similarity index 100% rename from packages/approval_tests/lib/src/exceptions/file_not_found_exception.dart rename to lib/src/exceptions/file_not_found_exception.dart diff --git a/packages/approval_tests/lib/src/exceptions/no_diff_tool_exception.dart b/lib/src/exceptions/no_diff_tool_exception.dart similarity index 100% rename from packages/approval_tests/lib/src/exceptions/no_diff_tool_exception.dart rename to lib/src/exceptions/no_diff_tool_exception.dart diff --git a/packages/approval_tests/lib/src/namer/file_namer_options.dart b/lib/src/namer/file_namer_options.dart similarity index 100% rename from packages/approval_tests/lib/src/namer/file_namer_options.dart rename to lib/src/namer/file_namer_options.dart diff --git a/packages/approval_tests/lib/src/namer/namer.dart b/lib/src/namer/namer.dart similarity index 100% rename from packages/approval_tests/lib/src/namer/namer.dart rename to lib/src/namer/namer.dart diff --git a/packages/approval_tests/lib/src/reporters/command_line/command_line_reporter.dart b/lib/src/reporters/command_line/command_line_reporter.dart similarity index 100% rename from packages/approval_tests/lib/src/reporters/command_line/command_line_reporter.dart rename to lib/src/reporters/command_line/command_line_reporter.dart diff --git a/packages/approval_tests/lib/src/reporters/diff_tool/diff_info.dart b/lib/src/reporters/diff_tool/diff_info.dart similarity index 100% rename from packages/approval_tests/lib/src/reporters/diff_tool/diff_info.dart rename to lib/src/reporters/diff_tool/diff_info.dart diff --git a/packages/approval_tests/lib/src/reporters/diff_tool/diff_tool_reporter.dart b/lib/src/reporters/diff_tool/diff_tool_reporter.dart similarity index 100% rename from packages/approval_tests/lib/src/reporters/diff_tool/diff_tool_reporter.dart rename to lib/src/reporters/diff_tool/diff_tool_reporter.dart diff --git a/packages/approval_tests/lib/src/reporters/diff_tool/diff_tools.dart b/lib/src/reporters/diff_tool/diff_tools.dart similarity index 100% rename from packages/approval_tests/lib/src/reporters/diff_tool/diff_tools.dart rename to lib/src/reporters/diff_tool/diff_tools.dart diff --git a/packages/approval_tests/lib/src/reporters/git.dart b/lib/src/reporters/git.dart similarity index 100% rename from packages/approval_tests/lib/src/reporters/git.dart rename to lib/src/reporters/git.dart diff --git a/packages/approval_tests/lib/src/scrubbers/date_scrubber.dart b/lib/src/scrubbers/date_scrubber.dart similarity index 100% rename from packages/approval_tests/lib/src/scrubbers/date_scrubber.dart rename to lib/src/scrubbers/date_scrubber.dart diff --git a/packages/approval_tests/lib/src/scrubbers/nothing_scrubber.dart b/lib/src/scrubbers/nothing_scrubber.dart similarity index 100% rename from packages/approval_tests/lib/src/scrubbers/nothing_scrubber.dart rename to lib/src/scrubbers/nothing_scrubber.dart diff --git a/packages/approval_tests/lib/src/scrubbers/reg_exp_scrubber.dart b/lib/src/scrubbers/reg_exp_scrubber.dart similarity index 100% rename from packages/approval_tests/lib/src/scrubbers/reg_exp_scrubber.dart rename to lib/src/scrubbers/reg_exp_scrubber.dart diff --git a/packages/approval_tests/lib/src/writers/approval_text_writer.dart b/lib/src/writers/approval_text_writer.dart similarity index 100% rename from packages/approval_tests/lib/src/writers/approval_text_writer.dart rename to lib/src/writers/approval_text_writer.dart diff --git a/packages/approval_tests/.gitignore b/packages/approval_tests/.gitignore deleted file mode 100644 index 0055b6e..0000000 --- a/packages/approval_tests/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ -.idea - -# Coverage -coverage/ - -# Pubspec -pubspec.lock - -# Codegen -*.*.dart -*.g.dart -*.received.* -generated_* - -# Other files -.old.dart - -.DS_Store diff --git a/packages/approval_tests/CHANGELOG.md b/packages/approval_tests/CHANGELOG.md deleted file mode 100644 index 2735075..0000000 --- a/packages/approval_tests/CHANGELOG.md +++ /dev/null @@ -1,162 +0,0 @@ -## 1.1.3 -- Updated README.md file: fix links. - -## 1.1.2 -- Added CLI additional options: - Usage: `dart run approval_tests:review [arguments]` - - Arguments: - - `--help` Print this usage information. - - `--list` Print a list of project .received.txt files. - - `` Review an .received.txt file indexed by --list. - - `` Review an .received.txt file. - -## 1.1.1 -- Updated README.md file. - -## 1.1.0 - -- **Breaking release**: - - Added new reporter: `GitReporter`. It allows you to use `git` to view the differences between the received and approved files. - - Added support to approve files using CLI. Now you can approve files using the command line: `dart run approval_tests:review` - - Added support to use ApprovalTests during widget tests. - - Added header to generated files. For resolved issues you can add this to approved files: - '# This file was generated by approval_tests. Please do not edit.\n' - - Some minor changes and code improvements. -Thanks to [Richard Coutts](https://github.com/buttonsrtoys) - -## 1.0.0 - -- Initial major release. - -## 0.5.1 - -- Updated documentation. -- Updated dependencies. -- Updated `README.md` file. -- Updated `TODO.md` file. -- Rewrited comparators. Now it is only FileComparator. -- Rewrited Scrubbers: regex scrubber, date scrubber. -- Now, first run automatically create approved snapshot. You can approve another snapshot by setting `approveResult` to `true` and using Diff Tool. -- Completely rewritten `CommandLineReporter`. -There were changes with the comparison method, as well as highlighting by color the places where there are differences. Green - approved. White text on red background - Differences in received file. -- Internal updates such as: - - Adding android studio installation via github actions to test Diff Reporter on different devices. - - Full code test coverage after significant changes. - - Changes to getting file name and path depending on platform. - -## 0.4.6 - -- Updated dependencies. Removed `dcli` package. -- Issue https://github.com/approvals/ApprovalTests.Dart/issues/3 was fixed. -- Minor changes: `IDEComparator` now gets the current `StackTrace` if an error occurs. - -## 0.4.5 - -- Updated dependencies and actions versions. -- Updated Logger's output: now it is more informative. -- Updated `CONTRIBUTING.md` file: added Arlo's Commit Notation. - -## 0.4.4 - -- Added setup visual studio code action to the `build_and_test` workflow for test `IDEComparator`. - -## 0.4.3 - -- Completed coverage of the project with tests. Now the project has 100% coverage. - -## 0.4.2 - -- Autopublish to `pub.dev` if the version in `pubspec.yaml` has been changed by auto adding a new tag to the repositories. -- Codecov added to `github` actions. Codecov badge, graph was added to `README.md`. -- Added `mdsnippets` to `github` actions. And example snippets added to `README.md`. -- Added `ApprovalTests.Dart.StarterProject`. You can find it in the `README.md` file. - -## 0.3.9 - -- Fix with default file path if package from `pub.dev`. -- Gilded rose moved to starter project. -- Code formatted. - -## 0.3.8 - -- Test publish action with new version: `v0.3.8`. - -## 0.3.6-dev - -- Updated `pubspec.yaml` file: changed homepage. - -## 0.3.5-dev - -- The repository has been moved to Approvals. -- Fixed bug with checking of strings received from `txt` file. -- Added `Github` Actions. -- Added `dependabot`. -- Updated `README.md` file. -- Updated `TODO.md` file. - - -## 0.3.3-dev - -- Updated `README.md` file. - -## 0.3.2-dev - -- Default `lints` replaced by `sizzle_lints`. -- Updated `analysis_options` file. -- Updated `README.md` file. - -## 0.3.1-dev - -- Updated `README.md` file. - -## 0.3.0-dev - -- Approval was refactored. -- Added tests. -- Code formatted. -- `deleteReceivedFile` field was added to the `ApprovalTests` class. If it is set to `true`, the received file will be deleted after test. By default, it is set to `false`. -- `logErrors` field was added to the `ApprovalTests` class. If it is set to `true`, the errors will be logged. By default, it is set to `true`. -- `logResults` field was added to the `ApprovalTests` class. If it is set to `true`, the success results will be logged. By default, it is set to `true`. - -## 0.2.1-dev - -- Fix: `approval_dart` changed to `approval_tests`. -- Code formatted. - -## 0.2.0-dev - -- I rewrote the main functions of the class. Now you can use several comparison options. -- Added methods for comparing `JSON` strings. -- Added methods for array comparison. -- Improved documentation. -- Added more examples: each method has its own small example. - -## 0.1.0-dev - -- Added `verifyAll` method to verify array of items *(or use array as inputs)*. -- Added `verifyAllCombinationsAsJson` method to verify all combinations of items as `JSON`. -- Updated `README.md` file. - -## 0.0.9-dev - -- Updated `README.md` file. - -## 0.0.8-dev - -- Updated `README.md` file: added examples, more info. - -## 0.0.7-dev - -- Comparator completed, some refactoring. Updated `README.md` file. - -## 0.0.6-dev - -- Some updates with `README.md` file. - -## 0.0.5-dev - -- First working version, need to expand functionality and add more flexibilty. Also need to add more tests. - -## 0.0.1-dev - -- Initial version. \ No newline at end of file diff --git a/packages/approval_tests/README.md b/packages/approval_tests/README.md deleted file mode 100644 index 6699061..0000000 --- a/packages/approval_tests/README.md +++ /dev/null @@ -1,307 +0,0 @@ -
-

- - - -

-
- -

Approval Tests implementation in Dart 🚀

-
-

- codecov - Pub - License: APACHE - Repository views - Stars -

-

- Pub likes - Pub popularity - Pub points -

-

- Build and test badge - Deploy and Create Release - mdsnippets -

- -## 📖 About - -**[Approval Tests](https://approvaltests.com/)** are an alternative to assertions. You’ll find them useful for testing objects with complex values *(such as long strings)*, lots of properties, or collections of objects. - -`Approval tests` simplify this by taking a snapshot of the results, and confirming that they have not changed. - -In normal unit testing, you say `expect(person.getAge(), 5)`. Approvals allow you to do this when the thing that you want to assert is no longer a primitive but a complex object. For example, you can say, `Approvals.verify(person)`. - -I am writing an implementation of **[Approval Tests](https://approvaltests.com/)** in Dart. If anyone wants to help, please **[text](https://t.me/yelmuratoff)** me. 🙏 - -## Packages -ApprovalTests is designed for two level: Dart and Flutter.
- -| Package | Version | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [approval_tests](https://github.com/approvals/ApprovalTests.Dart/tree/main/packages/approval_tests) | [![Pub](https://img.shields.io/pub/v/approval_tests.svg?style=flat-square)](https://pub.dev/packages/approval_tests) | **Dart** package for approval testing of `unit` tests *(main)* | -| [approval_tests_flutter](https://github.com/approvals/ApprovalTests.Dart/tree/main/packages/approval_tests_flutter) | [![Pub](https://img.shields.io/pub/v/approval_tests_flutter.svg)](https://pub.dev/packages/approval_tests_flutter) | **Flutter** package for approval testing of `widget`, `integration` tests | - - -## 📋 How it works - -- The first run of the test automatically creates an `approved` file if there is no such file. -- If the changed results match the `approved` file perfectly, the test passes. -- If there's a difference, a `reporter` tool will highlight the mismatch and the test fails. -- If the test is passed, the `received` file is deleted automatically. You can change this by changing the `deleteReceivedFile` value in `options`. If the test fails, the received file remains for analysis. - -## 📦 Installation - -Add the following to your `pubspec.yaml` file: - -```yaml -dependencies: - approval_tests: ^1.1.0 -``` - -## 👀 Getting Started - -The best way to get started is to download and open the starter project: -* [Approvaltests.Dart.StarterProject](https://github.com/approvals/Approvaltests.Dart.StarterProject) - -This is a standard project that can be imported into any editor or IDE and also includes CI with GitHub Actions. - -It comes ready with: - -- A suitable `.gitignore` to exclude approval artifacts -- A ready linter with all rules in place -- A GitHub action to run tests and you can always check the status of the tests on the badge in the `README.md` file. - -## 📚 How to use - -In order to use `Approval Tests`, the user needs to: - -1. Set up a test: This involves importing the Approval Tests library into your own code. - -2. Optionally, set up a reporter: Reporters are tools that highlight differences between approved and received files when a test fails. Although not necessary, they make it significantly easier to see what changes have caused a test to fail. The default reporter is the `CommandLineReporter`. You can also use the `DiffReporter` to compare the files in your IDE, and the `GitReporter` to see the differences in the `Git GUI`. - -3. Manage the `approved` file: When the test is run for the first time, an approved file is created automatically. This file will represent the expected outcome. Once the test results in a favorable outcome, the approved file should be updated to reflect these changes. A little bit below I wrote how to do it. - -This setup is useful because it shortens feedback loops, saving developers time by only highlighting what has been altered rather than requiring them to parse through their entire output to see what effect their changes had. - -### Approving Results - -Approving results just means saving the `.approved.txt` file with your desired results. - -We’ll provide more explanation in due course, but, briefly, here are the most common approaches to do this. - -#### • Via Diff Tool -Most diff tools have the ability to move text from left to right, and save the result. -How to use diff tools is just below, there is a `Comparator` class for that. - -#### • Via CLI command -You can run the command in a terminal to review your files: -```bash -dart run approval_tests:review -``` -After running the command, the files will be analyzed and you will be asked to choose one of the options: -- `y` - Approve the received file. -- `n` - Reject the received file. -- `v`iew - View the differences between the received and approved files. After selecting `v` you will be asked which IDE you want to use to view the differences. - -#### • Via approveResult property -If you want the result to be automatically saved after running the test, you need to use the `approveResult` property in `Options`: - - - -```dart -void main() { - test('test JSON object', () { - final complexObject = { - 'name': 'JsonTest', - 'features': ['Testing', 'JSON'], - 'version': 0.1, - }; - - Approvals.verifyAsJson( - complexObject, - options: const Options( - approveResult: true, - ), - ); - }); -} -``` -snippet source | anchor - - -this will result in the following file -`example_test.test_JSON_object.approved.txt` - - -```txt -{ - "name": "JsonTest", - "features": [ - "Testing", - "JSON" - ], - "version": 0.1 -} -``` -snippet source | anchor - - -#### • Via file rename -You can just rename the `.received` file to `.approved`. - -### Reporters - -Reporters are the part of Approval Tests that launch diff tools when things do not match. They are the part of the system that makes it easy to see what has changed. - -There are several reporters available in the package: -- `CommandLineReporter` - This is the default reporter, which will output the diff in the terminal. -- `GitReporter` - This reporter will open the diff in the Git GUI. -- `DiffReporter` - This reporter will open the Diff Tool in your IDE. - - For Diff Reporter I using the default paths to the IDE, if something didn't work then you in the console see the expected correct path to the IDE and specify customDiffInfo. You can also contact me for help. - -CommandLineComparator img - - -To use `DiffReporter` you just need to add it to `options`: -```dart - options: const Options( - reporter: const DiffReporter(), - ), -``` - -
- Visual Studio code img - Android Studio img -
- - -## 📝 Examples - -I have provided a couple of small examples here to show you how to use the package. -There are more examples in the `example` folder for you to explore. I will add more examples in the future. -Inside, in the `gilded_rose` folder, there is an example of using `ApprovalTests` to test the legacy code of [Gilded Rose kata](https://github.com/emilybache/GildedRose-Refactoring-Kata). -You can study it to understand how to use the package to test complex code. - -And the `verify_methods` folder has small examples of using different `ApprovalTests` methods for different cases. - -### JSON example -With `verifyAsJson`, if you pass data models as `JsonItem`, with nested other models as `AnotherItem` and `SubItem`, then you need to add an `toJson` method to each model for the serialization to succeed. - - - -```dart -void main() { - const jsonItem = JsonItem( - id: 1, - name: "JsonItem", - anotherItem: AnotherItem(id: 1, name: "AnotherItem"), - subItem: SubItem( - id: 1, - name: "SubItem", - anotherItems: [ - AnotherItem(id: 1, name: "AnotherItem 1"), - AnotherItem(id: 2, name: "AnotherItem 2"), - ], - ), - ); - - test('verify model', () { - Approvals.verifyAsJson( - jsonItem, - options: const Options( - deleteReceivedFile: - true, // Automatically delete the received file after the test. - approveResult: - true, // Approve the result automatically. You can remove this property after the approved file is created. - ), - ); - }); -} -``` -snippet source | anchor - - -this will result in the following file -`verify_as_json_test.verify_model.approved.txt` - - -```txt -{ - "jsonItem": { - "id": 1, - "name": "JsonItem", - "subItem": { - "id": 1, - "name": "SubItem", - "anotherItems": [ - { - "id": 1, - "name": "AnotherItem 1" - }, - { - "id": 2, - "name": "AnotherItem 2" - } - ] - }, - "anotherItem": { - "id": 1, - "name": "AnotherItem" - } - } -} -``` -snippet source | anchor - - -Passed test example - - -## ❓ Which File Artifacts to Exclude from Source Control -You must add any `approved` files to your source control system. But `received` files can change with any run and should be ignored. For Git, add this to your `.gitignore`: - -```gitignore -*.received.* -``` - -## ✉️ For More Information -### Questions? -Ask me on Telegram: [`@yelmuratoff`](https://t.me/yelmuratoff). -Email: [`yelamanyelmuratov@gmail.com`](mailto:yelamanyelmuratov@gmail.com) - -### Video Tutorials -- [Getting Started with ApprovalTests.Swift](https://qualitycoding.org/approvaltests-swift-getting-started/) -- [How to Verify Objects (and Simplify TDD)](https://qualitycoding.org/approvaltests-swift-verify-objects/) -- [Verify Arrays and See Simple, Clear Diffs](https://qualitycoding.org/verify-arrays-approvaltests-swift/) -- [Write Parameterized Tests by Transforming Sequences](https://qualitycoding.org/parameterized-tests-approvaltests-swift/) -- [Wrangle Legacy Code with Combination Approvals](https://qualitycoding.org/wrangle-legacy-code-combination-approvals/) - -You can also watch a series of short videos about [using ApprovalTests in .Net](https://www.youtube.com/playlist?list=PL0C32F89E8BBB5368) on YouTube. - -### Podcasts -Prefer learning by listening? Then you might enjoy the following podcasts: - -- [Hanselminutes](https://www.hanselminutes.com/360/approval-tests-with-llewellyn-falco) -- [Herding Code](https://www.developerfusion.com/media/122649/herding-code-117-llewellyn-falcon-on-approval-tests/) -- [The Watir Podcast](https://watirpodcast.com/podcast-53/) - -## Coverage - -[![](https://codecov.io/gh/approvals/ApprovalTests.Dart/branch/main/graphs/sunburst.svg)](https://codecov.io/gh/approvals/ApprovalTests.Dart/branch/main) - -## 🤝 Contributing -Show some 💙 and star the repo to support the project! 🙌 -The project is in the process of development and we invite you to contribute through pull requests and issue submissions. 👍 -We appreciate your support. 🫰 - -

-
-

Thanks to all contributors of this package

- - - -
-
diff --git a/packages/approval_tests_flutter/.gitignore b/packages/approval_tests_flutter/.gitignore deleted file mode 100644 index 3aeec29..0000000 --- a/packages/approval_tests_flutter/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -build/ - -# Coverage -coverage/ - -# Codegen -*.*.dart -*.g.dart -*.received.* -generated_* - -# Other files -.old.dart -.DS_Store diff --git a/packages/approval_tests_flutter/.metadata b/packages/approval_tests_flutter/.metadata deleted file mode 100644 index 8f7b6ac..0000000 --- a/packages/approval_tests_flutter/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "761747bfc538b5af34aa0d3fac380f1bc331ec49" - channel: "stable" - -project_type: package diff --git a/packages/approval_tests_flutter/LICENSE b/packages/approval_tests_flutter/LICENSE deleted file mode 100644 index 9cc816b..0000000 --- a/packages/approval_tests_flutter/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 shodev.live - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/packages/approval_tests_flutter/README.md b/packages/approval_tests_flutter/README.md deleted file mode 100644 index 35929b7..0000000 --- a/packages/approval_tests_flutter/README.md +++ /dev/null @@ -1,335 +0,0 @@ -
-

- - - -

-
- -

Approval Tests implementation in Flutter 🚀

-
-

- codecov - Pub - License: APACHE - Repository views - Stars -

-

- Pub likes - Pub popularity - Pub points -

- - -## 📖 About - -**[Approval Tests](https://approvaltests.com/)** are an alternative to assertions. You’ll find them useful for testing objects with complex values *(such as long strings)*, lots of properties, or collections of objects. - -`Approval tests` simplify this by taking a snapshot of the results, and confirming that they have not changed. - -In normal unit testing, you say `expect(person.getAge(), 5)`. Approvals allow you to do this when the thing that you want to assert is no longer a primitive but a complex object. For example, you can say, `Approvals.verify(person)`. - -I am writing an implementation of **[Approval Tests](https://approvaltests.com/)** in Dart. If anyone wants to help, please **[text](https://t.me/yelmuratoff)** me. 🙏 - -Thanks to **[Richard Coutts](https://github.com/buttonsrtoys)** for special contributions to the `approval_tests_flutter` package. - -## Packages -ApprovalTests is designed for two level: Dart and Flutter.
- -| Package | Version | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [approval_tests](https://github.com/approvals/ApprovalTests.Dart/tree/main/packages/approval_tests) | [![Pub](https://img.shields.io/pub/v/approval_tests.svg?style=flat-square)](https://pub.dev/packages/approval_tests) | **Dart** package for approval testing of `unit` tests *(main)* | -| [approval_tests_flutter](https://github.com/approvals/ApprovalTests.Dart/tree/main/packages/approval_tests_flutter) | [![Pub](https://img.shields.io/pub/v/approval_tests_flutter.svg)](https://pub.dev/packages/approval_tests_flutter) | **Flutter** package for approval testing of `widget`, `integration` tests | - - -## 📋 How it works - -- The first run of the test automatically creates an `approved` file if there is no such file. -- If the changed results match the `approved` file perfectly, the test passes. -- If there's a difference, a `reporter` tool will highlight the mismatch and the test fails. -- If the test is passed, the `received` file is deleted automatically. You can change this by changing the `deleteReceivedFile` value in `options`. If the test fails, the received file remains for analysis. - -Instead of writing: -```dart - testWidgets('home page', (WidgetTester tester) async { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - expect(find.text('You have pushed the button this many times:'), findsOneWidget); - expect(find.text('0'), findsOneWidget); - expect(find.byWidgetPredicate( - (Widget widget) => widget is Text && widget.data == 'hello' && - widget.key == ValueKey('myKey'), - ), findsOneWidget); - expect(find.text('Approved Example'), findsOneWidget); - }); -``` - -Write this: -```dart - testWidgets('smoke test', (WidgetTester tester) async { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - await tester.approvalTest(); - }); -``` - -Suppose you wanted to confirm that a page loaded with all the widget you expected. To do this, -perform an approval test by calling `tester.approvalTest`, and give your test a suitable name: - -```dart - testWidget('home page', () { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - await tester.approvalTest(description: 'all widgets load correctly'); - }); -``` - -To include your project's custom widget types in your test, and to perform post-test checks, add -calls to `Approved.setUpAll()` to your tests' `setUpAll` calls, like so: - -```dart - main() { - setUpAll(() { - Approved.setUpAll(); - }); - } -``` -## 📦 Installation - -Add the following to your `pubspec.yaml` file: - -```yaml -dependencies: - approval_tests_flutter: ^1.1.0 -``` - -## 👀 Getting Started - -The best way to get started is to download and open the example project: -* [Flutter example project](https://github.com/approvals/ApprovalTests.Dart/tree/main/examples/flutter_example) - -## 📚 How to use - -In order to use `Approval Tests`, the user needs to: - -1. Set up a test: This involves importing the Approval Tests library into your own code. - -2. Optionally, set up a reporter: Reporters are tools that highlight differences between approved and received files when a test fails. Although not necessary, they make it significantly easier to see what changes have caused a test to fail. The default reporter is the `CommandLineReporter`. You can also use the `DiffReporter` to compare the files in your IDE, and the `GitReporter` to see the differences in the `Git GUI`. - -3. Manage the `approved` file: When the test is run for the first time, an approved file is created automatically. This file will represent the expected outcome. Once the test results in a favorable outcome, the approved file should be updated to reflect these changes. A little bit below I wrote how to do it. - -This setup is useful because it shortens feedback loops, saving developers time by only highlighting what has been altered rather than requiring them to parse through their entire output to see what effect their changes had. - -### Approving Results - -Approving results just means saving the `.approved.txt` file with your desired results. - -We’ll provide more explanation in due course, but, briefly, here are the most common approaches to do this. - -#### • Via Diff Tool -Most diff tools have the ability to move text from left to right, and save the result. -How to use diff tools is just below, there is a `Comparator` class for that. - -#### • Via CLI command -You can run the command in a terminal to review your files: -```bash -dart run approval_tests:review -``` -After running the command, the files will be analyzed and you will be asked to choose one of the options: -- `y` - Approve the received file. -- `n` - Reject the received file. -- `v`iew - View the differences between the received and approved files. After selecting `v` you will be asked which IDE you want to use to view the differences. - -#### • Via approveResult property -If you want the result to be automatically saved after running the test, you need to use the `approveResult` property in `Options`: - -```dart -void main() { - test('test JSON object', () { - final complexObject = { - 'name': 'JsonTest', - 'features': ['Testing', 'JSON'], - 'version': 0.1, - }; - - Approvals.verifyAsJson( - complexObject, - options: const Options( - approveResult: true, - ), - ); - }); -} -``` - -this will result in the following file -`example_test.test_JSON_object.approved.txt` -```txt -{ - "name": "JsonTest", - "features": [ - "Testing", - "JSON" - ], - "version": 0.1 -} -``` - -#### • Via file rename -You can just rename the `.received` file to `.approved`. - -### Reporters - -Reporters are the part of Approval Tests that launch diff tools when things do not match. They are the part of the system that makes it easy to see what has changed. - -There are several reporters available in the package: -- `CommandLineReporter` - This is the default reporter, which will output the diff in the terminal. -- `GitReporter` - This reporter will open the diff in the Git GUI. -- `DiffReporter` - This reporter will open the Diff Tool in your IDE. - - For Diff Reporter I using the default paths to the IDE, if something didn't work then you in the console see the expected correct path to the IDE and specify customDiffInfo. You can also contact me for help. - -CommandLineComparator img - - -To use `DiffReporter` you just need to add it to `options`: -```dart - options: const Options( - reporter: const DiffReporter(), - ), -``` - -
- Visual Studio code img - Android Studio img -
- - -## 📝 Examples - -I have provided a couple of small examples here to show you how to use the package. -There are more examples in the `example` folder for you to explore. I will add more examples in the future. -Inside, in the `gilded_rose` folder, there is an example of using `ApprovalTests` to test the legacy code of [Gilded Rose kata](https://github.com/emilybache/GildedRose-Refactoring-Kata). -You can study it to understand how to use the package to test complex code. - -And the `verify_methods` folder has small examples of using different `ApprovalTests` methods for different cases. - -### JSON example -With `verifyAsJson`, if you pass data models as `JsonItem`, with nested other models as `AnotherItem` and `SubItem`, then you need to add an `toJson` method to each model for the serialization to succeed. - -```dart -void main() { - const jsonItem = JsonItem( - id: 1, - name: "JsonItem", - anotherItem: AnotherItem(id: 1, name: "AnotherItem"), - subItem: SubItem( - id: 1, - name: "SubItem", - anotherItems: [ - AnotherItem(id: 1, name: "AnotherItem 1"), - AnotherItem(id: 2, name: "AnotherItem 2"), - ], - ), - ); - - test('verify model', () { - Approvals.verifyAsJson( - jsonItem, - options: const Options( - deleteReceivedFile: - true, // Automatically delete the received file after the test. - approveResult: - true, // Approve the result automatically. You can remove this property after the approved file is created. - ), - ); - }); -} -``` - - -this will result in the following file -`verify_as_json_test.verify_model.approved.txt` - -```txt -{ - "jsonItem": { - "id": 1, - "name": "JsonItem", - "subItem": { - "id": 1, - "name": "SubItem", - "anotherItems": [ - { - "id": 1, - "name": "AnotherItem 1" - }, - { - "id": 2, - "name": "AnotherItem 2" - } - ] - }, - "anotherItem": { - "id": 1, - "name": "AnotherItem" - } - } -} -``` - -Passed test example - - -## ❓ Which File Artifacts to Exclude from Source Control -You must add any `approved` files to your source control system. But `received` files can change with any run and should be ignored. For Git, add this to your `.gitignore`: - -```gitignore -*.received.* -``` - -## ✉️ For More Information -### Questions? -Ask me on Telegram: [`@yelmuratoff`](https://t.me/yelmuratoff). -Email: [`yelamanyelmuratov@gmail.com`](mailto:yelamanyelmuratov@gmail.com) - -### Video Tutorials -- [Getting Started with ApprovalTests.Swift](https://qualitycoding.org/approvaltests-swift-getting-started/) -- [How to Verify Objects (and Simplify TDD)](https://qualitycoding.org/approvaltests-swift-verify-objects/) -- [Verify Arrays and See Simple, Clear Diffs](https://qualitycoding.org/verify-arrays-approvaltests-swift/) -- [Write Parameterized Tests by Transforming Sequences](https://qualitycoding.org/parameterized-tests-approvaltests-swift/) -- [Wrangle Legacy Code with Combination Approvals](https://qualitycoding.org/wrangle-legacy-code-combination-approvals/) - -You can also watch a series of short videos about [using ApprovalTests in .Net](https://www.youtube.com/playlist?list=PL0C32F89E8BBB5368) on YouTube. - -### Podcasts -Prefer learning by listening? Then you might enjoy the following podcasts: - -- [Hanselminutes](https://www.hanselminutes.com/360/approval-tests-with-llewellyn-falco) -- [Herding Code](https://www.developerfusion.com/media/122649/herding-code-117-llewellyn-falcon-on-approval-tests/) -- [The Watir Podcast](https://watirpodcast.com/podcast-53/) - -## Coverage - -[![](https://codecov.io/gh/approvals/ApprovalTests.Dart/branch/main/graphs/sunburst.svg)](https://codecov.io/gh/approvals/ApprovalTests.Dart/branch/main) - -## 🤝 Contributing -Show some 💙 and star the repo to support the project! 🙌 -The project is in the process of development and we invite you to contribute through pull requests and issue submissions. 👍 -We appreciate your support. 🫰 - -

-
-

Thanks to all contributors of this package

- - - -
-
diff --git a/packages/approval_tests_flutter/analysis_options.yaml b/packages/approval_tests_flutter/analysis_options.yaml deleted file mode 100644 index e65daa9..0000000 --- a/packages/approval_tests_flutter/analysis_options.yaml +++ /dev/null @@ -1,116 +0,0 @@ -include: package:sizzle_lints/sizzle_lints.yaml - -analyzer: - errors: - comment_references: ignore - depend_on_referenced_packages: ignore - invalid_use_of_visible_for_testing_member: ignore -linter: - rules: - public_member_api_docs: false - lines_longer_than_80_chars: false - -dart_code_metrics: - metrics: - cyclomatic-complexity: 20 - rules: - # Show potential errors - - avoid-cascade-after-if-null - - avoid-collection-methods-with-unrelated-types - - avoid-duplicate-exports - - avoid-dynamic - - avoid-missing-enum-constant-in-map - # - avoid-passing-async-when-sync-expected - - avoid-throw-in-catch-block - - avoid-unused-parameters - # - avoid-unnecessary-type-assertions - - avoid-unnecessary-type-casts - - avoid-unrelated-type-assertions - - avoid-unrelated-type-casts - - no-empty-block - - no-equal-then-else - - prefer-correct-test-file-name - # - prefer-match-file-name - - prefer-return-await - - avoid-self-assignment - - avoid-self-compare - # - avoid-shadowing - - prefer-iterable-of - - no-equal-switch-case - - no-equal-conditions - - avoid-equal-expressions - - avoid-missed-calls - - avoid-unnecessary-negations - - avoid-unused-generics - - function-always-returns-null - - avoid-throw-objects-without-tostring - # - avoid-unsafe-collection-methods - - prefer-wildcard-pattern - - no-equal-switch-expression-cases - - avoid-future-tostring - # - avoid-unassigned-late-fields-keyword - - avoid-nested-futures - - avoid-generics-shadowing - - prefer-parentheses-with-if-null - - no-equal-nested-conditions - - avoid-shadowed-extension-methods - - avoid-unnecessary-conditionals - - avoid-double-slash-imports - - avoid-map-keys-contains - - prefer-correct-json-casts - - avoid-duplicate-mixins - # - avoid-nullable-interpolation - - avoid-unused-instances - - prefer-correct-for-loop-increment - - prefer-public-exception-classes - - avoid-uncaught-future-errors - - always-remove-listener - - avoid-unnecessary-setstate - - check-for-equals-in-render-object-setters - - consistent-update-render-object - - use-setstate-synchronously - - avoid-incomplete-copy-with - - proper-super-calls - - dispose-fields - - avoid-empty-setstate - - avoid-state-constructors - - avoid-recursive-widget-calls - - avoid-missing-image-alt - - avoid-passing-self-as-argument - - avoid-unnecessary-if - - avoid-unconditional-break - - avoid-referencing-discarded-variables - # Enable with the next release - # - avoid-unnecessary-late - # - avoid-wildcard-cases-with-enums - # - match-getter-setter-field-names - # - avoid-accessing-collections-by-constant-index - - # Code simplification - - avoid-redundant-async - - avoid-redundant-else - - avoid-unnecessary-nullable-return-type - - avoid-redundant-pragma-inline - - avoid-nested-records - - avoid-redundant-positional-field-name - - avoid-explicit-pattern-field-name - - prefer-simpler-patterns-null-check - - avoid-unnecessary-return - - avoid-duplicate-patterns - - avoid-keywords-in-wildcard-pattern - - avoid-unnecessary-futures - - avoid-unnecessary-reassignment - - avoid-unnecessary-call - - avoid-unnecessary-stateful-widgets - - prefer-dedicated-media-query-methods - - avoid-unnecessary-overrides-in-state - - move-variable-closer-to-its-usage - # - avoid-unnecessary-getter - # - avoid-nullable-parameters-with-default-values - - # Style - - prefer-trailing-comma - - unnecessary-trailing-comma - - prefer-declaring-const-constructor - - prefer-single-widget-per-file: - ignore-private-widgets: true \ No newline at end of file diff --git a/packages/approval_tests_flutter/lib/approval_tests_flutter.dart b/packages/approval_tests_flutter/lib/approval_tests_flutter.dart deleted file mode 100644 index f9683c7..0000000 --- a/packages/approval_tests_flutter/lib/approval_tests_flutter.dart +++ /dev/null @@ -1,4 +0,0 @@ -library approved; - -export 'package:approval_tests/approval_tests.dart'; -export 'package:approval_tests_flutter/src/src.dart'; diff --git a/packages/approval_tests_flutter/lib/src/common.dart b/packages/approval_tests_flutter/lib/src/common.dart deleted file mode 100644 index 6333b93..0000000 --- a/packages/approval_tests_flutter/lib/src/common.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'dart:io'; - -/// [String] extension -extension StringApprovedExtension on String { - /// git diff complains when file doesn't end in newline. This getter ensures a string does. - String get endWithNewline => endsWith('\n') ? this : '$this\n'; -} - -extension DirectoryApprovedExtension on Directory { - Set filesWithExtension(String extension) { - final fileSystemEntities = listSync() - .where((entity) => entity is File && entity.path.endsWith(extension)); - return fileSystemEntities.whereType().toSet(); - } -} diff --git a/packages/approval_tests_flutter/lib/src/get_widget_names.dart b/packages/approval_tests_flutter/lib/src/get_widget_names.dart deleted file mode 100644 index d298a88..0000000 --- a/packages/approval_tests_flutter/lib/src/get_widget_names.dart +++ /dev/null @@ -1,176 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; - -import 'package:analyzer/dart/analysis/context_builder.dart'; -import 'package:analyzer/dart/analysis/context_locator.dart'; -import 'package:analyzer/dart/analysis/results.dart'; -import 'package:analyzer/dart/ast/ast.dart'; -import 'package:approval_tests/approval_tests.dart'; -import 'package:approval_tests_flutter/src/common.dart'; - -final _widgetNamesDir = Directory(ApprovalTestsConstants.resourceLocalPath); -final _widgetNamesPath = '${_widgetNamesDir.path}/class_names.txt'; - -Future> getWidgetNames() async { - final resultCompleter = Completer>(); - - await isWidgetNamesFileFresh().then((isFileFresh) { - if (isFileFresh) { - readWidgetsFile(_widgetNamesPath).then((widgetNames) { - resultCompleter.complete(widgetNames); - }); - } else { - final libPath = '${Directory.current.absolute.path}/lib'; - stdout - .write("package:approved: searching for class names in $libPath..."); - extractWidgetNames(libPath).then((widgetsList) { - if (!_widgetNamesDir.existsSync()) { - _widgetNamesDir.createSync(); - } - _widgetNamesDir.createSync(); - final widgetsFile = File(_widgetNamesPath); - widgetsFile.createSync(); - const header = ''' -# This file was autogenerated by package:approved. Please do not edit. -# Below is a list of class found in the project /lib folder.'''; - final widgetNamesString = widgetsList.join('\n').endWithNewline; - widgetsFile.writeAsStringSync('$header\n$widgetNamesString'); - stdout.write('done\n'); - resultCompleter.complete(widgetsList); - }); - } - }); - - return resultCompleter.future; -} - -String loadWidgetNames() { - late String result; - final widgetNamesFile = File(_widgetNamesPath); - if (widgetNamesFile.existsSync()) { - result = widgetNamesFile.readAsStringSync(); - } - return result; -} - -/// Crawls the project and extracts widget names. -Future> extractWidgetNames(String libPath) async { - final completer = Completer>(); - - final contextLocator = ContextLocator(); - final contextRoots = contextLocator.locateRoots(includedPaths: [libPath]); - - final contextBuilder = ContextBuilder(); - await getFlutterSdkPath().then((path) { - final dartStr = '$path/bin/cache/dart-sdk'; - final analysisContext = contextBuilder.createContext( - contextRoot: contextRoots.first, - sdkPath: dartStr, - ); - - final classNames = {}; - - // Traverse all files in the lib folder - final libDirectory = Directory(libPath); - final dartFiles = libDirectory.listSync(recursive: true).where( - (file) => - file.path.endsWith('.dart') && - !file.path.contains('.g.dart') && - !file.path.contains('.freezed.dart'), - ); - - for (final file in dartFiles) { - final analysisSession = analysisContext.currentSession; - final parsedResult = - analysisSession.getParsedUnit(file.path) as ParsedUnitResult; - - for (final compilationUnitMember in parsedResult.unit.declarations) { - if (compilationUnitMember is ClassDeclaration) { - final String name = compilationUnitMember.name.value().toString(); - if (!name.startsWith('_')) { - classNames.add(name); - } - } - } - } - - completer.complete(classNames); - }); - - return completer.future; -} - -/// Get the path to the Flutter SDK -Future getFlutterSdkPath() async { - final completer = Completer(); - - await Process.run('flutter', ['--version', '--machine']).then((result) { - if (result.exitCode != 0) { - throw Exception('Failed to run flutter command: ${result.stderr}'); - } - - final jsonData = - jsonDecode(result.stdout.toString()) as Map; - - completer.complete(jsonData['flutterRoot'].toString()); - }); - - return completer.future; -} - -Future> readWidgetsFile(String filePath) async { - final completer = Completer>(); - final File file = File(filePath); - - await file.readAsString().then((text) { - // Split by lines - final linesList = text.split('\n'); - // Remove empty lines and comments - final linesSet = linesList - .where((line) => line.isNotEmpty && !line.startsWith('#')) - .toSet(); - completer.complete(linesSet); - }); - - return completer.future; -} - -Future isWidgetNamesFileFresh() async { - final resultCompleter = Completer(); - - final libDirectory = Directory('lib'); - - await findNewestDartFileTimestamp(libDirectory).then((dateTime) { - final widgetNamesFile = File(_widgetNamesPath); - if (dateTime != null && - widgetNamesFile.existsSync() && - widgetNamesFile.lastModifiedSync().isAfter(dateTime)) { - resultCompleter.complete(true); - } else { - resultCompleter.complete(false); - } - }); - - return resultCompleter.future; -} - -Future findNewestDartFileTimestamp(Directory dir) async { - DateTime? newestTimestamp; - - if (!await dir.exists()) { - return null; - } - - await for (final FileSystemEntity entity in dir.list(recursive: true)) { - if (entity is File && entity.path.endsWith('.dart')) { - final DateTime lastModified = await entity.lastModified(); - - if (newestTimestamp == null || lastModified.isAfter(newestTimestamp)) { - newestTimestamp = lastModified; - } - } - } - - return newestTimestamp; -} diff --git a/packages/approval_tests_flutter/lib/src/src.dart b/packages/approval_tests_flutter/lib/src/src.dart deleted file mode 100644 index 4ea8571..0000000 --- a/packages/approval_tests_flutter/lib/src/src.dart +++ /dev/null @@ -1,119 +0,0 @@ -// ignore_for_file: avoid_print - -import 'dart:async'; - -import 'package:approval_tests/approval_tests.dart'; -import 'package:approval_tests_flutter/src/get_widget_names.dart'; -import 'package:approval_tests_flutter/src/widget_meta/collect_widgets_meta_data.dart' - as widgets_meta_data; -import 'package:flutter_test/flutter_test.dart'; - -Set? _widgetNames; - -class ApprovalWidgets { - static const FilePathExtractor filePathExtractor = - FilePathExtractor(stackTraceFetcher: StackTraceFetcher()); - - /// Initializes the approval test by building a database of project classes. - /// - /// Typically called from within flutter_tests function 'setUpAll' - static Future> setUpAll() async { - final completer = Completer>(); - await getWidgetNames().then((value) { - _widgetNames = value; - completer.complete(value); - }); - return completer.future; - } - - static Set? get widgetNames => _widgetNames; -} - -/// [_globalApprovalTest] resolves the name conflict with [WidgetTester.approvalTest] -Future Function(String?, String, Options?) _globalApprovalTest = - (description, value, options) async { - Approvals.verify( - value, - options: options != null - ? options.copyWith( - scrubber: options.scrubber, - approveResult: options.approveResult, - comparator: options.comparator, - reporter: options.reporter, - deleteReceivedFile: options.deleteReceivedFile, - namer: Namer( - filePath: options.namer?.filePath, - options: options.namer?.options, - addTestName: options.namer?.addTestName ?? true, - description: description, - ), - logErrors: options.logErrors, - logResults: options.logResults, - includeClassNameDuringSerialization: - options.includeClassNameDuringSerialization, - ) - : Options( - namer: Namer( - description: description, - ), - ), - ); -}; - -extension WidgetTesterApprovedExtension on WidgetTester { - /// Returns the meta data for the widgets for comparison during the approval test - Future get widgetsString async { - final completer = Completer(); - assert(_widgetNames != null, ''' - Looks like Approved.initialize() was not called before running an approvalTest. Typically, - this issue is solved by calling Approved.initialize() from within setUpAll: - - void setUpAll(() async { - await Approved.initialize(); - }); -'''); - - await widgets_meta_data - .collectWidgetsMetaData( - this, - outputMeta: true, - verbose: false, - widgetNames: ApprovalWidgets.widgetNames, - ) - .then((stringList) { - completer.complete(stringList.join('\n')); - }); - - return completer.future; - } - - /// Performs an approval test. - /// - /// [description] is the name of the test. It is appended to the description in [Tester]. - /// [textForReview] is the meta data text used in the approval test. - Future approvalTest({ - String? description, - String? textForReview, - Options? options, - }) async { - final resultCompleter = Completer(); - final widgetsMetaCompleter = Completer(); - - // If no text passed, then get the widget meta from the widget tree - if (textForReview == null) { - await widgetsString.then((value) { - widgetsMetaCompleter.complete(value); - }); - } else { - widgetsMetaCompleter.complete(textForReview); - } - await widgetsMetaCompleter.future.then((value) { - resultCompleter - .complete(_globalApprovalTest(description, value, options)); - }); - return resultCompleter.future; - } - - /// Output expect statements to the console. - Future printExpects() => widgets_meta_data.printExpects(this); -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/collect_widgets_meta_data.dart b/packages/approval_tests_flutter/lib/src/widget_meta/collect_widgets_meta_data.dart deleted file mode 100644 index fabbc24..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/collect_widgets_meta_data.dart +++ /dev/null @@ -1,586 +0,0 @@ -import 'package:approval_tests/approval_tests.dart'; -import 'package:approval_tests_flutter/src/widget_meta/expect_meta.dart'; -import 'package:approval_tests_flutter/src/widget_meta/load_string_en.dart'; -import 'package:approval_tests_flutter/src/widget_meta/matcher_types.dart'; -import 'package:approval_tests_flutter/src/widget_meta/register_types.dart'; -import 'package:approval_tests_flutter/src/widget_meta/widget_meta.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -Set registeredNames = {}; - -const String instructions = - '/// Replace your call to generateExpects with the code below.'; -List _previousWidgetMetas = []; -List _previousExpectStrings = []; -bool _isEnStringReverseLookupLoaded = false; -bool _isCommonTypesLoaded = false; -Map> _enStringReverseLookup = >{}; - -/// Output widget tests to the console. -/// -/// [widgetTypes] is a set of custom classes to generate expects for. -/// [pathToStrings] is the path to a json file containing string constants. E.g., generated by the intl package. -/// [silent] determines whether to suppress output to console. -/// [compareWithPrevious] determines whether only changed tests from the previous run are displayed -/// [verbose] determines whether the cut-and-paste tip is shown (should be false inside generated widgetTests) -Future printExpects( - WidgetTester tester, { - Set? widgetTypes, - Set? widgetNames, - String? pathToStrings, - bool silent = false, - bool verbose = true, - bool compareWithPrevious = true, -}) async { - final text = await collectWidgetsMetaData( - tester, - widgetTypes: widgetTypes, - widgetNames: widgetNames, - pathToStrings: pathToStrings, - silent: silent, - verbose: verbose, - compareWithPrevious: compareWithPrevious, - ); - - _outputText(text); -} - -Future _loadEnStringReverseLookupIfNecessary(String path) async { - if (!_isEnStringReverseLookupLoaded) { - _enStringReverseLookup = await loadEnStringReverseLookup(path); - } -} - -Future _loadCommonTypesIfNecessary(Set commonTypes) async { - if (!_isCommonTypesLoaded) { - registerTypes(commonTypes); - _isCommonTypesLoaded = true; - } -} - -/// Manually adds text to the reverse lookup map (instead of loading from file). -/// [markEnStringFileAsLoaded] as true blocks loads from file. This is primarily for testing. -Future addTextToIntlReverseLookup({ - required String stringId, - required String stringContent, - bool markEnStringFileAsLoaded = true, -}) async { - if (markEnStringFileAsLoaded) { - _isEnStringReverseLookupLoaded = true; - } - - addToReverseLookup( - reverseLookupMap: _enStringReverseLookup, - stringId: stringId, - stringContent: stringContent, - ); -} - -/// Outputs widget meta data as an expect statement or as text. -/// -/// [tester] is the tester passed from a flutter test. E.g., from within [testWidget] -/// [widgetTypes] is a set of widget types to match and include in a test. -/// [widgetNames] is a set of widget names to search for. (Specify [widgetTypes] or [widgetNames] but not both. -/// [pathToStrings] is the path to a json file containing string constants. E.g., generated by the intl package. -/// (This feature is currently not supported, but will be reinstated if requested.) -/// [silent ] is true to suppress output to console and file (should be false inside generated widgetTests). -/// [verbose] shows explanatory text that explains meta data. -/// [compareWithPrevious ] is true to compare the current states with previous to display diffs. -/// [outputExpects] is true to print expect statements to console. -/// [outputMeta] is true to output data to an approval-test file. -Future> collectWidgetsMetaData( - WidgetTester tester, { - Set? widgetTypes, - Set? widgetNames, - String? pathToStrings, - bool silent = false, - bool verbose = true, - bool compareWithPrevious = true, - bool? outputExpects, - bool? outputMeta, -}) async { - assert(outputExpects == null || outputMeta == null); - - registeredNames = widgetNames ?? {}; - - if (pathToStrings != null) { - await _loadEnStringReverseLookupIfNecessary(pathToStrings); - } - if (widgetTypes != null) { - await _loadCommonTypesIfNecessary(widgetTypes); - } - - final text = []; - - if (!compareWithPrevious) { - _previousWidgetMetas = []; - _previousExpectStrings = []; - } - - final widgets = _getWidgetsForExpects(tester, widgetNames ?? {}); - - if (widgets.isEmpty) { - text.add('No widgets found for approval testing.'); - } else { - text.addAll( - await _generateExpectsForWidgets( - widgets, - tester: tester, - verbose: verbose, - silent: silent, - outputType: - (outputMeta ?? false) ? OutputType.widgetMeta : OutputType.expects, - ), - ); - } - - return text; -} - -Future> _generateExpectsForWidgets( - List widgets, { - required WidgetTester tester, - required bool verbose, - required bool silent, - required OutputType outputType, -}) async { - final text = []; - - final currentWidgetMetas = _widgetMetasFromWidgets(widgets); - final deltaWidgetMetas = - _getDeltaWidgetMetas(currentWidgetMetas, _previousWidgetMetas); - currentWidgetMetas.addAll(deltaWidgetMetas); - final currentExpectStrings = - _outputStringsFromWidgetMetas(currentWidgetMetas, outputType, verbose); - final deltaExpectStrings = - _getDeltaExpectStrings(currentExpectStrings, _previousExpectStrings); - - if (!silent) { - if (deltaExpectStrings.isEmpty) { - if (_previousWidgetMetas.isEmpty) { - text.add('/// No widget with keys or custom types found to test'); - } else { - text.add( - "/// No changes to widget with keys or custom types since the prior call to 'generateExpects'", - ); - } - } else { - if (verbose && outputType == OutputType.expects) { - text.add(instructions); - } - text.addAll(deltaExpectStrings); - } - } - - _previousWidgetMetas = currentWidgetMetas; - _previousExpectStrings = currentExpectStrings; - - return text; -} - -List _getDeltaExpectStrings( - List currentExpectStrings, - List previousExpectStrings, -) { - final deltaExpectStrings = currentExpectStrings - .where((item) => !previousExpectStrings.contains(item)) - .toList(); - - return deltaExpectStrings; -} - -/// Convert Widgets into [WidgetMeta]s -/// -/// Result contains no duplicates (because duplicate [WidgetMeta]s result in duplicate generated tests -List _widgetMetasFromWidgets(List widgets) { - final widgetMetas = []; - - for (final widget in widgets) { - // Ignore widgets Flutter adds with prefixes (e.g., "[key <") - if (widget.key == null || _isProperlyFormattedKey(widget)) { - final widgetMeta = WidgetMeta(widget: widget); - if (!widgetMetas.contains(widgetMeta)) { - widgetMetas.add(widgetMeta); - } - } - } - - return widgetMetas; -} - -bool _isProperlyFormattedKey(Widget widget) => - widget.key.toString().indexOf('[<') == 0; - -/// The order to output expects -enum _ExpectTypeOrder { - noText, - intlText, - nonIntlText, -} - -enum OutputType { - expects, - widgetMeta; -} - -/// Generates expect() strings from [WidgetMeta]s. Sorts strings in order of [_ExpectTypeOrder] -List _outputStringsFromWidgetMetas( - List widgetMetas, - OutputType outputType, - bool verbose, -) { - final expectMetas = []; - final result = []; - - for (final widgetMeta in widgetMetas) { - final expectMetaFromWidgetMeta = _expectMetaFromWidgetMeta(widgetMeta); - expectMetas.add(expectMetaFromWidgetMeta); - } - - int sortOrder(ExpectMeta expectMeta) { - _ExpectTypeOrder result = _ExpectTypeOrder.noText; - if (expectMeta.widgetMeta.hasText) { - result = _ExpectTypeOrder.intlText; - if (!expectMeta.isIntl) { - result = _ExpectTypeOrder.nonIntlText; - } - } - return result.index; - } - - expectMetas.sort((a, b) => sortOrder(a).compareTo(sortOrder(b))); - - bool generatedNonIntlTextComment = false; - - for (final expectMeta in expectMetas) { - if (!generatedNonIntlTextComment && sortOrder(expectMeta) == 2) { - generatedNonIntlTextComment = true; - if (verbose) { - result.add( - '\t// No reverse lookup found for the text in the expect statements below', - ); - } - } - - late final List expectStringsFromWidgetMeta; - if (outputType == OutputType.expects) { - expectStringsFromWidgetMeta = _expectStringsFromExpectMeta(expectMeta); - } else if (outputType == OutputType.widgetMeta) { - expectStringsFromWidgetMeta = _metaStringsFromExpectMeta(expectMeta); - } - - result.addAll(expectStringsFromWidgetMeta); - } - - return result; -} - -void _outputText(List strings) { - for (final expectString in strings) { - ApprovalLogger.log('\t$expectString'); - } -} - -List _getDeltaWidgetMetas( - List currentWidgetMetas, - List previousWidgetMetas, -) { - final deltaPreviousWidgetMetas = previousWidgetMetas - .where((item) => !currentWidgetMetas.contains(item)) - .toList(); - - // Matchers may have changed for the previous tests (e.g., findsOneWidget may now be findNothing), so update - final updatedDeltaPreviousWidgetMetas = deltaPreviousWidgetMetas - .map((widgetMeta) => WidgetMeta(widget: widgetMeta.widget)) - .toList(); - - return updatedDeltaPreviousWidgetMetas; -} - -/// Get all the widgets of interest for testing (e.g., has keys, has text, is registered) -/// -/// Traverses the widget testing tree to build a list of widgets for testing. -/// -/// The returned list is in no particular order. -List _getWidgetsForExpects( - WidgetTester tester, - Set widgetNames, -) { - final widgets = []; - - bool isEmptyTextWidget(Widget widget) { - final bool result; - if (widget is Text && (widget.data == null || widget.data == '')) { - result = true; - } else { - result = false; - } - return result; - } - - bool isWidgetForExpect(Widget widget) { - final bool result; - if (isEmptyTextWidget(widget)) { - result = false; - } else { - result = (widget.key != null && - (widget.key.toString().isCustomString || - widget.key.toString().isEnumString)) || - registeredTypes.contains(widget.runtimeType) || - widgetNames.contains(widget.runtimeType.toString()) || - WidgetMeta.isTextEnabled(widget); - } - return result; - } - - for (final widget in tester.allWidgets) { - if (isWidgetForExpect(widget)) { - widgets.add(widget); - } - } - - return widgets; -} - -List _expectStringsFromExpectMeta(ExpectMeta expectMeta) { - final expects = []; - - // Number of attributes (e.g., Type, key, text) to match in expect - final int attributesToMatchCount = - (expectMeta.widgetMeta.keyString.isNotEmpty ? 1 : 0) + - (expectMeta.widgetMeta.widgetText.isNotEmpty ? 1 : 0) + - (expectMeta.widgetMeta.isWidgetTypeRegistered ? 1 : 0); - - if (attributesToMatchCount >= 1) { - if (_haveEnString(expectMeta.widgetMeta.widgetText) || - attributesToMatchCount >= 2) { - expects.addAll( - _generateExpectWidgets( - expectMeta.widgetMeta, - attributesToMatchCount, - ), - ); - } else { - expects.add(_generateExpect(expectMeta.widgetMeta)); - } - } - - return expects; -} - -List _metaStringsFromExpectMeta(ExpectMeta expectMeta) { - final expects = []; - - expects.add(_generateWidgetMeta(expectMeta.widgetMeta)); - - return expects; -} - -String _generateExpect(WidgetMeta widgetMeta) { - late final String generatedExpect; - - if (widgetMeta.keyString.isNotEmpty) { - if (widgetMeta.keyType == KeyType.enumValue) { - generatedExpect = - '\texpect(find.byKey(const ValueKey(${widgetMeta.keyString})), ${widgetMeta.matcherType.matcherName});'; - } else if (widgetMeta.keyType == KeyType.stringValueKey) { - generatedExpect = - '\texpect(find.byKey(${widgetMeta.keyString}), ${widgetMeta.matcherType.matcherName});'; - } else { - throw Exception('Unexpected keyType'); - } - } else if (widgetMeta.widgetText.isNotEmpty) { - generatedExpect = - "\texpect(find.text('${widgetMeta.widgetText}'), ${widgetMeta.matcherType.matcherName});"; - } else if (widgetMeta.isWidgetTypeRegistered) { - generatedExpect = - '\texpect(find.byType(${widgetMeta.widgetType}), ${widgetMeta.matcherType.matcherName});'; - } else { - generatedExpect = '(Internal error. Expect not generated.)'; - } - - return generatedExpect; -} - -ExpectMeta _expectMetaFromWidgetMeta(WidgetMeta widgetMeta) { - final expectMeta = ExpectMeta(widgetMeta: widgetMeta); - - if (widgetMeta.widgetText.isNotEmpty) { - if (_haveEnString(widgetMeta.widgetText)) { - expectMeta.intlKeys = _enStringReverseLookup[widgetMeta.widgetText]; - } - } - - return expectMeta; -} - -List _generateExpectWidgets( - WidgetMeta widgetMeta, - int attributesToMatch, -) { - final buffer = StringBuffer(); - const intlPlaceHolder = '__INTL_PLACE_HOLDER__'; - List? intlKeys; - int attributesWrittenToBuffer = 0; - - void addTextAttributeToBuffer() { - if (_haveEnString(widgetMeta.widgetText)) { - intlKeys = _enStringReverseLookup[widgetMeta.widgetText]; - if (intlKeys != null) { - buffer.write("intl: (s) => s.$intlPlaceHolder"); - } - } else { - buffer.write("data: '${widgetMeta.widgetText}'"); - } - } - - void addTypeAttributeToBuffer() { - buffer.write('widgetType: ${widgetMeta.widgetType}'); - } - - void addKeyAttributeToBuffer() { - buffer.write("key: ${widgetMeta.keyString}"); - } - - void addMatcherAttributeToBuffer() { - buffer.write(', matcher: ${widgetMeta.matcherType.matcherName},'); - } - - bool haveMoreAttributesToProcess() => - ++attributesWrittenToBuffer < attributesToMatch; - - buffer.write('\ttester.expectWidget('); - - if (widgetMeta.widgetText.isNotEmpty) { - addTextAttributeToBuffer(); - if (haveMoreAttributesToProcess()) { - buffer.write(', '); - } - } - - if (widgetMeta.isWidgetTypeRegistered) { - addTypeAttributeToBuffer(); - if (haveMoreAttributesToProcess()) { - buffer.write(', '); - } - } - - if (widgetMeta.keyString.isNotEmpty) { - addKeyAttributeToBuffer(); - } - - if (widgetMeta.matcherType.matcher != findsOneWidget) { - addMatcherAttributeToBuffer(); - } - - buffer.write(');'); - - final result = []; - - if (intlKeys == null) { - result.add(buffer.toString()); - } else { - final bufferString = buffer.toString(); - if (intlKeys!.length > 1) { - result.add( - '\t// Multiple matches for "${widgetMeta.widgetText}" in string_en.json. Pick one.', - ); - } - for (final intlKey in intlKeys!) { - result.add(bufferString.replaceAll(intlPlaceHolder, intlKey)); - } - if (intlKeys!.length > 1) { - result.add('\t// (End of matches)'); - } - } - - return result; -} - -String _generateWidgetMeta( - WidgetMeta widgetMeta, -) { - final buffer = StringBuffer(); - bool isFirstAttribute = true; - - void addCommaIfNecessary() { - if (isFirstAttribute) { - isFirstAttribute = false; - } else { - buffer.write(', '); - } - } - - void addTextAttributeToBuffer() { - addCommaIfNecessary(); - buffer.write("data: '${widgetMeta.widgetText}'"); - } - - void addKeyAttributeToBuffer() { - addCommaIfNecessary(); - buffer.write("key: ${widgetMeta.keyString}"); - } - - void addMatcherAttributeToBuffer() { - addCommaIfNecessary(); - buffer.write('count: '); - if (widgetMeta.matcherType == MatcherTypes.findsNothing) { - buffer.write('0'); - } else if (widgetMeta.matcherType == MatcherTypes.findsOneWidget) { - buffer.write('1'); - } else if (widgetMeta.matcherType == MatcherTypes.findsWidgets) { - buffer.write('many'); - } - } - - buffer.write('${widgetMeta.widgetType}: {'); - - if (widgetMeta.keyString.isNotEmpty) { - addKeyAttributeToBuffer(); - } - - if (widgetMeta.widgetText.isNotEmpty) { - addTextAttributeToBuffer(); - } - - addMatcherAttributeToBuffer(); - - buffer.write('}'); - - final result = buffer.toString(); - - return result; -} - -bool _haveEnString(dynamic key) => _enStringReverseLookup.containsKey(key); - -/// Meta data for gestures -/// Per EWP-1519, this is a work in progress -class _GestureMeta { - _GestureMeta(this.keyword, this.gestureCallbackName); - - String keyword; - String gestureCallbackName; - - static List<_GestureMeta> get all => <_GestureMeta>[ - _GestureMeta('button', 'onTap'), - _GestureMeta('toggle', 'onTap'), - ]; -} - -/// Get the gesture associated with the widget key name. E.g., [keyName] containing "button" returns "tap" -String? getGesture(String keyName) { - String? gestureName; - - if (keyName.isNotEmpty) { - final keyNameLowerCase = keyName.toLowerCase(); - for (final gestureMeta in _GestureMeta.all) { - if (keyNameLowerCase.contains(gestureMeta.keyword)) { - gestureName = gestureMeta.gestureCallbackName; - } - } - } - - return gestureName; -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/expect_meta.dart b/packages/approval_tests_flutter/lib/src/widget_meta/expect_meta.dart deleted file mode 100644 index 979742d..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/expect_meta.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:approval_tests_flutter/src/widget_meta/widget_meta.dart'; - -/// Meta data for generating an expect() statement -class ExpectMeta { - ExpectMeta({required this.widgetMeta}); - - /// Keys found in string_en.json - List? intlKeys; - - /// The [WidgetMeta] instance associated with this instance (1-to-1) - final WidgetMeta widgetMeta; - - /// True if entry in string_en.json found - bool get isIntl => intlKeys != null; - - /// True if multiple entries in string_en.json found - bool get hasMultipleIntlKeys => isIntl && intlKeys!.length > 1; -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/load_string_en.dart b/packages/approval_tests_flutter/lib/src/widget_meta/load_string_en.dart deleted file mode 100644 index b3de9e0..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/load_string_en.dart +++ /dev/null @@ -1,49 +0,0 @@ -// ignore: prefer_expression_function_bodies -Future>> loadEnStringReverseLookup(String path) async { - return >{}; - /* Rich, delete - Future loadData() async { - final File file = File(path); - return file.readAsStringSync(); - } - - final String enString = await loadData(); - - final enStringScrubbed = _removeNonJsonCharacters(enString); - - final enMap = jsonDecode(enStringScrubbed) as Map; - - final enReverseLookup = >{}; - - enMap.forEach( - (key, value) => addToReverseLookup( - reverseLookupMap: enReverseLookup, - stringId: key, - stringContent: value as String, - ), - ); - - return enReverseLookup; - */ -} - -void addToReverseLookup({ - required Map> reverseLookupMap, - required String stringId, - required String stringContent, -}) { - // Swap key/value so that text keys its original ID - if (!reverseLookupMap.containsKey(stringContent)) { - reverseLookupMap[stringContent] = []; - } - reverseLookupMap[stringContent]?.add(stringId); - - // Add an all-caps text for the special case when code further modifies text with .toUpperCase() - final valueUpperCase = stringContent.toUpperCase(); - if (stringContent != valueUpperCase) { - if (!reverseLookupMap.containsKey(valueUpperCase)) { - reverseLookupMap[valueUpperCase] = []; - } - reverseLookupMap[valueUpperCase]?.add('$stringId.toUpperCase()'); - } -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/matcher_types.dart b/packages/approval_tests_flutter/lib/src/widget_meta/matcher_types.dart deleted file mode 100644 index 04881f5..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/matcher_types.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; - -/// Types of matchers used in 'expect' -enum MatcherTypes { - findsNothing, - findsOneWidget, - findsWidgets, - unknown, -} - -extension MatcherTypesExtension on MatcherTypes { - Matcher get matcher => switch (this) { - MatcherTypes.findsNothing => findsNothing, - MatcherTypes.findsOneWidget => findsOneWidget, - MatcherTypes.findsWidgets => findsWidgets, - MatcherTypes.unknown => findsNothing, - }; - - String get matcherName => switch (this) { - MatcherTypes.findsNothing => 'findsNothing', - MatcherTypes.findsOneWidget => 'findsOneWidget', - MatcherTypes.findsWidgets => 'findsWidgets', - MatcherTypes.unknown => '(Unknown)', - }; -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/register_types.dart b/packages/approval_tests_flutter/lib/src/widget_meta/register_types.dart deleted file mode 100644 index b802345..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/register_types.dart +++ /dev/null @@ -1,6 +0,0 @@ -Set registeredTypes = {}; - -/// Register class types for tests with Find.byType -void registerTypes(Set classTypes) { - registeredTypes.addAll(classTypes); -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/widget_meta.dart b/packages/approval_tests_flutter/lib/src/widget_meta/widget_meta.dart deleted file mode 100644 index dd9cb55..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/widget_meta.dart +++ /dev/null @@ -1,171 +0,0 @@ -import 'package:approval_tests_flutter/src/widget_meta/collect_widgets_meta_data.dart'; -import 'package:approval_tests_flutter/src/widget_meta/matcher_types.dart'; -import 'package:approval_tests_flutter/src/widget_meta/register_types.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -/// Meta data for widget selected for inclusion in tests -class WidgetMeta { - WidgetMeta({ - required this.widget, - }) { - _updateWidgetKey(); - widgetType = widget.runtimeType; - isWidgetTypeRegistered = registeredTypes.contains(widgetType) || - registeredNames.contains(widgetType.toString()); - _updateWidgetText(); - _updateMatcher(); - - assert( - keyString.isNotEmpty || isWidgetTypeRegistered || widgetText.isNotEmpty, - 'WidgetMeta widget is invalid', - ); - } - - @override - bool operator ==(Object other) { - if (other is WidgetMeta) { - return keyString == other.keyString && - widgetText == other.widgetText && - widgetType == other.widgetType; - } else { - return false; - } - } - - @override - int get hashCode => widget.hashCode; - - final Widget widget; - late KeyType keyType; - - /// These fields are used repeatedly so their values are cached - late MatcherTypes matcherType; - - /// Text value of the key scraped from the widget tree and trimmed - late final String keyString; - - /// Text value of the widget if a Text widget or similar. E.g., Text(); - late final String widgetText; - - /// The type of widget - late final Type widgetType; - - /// True if user registered this widget type - late final bool isWidgetTypeRegistered; - - /// If widget has text, get it - void _updateWidgetText() { - if (widget is Text) { - final text = widget as Text; - widgetText = text.data ?? ''; - } else if (widget is TextSpan) { - final text = widget as TextSpan; - widgetText = text.text ?? ''; - } else { - widgetText = ''; - } - } - - bool get hasText => isTextEnabled(widget); - - static bool isTextEnabled(Widget widget) { - final runtimeType = widget.runtimeType; - return runtimeType == Text || runtimeType == TextSpan; - } - - /// Perform a test on the widget and store its result - void _updateMatcher() { - matcherType = MatcherTypes.unknown; - - for (final currentMatcherType in MatcherTypes.values) { - try { - expect( - find.byWidgetPredicate( - (w) => - (keyString.isEmpty || w.key == widget.key!) && - (widgetText.isEmpty || w is Text && w.data == widgetText) && - (!isWidgetTypeRegistered || w.runtimeType == widgetType), - ), - currentMatcherType.matcher, - ); - - // if here, expect didn't throw, so we have our matcher type - matcherType = currentMatcherType; - break; - } catch (e) { - // Do nothing. Ignore tests that fail - } - } - } - - /// Parse the string key back into its keysClass.keyName format - /// - /// If there is 1 word in the widgetKey, it's a an enum key (MyEnum.keyName). - /// If there are 2 words in the widgetKey, it's a field key (keyClass.keyName). - /// If there are 3 words, it's a function name (keyClass.keyName(index)). - /// - /// Widget keys without the Enzo '__' delimiter return an empty string. - /// - /// Note that flutter adds a prefix ('[<') and suffix ('>]') to keys that must be removed. - void _updateWidgetKey() { - if (widget.key == null) { - keyString = ''; - } else { - final originalWidgetKey = widget.key.toString(); - if (_isWidgetKeyProperlyFormatted(originalWidgetKey)) { - final strippedWidgetKey = originalWidgetKey.replaceAll("'", ''); - final startIndex = strippedWidgetKey.indexOf('[<'); - final endIndex = strippedWidgetKey.indexOf('>]'); - final trimmedWidgetKey = - strippedWidgetKey.substring(startIndex + 2, endIndex); - final words = trimmedWidgetKey.split(RegExp("__|_")); - words.removeWhere((word) => word == ''); - - if (words.length == 1) { - final word = words[0]; - if (word.contains('.')) { - keyType = KeyType.enumValue; - keyString = word; - } else { - keyType = KeyType.stringValueKey; - keyString = "'$word'"; - } - } else if (words.length == 2) { - keyType = KeyType.stringValueKey; - keyString = '${words[0]}.${words[1]}'; - } else if (words.length == 3) { - keyType = KeyType.functionValueKey; - keyString = '${words[0]}.${words[1]}(${words[2]})'; - } else { - /// If here, must be an unsupported key. Do nothing - keyType = KeyType.unknown; - keyString = ''; - } - } else { - keyString = ''; - } - } - } - - bool _isWidgetKeyProperlyFormatted(String originalWidgetKey) => - (originalWidgetKey.isCustomString || - originalWidgetKey.isEnumString || - originalWidgetKey.isValueKeyString) && - originalWidgetKey.contains('[<') && - originalWidgetKey.contains('>]'); -} - -extension KeyString on String { - bool get isCustomString => this.contains('__'); - bool get isEnumString => - this.contains('_') == false && this.contains('.') == true; - bool get isValueKeyString => this.startsWith('[<') && this.endsWith('>]'); -} - -enum KeyType { - enumValue, // String represents an enum, NOT a ValueKey() - stringValueKey, // String represents a ValueKey() - functionValueKey, // String represents a ValueKey() - unknown; -} diff --git a/packages/approval_tests_flutter/lib/src/widget_meta/widget_tester_extension.dart b/packages/approval_tests_flutter/lib/src/widget_meta/widget_tester_extension.dart deleted file mode 100644 index 5375d7f..0000000 --- a/packages/approval_tests_flutter/lib/src/widget_meta/widget_tester_extension.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; - -/// Holds the value of the class that has members that are strings. Typically, this is the S class in i18n.dart -/// of the intl package. However, it can by any class of the structure: -/// -/// class MyTextHolder { -/// static String title => 'The Book of Avocados'; -/// static String body => 'Once upon a time there was an avocado.... -/// } -/// -dynamic _s; - -extension WidgetTesterExtension on WidgetTester { - /// Set a class that has members that are strings (see [_s] for more detail) - static set s(dynamic value) => _s = value; - - /// Get the class that has members that are strings (see [_s] for more detail) - static dynamic get s => _s; - - String _getStringFromFinder( - Finder finder, - String Function(dynamic s) intl, - ) => - intl(_s); - - /// Returns a [Finder] for Widgets that match one or more parameters - /// - /// [intl] receives the `intl` package `S` object and returns the String to find. - /// [text] is a String to find. - /// [widgetType] is the Type of widget to find. - /// [key] is the key to find. - /// - /// You can pass no String, [intl], or [text], but not both. - /// If [key] and [widgetType] are BOTH null, [widgetType] is assumed to be Text - Finder findBy({ - String Function(dynamic s)? intl, - String? text, - Type? widgetType, - Key? key, - }) { - assert(intl == null || text == null); - - final Type? soughtType = - key == null && widgetType == null ? Text : widgetType; - - late Finder finder; - - if (key != null) { - finder = find.byKey(key); - if (soughtType == Text && (intl != null || text != null)) { - final String widgetText = text ?? _getStringFromFinder(finder, intl!); - expect(find.text(widgetText).evaluate(), finder.evaluate()); - } - } else { - finder = find.byType(soughtType!); - if (intl != null || text != null) { - final String widgetText = text ?? _getStringFromFinder(finder, intl!); - if (soughtType == Text) { - finder = find.text(widgetText); - } - } - } - - return finder; - } - - /// See [findBy] for param descriptions. - /// - /// Usage: - /// - /// expectWidget(intl: (s) => s.someText, key: MyWidgetKeys.someText) - /// - void expectWidget({ - String Function(dynamic s)? intl, - String? text, - Type? widgetType, - Key? key, - Matcher matcher = findsOneWidget, - }) { - final Finder finder = - findBy(intl: intl, text: text, widgetType: widgetType, key: key); - expect(finder, matcher); - } - - /// See [findBy] for param descriptions. - Future tapWidget({ - required String Function(dynamic s) intl, - String? text, - Type? widgetType, - Key? key, - bool shouldPumpAndSettle = true, - }) async { - final Finder finder = - findBy(intl: intl, text: text, widgetType: widgetType, key: key); - expect(finder, findsOneWidget); - await tap(finder); - if (shouldPumpAndSettle) { - await pumpAndSettle(); - } - } -} diff --git a/packages/approval_tests_flutter/pubspec.yaml b/packages/approval_tests_flutter/pubspec.yaml deleted file mode 100644 index bb9fb01..0000000 --- a/packages/approval_tests_flutter/pubspec.yaml +++ /dev/null @@ -1,34 +0,0 @@ -name: approval_tests_flutter -description: Approval Tests implementation in Dart (Flutter). Inspired by ApprovalTests. -version: 1.1.3 -repository: https://github.com/approvals/ApprovalTests.Dart -homepage: https://github.com/approvals/ApprovalTests.Dart.git -issue_tracker: https://github.com/approvals/ApprovalTests.Dart/issues -# publish_to: 'none' - -topics: - - test - - approval - - approvals - - tests - - approval-tests - -environment: - sdk: '>=3.0.0 <4.0.0' - -# dependency_overrides: -# meta: ^1.14.0 - -dependencies: - flutter: - sdk: flutter - flutter_test: - sdk: flutter - approval_tests: ^1.1.2 - # path: ../approval_tests - test_api: ^0.7.0 - test: ^1.25.2 - analyzer: ^6.4.1 - -dev_dependencies: - sizzle_lints: ^2.0.2 \ No newline at end of file diff --git a/packages/approval_tests_flutter/test/approval_tests_flutter_test.dart b/packages/approval_tests_flutter/test/approval_tests_flutter_test.dart deleted file mode 100644 index b2bfed9..0000000 --- a/packages/approval_tests_flutter/test/approval_tests_flutter_test.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:approval_tests_flutter/approval_tests_flutter.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -MaterialApp _buildApp(Widget widget) => MaterialApp( - home: MyCustomClass( - widget: widget, - ), - ); - -class MyCustomClass extends StatelessWidget { - const MyCustomClass({ - required this.widget, - super.key, - }); - - final Widget widget; - - @override - Widget build(BuildContext context) => Container( - child: widget, - ); -} - -enum MyEnumKeys { - myKeyName, -} - -void main() { - setUpAll(() async { - await ApprovalWidgets.setUpAll(); - }); - - group('Approved test', () { - testWidgets('smoke test', (WidgetTester tester) async { - await tester.pumpWidget(_buildApp(const Text('Testing 1, 2, 3, 4'))); - await tester.pumpAndSettle(); - - await tester.approvalTest(); - }); - }); -} diff --git a/packages/approval_tests_flutter/test/approval_tests_flutter_test.smoke_test.approved.txt b/packages/approval_tests_flutter/test/approval_tests_flutter_test.smoke_test.approved.txt deleted file mode 100644 index 9e1664e..0000000 --- a/packages/approval_tests_flutter/test/approval_tests_flutter_test.smoke_test.approved.txt +++ /dev/null @@ -1 +0,0 @@ -Text: {text: 'Testing 1, 2, 3, 4', count: 1} \ No newline at end of file diff --git a/packages/approval_tests_flutter/test/approved/class_names.txt b/packages/approval_tests_flutter/test/approved/class_names.txt deleted file mode 100644 index f666d43..0000000 --- a/packages/approval_tests_flutter/test/approved/class_names.txt +++ /dev/null @@ -1,5 +0,0 @@ -# This file was autogenerated by package:approved. Please do not edit. -# Below is a list of class found in the project /lib folder. -ExpectMeta -WidgetMeta -ApprovalWidgets diff --git a/packages/approval_tests/pubspec.yaml b/pubspec.yaml similarity index 82% rename from packages/approval_tests/pubspec.yaml rename to pubspec.yaml index dc533a8..7e59b01 100644 --- a/packages/approval_tests/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ # * 0.0.4 for a minor release. name: approval_tests description: Approval Tests implementation in Dart. Inspired by ApprovalTests. -version: 1.1.3 +version: 1.1.4 repository: https://github.com/approvals/ApprovalTests.Dart homepage: https://github.com/approvals/ApprovalTests.Dart.git issue_tracker: https://github.com/approvals/ApprovalTests.Dart/issues @@ -16,13 +16,13 @@ topics: - approval-tests environment: - sdk: '>=3.0.0 <4.0.0' + sdk: ">=3.0.0 <4.0.0" dependencies: - test: ^1.25.2 - talker: ^4.3.2 + test: ^1.25.15 + talker: ^4.6.11 diff_match_patch2: ^0.5.0 - test_api: ^0.7.0 + test_api: ^0.7.4 dev_dependencies: - sizzle_lints: ^2.0.2 \ No newline at end of file + sizzle_lints: ^2.1.4 diff --git a/packages/approval_tests/test/approval_test.dart b/test/approval_test.dart similarity index 100% rename from packages/approval_tests/test/approval_test.dart rename to test/approval_test.dart diff --git a/packages/approval_tests/test/approved_files/approval_test.description_with_filenamer.test_description.approved.txt b/test/approved_files/approval_test.description_with_filenamer.test_description.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.description_with_filenamer.test_description.approved.txt rename to test/approved_files/approval_test.description_with_filenamer.test_description.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify.approved.txt b/test/approved_files/approval_test.verify.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify.approved.txt rename to test/approved_files/approval_test.verify.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_all.approved.txt b/test/approved_files/approval_test.verify_all.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_all.approved.txt rename to test/approved_files/approval_test.verify_all.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_all_combinations.approved.txt b/test/approved_files/approval_test.verify_all_combinations.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_all_combinations.approved.txt rename to test/approved_files/approval_test.verify_all_combinations.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_all_combinations_exception.approved.txt b/test/approved_files/approval_test.verify_all_combinations_exception.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_all_combinations_exception.approved.txt rename to test/approved_files/approval_test.verify_all_combinations_exception.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_as_json.approved.txt b/test/approved_files/approval_test.verify_as_json.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_as_json.approved.txt rename to test/approved_files/approval_test.verify_as_json.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_as_json_exception.approved.txt b/test/approved_files/approval_test.verify_as_json_exception.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_as_json_exception.approved.txt rename to test/approved_files/approval_test.verify_as_json_exception.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_as_model_json.approved.txt b/test/approved_files/approval_test.verify_as_model_json.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_as_model_json.approved.txt rename to test/approved_files/approval_test.verify_as_model_json.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_custom_scrub.approved.txt b/test/approved_files/approval_test.verify_custom_scrub.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_custom_scrub.approved.txt rename to test/approved_files/approval_test.verify_custom_scrub.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_date_scrub.approved.txt b/test/approved_files/approval_test.verify_date_scrub.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_date_scrub.approved.txt rename to test/approved_files/approval_test.verify_date_scrub.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_exception.approved.txt b/test/approved_files/approval_test.verify_exception.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_exception.approved.txt rename to test/approved_files/approval_test.verify_exception.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_query.approved.txt b/test/approved_files/approval_test.verify_query.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_query.approved.txt rename to test/approved_files/approval_test.verify_query.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_query_exception.approved.txt b/test/approved_files/approval_test.verify_query_exception.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_query_exception.approved.txt rename to test/approved_files/approval_test.verify_query_exception.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_scrub.approved.txt b/test/approved_files/approval_test.verify_scrub.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_scrub.approved.txt rename to test/approved_files/approval_test.verify_scrub.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_sequence.approved.txt b/test/approved_files/approval_test.verify_sequence.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_sequence.approved.txt rename to test/approved_files/approval_test.verify_sequence.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_sequence_exception.approved.txt b/test/approved_files/approval_test.verify_sequence_exception.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_sequence_exception.approved.txt rename to test/approved_files/approval_test.verify_sequence_exception.approved.txt diff --git a/packages/approval_tests/test/approved_files/approval_test.verify_without_class_name.approved.txt b/test/approved_files/approval_test.verify_without_class_name.approved.txt similarity index 100% rename from packages/approval_tests/test/approved_files/approval_test.verify_without_class_name.approved.txt rename to test/approved_files/approval_test.verify_without_class_name.approved.txt diff --git a/packages/approval_tests/test/constants/lines.dart b/test/constants/lines.dart similarity index 100% rename from packages/approval_tests/test/constants/lines.dart rename to test/constants/lines.dart diff --git a/packages/approval_tests/test/example/example_test.dart b/test/example/example_test.dart similarity index 100% rename from packages/approval_tests/test/example/example_test.dart rename to test/example/example_test.dart diff --git a/packages/approval_tests/test/example/example_test.test_JSON_object.approved.txt b/test/example/example_test.test_JSON_object.approved.txt similarity index 57% rename from packages/approval_tests/test/example/example_test.test_JSON_object.approved.txt rename to test/example/example_test.test_JSON_object.approved.txt index 571b02c..1b66cf9 100644 --- a/packages/approval_tests/test/example/example_test.test_JSON_object.approved.txt +++ b/test/example/example_test.test_JSON_object.approved.txt @@ -1,3 +1,5 @@ +# This file was generated by approval_tests. Please do not edit. + { "name": "JsonTest", "features": [ diff --git a/packages/approval_tests/test/groups/diff_tools_tests.dart b/test/groups/diff_tools_tests.dart similarity index 100% rename from packages/approval_tests/test/groups/diff_tools_tests.dart rename to test/groups/diff_tools_tests.dart diff --git a/packages/approval_tests/test/groups/exception_tests.dart b/test/groups/exception_tests.dart similarity index 100% rename from packages/approval_tests/test/groups/exception_tests.dart rename to test/groups/exception_tests.dart diff --git a/packages/approval_tests/test/groups/minor_tests.dart b/test/groups/minor_tests.dart similarity index 100% rename from packages/approval_tests/test/groups/minor_tests.dart rename to test/groups/minor_tests.dart diff --git a/packages/approval_tests/test/groups/minor_tests.description_with_namer.test_description.approved.txt b/test/groups/minor_tests.description_with_namer.test_description.approved.txt similarity index 100% rename from packages/approval_tests/test/groups/minor_tests.description_with_namer.test_description.approved.txt rename to test/groups/minor_tests.description_with_namer.test_description.approved.txt diff --git a/packages/approval_tests/test/groups/verify_tests.dart b/test/groups/verify_tests.dart similarity index 100% rename from packages/approval_tests/test/groups/verify_tests.dart rename to test/groups/verify_tests.dart diff --git a/packages/approval_tests/test/mock/testable_file_path_extractor.dart b/test/mock/testable_file_path_extractor.dart similarity index 100% rename from packages/approval_tests/test/mock/testable_file_path_extractor.dart rename to test/mock/testable_file_path_extractor.dart diff --git a/packages/approval_tests/test/mock/testable_platform_wrapper.dart b/test/mock/testable_platform_wrapper.dart similarity index 100% rename from packages/approval_tests/test/mock/testable_platform_wrapper.dart rename to test/mock/testable_platform_wrapper.dart diff --git a/packages/approval_tests/test/models/item.dart b/test/models/item.dart similarity index 100% rename from packages/approval_tests/test/models/item.dart rename to test/models/item.dart diff --git a/packages/approval_tests/test/queries/db_request_query.dart b/test/queries/db_request_query.dart similarity index 100% rename from packages/approval_tests/test/queries/db_request_query.dart rename to test/queries/db_request_query.dart diff --git a/packages/approval_tests/test/queries/network_request_query.dart b/test/queries/network_request_query.dart similarity index 100% rename from packages/approval_tests/test/queries/network_request_query.dart rename to test/queries/network_request_query.dart diff --git a/packages/approval_tests/test/utils/helper.dart b/test/utils/helper.dart similarity index 100% rename from packages/approval_tests/test/utils/helper.dart rename to test/utils/helper.dart From 4ab15d9809bdffd2b3989ac10902a7ecb632f063 Mon Sep 17 00:00:00 2001 From: github actions Date: Wed, 19 Feb 2025 01:29:50 +0500 Subject: [PATCH 2/4] . r other examples to starter project --- examples/dart_example/.gitignore | 3 - examples/dart_example/CHANGELOG.md | 3 - examples/dart_example/README.md | 2 - examples/dart_example/analysis_options.yaml | 30 - examples/dart_example/bin/dart_example.dart | 6 - examples/dart_example/lib/dart_example.dart | 29 - examples/dart_example/pubspec.yaml | 16 - .../dart_example/test/dart_example_test.dart | 18 - ...mple_test.verify_combinations.approved.txt | 5 - examples/flutter_example/.gitignore | 43 -- examples/flutter_example/.metadata | 45 -- examples/flutter_example/README.md | 16 - .../flutter_example/analysis_options.yaml | 28 - examples/flutter_example/android/.gitignore | 13 - .../flutter_example/android/app/build.gradle | 58 -- .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 45 -- .../approved/example/MainActivity.kt | 5 - .../res/drawable-v21/launch_background.xml | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes .../app/src/main/res/values-night/styles.xml | 18 - .../app/src/main/res/values/styles.xml | 18 - .../app/src/profile/AndroidManifest.xml | 7 - examples/flutter_example/android/build.gradle | 18 - .../flutter_example/android/gradle.properties | 3 - .../gradle/wrapper/gradle-wrapper.properties | 5 - .../flutter_example/android/settings.gradle | 25 - examples/flutter_example/ios/.gitignore | 34 - .../ios/Flutter/AppFrameworkInfo.plist | 26 - .../ios/Flutter/Debug.xcconfig | 1 - .../ios/Flutter/Release.xcconfig | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 619 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 98 --- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 122 ---- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - .../flutter_example/ios/Runner/Info.plist | 49 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - .../ios/RunnerTests/RunnerTests.swift | 12 - examples/flutter_example/lib/main.dart | 57 -- examples/flutter_example/pubspec.yaml | 22 - .../test/.approval_tests/class_names.txt | 4 - .../test/.approval_tests/received_files.txt | 2 - .../flutter_example/test/widget_test.dart | 30 - ...t.smoke_test.should_display_0.approved.txt | 7 - ...t.smoke_test.should_display_1.approved.txt | 4 - 78 files changed, 1729 deletions(-) delete mode 100644 examples/dart_example/.gitignore delete mode 100644 examples/dart_example/CHANGELOG.md delete mode 100644 examples/dart_example/README.md delete mode 100644 examples/dart_example/analysis_options.yaml delete mode 100644 examples/dart_example/bin/dart_example.dart delete mode 100644 examples/dart_example/lib/dart_example.dart delete mode 100644 examples/dart_example/pubspec.yaml delete mode 100644 examples/dart_example/test/dart_example_test.dart delete mode 100644 examples/dart_example/test/dart_example_test.verify_combinations.approved.txt delete mode 100644 examples/flutter_example/.gitignore delete mode 100644 examples/flutter_example/.metadata delete mode 100644 examples/flutter_example/README.md delete mode 100644 examples/flutter_example/analysis_options.yaml delete mode 100644 examples/flutter_example/android/.gitignore delete mode 100644 examples/flutter_example/android/app/build.gradle delete mode 100644 examples/flutter_example/android/app/src/debug/AndroidManifest.xml delete mode 100644 examples/flutter_example/android/app/src/main/AndroidManifest.xml delete mode 100644 examples/flutter_example/android/app/src/main/kotlin/com/richardcoutts/approved/example/MainActivity.kt delete mode 100644 examples/flutter_example/android/app/src/main/res/drawable-v21/launch_background.xml delete mode 100644 examples/flutter_example/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 examples/flutter_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 examples/flutter_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 examples/flutter_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 examples/flutter_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 examples/flutter_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 examples/flutter_example/android/app/src/main/res/values-night/styles.xml delete mode 100644 examples/flutter_example/android/app/src/main/res/values/styles.xml delete mode 100644 examples/flutter_example/android/app/src/profile/AndroidManifest.xml delete mode 100644 examples/flutter_example/android/build.gradle delete mode 100644 examples/flutter_example/android/gradle.properties delete mode 100644 examples/flutter_example/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 examples/flutter_example/android/settings.gradle delete mode 100644 examples/flutter_example/ios/.gitignore delete mode 100644 examples/flutter_example/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 examples/flutter_example/ios/Flutter/Debug.xcconfig delete mode 100644 examples/flutter_example/ios/Flutter/Release.xcconfig delete mode 100644 examples/flutter_example/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 examples/flutter_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 examples/flutter_example/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 examples/flutter_example/ios/Runner/AppDelegate.swift delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 examples/flutter_example/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 examples/flutter_example/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 examples/flutter_example/ios/Runner/Info.plist delete mode 100644 examples/flutter_example/ios/Runner/Runner-Bridging-Header.h delete mode 100644 examples/flutter_example/ios/RunnerTests/RunnerTests.swift delete mode 100644 examples/flutter_example/lib/main.dart delete mode 100644 examples/flutter_example/pubspec.yaml delete mode 100644 examples/flutter_example/test/.approval_tests/class_names.txt delete mode 100644 examples/flutter_example/test/.approval_tests/received_files.txt delete mode 100644 examples/flutter_example/test/widget_test.dart delete mode 100644 examples/flutter_example/test/widget_test.smoke_test.should_display_0.approved.txt delete mode 100644 examples/flutter_example/test/widget_test.smoke_test.should_display_1.approved.txt diff --git a/examples/dart_example/.gitignore b/examples/dart_example/.gitignore deleted file mode 100644 index 3a85790..0000000 --- a/examples/dart_example/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ diff --git a/examples/dart_example/CHANGELOG.md b/examples/dart_example/CHANGELOG.md deleted file mode 100644 index effe43c..0000000 --- a/examples/dart_example/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.0.0 - -- Initial version. diff --git a/examples/dart_example/README.md b/examples/dart_example/README.md deleted file mode 100644 index 3816eca..0000000 --- a/examples/dart_example/README.md +++ /dev/null @@ -1,2 +0,0 @@ -A sample command-line application with an entrypoint in `bin/`, library code -in `lib/`, and example unit test in `test/`. diff --git a/examples/dart_example/analysis_options.yaml b/examples/dart_example/analysis_options.yaml deleted file mode 100644 index dee8927..0000000 --- a/examples/dart_example/analysis_options.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# This file configures the static analysis results for your project (errors, -# warnings, and lints). -# -# This enables the 'recommended' set of lints from `package:lints`. -# This set helps identify many issues that may lead to problems when running -# or consuming Dart code, and enforces writing Dart using a single, idiomatic -# style and format. -# -# If you want a smaller set of lints you can change this to specify -# 'package:lints/core.yaml'. These are just the most critical lints -# (the recommended set includes the core lints). -# The core lints are also what is used by pub.dev for scoring packages. - -include: package:lints/recommended.yaml - -# Uncomment the following section to specify additional rules. - -# linter: -# rules: -# - camel_case_types - -# analyzer: -# exclude: -# - path/to/excluded/files/** - -# For more information about the core and recommended set of lints, see -# https://dart.dev/go/core-lints - -# For additional information about configuring this file, see -# https://dart.dev/guides/language/analysis-options diff --git a/examples/dart_example/bin/dart_example.dart b/examples/dart_example/bin/dart_example.dart deleted file mode 100644 index 31e186f..0000000 --- a/examples/dart_example/bin/dart_example.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'package:approval_tests/approval_tests.dart'; -import 'package:dart_application/dart_example.dart'; - -void main(List arguments) { - ApprovalLogger.log('Fizz Buzz for 5: ${fizzBuzz(5)}!'); -} diff --git a/examples/dart_example/lib/dart_example.dart b/examples/dart_example/lib/dart_example.dart deleted file mode 100644 index 5e05a14..0000000 --- a/examples/dart_example/lib/dart_example.dart +++ /dev/null @@ -1,29 +0,0 @@ -/// Fizz Buzz kata implementation -List fizzBuzz(int n) { - final List result = []; - - for (int i = 1; i <= n; i++) { - // If the current number (`i`) is divisible by both 3 and 5 (or equivalently 15), - // add the string "FizzBuzz" to the `result` list. - if (i % 15 == 0) { - result.add("FizzBuzz"); - - // Else, if the current number (`i`) is only divisible by 3, - // add the string "Fizz" to the `result` list. - } else if (i % 3 == 0) { - result.add("Fizz"); - - // Else, if the current number (`i`) is only divisible by 5, - // add the string "Buzz" to the `result` list. - } else if (i % 5 == 0) { - result.add("Buzz"); - - // If the current number (`i`) is neither divisible by 3 nor 5, - // add the string representation of that number to the `result` list. - } else { - result.add(i.toString()); - } - } - - return result; -} diff --git a/examples/dart_example/pubspec.yaml b/examples/dart_example/pubspec.yaml deleted file mode 100644 index 26af55d..0000000 --- a/examples/dart_example/pubspec.yaml +++ /dev/null @@ -1,16 +0,0 @@ -name: dart_application -description: A sample command-line application. -version: 1.0.0 -publish_to: "none" - -environment: - sdk: ^3.4.0 - -# Add regular dependencies here. -dependencies: - approval_tests: - path: ../../ - -dev_dependencies: - lints: ^4.0.0 - test: ^1.24.0 diff --git a/examples/dart_example/test/dart_example_test.dart b/examples/dart_example/test/dart_example_test.dart deleted file mode 100644 index ef89d04..0000000 --- a/examples/dart_example/test/dart_example_test.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:approval_tests/approval_tests.dart'; -import 'package:dart_application/dart_example.dart'; -import 'package:test/test.dart'; - -void main() { - group('Fizz Buzz', () { - test("verify combinations", () { - Approvals.verifyAll( - [3, 5, 15], - options: const Options( - reporter: DiffReporter(), - deleteReceivedFile: false, - ), - processor: (items) => fizzBuzz(items).toString(), - ); - }); - }); -} diff --git a/examples/dart_example/test/dart_example_test.verify_combinations.approved.txt b/examples/dart_example/test/dart_example_test.verify_combinations.approved.txt deleted file mode 100644 index 41b678a..0000000 --- a/examples/dart_example/test/dart_example_test.verify_combinations.approved.txt +++ /dev/null @@ -1,5 +0,0 @@ -# This file was generated by approval_tests. Please do not edit. - -[1, 2, Fizz] -[1, 2, Fizz, 4, Buzz] -[1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz] \ No newline at end of file diff --git a/examples/flutter_example/.gitignore b/examples/flutter_example/.gitignore deleted file mode 100644 index 29a3a50..0000000 --- a/examples/flutter_example/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/examples/flutter_example/.metadata b/examples/flutter_example/.metadata deleted file mode 100644 index cbf1dc0..0000000 --- a/examples/flutter_example/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3" - channel: "stable" - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: android - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: ios - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: linux - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: macos - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: web - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - platform: windows - create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/examples/flutter_example/README.md b/examples/flutter_example/README.md deleted file mode 100644 index 2b3fce4..0000000 --- a/examples/flutter_example/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# example - -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/examples/flutter_example/analysis_options.yaml b/examples/flutter_example/analysis_options.yaml deleted file mode 100644 index 0d29021..0000000 --- a/examples/flutter_example/analysis_options.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at https://dart.dev/lints. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/examples/flutter_example/android/.gitignore b/examples/flutter_example/android/.gitignore deleted file mode 100644 index 6f56801..0000000 --- a/examples/flutter_example/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/examples/flutter_example/android/app/build.gradle b/examples/flutter_example/android/app/build.gradle deleted file mode 100644 index a1a0ca2..0000000 --- a/examples/flutter_example/android/app/build.gradle +++ /dev/null @@ -1,58 +0,0 @@ -plugins { - id "com.android.application" - id "kotlin-android" - // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. - id "dev.flutter.flutter-gradle-plugin" -} - -def localProperties = new Properties() -def localPropertiesFile = rootProject.file("local.properties") -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader("UTF-8") { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty("flutter.versionCode") -if (flutterVersionCode == null) { - flutterVersionCode = "1" -} - -def flutterVersionName = localProperties.getProperty("flutter.versionName") -if (flutterVersionName == null) { - flutterVersionName = "1.0" -} - -android { - namespace = "com.richardcoutts.approved.example" - compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.richardcoutts.approved.example" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdk = flutter.minSdkVersion - targetSdk = flutter.targetSdkVersion - versionCode = flutterVersionCode.toInteger() - versionName = flutterVersionName - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug - } - } -} - -flutter { - source = "../.." -} diff --git a/examples/flutter_example/android/app/src/debug/AndroidManifest.xml b/examples/flutter_example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 399f698..0000000 --- a/examples/flutter_example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/examples/flutter_example/android/app/src/main/AndroidManifest.xml b/examples/flutter_example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 74a78b9..0000000 --- a/examples/flutter_example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/flutter_example/android/app/src/main/kotlin/com/richardcoutts/approved/example/MainActivity.kt b/examples/flutter_example/android/app/src/main/kotlin/com/richardcoutts/approved/example/MainActivity.kt deleted file mode 100644 index 0c30980..0000000 --- a/examples/flutter_example/android/app/src/main/kotlin/com/richardcoutts/approved/example/MainActivity.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.richardcoutts.approved.example - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() diff --git a/examples/flutter_example/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/flutter_example/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f..0000000 --- a/examples/flutter_example/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/flutter_example/android/app/src/main/res/drawable/launch_background.xml b/examples/flutter_example/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f..0000000 --- a/examples/flutter_example/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/examples/flutter_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/flutter_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/examples/flutter_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/flutter_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/examples/flutter_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/flutter_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/examples/flutter_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/flutter_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28e45604e46eeda8dd24651419bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/examples/flutter_example/android/app/src/main/res/values-night/styles.xml b/examples/flutter_example/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be..0000000 --- a/examples/flutter_example/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/flutter_example/android/app/src/main/res/values/styles.xml b/examples/flutter_example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88..0000000 --- a/examples/flutter_example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/examples/flutter_example/android/app/src/profile/AndroidManifest.xml b/examples/flutter_example/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 399f698..0000000 --- a/examples/flutter_example/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/examples/flutter_example/android/build.gradle b/examples/flutter_example/android/build.gradle deleted file mode 100644 index d2ffbff..0000000 --- a/examples/flutter_example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/examples/flutter_example/android/gradle.properties b/examples/flutter_example/android/gradle.properties deleted file mode 100644 index 3b5b324..0000000 --- a/examples/flutter_example/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError -android.useAndroidX=true -android.enableJetifier=true diff --git a/examples/flutter_example/android/gradle/wrapper/gradle-wrapper.properties b/examples/flutter_example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e1ca574..0000000 --- a/examples/flutter_example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/examples/flutter_example/android/settings.gradle b/examples/flutter_example/android/settings.gradle deleted file mode 100644 index 536165d..0000000 --- a/examples/flutter_example/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false -} - -include ":app" diff --git a/examples/flutter_example/ios/.gitignore b/examples/flutter_example/ios/.gitignore deleted file mode 100644 index 7a7f987..0000000 --- a/examples/flutter_example/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/examples/flutter_example/ios/Flutter/AppFrameworkInfo.plist b/examples/flutter_example/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 7c56964..0000000 --- a/examples/flutter_example/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 12.0 - - diff --git a/examples/flutter_example/ios/Flutter/Debug.xcconfig b/examples/flutter_example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/examples/flutter_example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/examples/flutter_example/ios/Flutter/Release.xcconfig b/examples/flutter_example/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/examples/flutter_example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/examples/flutter_example/ios/Runner.xcodeproj/project.pbxproj b/examples/flutter_example/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index bdbdd2d..0000000 --- a/examples/flutter_example/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,619 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 97C146E61CF9000F007C117D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 97C146ED1CF9000F007C117D; - remoteInfo = Runner; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; - 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 331C8082294A63A400263BE5 /* RunnerTests */ = { - isa = PBXGroup; - children = ( - 331C807B294A618700263BE5 /* RunnerTests.swift */, - ); - path = RunnerTests; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - 331C8082294A63A400263BE5 /* RunnerTests */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - 331C8081294A63A400263BE5 /* RunnerTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 331C8080294A63A400263BE5 /* RunnerTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; - buildPhases = ( - 331C807D294A63A400263BE5 /* Sources */, - 331C807F294A63A400263BE5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 331C8086294A63A400263BE5 /* PBXTargetDependency */, - ); - name = RunnerTests; - productName = RunnerTests; - productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1510; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 331C8080294A63A400263BE5 = { - CreatedOnToolsVersion = 14.0; - TestTargetID = 97C146ED1CF9000F007C117D; - }; - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - 331C8080294A63A400263BE5 /* RunnerTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 331C807F294A63A400263BE5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 331C807D294A63A400263BE5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 97C146ED1CF9000F007C117D /* Runner */; - targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = FMFRWPG939; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.richardcoutts.approved.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 331C8088294A63A400263BE5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.richardcoutts.approved.example.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Debug; - }; - 331C8089294A63A400263BE5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.richardcoutts.approved.example.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Release; - }; - 331C808A294A63A400263BE5 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.richardcoutts.approved.example.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = FMFRWPG939; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.richardcoutts.approved.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = FMFRWPG939; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.richardcoutts.approved.example; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 331C8088294A63A400263BE5 /* Debug */, - 331C8089294A63A400263BE5 /* Release */, - 331C808A294A63A400263BE5 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/examples/flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/flutter_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/flutter_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index 8e3ca5d..0000000 --- a/examples/flutter_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/flutter_example/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/flutter_example/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/examples/flutter_example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/examples/flutter_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/examples/flutter_example/ios/Runner/AppDelegate.swift b/examples/flutter_example/ios/Runner/AppDelegate.swift deleted file mode 100644 index 9074fee..0000000 --- a/examples/flutter_example/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import Flutter -import UIKit - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fa..0000000 --- a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_xN#0001NP)t-s|Ns9~ z#rXRE|M&d=0au&!`~QyF`q}dRnBDt}*!qXo`c{v z{Djr|@Adh0(D_%#_&mM$D6{kE_x{oE{l@J5@%H*?%=t~i_`ufYOPkAEn!pfkr2$fs z652Tz0001XNklqeeKN4RM4i{jKqmiC$?+xN>3Apn^ z0QfuZLym_5b<*QdmkHjHlj811{If)dl(Z2K0A+ekGtrFJb?g|wt#k#pV-#A~bK=OT ts8>{%cPtyC${m|1#B1A6#u!Q;umknL1chzTM$P~L002ovPDHLkV1lTfnu!1a diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 797d452e458972bab9d994556c8305db4c827017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 6ed2d933e1120817fe9182483a228007b18ab6ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cd7b0099ca80c806f8fe495613e8d6c69460d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index fe730945a01f64a61e2235dbe3f45b08f7729182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 502f463a9bc882b461c96aadf492d1729e49e725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0ec303439225b78712f49115768196d8d76f6790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e9f5fea27c705180eb716271f41b582e76dcbd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1674 zcmV;526g#~P){YQnis^a@{&-nmRmq)<&%Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b zE>q9${Lb$D&h7k=+4=!ek^n+`0zq>LL1O?lVyea53S5x`Nqqo2YyeuIrQrJj9XjOp z{;T5qbj3}&1vg1VK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}x zU&J@bBI>f6w6en+CeI)3^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|VqzOc zkc7qL~0sOYuM{tG`rYEDV{DWY`Z8&)kW*hc2VkBuY+^Yx&92j&StN}Wp=LD zxoGxXw6f&8sB^u})h@b@z0RBeD`K7RMR9deyL(ZJu#39Z>rT)^>v}Khq8U-IbIvT> z?4pV9qGj=2)TNH3d)=De<+^w;>S7m_eFKTvzeaBeir45xY!^m!FmxnljbSS_3o=g( z->^wC9%qkR{kbGnW8MfFew_o9h3(r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfY zn1R5Qnp<{Jq0M1vX=X&F8gtLmcWv$1*M@4ZfF^9``()#hGTeKeP`1!iED ztNE(TN}M5}3Bbc*d=FIv`DNv&@|C6yYj{sSqUj5oo$#*0$7pu|Dd2TLI>t5%I zIa4Dvr(iayb+5x=j*Vum9&irk)xV1`t509lnPO0%skL8_1c#Xbamh(2@f?4yUI zhhuT5<#8RJhGz4%b$`PJwKPAudsm|at?u;*hGgnA zU1;9gnxVBC)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=k zL{GMc5{h138)fF5CzHEDM>+FqY)$pdN3}Ml+riTgJOLN0F*Vh?{9ESR{SVVg>*>=# zix;VJHPtvFFCRY$Ks*F;VX~%*r9F)W`PmPE9F!(&s#x07n2<}?S{(ygpXgX-&B&OM zONY&BRQ(#%0%jeQs?oJ4P!p*R98>qCy5p8w>_gpuh39NcOlp)(wOoz0sY-Qz55eB~ z7OC-fKBaD1sE3$l-6QgBJO!n?QOTza`!S_YK z_v-lm^7{VO^8Q@M_^8F)09Ki6%=s?2_5eupee(w1FB%aqSweusQ-T+CH0Xt{` zFjMvW{@C&TB)k25()nh~_yJ9coBRL(0oO@HK~z}7?bm5j;y@69;bvlHb2tf!$ReA~x{22wTq550 z?f?Hnw(;m3ip30;QzdV~7pi!wyMYhDtXW#cO7T>|f=bdFhu+F!zMZ2UFj;GUKX7tI z;hv3{q~!*pMj75WP_c}>6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FaF{8 z;u`Mw0ly(uE>*CgQYv{be6ab2LWhlaH1^iLIM{olnag$78^Fd}%dR7;JECQ+hmk|o z!u2&!3MqPfP5ChDSkFSH8F2WVOEf0(E_M(JL17G}Y+fg0_IuW%WQ zG(mG&u?|->YSdk0;8rc{yw2@2Z&GA}z{Wb91Ooz9VhA{b2DYE7RmG zjL}?eq#iX%3#k;JWMx_{^2nNax`xPhByFiDX+a7uTGU|otOvIAUy|dEKkXOm-`aWS z27pUzD{a)Ct<6p{{3)+lq@i`t@%>-wT4r?*S}k)58e09WZYP0{{R3FC5Sl00039P)t-s|Ns9~ z#rP?<_5oL$Q^olD{r_0T`27C={r>*`|Nj71npVa5OTzc(_WfbW_({R{p56NV{r*M2 z_xt?)2V0#0NsfV0u>{42ctGP(8vQj-Btk1n|O0ZD=YLwd&R{Ko41Gr9H= zY@z@@bOAMB5Ltl$E>bJJ{>JP30ZxkmI%?eW{k`b?Wy<&gOo;dS`~CR$Vwb@XWtR|N zi~t=w02?-0&j0TD{>bb6sNwsK*!p?V`RMQUl(*DVjk-9Cx+-z1KXab|Ka2oXhX5f% z`$|e!000AhNklrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`? zTG`AHia671e^vgmp!llKp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?hz91 z7p83F3%LVu9;S$tSI$C^%^yud1dfTM_6p2|+5Ejp$bd`GDvbR|xit>i!ZD&F>@CJrPmu*UjD&?DfZs=$@e3FQA(vNiU+$A*%a} z?`XcG2jDxJ_ZQ#Md`H{4Lpf6QBDp81_KWZ6Tk#yCy1)32zO#3<7>b`eT7UyYH1eGz z;O(rH$=QR*L%%ZcBpc=eGua?N55nD^K(8<#gl2+pN_j~b2MHs4#mcLmv%DkspS-3< zpI1F=^9siI0s-;IN_IrA;5xm~3?3!StX}pUv0vkxMaqm+zxrg7X7(I&*N~&dEd0kD z-FRV|g=|QuUsuh>-xCI}vD2imzYIOIdcCVV=$Bz@*u0+Bs<|L^)32nN*=wu3n%Ynw z@1|eLG>!8ruU1pFXUfb`j>(=Gy~?Rn4QJ-c3%3T|(Frd!bI`9u&zAnyFYTqlG#&J7 zAkD(jpw|oZLNiA>;>hgp1KX7-wxC~31II47gc zHcehD6Uxlf%+M^^uN5Wc*G%^;>D5qT{>=uxUhX%WJu^Z*(_Wq9y}npFO{Hhb>s6<9 zNi0pHXWFaVZnb)1+RS&F)xOv6&aeILcI)`k#0YE+?e)5&#r7J#c`3Z7x!LpTc01dx zrdC3{Z;joZ^KN&))zB_i)I9fWedoN>Zl-6_Iz+^G&*ak2jpF07*qoM6N<$f;w%0(f|Me diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2..0000000 --- a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index b5b843a..0000000 --- a/examples/flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. diff --git a/examples/flutter_example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/flutter_example/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c..0000000 --- a/examples/flutter_example/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/flutter_example/ios/Runner/Base.lproj/Main.storyboard b/examples/flutter_example/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c2851..0000000 --- a/examples/flutter_example/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/flutter_example/ios/Runner/Info.plist b/examples/flutter_example/ios/Runner/Info.plist deleted file mode 100644 index 5458fc4..0000000 --- a/examples/flutter_example/ios/Runner/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Example - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - example - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/examples/flutter_example/ios/Runner/Runner-Bridging-Header.h b/examples/flutter_example/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a5..0000000 --- a/examples/flutter_example/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/examples/flutter_example/ios/RunnerTests/RunnerTests.swift b/examples/flutter_example/ios/RunnerTests/RunnerTests.swift deleted file mode 100644 index 86a7c3b..0000000 --- a/examples/flutter_example/ios/RunnerTests/RunnerTests.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Flutter -import UIKit -import XCTest - -class RunnerTests: XCTestCase { - - func testExample() { - // If you add code to the Runner application, consider adding tests here. - // See https://developer.apple.com/documentation/xctest for more information about using XCTest. - } - -} diff --git a/examples/flutter_example/lib/main.dart b/examples/flutter_example/lib/main.dart deleted file mode 100644 index 4b22711..0000000 --- a/examples/flutter_example/lib/main.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/material.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - @override - Widget build(BuildContext context) { - return const MaterialApp( - title: 'Approved Demo', - home: MyHomePage(title: 'Approved Example'), - ); - } -} - -class MyHomePage extends StatefulWidget { - const MyHomePage({super.key, required this.title}); - - final String title; - - @override - State createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() => setState(() => _counter++); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('You have pushed the button this many times:'), - Text( - '$_counter', - key: const ValueKey('Counter'), - style: Theme.of(context).textTheme.headlineMedium, - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - child: const Icon(Icons.add), - ), - ); - } -} diff --git a/examples/flutter_example/pubspec.yaml b/examples/flutter_example/pubspec.yaml deleted file mode 100644 index 0a4e4f4..0000000 --- a/examples/flutter_example/pubspec.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: flutter_example -description: "A new Flutter project." -publish_to: "none" - -version: 1.0.0+1 - -environment: - sdk: ">=3.4.1 <4.0.0" - -dependencies: - flutter: - sdk: flutter - flutter_test: - sdk: flutter - approval_tests_flutter: - path: ../../../ApprovalTests.Dart.Flutter/ - -dev_dependencies: - flutter_lints: ^4.0.0 - -flutter: - uses-material-design: true diff --git a/examples/flutter_example/test/.approval_tests/class_names.txt b/examples/flutter_example/test/.approval_tests/class_names.txt deleted file mode 100644 index f54af76..0000000 --- a/examples/flutter_example/test/.approval_tests/class_names.txt +++ /dev/null @@ -1,4 +0,0 @@ -# This file was autogenerated by package:approved. Please do not edit. -# Below is a list of class found in the project /lib folder. -MyApp -MyHomePage diff --git a/examples/flutter_example/test/.approval_tests/received_files.txt b/examples/flutter_example/test/.approval_tests/received_files.txt deleted file mode 100644 index 36485e6..0000000 --- a/examples/flutter_example/test/.approval_tests/received_files.txt +++ /dev/null @@ -1,2 +0,0 @@ -/Users/yelamanyelmuratov/Development/approvals/ApprovalTests.Dart/examples/flutter_example/test/widget_test.smoke_test.should_display_1.received.txt -/Users/yelamanyelmuratov/Development/approvals/ApprovalTests.Dart/examples/flutter_example/test/widget_test.smoke_test.should_display_0.received.txt \ No newline at end of file diff --git a/examples/flutter_example/test/widget_test.dart b/examples/flutter_example/test/widget_test.dart deleted file mode 100644 index 4815f2b..0000000 --- a/examples/flutter_example/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:approval_tests_flutter/approval_tests_flutter.dart'; -import 'package:flutter_example/main.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - setUpAll(() async => await ApprovalWidgets.setUpAll()); - - group('Example', () { - testWidgets('smoke test', (WidgetTester tester) async { - await tester.pumpWidget(const MyApp()); - await tester.pumpAndSettle(); - - await tester.approvalTest( - description: 'should display 0', - options: const Options(deleteReceivedFile: false), - ); - - await tester.tap(find.byType(FloatingActionButton)); - await tester.tap(find.byType(FloatingActionButton)); - await tester.tap(find.byType(FloatingActionButton)); - await tester.pumpAndSettle(); - - await tester.approvalTest( - description: 'should display 1', - options: const Options(deleteReceivedFile: false), - ); - }); - }); -} diff --git a/examples/flutter_example/test/widget_test.smoke_test.should_display_0.approved.txt b/examples/flutter_example/test/widget_test.smoke_test.should_display_0.approved.txt deleted file mode 100644 index 7fc68ac..0000000 --- a/examples/flutter_example/test/widget_test.smoke_test.should_display_0.approved.txt +++ /dev/null @@ -1,7 +0,0 @@ -# This file was generated by approval_tests. Please do not edit. - -MyApp: {count: 1} -MyHomePage: {count: 1} -Text: {data: 'You have pushed the button this many times:', count: 1} -Text: {key: 'Counter', data: '0', count: 1} -Text: {data: 'Approved Example', count: 1} \ No newline at end of file diff --git a/examples/flutter_example/test/widget_test.smoke_test.should_display_1.approved.txt b/examples/flutter_example/test/widget_test.smoke_test.should_display_1.approved.txt deleted file mode 100644 index 7e3ec86..0000000 --- a/examples/flutter_example/test/widget_test.smoke_test.should_display_1.approved.txt +++ /dev/null @@ -1,4 +0,0 @@ -# This file was generated by approval_tests. Please do not edit. - -Text: {key: 'Counter', data: '3', count: 1} -Text: {key: 'Counter', data: '0', count: 0} \ No newline at end of file From ed520875c429fbd781fede92d014c91f9dba7d09 Mon Sep 17 00:00:00 2001 From: github actions Date: Wed, 19 Feb 2025 01:50:03 +0500 Subject: [PATCH 3/4] . e change test_api v --- CHANGELOG.md | 2 +- README.md | 2 +- pubspec.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01a143e..febaac9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.1.4 +## 1.1.5 - Upgraded all dependencies to actuals. ## 1.1.3 diff --git a/README.md b/README.md index 6699061..0866c3f 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Add the following to your `pubspec.yaml` file: ```yaml dependencies: - approval_tests: ^1.1.0 + approval_tests: ^1.1.5 ``` ## 👀 Getting Started diff --git a/pubspec.yaml b/pubspec.yaml index 7e59b01..025b540 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ # * 0.0.4 for a minor release. name: approval_tests description: Approval Tests implementation in Dart. Inspired by ApprovalTests. -version: 1.1.4 +version: 1.1.5 repository: https://github.com/approvals/ApprovalTests.Dart homepage: https://github.com/approvals/ApprovalTests.Dart.git issue_tracker: https://github.com/approvals/ApprovalTests.Dart/issues @@ -22,7 +22,7 @@ dependencies: test: ^1.25.15 talker: ^4.6.11 diff_match_patch2: ^0.5.0 - test_api: ^0.7.4 + test_api: ^0.7.3 dev_dependencies: sizzle_lints: ^2.1.4 From 934b935bae7ac483b24a1113ef1efa2d4c5258a9 Mon Sep 17 00:00:00 2001 From: github actions Date: Wed, 19 Feb 2025 02:06:22 +0500 Subject: [PATCH 4/4] . e v1.1.6 --- CHANGELOG.md | 2 +- README.md | 2 +- pubspec.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index febaac9..c8f20be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 1.1.5 +## 1.1.6 - Upgraded all dependencies to actuals. ## 1.1.3 diff --git a/README.md b/README.md index 0866c3f..af54c85 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Add the following to your `pubspec.yaml` file: ```yaml dependencies: - approval_tests: ^1.1.5 + approval_tests: ^1.1.6 ``` ## 👀 Getting Started diff --git a/pubspec.yaml b/pubspec.yaml index 025b540..18d9322 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ # * 0.0.4 for a minor release. name: approval_tests description: Approval Tests implementation in Dart. Inspired by ApprovalTests. -version: 1.1.5 +version: 1.1.6 repository: https://github.com/approvals/ApprovalTests.Dart homepage: https://github.com/approvals/ApprovalTests.Dart.git issue_tracker: https://github.com/approvals/ApprovalTests.Dart/issues @@ -19,7 +19,7 @@ environment: sdk: ">=3.0.0 <4.0.0" dependencies: - test: ^1.25.15 + test: ^1.25.2 talker: ^4.6.11 diff_match_patch2: ^0.5.0 test_api: ^0.7.3