Skip to content

Commit 84393cc

Browse files
author
Jochum van der Ploeg
authored
feat(create): add flame_game template (#544)
1 parent 4007eb2 commit 84393cc

File tree

8 files changed

+2003
-3
lines changed

8 files changed

+2003
-3
lines changed

lib/src/commands/create/create.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ final _templates = [
2020
FlutterPluginTemplate(),
2121
VeryGoodDartCLITemplate(),
2222
VeryGoodDocsSiteTemplate(),
23+
VeryGoodFlameGameTemplate(),
2324
];
2425

2526
final _defaultTemplate = _templates.first;

lib/src/commands/create/templates/templates.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ export 'very_good_core/very_good_core.dart';
44
export 'very_good_dart_cli/very_good_dart_cli.dart';
55
export 'very_good_dart_package/very_good_dart_package.dart';
66
export 'very_good_docs_site/very_good_docs_site.dart';
7+
export 'very_good_flame_game/very_good_flame_game.dart';
78
export 'very_good_flutter_package/very_good_flutter_package.dart';
89
export 'very_good_flutter_plugin/very_good_flutter_plugin.dart';
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export 'very_good_flame_game_bundle.dart';
2+
export 'very_good_flame_game_template.dart';

lib/src/commands/create/templates/very_good_flame_game/very_good_flame_game_bundle.dart

Lines changed: 1906 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'dart:io';
2+
3+
import 'package:mason/mason.dart';
4+
import 'package:very_good_cli/src/commands/create/templates/templates.dart';
5+
import 'package:very_good_cli/src/logger_extension.dart';
6+
7+
/// {@template flame_game_template}
8+
/// A Flame Game template.
9+
/// {@endtemplate}
10+
class VeryGoodFlameGameTemplate extends Template {
11+
/// {@macro flame_game_template}
12+
VeryGoodFlameGameTemplate()
13+
: super(
14+
name: 'flame_game',
15+
bundle: veryGoodFlameGameBundle,
16+
help: 'Generate a Very Good Flame game.',
17+
);
18+
19+
@override
20+
Future<void> onGenerateComplete(Logger logger, Directory outputDir) async {
21+
await installDartPackages(logger, outputDir);
22+
await applyDartFixes(logger, outputDir);
23+
_logSummary(logger);
24+
}
25+
26+
void _logSummary(Logger logger) {
27+
logger
28+
..info('\n')
29+
..created('Created a Very Good Game powered by Flame! 🔥🦄')
30+
..info('\n');
31+
}
32+
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ dependencies:
1010
args: ^2.1.0
1111
glob: ^2.0.2
1212
lcov_parser: ^0.1.2
13-
mason: ">=0.1.0-dev.35 <0.1.0-dev.36"
13+
mason: ">=0.1.0-dev.36 <0.1.0-dev.37"
1414
mason_logger: ^0.2.2
1515
meta: ^1.3.0
1616
path: ^1.8.0

test/e2e_test.dart

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,54 @@ void main() {
242242
expect(buildResult.stderr, isEmpty);
243243
});
244244

245+
test('create -t flame_game', () async {
246+
final directory = Directory(path.join('.tmp', 'very_good_flame_game'));
247+
248+
final result = await commandRunner.run(
249+
['create', 'very_good_flame_game', '-t', 'flame_game', '-o', '.tmp'],
250+
);
251+
expect(result, equals(ExitCode.success.code));
252+
253+
final formatResult = await Process.run(
254+
'flutter',
255+
['format', '--set-exit-if-changed', '.'],
256+
workingDirectory: directory.path,
257+
runInShell: true,
258+
);
259+
expect(formatResult.exitCode, equals(ExitCode.success.code));
260+
expect(formatResult.stderr, isEmpty);
261+
262+
final analyzeResult = await Process.run(
263+
'flutter',
264+
['analyze', '.'],
265+
workingDirectory: directory.path,
266+
runInShell: true,
267+
);
268+
expect(analyzeResult.exitCode, equals(ExitCode.success.code));
269+
expect(analyzeResult.stderr, isEmpty);
270+
expect(analyzeResult.stdout, contains('No issues found!'));
271+
272+
final testResult = await Process.run(
273+
'flutter',
274+
['test', '--no-pub', '--coverage'],
275+
workingDirectory: directory.path,
276+
runInShell: true,
277+
);
278+
expect(testResult.exitCode, equals(ExitCode.success.code));
279+
expect(testResult.stderr, isEmpty);
280+
expect(testResult.stdout, contains('All tests passed!'));
281+
282+
final testCoverageResult = await Process.run(
283+
'genhtml',
284+
['coverage/lcov.info', '-o', 'coverage'],
285+
workingDirectory: directory.path,
286+
runInShell: true,
287+
);
288+
expect(testCoverageResult.exitCode, equals(ExitCode.success.code));
289+
expect(testCoverageResult.stderr, isEmpty);
290+
expect(testCoverageResult.stdout, contains('lines......: 97.8%'));
291+
});
292+
245293
test('create -t core', () async {
246294
final directory = Directory(path.join('.tmp', 'very_good_core'));
247295

@@ -290,6 +338,6 @@ void main() {
290338
expect(testCoverageResult.stdout, contains('lines......: 100.0%'));
291339
});
292340
},
293-
timeout: const Timeout(Duration(seconds: 90)),
341+
timeout: const Timeout(Duration(minutes: 2)),
294342
);
295343
}

test/src/commands/create/create_test.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,14 @@ const expectedUsage = [
2626
''' (defaults to "A Very Good Project created by Very Good CLI.")\n'''
2727
''' --executable-name Used by the dart_cli template, the CLI executable name (defaults to the project name)\n'''
2828
' --org-name The organization for this new project.\n'
29-
' (defaults to "com.example.verygoodcore")\n'
29+
''' (defaults to "com.example.verygoodcore")\n'''
3030
'''-t, --template The template used to generate this new project.\n'''
3131
'\n'
3232
''' [core] (default) Generate a Very Good Flutter application.\n'''
3333
''' [dart_cli] Generate a Very Good Dart CLI application.\n'''
3434
' [dart_pkg] Generate a reusable Dart package.\n'
3535
' [docs_site] Generate a Very Good documentation site.\n'
36+
' [flame_game] Generate a Very Good Flame game.\n'
3637
' [flutter_pkg] Generate a reusable Flutter package.\n'
3738
' [flutter_plugin] Generate a reusable Flutter plugin.\n'
3839
'\n'
@@ -803,6 +804,15 @@ void main() {
803804
expectedLogSummary: 'Created a Very Good documentation site! 🦄',
804805
);
805806
});
807+
808+
test('flame game template', () async {
809+
await expectValidTemplateName(
810+
templateName: 'flame_game',
811+
expectedBundle: veryGoodFlameGameBundle,
812+
expectedLogSummary:
813+
'Created a Very Good Game powered by Flame! 🔥🦄',
814+
);
815+
});
806816
});
807817
});
808818
});

0 commit comments

Comments
 (0)