diff --git a/lib/src/commands/create/commands/app_ui_package.dart b/lib/src/commands/create/commands/app_ui_package.dart index 37f0fe7b3..ed0020d02 100644 --- a/lib/src/commands/create/commands/app_ui_package.dart +++ b/lib/src/commands/create/commands/app_ui_package.dart @@ -9,7 +9,6 @@ class CreateAppUiPackage extends CreateSubCommand with Publishable { CreateAppUiPackage({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); @override diff --git a/lib/src/commands/create/commands/create_subcommand.dart b/lib/src/commands/create/commands/create_subcommand.dart index 0944af8db..2e00ca665 100644 --- a/lib/src/commands/create/commands/create_subcommand.dart +++ b/lib/src/commands/create/commands/create_subcommand.dart @@ -12,8 +12,8 @@ import 'package:very_good_cli/src/commands/create/templates/templates.dart'; // A valid Dart identifier that can be used for a package, i.e. no // capital letters. // https://dart.dev/guides/language/language-tour#important-concepts -final RegExp _identifierRegExp = RegExp('[a-z_][a-z0-9_]*'); -final RegExp _orgNameRegExp = RegExp(r'^[a-zA-Z][\w-]*(\.[a-zA-Z][\w-]*)+$'); +final _identifierRegExp = RegExp('[a-z_][a-z0-9_]*'); +final _orgNameRegExp = RegExp(r'^[a-zA-Z][\w-]*(\.[a-zA-Z][\w-]*)+$'); const _defaultOrgName = 'com.example.verygoodcore'; const _defaultDescription = 'A Very Good Project created by Very Good CLI.'; @@ -21,9 +21,6 @@ const _defaultDescription = 'A Very Good Project created by Very Good CLI.'; /// A method which returns a [Future] given a [MasonBundle]. typedef MasonGeneratorFromBundle = Future Function(MasonBundle); -/// A method which returns a [Future] given a [Brick]. -typedef MasonGeneratorFromBrick = Future Function(Brick); - /// {@template create_subcommand} /// Generic class for sub commands of [CreateCommand]. /// {@endtemplate} @@ -50,9 +47,7 @@ abstract class CreateSubCommand extends Command { CreateSubCommand({ required this.logger, @visibleForTesting required MasonGeneratorFromBundle? generatorFromBundle, - @visibleForTesting required MasonGeneratorFromBrick? generatorFromBrick, - }) : _generatorFromBundle = generatorFromBundle ?? MasonGenerator.fromBundle, - _generatorFromBrick = generatorFromBrick ?? MasonGenerator.fromBrick { + }) : _generatorFromBundle = generatorFromBundle ?? MasonGenerator.fromBundle { argParser ..addOption( 'output-directory', @@ -69,20 +64,20 @@ abstract class CreateSubCommand extends Command { // Add the templates arg if the command has multiple templates. if (this is MultiTemplates) { final multiTemplates = this as MultiTemplates; - final defaultTemplateName = multiTemplates.defaultTemplateName; final templates = multiTemplates.templates; + final defaultTemplateName = multiTemplates.defaultTemplateName; argParser.addOption( 'template', abbr: 't', help: 'The template used to generate this new project.', defaultsTo: defaultTemplateName, - allowed: templates.map((element) => element.name).toList(), + allowed: templates.map((template) => template.name).toList(), allowedHelp: templates.fold>( {}, - (previousValue, element) => { - ...previousValue, - element.name: element.help, + (previousTemplate, template) => { + ...previousTemplate, + template.name: template.help, }, ), ); @@ -109,7 +104,6 @@ abstract class CreateSubCommand extends Command { /// The logger user to notify the user of the command's progress. final Logger logger; final MasonGeneratorFromBundle _generatorFromBundle; - final MasonGeneratorFromBrick _generatorFromBrick; /// [ArgResults] which can be overridden for testing. @visibleForTesting @@ -185,31 +179,17 @@ abstract class CreateSubCommand extends Command { return match != null && match.end == name.length; } - Future _getGeneratorForTemplate() async { - try { - final brick = Brick.version( - name: template.bundle.name, - version: '^${template.bundle.version}', - ); - logger.detail( - '''Building generator from brick: ${brick.name} ${brick.location.version}''', - ); - return await _generatorFromBrick(brick); - } on Exception catch (error) { - logger.detail('Building generator from brick failed: $error'); - } - logger.detail( - '''Building generator from bundle ${template.bundle.name} ${template.bundle.version}''', - ); - return _generatorFromBundle(template.bundle); - } - @override Future run() async { final template = this.template; - final generator = await _getGeneratorForTemplate(); - final result = await runCreate(generator, template); + final bundle = template.bundle; + logger.detail( + 'Building generator from bundle ${bundle.name} ${bundle.version}', + ); + + final generator = await _generatorFromBundle(bundle); + final result = await runCreate(generator, template); return result; } @@ -325,7 +305,7 @@ mixin MultiTemplates on CreateSubCommand { final templateName = argResults['template'] as String? ?? defaultTemplateName; - return templates.firstWhere((element) => element.name == templateName); + return templates.firstWhere((template) => template.name == templateName); } } diff --git a/lib/src/commands/create/commands/dart_cli.dart b/lib/src/commands/create/commands/dart_cli.dart index 2628fd13d..8a44f6bb0 100644 --- a/lib/src/commands/create/commands/dart_cli.dart +++ b/lib/src/commands/create/commands/dart_cli.dart @@ -9,7 +9,6 @@ class CreateDartCLI extends CreateSubCommand with Publishable { CreateDartCLI({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }) { argParser.addOption( 'executable-name', diff --git a/lib/src/commands/create/commands/dart_package.dart b/lib/src/commands/create/commands/dart_package.dart index 49fa4b92e..05241e85d 100644 --- a/lib/src/commands/create/commands/dart_package.dart +++ b/lib/src/commands/create/commands/dart_package.dart @@ -9,7 +9,6 @@ class CreateDartPackage extends CreateSubCommand with Publishable { CreateDartPackage({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); @override diff --git a/lib/src/commands/create/commands/docs_site.dart b/lib/src/commands/create/commands/docs_site.dart index 098e98c14..9f05ad7ef 100644 --- a/lib/src/commands/create/commands/docs_site.dart +++ b/lib/src/commands/create/commands/docs_site.dart @@ -9,7 +9,6 @@ class CreateDocsSite extends CreateSubCommand { CreateDocsSite({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }) { argParser.addOption( 'org-name', diff --git a/lib/src/commands/create/commands/flame_game.dart b/lib/src/commands/create/commands/flame_game.dart index 14e462ac5..dfee2a92c 100644 --- a/lib/src/commands/create/commands/flame_game.dart +++ b/lib/src/commands/create/commands/flame_game.dart @@ -9,7 +9,6 @@ class CreateFlameGame extends CreateSubCommand with OrgName { CreateFlameGame({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }) { argParser.addMultiOption( 'platforms', diff --git a/lib/src/commands/create/commands/flutter_app.dart b/lib/src/commands/create/commands/flutter_app.dart index 04e44ed0e..d916b3f2e 100644 --- a/lib/src/commands/create/commands/flutter_app.dart +++ b/lib/src/commands/create/commands/flutter_app.dart @@ -9,7 +9,6 @@ class CreateFlutterApp extends CreateSubCommand with OrgName, MultiTemplates { CreateFlutterApp({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }) { argParser ..addOption( diff --git a/lib/src/commands/create/commands/flutter_package.dart b/lib/src/commands/create/commands/flutter_package.dart index 41ddd6a98..29248018b 100644 --- a/lib/src/commands/create/commands/flutter_package.dart +++ b/lib/src/commands/create/commands/flutter_package.dart @@ -9,7 +9,6 @@ class CreateFlutterPackage extends CreateSubCommand with Publishable { CreateFlutterPackage({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); @override diff --git a/lib/src/commands/create/commands/flutter_plugin.dart b/lib/src/commands/create/commands/flutter_plugin.dart index 2cb1c74a2..7dba38a00 100644 --- a/lib/src/commands/create/commands/flutter_plugin.dart +++ b/lib/src/commands/create/commands/flutter_plugin.dart @@ -9,7 +9,6 @@ class CreateFlutterPlugin extends CreateSubCommand with Publishable, OrgName { CreateFlutterPlugin({ required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }) { argParser.addMultiOption( 'platforms', diff --git a/lib/src/commands/create/create.dart b/lib/src/commands/create/create.dart index 394d63c29..c2ed8c6c2 100644 --- a/lib/src/commands/create/create.dart +++ b/lib/src/commands/create/create.dart @@ -14,14 +14,12 @@ class CreateCommand extends Command { CreateCommand({ required Logger logger, @visibleForTesting MasonGeneratorFromBundle? generatorFromBundle, - @visibleForTesting MasonGeneratorFromBrick? generatorFromBrick, }) { // very_good create app_ui_package addSubcommand( CreateAppUiPackage( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -30,7 +28,6 @@ class CreateCommand extends Command { CreateFlutterApp( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -39,7 +36,6 @@ class CreateCommand extends Command { CreateDartPackage( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -48,7 +44,6 @@ class CreateCommand extends Command { CreateDartCLI( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -57,7 +52,6 @@ class CreateCommand extends Command { CreateDocsSite( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -66,7 +60,6 @@ class CreateCommand extends Command { CreateFlutterPackage( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -75,7 +68,6 @@ class CreateCommand extends Command { CreateFlutterPlugin( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); @@ -84,7 +76,6 @@ class CreateCommand extends Command { CreateFlameGame( logger: logger, generatorFromBundle: generatorFromBundle, - generatorFromBrick: generatorFromBrick, ), ); } diff --git a/test/src/commands/create/commands/app_ui_package_test.dart b/test/src/commands/create/commands/app_ui_package_test.dart index 45816338e..9ba3dc779 100644 --- a/test/src/commands/create/commands/app_ui_package_test.dart +++ b/test/src/commands/create/commands/app_ui_package_test.dart @@ -66,7 +66,6 @@ void main() { final command = CreateAppUiPackage( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('app_ui_package')); expect( @@ -166,8 +165,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateAppUiPackage( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, diff --git a/test/src/commands/create/commands/dart_cli_test.dart b/test/src/commands/create/commands/dart_cli_test.dart index 1be0d559d..97db1dc73 100644 --- a/test/src/commands/create/commands/dart_cli_test.dart +++ b/test/src/commands/create/commands/dart_cli_test.dart @@ -67,7 +67,6 @@ void main() { final command = CreateDartCLI( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('dart_cli')); expect( @@ -168,8 +167,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateDartCLI( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, diff --git a/test/src/commands/create/commands/dart_package_test.dart b/test/src/commands/create/commands/dart_package_test.dart index eb64c8b6e..68aa00f60 100644 --- a/test/src/commands/create/commands/dart_package_test.dart +++ b/test/src/commands/create/commands/dart_package_test.dart @@ -66,7 +66,6 @@ void main() { final command = CreateDartPackage( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('dart_package')); expect(command.description, equals('Generate a Very Good Dart package.')); @@ -163,8 +162,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateDartPackage( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, diff --git a/test/src/commands/create/commands/docs_site_test.dart b/test/src/commands/create/commands/docs_site_test.dart index 52936ccdf..ce726f9e2 100644 --- a/test/src/commands/create/commands/docs_site_test.dart +++ b/test/src/commands/create/commands/docs_site_test.dart @@ -67,7 +67,6 @@ void main() { final command = CreateDocsSite( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('docs_site')); expect( @@ -167,8 +166,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateDocsSite( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, diff --git a/test/src/commands/create/commands/flame_game_test.dart b/test/src/commands/create/commands/flame_game_test.dart index 5cb87ae3e..918f483c4 100644 --- a/test/src/commands/create/commands/flame_game_test.dart +++ b/test/src/commands/create/commands/flame_game_test.dart @@ -82,7 +82,6 @@ void main() { final command = CreateFlameGame( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('flame_game')); expect(command.description, equals('Generate a Very Good Flame game.')); @@ -176,8 +175,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateFlameGame( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, diff --git a/test/src/commands/create/commands/flutter_app_test.dart b/test/src/commands/create/commands/flutter_app_test.dart index 34326ee25..170c5dc9d 100644 --- a/test/src/commands/create/commands/flutter_app_test.dart +++ b/test/src/commands/create/commands/flutter_app_test.dart @@ -85,7 +85,6 @@ void main() { final command = CreateFlutterApp( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('flutter_app')); expect( @@ -169,8 +168,7 @@ void main() { await testMultiTemplateCommand( multiTemplatesCommand: CreateFlutterApp( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ), logger: logger, hooks: hooks, @@ -207,8 +205,7 @@ void main() { await testMultiTemplateCommand( multiTemplatesCommand: CreateFlutterApp( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ), logger: logger, hooks: hooks, @@ -237,8 +234,7 @@ void main() { outputDirectoryOverride: tempDirectory, multiTemplatesCommand: CreateFlutterApp( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ), logger: logger, hooks: hooks, diff --git a/test/src/commands/create/commands/flutter_package_test.dart b/test/src/commands/create/commands/flutter_package_test.dart index b56d0e43f..7f748b798 100644 --- a/test/src/commands/create/commands/flutter_package_test.dart +++ b/test/src/commands/create/commands/flutter_package_test.dart @@ -66,7 +66,6 @@ void main() { final command = CreateFlutterPackage( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('flutter_package')); expect( @@ -166,8 +165,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateFlutterPackage( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, diff --git a/test/src/commands/create/commands/flutter_plugin_test.dart b/test/src/commands/create/commands/flutter_plugin_test.dart index 4839ba744..150e238a1 100644 --- a/test/src/commands/create/commands/flutter_plugin_test.dart +++ b/test/src/commands/create/commands/flutter_plugin_test.dart @@ -93,7 +93,6 @@ void main() { final command = CreateFlutterPlugin( logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, equals('flutter_plugin')); expect( @@ -194,8 +193,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateFlutterPlugin( logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( () => argResults['output-directory'] as String?, @@ -295,8 +293,7 @@ void main() { final argResults = _MockArgResults(); final command = CreateFlutterPlugin( logger: logger, - generatorFromBrick: (_) async => generator, - generatorFromBundle: (_) async => throw Exception('oops'), + generatorFromBundle: (_) async => generator, )..argResultOverrides = argResults; when( diff --git a/test/src/commands/create/create_subcommand_test.dart b/test/src/commands/create/create_subcommand_test.dart index 576e54db1..dbeb126e0 100644 --- a/test/src/commands/create/create_subcommand_test.dart +++ b/test/src/commands/create/create_subcommand_test.dart @@ -34,7 +34,6 @@ class _TestCreateSubCommand extends CreateSubCommand { required this.template, required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); @override @@ -53,7 +52,6 @@ class _TestCreateSubCommandWithOrgName extends _TestCreateSubCommand required super.template, required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); } @@ -63,7 +61,6 @@ class _TestCreateSubCommandWithPublishable extends _TestCreateSubCommand required super.template, required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); } @@ -73,7 +70,6 @@ class _TestCreateSubCommandMultiTemplate extends CreateSubCommand required this.templates, required super.logger, required super.generatorFromBundle, - required super.generatorFromBrick, }); @override @@ -153,7 +149,6 @@ Run "runner help" to see global options.'''; template: template, logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect(command.name, isNotNull); expect(command.description, isNotNull); @@ -229,8 +224,7 @@ Run "runner help" to see global options.'''; final command = _TestCreateSubCommand( template: template, logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ); runner = _TestCommandRunner(command: command); @@ -499,50 +493,14 @@ See https://dart.dev/tools/pub/pubspec#name for more information.'''), }); group('mason generator selection', () { - test('uses remote brick when possible', () async { + test('generates from the bundled template', () async { + MasonBundle? bundleUsed; final command = _TestCreateSubCommand( template: template, logger: logger, - generatorFromBundle: (_) async { - throw UnsupportedError('this test should not reach this point'); - }, - generatorFromBrick: (_) async => generator, - ); - - runner = _TestCommandRunner(command: command); - - final result = await runner.run([ - 'create_subcommand', - 'test_project', - ]); - - expect(result, equals(ExitCode.success.code)); - - verify( - () => generator.generate( - any( - that: isA().having( - (g) => g.dir.path, - 'dir', - 'test_project', - ), - ), - vars: { - 'project_name': 'test_project', - 'description': 'A Very Good Project created by Very Good CLI.', - }, - logger: logger, - ), - ).called(1); - }); - - test('uses bundled brick when remote brick is unavailable', () async { - final command = _TestCreateSubCommand( - template: template, - logger: logger, - generatorFromBundle: (_) async => generator, - generatorFromBrick: (_) async { - throw Exception('oh no, cannot retrieve remote brick 👀'); + generatorFromBundle: (b) async { + bundleUsed = b; + return generator; }, ); @@ -554,6 +512,7 @@ See https://dart.dev/tools/pub/pubspec#name for more information.'''), ]); expect(result, equals(ExitCode.success.code)); + expect(bundleUsed, same(bundle)); verify( () => generator.generate( @@ -649,7 +608,6 @@ Run "runner help" to see global options.'''; template: template, logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect( @@ -718,8 +676,7 @@ Run "runner help" to see global options.'''; final command = _TestCreateSubCommandWithOrgName( template: template, logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ); runner = _TestCommandRunner(command: command); @@ -972,7 +929,6 @@ Run "runner help" to see global options.'''; templates: templates, logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect( command.argParser.options['template'], @@ -1040,8 +996,7 @@ Run "runner help" to see global options.'''; final command = _TestCreateSubCommandMultiTemplate( templates: templates, logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ); runner = _TestCommandRunner(command: command); @@ -1130,7 +1085,6 @@ Run "runner help" to see global options.'''; template: template, logger: logger, generatorFromBundle: null, - generatorFromBrick: null, ); expect( @@ -1195,8 +1149,7 @@ Run "runner help" to see global options.'''; final command = _TestCreateSubCommandWithPublishable( template: template, logger: logger, - generatorFromBundle: (_) async => throw Exception('oops'), - generatorFromBrick: (_) async => generator, + generatorFromBundle: (_) async => generator, ); runner = _TestCommandRunner(command: command);