Skip to content

Commit

Permalink
feature: adding instrumented test
Browse files Browse the repository at this point in the history
  • Loading branch information
efraespada committed Oct 5, 2024
1 parent 0313331 commit fdde738
Show file tree
Hide file tree
Showing 20 changed files with 335 additions and 2,196 deletions.
16 changes: 8 additions & 8 deletions example/assets/preview_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
"id": "widgets",
"route": "widgets",
"builtComponents": {
"./lib/catalog/widgets/main_screen.dart": {
"path": "./lib/catalog/widgets/main_screen.dart",
"./example/lib/catalog/widgets/main_screen.dart": {
"path": "./example/lib/catalog/widgets/main_screen.dart",
"route": "widgets",
"package": "package:example/catalog/widgets/main_screen.dart",
"clazzName": "MainScreenPreviewPreviewPageDummy",
Expand All @@ -35,8 +35,8 @@
"id": "bottom",
"route": "widgets/utils/bottom",
"builtComponents": {
"./lib/catalog/widgets/utils/bottom/fab_widget.dart": {
"path": "./lib/catalog/widgets/utils/bottom/fab_widget.dart",
"./example/lib/catalog/widgets/utils/bottom/fab_widget.dart": {
"path": "./example/lib/catalog/widgets/utils/bottom/fab_widget.dart",
"route": "widgets/utils/bottom",
"package": "package:example/catalog/widgets/utils/bottom/fab_widget.dart",
"clazzName": "FabWidgetPreviewPreviewPageDummy",
Expand All @@ -58,8 +58,8 @@
"id": "screen",
"route": "widgets/screen",
"builtComponents": {
"./lib/catalog/widgets/screen/body_widget.dart": {
"path": "./lib/catalog/widgets/screen/body_widget.dart",
"./example/lib/catalog/widgets/screen/body_widget.dart": {
"path": "./example/lib/catalog/widgets/screen/body_widget.dart",
"route": "widgets/screen",
"package": "package:example/catalog/widgets/screen/body_widget.dart",
"clazzName": "BodyWidgetPreviewPreviewPageDummy",
Expand All @@ -73,8 +73,8 @@
]
}
},
"./lib/catalog/widgets/screen/counter_widget.dart": {
"path": "./lib/catalog/widgets/screen/counter_widget.dart",
"./example/lib/catalog/widgets/screen/counter_widget.dart": {
"path": "./example/lib/catalog/widgets/screen/counter_widget.dart",
"route": "widgets/screen",
"package": "package:example/catalog/widgets/screen/counter_widget.dart",
"clazzName": "CounterWidgetPreviewPreviewPageDummy",
Expand Down
40 changes: 0 additions & 40 deletions example/lib/widgets/utils/bottom/catalog/test/fab_widget.test.dart

This file was deleted.

15 changes: 13 additions & 2 deletions example/test/catalog_widget_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
import 'package:example/widgets/utils/bottom/catalog/test/fab_widget.test.dart';
/// AUTOGENERATED FILE. DO NOT EDIT
import 'package:example/widgets/utils/bottom/catalog/test/fab_widget_test.dart'
as aaad;
import 'package:example/widgets/screen/catalog/test/body_widget.test.dart'
as gsno;
import 'package:example/widgets/screen/catalog/test/counter_widget.test.dart'
as jnqe;
import 'package:example/widgets/catalog/test/main_screen.test.dart' as pxto;

void main() {
FabWidgetTest().main();
aaad.FabWidgetTest().main();
gsno.BodyWidgetTest().main();
jnqe.CounterWidgetTest().main();
pxto.MainScreenTest().main();
}
16 changes: 8 additions & 8 deletions lib/catalog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ import 'src/builders/preview/preview_boundary.dart';
import 'src/builders/preview/preview_render_widget.dart';

export 'package:catalog/src/annotations/preview.dart';
export 'package:catalog/src/builders/catalog/component_node.dart';
export 'package:catalog/src/builders/catalog/preview_scaffold.dart';
export 'package:catalog/src/builders/catalog/tree_elements_builder.dart';
export 'package:catalog/src/builders/device/device.dart';
export 'package:catalog/src/builders/dummy/dummy.dart';
export 'package:catalog/src/builders/dummy/dummy_text.dart';
export 'package:catalog/src/builders/dummy/preview_dummy.dart';
export 'package:catalog/src/builders/preview/parent_preview_widget.dart';
export 'package:catalog/src/builders/preview/preview_boundary.dart';
export 'package:catalog/src/builders/dummy/preview_dummy.dart';
export 'package:catalog/src/builders/catalog/preview_scaffold.dart';
export 'package:catalog/src/builders/catalog/tree_elements_builder.dart';
export 'package:catalog/src/builders/screenshots/background.dart';
export 'package:catalog/src/builders/screenshots/op/screenshot_process.dart';
export 'package:catalog/src/builders/screenshots/screenshot.dart';
Expand All @@ -28,15 +29,14 @@ export 'package:catalog/src/builders/screenshots/types/apple/i_pad_pro_3gen.dart
export 'package:catalog/src/builders/screenshots/types/apple/i_phone_55.dart';
export 'package:catalog/src/builders/screenshots/types/apple/i_phone_65.dart';
export 'package:catalog/src/builders/screenshots/types/apple/macos.dart';
export 'package:catalog/src/extensions/widget_test_ext.dart';
export 'package:catalog/src/catalog_runner.dart';
export 'package:catalog/src/builders/catalog/component_node.dart';
export 'package:catalog/src/utils/constants.dart';
export 'package:catalog/src/embed/flutter_fanacy_tree_view/flutter_fancy_tree_view.dart';
export 'package:catalog/src/extensions/locale_ext.dart';
export 'package:catalog/src/extensions/widget_test_ext.dart';
export 'package:catalog/src/utils/constants.dart';
export 'package:device_frame/device_frame.dart';
export 'package:go_router/go_router.dart';
export 'package:flutter_test/flutter_test.dart';
export 'package:integration_test/integration_test.dart';
export 'package:go_router/go_router.dart';

class Catalog {
static Catalog? _instance;
Expand Down
175 changes: 172 additions & 3 deletions lib/src/bin/preview_builder/preview_builder.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import 'dart:io';
import 'dart:math';

import 'package:catalog/src/annotations/internal_preview.dart';
import 'package:catalog/src/bin/utils/test_builder_info.dart';

Future<String?> findClassName(String path) async {
try {
Expand Down Expand Up @@ -160,9 +162,11 @@ $clazz build$clazz(Dummy dummy) {
await file.writeAsString(content);
}

Future<void> generateTest(
Future<TestBuilderInfo> generateTest(
dynamic config,
String srcPath,
String className,
String classImport,
String prefix,
) async {
var clazz = className.replaceAll('()', '');
Expand All @@ -174,13 +178,23 @@ Future<void> generateTest(

await Directory(testPath).create(recursive: true);

String testFile = '$testPath$name.test.dart';
String testFile = '$testPath${name}_test.dart';
File file = File(testFile);

var importParts = classImport.split('/');
importParts.removeAt(importParts.length - 1);
importParts.add(config['output']);
importParts.add('test');
importParts.add('${name}_test.dart');

if (await file.exists()) {
print(
'🧪 👌 Test file already exist for $clazz - ${clazz}Test ($testFile)');
return;
return TestBuilderInfo(
alias: buildTestAlias(4),
clazzName: '${clazz}Test',
import: importParts.join('/'),
);
}

print('🧪 Generating test for $clazz - ${clazz}Test ($testFile)');
Expand Down Expand Up @@ -230,6 +244,161 @@ class ${clazz}Test {
''';

await file.writeAsString(content);

return TestBuilderInfo(
alias: buildTestAlias(4),
clazzName: '${clazz}Test',
import: importParts.join('/'),
);
}

Future<TestBuilderInfo> generateInstrumentedTest(
dynamic config,
String srcPath,
String className,
String classImport,
String prefix,
) async {
var clazz = className.replaceAll('()', '');

String fileName = srcPath.split('/').last;
String name = fileName.split('.').first;
String dirPath = srcPath.replaceAll(fileName, '');
String testPath = '${dirPath}catalog/instrumented_test/';

await Directory(testPath).create(recursive: true);

String testFile = '$testPath${name}_instrumented_test.dart';
File file = File(testFile);

var importParts = classImport.split('/');
importParts.removeAt(importParts.length - 1);
importParts.add(config['output']);
importParts.add('instrumented_test');
importParts.add('${name}_instrumented_test.dart');

if (await file.exists()) {
print(
'🧪 👌 Test file already exist for $clazz - ${clazz}InstrumentedTest ($testFile)');
return TestBuilderInfo(
alias: buildTestAlias(4),
clazzName: '${clazz}InstrumentedTest',
import: importParts.join('/'),
);
}

print('🧪 Generating test for $clazz - ${clazz}Test ($testFile)');

var content = '''
/// AUTOGENERATED FILE.
///
/// Use this file to test the widget $clazz
///
import 'package:catalog/catalog.dart';
import '../dummy/$name.dummy.dart';
import '../preview/$name.$prefix.dart';
class ${clazz}InstrumentedTestTest {
void main() {
group(
'$clazz - InstrumentedTest Tests',
() {
testWidgets(
'Lorem text not found',
(tester) async {
final dummy = ${clazz}Dummy().dummies.first;
final widget = build$clazz(dummy);
await tester.test(widget);
expect(find.text('lorem ipsu'), findsNothing);
},
);
testWidgets(
'Other lorem text not found',
(tester) async {
final dummy = ${clazz}Dummy().dummies.first;
final widget = build$clazz(dummy);
await tester.test(widget);
expect(find.text('ipsu lorem'), findsNothing);
},
);
},
);
}
}
''';

await file.writeAsString(content);

return TestBuilderInfo(
alias: buildTestAlias(4),
clazzName: '${clazz}InstrumentedTest',
import: importParts.join('/'),
);
}

Future<void> generateMainTest(
String basePath,
List<TestBuilderInfo> tests,
) async {
File file = File('./${basePath}test/catalog_widget_test.dart');

print('🧪 Updating catalog test collector (${file.path})');

var content = '''
/// AUTOGENERATED FILE. DO NOT EDIT
${tests.map((t) {
return 'import \'${t.import}\' as ${t.alias};';
}).join('\n')}
void main() {
${tests.map((t) {
return '${t.alias}.${t.clazzName}().main();';
}).join('\n')}
}
''';

await file.writeAsString(content);
}

Future<void> generateMainInstrumentedTest(
String basePath,
List<TestBuilderInfo> tests,
) async {
File file = File('./${basePath}instrumented_test/catalog_widget_instrumented_test.dart');

print('🧪 Updating catalog instrumented test collector (${file.path})');

var content = '''
/// AUTOGENERATED FILE. DO NOT EDIT
${tests.map((t) {
return 'import \'${t.import}\' as ${t.alias};';
}).join('\n')}
void main() {
${tests.map((t) {
return '${t.alias}.${t.clazzName}().main();';
}).join('\n')}
}
''';

await file.writeAsString(content);
}

String buildTestAlias(int size) {
const chars = 'abcdefghijklmnopqrstuvwxyz';
Random random = Random();
return String.fromCharCodes(Iterable.generate(
size, (_) => chars.codeUnitAt(random.nextInt(chars.length))));
}

String dummyWidgetBuilder(String clazz) {
Expand Down
2 changes: 2 additions & 0 deletions lib/src/bin/tasks/main_task.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import 'base/base_task.dart';
import 'tasks/catalog_task.dart';
import 'tasks/format_task.dart';
import 'tasks/instrumented_test_task.dart';
import 'tasks/preview_task.dart';
import 'tasks/test_task.dart';

class MainTask extends BaseTask {
final tasks = [
PreviewTask(),
TestTask(),
InstrumentedTestTask(),
CatalogTask(),
FormatTask(),
];
Expand Down
2 changes: 2 additions & 0 deletions lib/src/bin/tasks/preview_task.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import 'base/base_task.dart';
import 'tasks/format_task.dart';
import 'tasks/instrumented_test_task.dart';
import 'tasks/preview_task.dart' as preview;
import 'tasks/test_task.dart';

class PreviewTask extends BaseTask {
final tasks = [
preview.PreviewTask(),
TestTask(),
InstrumentedTestTask(),
FormatTask(),
];

Expand Down
Loading

0 comments on commit fdde738

Please sign in to comment.