diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 962e9ae7..14f63455 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -38,6 +38,7 @@ jobs: - name: Run Unit Tests run: | cp lib/dummy_dsn.dart lib/dsn.dart + python3 find_dart_files.py flutter pub get flutter analyze flutter test --coverage diff --git a/.gitignore b/.gitignore index 2f258989..a9ecf32f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ coverage/* +# This file is auto-generated as part of the CI process +test/test_touch_files.dart + # Sentry API key lib/dsn.dart diff --git a/find_dart_files.py b/find_dart_files.py new file mode 100644 index 00000000..338ed89d --- /dev/null +++ b/find_dart_files.py @@ -0,0 +1,35 @@ +""" +This script recursively finds any '.dart' files in the ./lib directory, +and generates a 'test' file which includes all these files. + +This is to ensure that *all* .dart files are included in test coverage. +By default, source files which are not touched by the unit tests are not included! + +Ref: https://github.com/flutter/flutter/issues/27997#issue-410722816 +""" + +from pathlib import Path + +if __name__ == '__main__': + + dart_files = Path('lib').rglob('*.dart') + + with open("test/test_touch_files.dart", "w") as f: + + f.write("// ignore_for_file: unused_import\n\n") + + for path in dart_files: + path = str(path) + # Remove leading 'lib\' text + path = path[4:] + path = path.replace('\\', '/') + f.write(f'import "package:inventree/{path}";\n') + + f.write("\n\n") + + f.write("// DO NOT EDIT THIS FILE - it has been auto-generated by 'find_dart_files.py'\n") + f.write("// It has been created to ensure that *all* source file are included in coverage data\n") + f.write("// Reference: https://github.com/flutter/flutter/issues/27997#issue-410722816\n\n") + + f.write("// Do not actually test anything!") + f.write("void main() {}\n")