From 912453b2f9da7a477c10a3bcc5fec175962adcd0 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 4 Dec 2025 22:25:54 +0000 Subject: [PATCH] Add test demonstrating getServices support for multiple registrations This test file verifies that the DI container supports retrieving all registered objects by type even when registered through multiple addSingleton calls. The test registers three services of the same interface type and confirms all can be retrieved via getServices(). --- test_multiple_singletons.dart | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 test_multiple_singletons.dart 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()'); +}