From 6b0fd2a7083f63e78f4cdca16219a2fdb1918e14 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 21 May 2022 20:03:48 +1000 Subject: [PATCH] Add script to find and test all un-touched .dart files --- .github/workflows/ci.yaml | 1 + .gitignore | 3 +++ find_dart_files.py | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 find_dart_files.py 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")