Skip to content

Commit

Permalink
feature: test builder
Browse files Browse the repository at this point in the history
  • Loading branch information
efraespada committed Oct 5, 2024
1 parent dbfd0be commit 0313331
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// AUTOGENERATED FILE.
///
/// Use this file for testing the widget FabWidgetPreview
/// Use this file to test the widget FabWidgetPreview
///
import 'package:catalog/catalog.dart';
Expand Down
72 changes: 72 additions & 0 deletions lib/src/bin/preview_builder/preview_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,78 @@ $clazz build$clazz(Dummy dummy) {
await file.writeAsString(content);
}

Future<void> generateTest(
String srcPath,
String className,
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/test/';

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

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

if (await file.exists()) {
print(
'🧪 👌 Test file already exist for $clazz - ${clazz}Test ($testFile)');
return;
}

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}Test {
void main() {
group(
'$clazz - 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);
}

String dummyWidgetBuilder(String clazz) {
return '''
PreviewBoundary(
Expand Down
4 changes: 3 additions & 1 deletion lib/src/bin/tasks/main_task.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import 'base/base_task.dart';
import 'tasks/catalog_task.dart';
import 'tasks/format_task.dart';
import 'tasks/preview_task.dart';
import 'tasks/test_task.dart';

class MainTask extends BaseTask {
final tasks = [
PreviewTask(),
TestTask(),
CatalogTask(),
FormatTask(),
];
Expand All @@ -20,6 +22,6 @@ class MainTask extends BaseTask {
print(e);
}
}
print('\n Previews and catalog generated \n');
print('\n Previews, tests and catalog generated \n');
}
}
4 changes: 3 additions & 1 deletion lib/src/bin/tasks/preview_task.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import 'base/base_task.dart';
import 'tasks/format_task.dart';
import 'tasks/preview_task.dart' as preview;
import 'tasks/test_task.dart';

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

Expand All @@ -18,6 +20,6 @@ class PreviewTask extends BaseTask {
print(e);
}
}
print('\n Previews generated \n');
print('\n Previews and tests generated \n');
}
}
58 changes: 58 additions & 0 deletions lib/src/bin/tasks/tasks/test_task.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import 'dart:io';

import '../../preview_builder/preview_builder.dart';
import '../../utils/configuration.dart';
import '../base/base_task.dart';

class TestTask extends BaseTask {
@override
Future<void> work(List<String> args) async {
final base = args.isEmpty ? '' : '${args.first}/';

var config = loadConfigFile(base);

final prefixValue = config['prefix'] ?? 'preview';

final dir = Directory('./$base${config['base']}');
await dir.create(recursive: true);

final dirOutPut = Directory('./$base${config['base']}/${config['output']}');
await dirOutPut.create(recursive: true);

final List<FileSystemEntity> entities =
await dir.list(recursive: true).toList();

final files = <FileSystemEntity>[];

for (FileSystemEntity fileSystemEntity in entities) {
try {
if (fileSystemEntity is Directory) continue;
if (fileSystemEntity.path.endsWith('.DS_Store')) continue;
final File file = File(fileSystemEntity.path);
if (file.path.contains('.$prefixValue.')) continue;
final content = await file.readAsString();
if (content.contains('@Preview(')) {
files.add(fileSystemEntity);
}
} catch (e) {
print(e);
}
}

for (FileSystemEntity fileSystemEntity in files) {
final File file = File(fileSystemEntity.path);
var preview = await previewOnFile(base, config, file.path);
var previewAnnotation = await findPreviewAnnotation(file.path);
if (previewAnnotation == null) continue;
var className = await findClassName(file.path);
if (className == null) continue;
if (preview == null) continue;

await generateTest(
file.path,
className,
prefixValue,
);
}
}
}

0 comments on commit 0313331

Please sign in to comment.