import 'package:test/test.dart'; import '../../lib/src/utils/class_generator_utils.dart'; void main() { group('Interface Implementation Generation', () { test('generates required BaseChain implementations', () { final bases = ['BaseChain']; final classContract = { 'name': 'SimpleChain', 'docstring': 'A simple implementation of a chain.', 'methods': [ { 'name': 'run', 'return_type': 'dict', 'arguments': [ { 'name': 'inputs', 'type': 'dict', 'is_optional': false, } ], 'docstring': 'Execute the chain logic.', } ], }; final code = ClassGeneratorUtils.generateRequiredImplementations( bases, classContract); // Should include memory property expect(code, contains('late Map? _memory;')); expect(code, contains('Map? get memory => _memory;')); // Should include verbose property expect(code, contains('late bool _verbose;')); expect(code, contains('bool get verbose => _verbose;')); // Should include constructor with required properties expect(code, contains('SimpleChain({')); expect(code, contains('Map? memory,')); expect(code, contains('bool? verbose,')); expect(code, contains('_memory = memory ?? {};')); expect(code, contains('_verbose = verbose ?? false;')); // Should include required method implementations expect(code, contains('@override')); expect(code, contains('void setMemory(Map memory)')); }); test('handles multiple interface implementations', () { final bases = ['BaseChain', 'Serializable']; final classContract = { 'name': 'SimpleChain', 'docstring': 'A simple implementation of a chain.', 'methods': [], }; final code = ClassGeneratorUtils.generateRequiredImplementations( bases, classContract); // Should include BaseChain implementations expect(code, contains('Map? get memory')); expect(code, contains('bool get verbose')); // Should include constructor with all required properties expect(code, contains('SimpleChain({')); expect(code, contains('Map? memory,')); expect(code, contains('bool? verbose,')); }); test('handles no interface implementations', () { final bases = []; final classContract = { 'name': 'SimpleClass', 'docstring': 'A simple class.', 'methods': [], }; final code = ClassGeneratorUtils.generateRequiredImplementations( bases, classContract); expect(code, isEmpty); }); }); }