generateAndSave method

Future<List<String>> generateAndSave({
  1. required String screenName,
  2. required Map<String, dynamic> widgetTree,
  3. required List<InteractionResult> interactionResults,
  4. required List<WidgetIssue> issues,
})

Implementation

Future<List<String>> generateAndSave({
  required String screenName,
  required Map<String, dynamic> widgetTree,
  required List<InteractionResult> interactionResults,
  required List<WidgetIssue> issues,
}) async {
  print('\nšŸ“ Generating Flutter test scripts for $screenName...');

  // Auto-analyse the project if not done yet
  _analysis ??= await AppAnalyser(projectPath: projectPath).analyse();
  final analysis = _analysis!;

  final sourceInfo = _readScreenSource(screenName, issues);
  print('  šŸ“‚ Screen files: ${(sourceInfo['files'] as List).join(', ')}');
  print('  šŸ”‘ Keys found: ${(sourceInfo['keys'] as List).length}');
  print(
      '  šŸ‘† Tappable widgets: ${(sourceInfo['tappable_lines'] as List).length}');

  final outputDir = Directory('$projectPath/integration_test/dangi_doctor');
  if (!outputDir.existsSync()) outputDir.createSync(recursive: true);

  // Generate shared test helper (once per project)
  _generateTestHelper(outputDir.path, analysis);

  final screenSnake = _toSnakeCase(screenName);
  final savedFiles = <String>[];

  print('  āœļø  Smoke test...');
  final smokeFile = '${outputDir.path}/${screenSnake}_smoke_test.dart';
  File(smokeFile).writeAsStringSync(
      _generateSmokeTest(screenName, sourceInfo, analysis));
  savedFiles.add(smokeFile);
  print('  āœ… ${smokeFile.split('/').last}');

  print('  āœļø  Interaction test...');
  final intFile = '${outputDir.path}/${screenSnake}_interaction_test.dart';
  File(intFile).writeAsStringSync(_generateInteractionTest(
      screenName, sourceInfo, interactionResults, analysis));
  savedFiles.add(intFile);
  print('  āœ… ${intFile.split('/').last}');

  print('  āœļø  Performance test...');
  final perfFile = '${outputDir.path}/${screenSnake}_perf_test.dart';
  File(perfFile).writeAsStringSync(
      _generatePerfTest(screenName, interactionResults, analysis));
  savedFiles.add(perfFile);
  print('  āœ… ${perfFile.split('/').last}');

  _saveReadme(outputDir.path, analysis);
  print('\n  šŸ“ Saved to: integration_test/dangi_doctor/');
  print(
      '  Run: flutter test integration_test/dangi_doctor/ -d <device_id>\n');

  return savedFiles;
}