diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ed9e052..699c108 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,7 +13,6 @@ - diff --git a/provider/src/main/java/m/co/rh/id/aprovider/ProviderModule.java b/provider/src/main/java/m/co/rh/id/aprovider/ProviderModule.java index 3f37e49..b961738 100644 --- a/provider/src/main/java/m/co/rh/id/aprovider/ProviderModule.java +++ b/provider/src/main/java/m/co/rh/id/aprovider/ProviderModule.java @@ -17,5 +17,7 @@ public interface ProviderModule { * * @param provider provider to assist in retrieving registered components from other modules */ - void dispose(Provider provider); + default void dispose(Provider provider) { + // Default leave blank + } } diff --git a/provider/src/test/java/m/co/rh/id/aprovider/DefaultNestedProviderUnitTest.java b/provider/src/test/java/m/co/rh/id/aprovider/DefaultNestedProviderUnitTest.java index 0c04584..b54030e 100644 --- a/provider/src/test/java/m/co/rh/id/aprovider/DefaultNestedProviderUnitTest.java +++ b/provider/src/test/java/m/co/rh/id/aprovider/DefaultNestedProviderUnitTest.java @@ -53,18 +53,9 @@ public class DefaultNestedProviderUnitTest { @Test public void getProviderRegistryUsingGet() { - ServiceAImpl serviceA = new ServiceAImpl(); Provider testProvider = Provider.createNestedProvider("test", - null, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - // leave blank - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } + null, mockContext, (providerRegistry, provider) -> { + // leave blank }); assertSame(testProvider.get(ProviderRegistry.class), testProvider); @@ -78,17 +69,9 @@ public void singleton_registrationAndExactGet() { ExecutorService executorService = Executors.newSingleThreadExecutor(); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); Provider testProvider = Provider.createNestedProvider("test", - null, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(ScheduledExecutorService.class, scheduledExecutorService); - providerRegistry.register(ExecutorService.class, executorService); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } + null, mockContext, (providerRegistry, provider) -> { + providerRegistry.register(ScheduledExecutorService.class, scheduledExecutorService); + providerRegistry.register(ExecutorService.class, executorService); }); assertSame(testProvider.get(ExecutorService.class), executorService); @@ -105,17 +88,7 @@ public void dispose(Provider provider) { public void singleton_registrationAndGet() { ServiceAImpl serviceA = new ServiceAImpl(); Provider testProvider = Provider.createNestedProvider("test", - null, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, serviceA); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + null, mockContext, (providerRegistry, provider) -> providerRegistry.register(IServiceA.class, serviceA)); IServiceA serviceAFromProvider = testProvider.get(IServiceA.class); assertSame(serviceAFromProvider, serviceA); @@ -139,17 +112,7 @@ public void dispose(Provider provider) { public void singleton_registrationAndLazyGet() { ServiceAImpl serviceA = new ServiceAImpl(); Provider testProvider = Provider.createNestedProvider("test", - null, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, serviceA); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + null, mockContext, (providerRegistry, provider) -> providerRegistry.register(IServiceA.class, serviceA)); IServiceA serviceAFromProvider = testProvider.lazyGet(IServiceA.class).get(); assertSame(serviceAFromProvider, serviceA); @@ -177,16 +140,8 @@ public void singleton_registrationAndLazyGetAndTryLazyGetDifference() { ServiceAImpl serviceA = new ServiceAImpl(); DefaultNestedProvider testProvider = (DefaultNestedProvider) Provider.createNestedProvider("test", - null, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - // leave blank - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } + null, mockContext, (providerRegistry, provider) -> { + // leave blank }); assertThrows(NullPointerException.class, () -> testProvider.get(IServiceA.class)); @@ -213,17 +168,9 @@ public void dispose(Provider provider) { public void singleton_registerSameClass() { ServiceAImpl serviceA = new ServiceAImpl(); Provider.createNestedProvider("test", - null, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, serviceA); - providerRegistry.register(IServiceA.class, new ServiceAImpl()); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + null, mockContext, (providerRegistry, provider) -> { + providerRegistry.register(IServiceA.class, serviceA); + providerRegistry.register(IServiceA.class, new ServiceAImpl()); }); } @@ -231,17 +178,7 @@ public void dispose(Provider provider) { public void module_registrationAndGet() { Provider testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerModule(new ModuleA()); - } - - @Override - public void dispose(Provider provider) { - - } - }); + (providerRegistry, provider) -> providerRegistry.registerModule(new ModuleA())); IServiceA serviceAFromProvider = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider); @@ -266,17 +203,9 @@ public void module_registrationMultipleSameModule() { // the exception was caused by duplicate services, NOT cause by multiple module instances Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerModule(new ModuleA()); - providerRegistry.registerModule(new ModuleA()); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerModule(new ModuleA()); + providerRegistry.registerModule(new ModuleA()); }); } @@ -294,17 +223,7 @@ public void module_registrationAndDispose() { final ModuleA registerModuleA = new ModuleA(); testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerModule(registerModuleA); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerModule(registerModuleA)); assertFalse(registerModuleA.isDisposed); testProvider.dispose(); assertTrue(registerModuleA.isDisposed); @@ -314,18 +233,8 @@ public void dispose(Provider provider) { public void lazySingleton_registrationAndGet() { Provider testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new)); IServiceA serviceAFromProvider1 = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider1); IServiceA serviceAFromProvider2 = testProvider.get(IServiceA.class); @@ -350,18 +259,8 @@ public void dispose(Provider provider) { public void lazySingleton_executorService_registrationAndGet() { Provider testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - ExecutorService.class, Executors::newSingleThreadExecutor); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerLazy( + ExecutorService.class, Executors::newSingleThreadExecutor)); ExecutorService executorServiceFromProvider1 = testProvider.get(ExecutorService.class); assertNotNull(executorServiceFromProvider1); // ExecutorService extends Executor, must be able to get instance if using parent class @@ -378,20 +277,12 @@ public void lazySingleton_dependencyInversionPattern() { */ Provider testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerLazy( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new); }); // try to get IServiceB first to check if it works IServiceB serviceBFromProvider1 = testProvider.get(IServiceB.class); @@ -412,20 +303,12 @@ public void dispose(Provider provider) { // Another similar scenario, only get IServiceA first then get IServiceB testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerLazy( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new); }); serviceAFromProvider1 = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider1); @@ -451,20 +334,12 @@ public void lazyFuture_dependencyInversionPattern() { */ Provider testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerAsync( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerAsync( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerAsync( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerAsync( + IServiceA.class, ServiceAImpl::new); }); // try to get IServiceB first to check if it works IServiceB serviceBFromProvider1 = testProvider.get(IServiceB.class); @@ -485,20 +360,12 @@ public void dispose(Provider provider) { // Another similar scenario, only get IServiceA first then get IServiceB testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerLazy( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new); }); serviceAFromProvider1 = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider1); @@ -519,22 +386,12 @@ public void dispose(Provider provider) { public void factory_registrationAndGet() { Provider testProvider = Provider.createNestedProvider("test", null, mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerFactory(MyPojo.class, () -> { - MyPojo myPojo = new MyPojo(); - myPojo.setAge(99); - myPojo.setName("Foo"); - return myPojo; - }); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerFactory(MyPojo.class, () -> { + MyPojo myPojo = new MyPojo(); + myPojo.setAge(99); + myPojo.setName("Foo"); + return myPojo; + })); MyPojo myPojo1 = testProvider.get(MyPojo.class); assertNotNull(myPojo1); assertEquals(myPojo1.getAge(), 99); @@ -571,22 +428,12 @@ public void dispose(Provider provider) { @Test public void pool_registrationAndGet() { Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerPool(MyPojo.class, () -> { - MyPojo myPojo = new MyPojo(); - myPojo.setAge(99); - myPojo.setName("Foo"); - return myPojo; - }); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerPool(MyPojo.class, () -> { + MyPojo myPojo = new MyPojo(); + myPojo.setAge(99); + myPojo.setName("Foo"); + return myPojo; + })); MyPojo myPojo1 = testProvider.get(MyPojo.class); assertNotNull(myPojo1); assertEquals(myPojo1.getAge(), 99); @@ -626,36 +473,28 @@ public void disposableComponents_registerAndDisposeWithoutGet() throws Interrupt DisposableRegisterFactoryService registerFactoryService = Mockito.mock(DisposableRegisterFactoryService.class); DisposableRegisterPoolService registerPoolService = Mockito.mock(DisposableRegisterPoolService.class); DisposableRegisterLazyService registerLazyService = Mockito.mock(DisposableRegisterLazyService.class); - ProviderModule providerModule = new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register( - DisposableRegisterService.class, - registerService - ); - providerRegistry.registerAsync(DisposableRegisterAsyncService.class, - () -> registerAsyncService - ); - // Register factory always return same instance for testing purposes - // dispose should not be called since "get" is not called - providerRegistry.registerFactory( - DisposableRegisterFactoryService.class, - () -> registerFactoryService - ); - // Register pool always return same instance for testing purposes - // dispose should not be called since "get" is not called - providerRegistry.registerPool(DisposableRegisterPoolService.class, - () -> registerPoolService); - providerRegistry.registerLazy( - DisposableRegisterLazyService.class, - () -> registerLazyService - ); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + ProviderModule providerModule = (providerRegistry, provider) -> { + providerRegistry.register( + DisposableRegisterService.class, + registerService + ); + providerRegistry.registerAsync(DisposableRegisterAsyncService.class, + () -> registerAsyncService + ); + // Register factory always return same instance for testing purposes + // dispose should not be called since "get" is not called + providerRegistry.registerFactory( + DisposableRegisterFactoryService.class, + () -> registerFactoryService + ); + // Register pool always return same instance for testing purposes + // dispose should not be called since "get" is not called + providerRegistry.registerPool(DisposableRegisterPoolService.class, + () -> registerPoolService); + providerRegistry.registerLazy( + DisposableRegisterLazyService.class, + () -> registerLazyService + ); }; ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); threadPoolExecutor.prestartAllCoreThreads(); @@ -685,34 +524,26 @@ public void disposableComponents_registerGetAndThenDispose() throws InterruptedE DisposableRegisterService registerService = Mockito.mock(DisposableRegisterService.class); DisposableRegisterAsyncService registerAsyncService = Mockito.mock(DisposableRegisterAsyncService.class); DisposableRegisterLazyService registerLazyService = Mockito.mock(DisposableRegisterLazyService.class); - ProviderModule providerModule = new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register( - DisposableRegisterService.class, - registerService - ); - providerRegistry.registerAsync(DisposableRegisterAsyncService.class, - () -> registerAsyncService - ); - providerRegistry.registerFactory( - DisposableRegisterFactoryService.class, - () -> Mockito.mock(DisposableRegisterFactoryService.class) - ); - providerRegistry.registerPool( - DisposableRegisterPoolService.class, - () -> Mockito.mock(DisposableRegisterPoolService.class) - ); - providerRegistry.registerLazy( - DisposableRegisterLazyService.class, - () -> registerLazyService - ); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + ProviderModule providerModule = (providerRegistry, provider) -> { + providerRegistry.register( + DisposableRegisterService.class, + registerService + ); + providerRegistry.registerAsync(DisposableRegisterAsyncService.class, + () -> registerAsyncService + ); + providerRegistry.registerFactory( + DisposableRegisterFactoryService.class, + () -> Mockito.mock(DisposableRegisterFactoryService.class) + ); + providerRegistry.registerPool( + DisposableRegisterPoolService.class, + () -> Mockito.mock(DisposableRegisterPoolService.class) + ); + providerRegistry.registerLazy( + DisposableRegisterLazyService.class, + () -> registerLazyService + ); }; ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); threadPoolExecutor.prestartAllCoreThreads(); @@ -785,29 +616,13 @@ public void singletonParent_registrationAndExactGet() { // testing real case scenario where you need both ExecutorService & ScheduledExecutorService ExecutorService executorService = Executors.newSingleThreadExecutor(); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); - Provider rootProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(ScheduledExecutorService.class, scheduledExecutorService); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider rootProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> + providerRegistry.register(ScheduledExecutorService.class, scheduledExecutorService)); Provider testProvider = Provider.createNestedProvider("test", - rootProvider, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(ExecutorService.class, executorService); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + rootProvider, mockContext, + (providerRegistry, provider) -> + providerRegistry.register(ExecutorService.class, executorService)); assertSame(testProvider.get(ExecutorService.class), executorService); assertSame(testProvider.get(ScheduledExecutorService.class), scheduledExecutorService); @@ -822,31 +637,14 @@ public void dispose(Provider provider) { @Test public void factoryParent_registrationAndExactGet() { // testing real case scenario where you need both ExecutorService & ScheduledExecutorService - Provider rootProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerFactory(IServiceA.class, - () -> Mockito.mock(IServiceA.class)); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider rootProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> + providerRegistry.registerFactory(IServiceA.class, + () -> Mockito.mock(IServiceA.class))); Provider testProvider = Provider.createNestedProvider("test", - rootProvider, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { + rootProvider, mockContext, (providerRegistry, provider) -> providerRegistry.registerFactory(IServiceB.class, - () -> Mockito.mock(IServiceB.class)); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + () -> Mockito.mock(IServiceB.class))); IServiceA serviceA1 = testProvider.get(IServiceA.class); IServiceA serviceA2 = testProvider.get(IServiceA.class); @@ -858,30 +656,13 @@ public void dispose(Provider provider) { @Test public void singletonParent_registrationAndExactGet_withParentDependency() { - Provider rootProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy(IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider rootProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> + providerRegistry.registerLazy(IServiceA.class, ServiceAImpl::new)); Provider testProvider = Provider.createNestedProvider("test", - rootProvider, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { + rootProvider, mockContext, (providerRegistry, provider) -> providerRegistry.registerLazy(IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + () -> new ServiceBImpl(provider.get(IServiceA.class)))); IServiceB serviceB = testProvider.get(IServiceB.class); IServiceA serviceA = testProvider.get(IServiceA.class); @@ -892,30 +673,12 @@ public void dispose(Provider provider) { @Test public void singletonParent_registrationAndExactGet_withParentDependencyAndParentNestedProvider() { Provider rootProvider = Provider.createNestedProvider("test", null, - mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy(IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + mockContext, (providerRegistry, provider) -> + providerRegistry.registerLazy(IServiceA.class, ServiceAImpl::new)); Provider testProvider = Provider.createNestedProvider("test", - rootProvider, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { + rootProvider, mockContext, (providerRegistry, provider) -> providerRegistry.registerLazy(IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + () -> new ServiceBImpl(provider.get(IServiceA.class)))); IServiceB serviceB = testProvider.get(IServiceB.class); IServiceA serviceA = testProvider.get(IServiceA.class); @@ -925,30 +688,13 @@ public void dispose(Provider provider) { @Test public void singletonParent_registerAsyncAndExactGet_withParentDependency() { - Provider rootProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerAsync(IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider rootProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> + providerRegistry.registerAsync(IServiceA.class, ServiceAImpl::new)); Provider testProvider = Provider.createNestedProvider("test", - rootProvider, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { + rootProvider, mockContext, (providerRegistry, provider) -> providerRegistry.registerAsync(IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + () -> new ServiceBImpl(provider.get(IServiceA.class)))); IServiceB serviceB = testProvider.get(IServiceB.class); IServiceA serviceA = testProvider.get(IServiceA.class); @@ -958,32 +704,15 @@ public void dispose(Provider provider) { @Test public void singletonParent_registerAndExactGet_withParentDependencyAndChildInvokeGet() { - Provider rootProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider rootProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> providerRegistry.register(IServiceA.class, ServiceAImpl::new)); Provider testProvider = Provider.createNestedProvider("test", - rootProvider, mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - // test get value here, - // should contain value from parent - IServiceA iServiceA = provider.get(IServiceA.class); - providerRegistry.registerAsync(IServiceB.class, - () -> new ServiceBImpl(iServiceA)); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } + rootProvider, mockContext, (providerRegistry, provider) -> { + // test get value here, + // should contain value from parent + IServiceA iServiceA = provider.get(IServiceA.class); + providerRegistry.registerAsync(IServiceB.class, + () -> new ServiceBImpl(iServiceA)); }); IServiceB serviceB = testProvider.get(IServiceB.class); diff --git a/provider/src/test/java/m/co/rh/id/aprovider/DefaultProviderUnitTest.java b/provider/src/test/java/m/co/rh/id/aprovider/DefaultProviderUnitTest.java index a8f2737..ed13833 100644 --- a/provider/src/test/java/m/co/rh/id/aprovider/DefaultProviderUnitTest.java +++ b/provider/src/test/java/m/co/rh/id/aprovider/DefaultProviderUnitTest.java @@ -53,18 +53,10 @@ public class DefaultProviderUnitTest { @Test public void getProviderRegistryUsingGet() { - ServiceAImpl serviceA = new ServiceAImpl(); - Provider testProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - // leave blank - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider testProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> { + // leave blank + }); assertSame(testProvider.get(ProviderRegistry.class), testProvider); assertSame(testProvider.lazyGet(ProviderRegistry.class).get(), testProvider); @@ -76,18 +68,11 @@ public void singleton_registrationAndExactGet() { // testing real case scenario where you need both ExecutorService & ScheduledExecutorService ExecutorService executorService = Executors.newSingleThreadExecutor(); ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); - Provider testProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(ScheduledExecutorService.class, scheduledExecutorService); - providerRegistry.register(ExecutorService.class, executorService); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider testProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> { + providerRegistry.register(ScheduledExecutorService.class, scheduledExecutorService); + providerRegistry.register(ExecutorService.class, executorService); + }); assertSame(testProvider.get(ExecutorService.class), executorService); assertSame(testProvider.get(ScheduledExecutorService.class), scheduledExecutorService); @@ -102,17 +87,9 @@ public void dispose(Provider provider) { @Test public void singleton_registrationAndGet() { ServiceAImpl serviceA = new ServiceAImpl(); - Provider testProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, serviceA); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider testProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> + providerRegistry.register(IServiceA.class, serviceA)); IServiceA serviceAFromProvider = testProvider.get(IServiceA.class); assertSame(serviceAFromProvider, serviceA); @@ -135,17 +112,9 @@ public void dispose(Provider provider) { @Test public void singleton_registrationAndLazyGet() { ServiceAImpl serviceA = new ServiceAImpl(); - Provider testProvider = Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, serviceA); - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } - }); + Provider testProvider = Provider.createProvider(mockContext, + (providerRegistry, provider) -> + providerRegistry.register(IServiceA.class, serviceA)); IServiceA serviceAFromProvider = testProvider.lazyGet(IServiceA.class).get(); assertSame(serviceAFromProvider, serviceA); @@ -172,16 +141,8 @@ public void dispose(Provider provider) { public void singleton_registrationAndLazyGetAndTryLazyGetDifference() { ServiceAImpl serviceA = new ServiceAImpl(); DefaultProvider testProvider = (DefaultProvider) - Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - // leave blank - } - - @Override - public void dispose(Provider provider) { - // nothing to dispose - } + Provider.createProvider(mockContext, (providerRegistry, provider) -> { + // leave blank }); assertThrows(NullPointerException.class, () -> testProvider.get(IServiceA.class)); @@ -207,34 +168,16 @@ public void dispose(Provider provider) { @Test(expected = IllegalArgumentException.class) public void singleton_registerSameClass() { ServiceAImpl serviceA = new ServiceAImpl(); - Provider.createProvider(mockContext, new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register(IServiceA.class, serviceA); - providerRegistry.register(IServiceA.class, new ServiceAImpl()); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + Provider.createProvider(mockContext, (providerRegistry, provider) -> { + providerRegistry.register(IServiceA.class, serviceA); + providerRegistry.register(IServiceA.class, new ServiceAImpl()); }); } @Test public void module_registrationAndGet() { Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerModule(new ModuleA()); - } - - @Override - public void dispose(Provider provider) { - - } - }); + (providerRegistry, provider) -> providerRegistry.registerModule(new ModuleA())); IServiceA serviceAFromProvider = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider); @@ -258,17 +201,9 @@ public void dispose(Provider provider) { public void module_registrationMultipleSameModule() { // the exception was caused by duplicate services, NOT cause by multiple module instances Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerModule(new ModuleA()); - providerRegistry.registerModule(new ModuleA()); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerModule(new ModuleA()); + providerRegistry.registerModule(new ModuleA()); }); } @@ -284,17 +219,7 @@ public void module_registrationAndDispose() { // test another scenario where module is registered on root module final ModuleA registerModuleA = new ModuleA(); testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerModule(registerModuleA); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerModule(registerModuleA)); assertFalse(registerModuleA.isDisposed); testProvider.dispose(); assertTrue(registerModuleA.isDisposed); @@ -303,18 +228,8 @@ public void dispose(Provider provider) { @Test public void lazySingleton_registrationAndGet() { Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new)); IServiceA serviceAFromProvider1 = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider1); IServiceA serviceAFromProvider2 = testProvider.get(IServiceA.class); @@ -338,18 +253,8 @@ public void dispose(Provider provider) { @Test public void lazySingleton_executorService_registrationAndGet() { Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - ExecutorService.class, Executors::newSingleThreadExecutor); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerLazy( + ExecutorService.class, Executors::newSingleThreadExecutor)); ExecutorService executorServiceFromProvider1 = testProvider.get(ExecutorService.class); assertNotNull(executorServiceFromProvider1); // ExecutorService extends Executor, must be able to get instance if using parent class @@ -365,20 +270,12 @@ public void lazySingleton_dependencyInversionPattern() { The provider support this inversion pattern by using LazySingletonProviderRegister */ Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerLazy( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new); }); // try to get IServiceB first to check if it works IServiceB serviceBFromProvider1 = testProvider.get(IServiceB.class); @@ -398,20 +295,12 @@ public void dispose(Provider provider) { // Another similar scenario, only get IServiceA first then get IServiceB testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerLazy( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new); }); serviceAFromProvider1 = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider1); @@ -436,20 +325,12 @@ public void lazyFuture_dependencyInversionPattern() { The provider support this inversion pattern by using LazySingletonProviderRegister */ Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerAsync( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerAsync( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerAsync( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerAsync( + IServiceA.class, ServiceAImpl::new); }); // try to get IServiceB first to check if it works IServiceB serviceBFromProvider1 = testProvider.get(IServiceB.class); @@ -469,20 +350,12 @@ public void dispose(Provider provider) { // Another similar scenario, only get IServiceA first then get IServiceB testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerLazy( - IServiceB.class, - () -> new ServiceBImpl(provider.get(IServiceA.class))); - providerRegistry.registerLazy( - IServiceA.class, ServiceAImpl::new); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + (providerRegistry, provider) -> { + providerRegistry.registerLazy( + IServiceB.class, + () -> new ServiceBImpl(provider.get(IServiceA.class))); + providerRegistry.registerLazy( + IServiceA.class, ServiceAImpl::new); }); serviceAFromProvider1 = testProvider.get(IServiceA.class); assertNotNull(serviceAFromProvider1); @@ -502,22 +375,12 @@ public void dispose(Provider provider) { @Test public void factory_registrationAndGet() { Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerFactory(MyPojo.class, () -> { - MyPojo myPojo = new MyPojo(); - myPojo.setAge(99); - myPojo.setName("Foo"); - return myPojo; - }); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerFactory(MyPojo.class, () -> { + MyPojo myPojo = new MyPojo(); + myPojo.setAge(99); + myPojo.setName("Foo"); + return myPojo; + })); MyPojo myPojo1 = testProvider.get(MyPojo.class); assertNotNull(myPojo1); assertEquals(myPojo1.getAge(), 99); @@ -554,22 +417,12 @@ public void dispose(Provider provider) { @Test public void pool_registrationAndGet() { Provider testProvider = Provider.createProvider(mockContext, - new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.registerPool(MyPojo.class, () -> { - MyPojo myPojo = new MyPojo(); - myPojo.setAge(99); - myPojo.setName("Foo"); - return myPojo; - }); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } - }); + (providerRegistry, provider) -> providerRegistry.registerPool(MyPojo.class, () -> { + MyPojo myPojo = new MyPojo(); + myPojo.setAge(99); + myPojo.setName("Foo"); + return myPojo; + })); MyPojo myPojo1 = testProvider.get(MyPojo.class); assertNotNull(myPojo1); assertEquals(myPojo1.getAge(), 99); @@ -609,36 +462,28 @@ public void disposableComponents_registerAndDisposeWithoutGet() throws Interrupt DisposableRegisterFactoryService registerFactoryService = Mockito.mock(DisposableRegisterFactoryService.class); DisposableRegisterPoolService registerPoolService = Mockito.mock(DisposableRegisterPoolService.class); DisposableRegisterLazyService registerLazyService = Mockito.mock(DisposableRegisterLazyService.class); - ProviderModule providerModule = new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register( - DisposableRegisterService.class, - registerService - ); - providerRegistry.registerAsync(DisposableRegisterAsyncService.class, - () -> registerAsyncService - ); - // Register factory always return same instance for testing purposes - // dispose should not be called since "get" is not called - providerRegistry.registerFactory( - DisposableRegisterFactoryService.class, - () -> registerFactoryService - ); - // Register pool always return same instance for testing purposes - // dispose should not be called since "get" is not called - providerRegistry.registerPool(DisposableRegisterPoolService.class, - () -> registerPoolService); - providerRegistry.registerLazy( - DisposableRegisterLazyService.class, - () -> registerLazyService - ); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + ProviderModule providerModule = (providerRegistry, provider) -> { + providerRegistry.register( + DisposableRegisterService.class, + registerService + ); + providerRegistry.registerAsync(DisposableRegisterAsyncService.class, + () -> registerAsyncService + ); + // Register factory always return same instance for testing purposes + // dispose should not be called since "get" is not called + providerRegistry.registerFactory( + DisposableRegisterFactoryService.class, + () -> registerFactoryService + ); + // Register pool always return same instance for testing purposes + // dispose should not be called since "get" is not called + providerRegistry.registerPool(DisposableRegisterPoolService.class, + () -> registerPoolService); + providerRegistry.registerLazy( + DisposableRegisterLazyService.class, + () -> registerLazyService + ); }; ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); threadPoolExecutor.prestartAllCoreThreads(); @@ -667,34 +512,26 @@ public void disposableComponents_registerGetAndThenDispose() throws InterruptedE DisposableRegisterService registerService = Mockito.mock(DisposableRegisterService.class); DisposableRegisterAsyncService registerAsyncService = Mockito.mock(DisposableRegisterAsyncService.class); DisposableRegisterLazyService registerLazyService = Mockito.mock(DisposableRegisterLazyService.class); - ProviderModule providerModule = new ProviderModule() { - @Override - public void provides(ProviderRegistry providerRegistry, Provider provider) { - providerRegistry.register( - DisposableRegisterService.class, - registerService - ); - providerRegistry.registerAsync(DisposableRegisterAsyncService.class, - () -> registerAsyncService - ); - providerRegistry.registerFactory( - DisposableRegisterFactoryService.class, - () -> Mockito.mock(DisposableRegisterFactoryService.class) - ); - providerRegistry.registerPool( - DisposableRegisterPoolService.class, - () -> Mockito.mock(DisposableRegisterPoolService.class) - ); - providerRegistry.registerLazy( - DisposableRegisterLazyService.class, - () -> registerLazyService - ); - } - - @Override - public void dispose(Provider provider) { - // leave blank - } + ProviderModule providerModule = (providerRegistry, provider) -> { + providerRegistry.register( + DisposableRegisterService.class, + registerService + ); + providerRegistry.registerAsync(DisposableRegisterAsyncService.class, + () -> registerAsyncService + ); + providerRegistry.registerFactory( + DisposableRegisterFactoryService.class, + () -> Mockito.mock(DisposableRegisterFactoryService.class) + ); + providerRegistry.registerPool( + DisposableRegisterPoolService.class, + () -> Mockito.mock(DisposableRegisterPoolService.class) + ); + providerRegistry.registerLazy( + DisposableRegisterLazyService.class, + () -> registerLazyService + ); }; ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); threadPoolExecutor.prestartAllCoreThreads();