import 'package:test/test.dart'; import '../tool/src/check_files.dart'; void main() { test("our own Dart files are formatted: the apps', the shared packages', the " "tools'", () { for (final path in [ 'apps/learn/halkyon_learn_flutter/lib/main.dart', 'apps/learn/halkyon_learn_server/lib/server.dart', 'apps/learn/halkyon_learn_server/test/integration/auth/account_test.dart', 'apps/todo/halkyon_todo_flutter/lib/main.dart', 'packages/halkyon_app/lib/halkyon_app.dart', 'packages/halkyon_base_server/lib/src/auth/email.dart', // SRP's client half, written by hand beside the module's generated // client, and its tests. 'packages/halkyon_base_client/lib/srp.dart', 'packages/halkyon_base_client/lib/src/srp/srp_client.dart', 'packages/halkyon_base_client/test/srp_client_test.dart', 'packages/halkyon_keys/lib/src/account_keys.dart', 'tool/check.dart', ]) { expect(isOwnDartFile(path), isTrue, reason: path); } }); test('what a generator writes is left as it wrote it', () { for (final path in [ // The client packages, Serverpod's from top to bottom, but for the // module's SRP. 'apps/learn/halkyon_learn_client/lib/src/protocol/client.dart', 'apps/todo/halkyon_todo_client/lib/halkyon_todo_client.dart', 'packages/halkyon_base_client/lib/src/protocol/protocol.dart', 'packages/halkyon_base_client/lib/halkyon_base_client.dart', // A server's generated sources and test tools. 'apps/learn/halkyon_learn_server/lib/src/generated/protocol.dart', 'packages/halkyon_base_server/lib/src/generated/endpoints.dart', 'apps/learn/halkyon_learn_server/test/integration/test_tools/serverpod_test_tools.dart', // gen-l10n's localizations, the app's and the shared packages'. 'apps/learn/halkyon_learn_flutter/lib/l10n/app_localizations.dart', 'apps/learn/halkyon_learn_flutter/lib/l10n/app_localizations_de.dart', 'packages/halkyon_ui/lib/l10n/halkyon_ui_localizations_en.dart', 'packages/halkyon_app/lib/l10n/halkyon_app_localizations.dart', ]) { expect(isOwnDartFile(path), isFalse, reason: path); } }); test('the files of other languages are no Dart files', () { expect(isOwnDartFile('apps/learn/tool/app_icons.py'), isFalse); expect( isOwnDartFile('packages/halkyon_app/lib/l10n/halkyon_app_en.arb'), isFalse, ); }); group('what changed since a commit', () { const packages = { 'halkyon_app': 'packages/halkyon_app', 'halkyon_ui': 'packages/halkyon_ui', 'halkyon_ui_example': 'packages/halkyon_ui/example', 'halkyon_learn_flutter': 'apps/learn/halkyon_learn_flutter', }; test('touches the packages its files are in, the innermost one', () { expect( packagesTouched([ 'packages/halkyon_app/lib/src/app/app_frame.dart', 'packages/halkyon_app/test/app/instance_gate_test.dart', 'packages/halkyon_ui/example/lib/main.dart', ], packages), ['halkyon_app', 'halkyon_ui_example'], ); }); test("files of no package (docs, tools, deploy) touch none: the tools' " 'own tests run anyway', () { expect( packagesTouched([ 'docs/adr/0015-one-repository.md', 'tool/check.dart', 'deploy/compose.yaml', ], packages), isEmpty, ); }); test("the root's pubspec, lock or lint rules touch every package", () { for (final path in [ 'pubspec.yaml', 'pubspec.lock', 'analysis_options.yaml', ]) { expect(packagesTouched([path], packages), isNull, reason: path); } }); }); test("Melos' filters take every package, or those touched and what " 'depends on them', () { expect(melosFilters(), isEmpty); expect(melosFilters(touched: ['halkyon_app', 'halkyon_ui']), [ '--scope=halkyon_app', '--scope=halkyon_ui', '--include-dependents', ]); }); }