diff --git a/test_multiple_singletons.dart b/test_multiple_singletons.dart new file mode 100644 index 0000000..f5d1e92 --- /dev/null +++ b/test_multiple_singletons.dart @@ -0,0 +1,56 @@ +import 'package:extensions/dependency_injection.dart'; + +abstract class IService { + String getName(); +} + +class ServiceA implements IService { + @override + String getName() => 'ServiceA'; +} + +class ServiceB implements IService { + @override + String getName() => 'ServiceB'; +} + +class ServiceC implements IService { + @override + String getName() => 'ServiceC'; +} + +void main() { + print('Testing multiple addSingleton calls...\n'); + + // Create a service collection and register multiple services of the same type + final services = ServiceCollection() + ..addSingleton((_) => ServiceA()) + ..addSingleton((_) => ServiceB()) + ..addSingleton((_) => ServiceC()); + + // Build the service provider + final provider = services.buildServiceProvider(); + + // Test 1: Get single service (should return the last registered) + final singleService = provider.getService(); + print('Single service via getService(): ${singleService?.getName()}'); + + // Test 2: Get all services + final allServices = provider.getServices(); + print('\nAll services via getServices():'); + for (var service in allServices) { + print(' - ${service.getName()}'); + } + + print('\nTotal services registered: ${allServices.length}'); + + // Verify all three services are returned + final names = allServices.map((s) => s.getName()).toList(); + assert(names.contains('ServiceA'), 'ServiceA not found'); + assert(names.contains('ServiceB'), 'ServiceB not found'); + assert(names.contains('ServiceC'), 'ServiceC not found'); + assert(allServices.length == 3, 'Expected 3 services, got ${allServices.length}'); + + print('\nāœ“ All assertions passed!'); + print('āœ“ Multiple addSingleton calls ARE supported and can be retrieved via getServices()'); +}