InjectionManagerTest.java
/*
* Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.jersey.inject.hk2;
import org.glassfish.jersey.internal.inject.Bindings;
import org.glassfish.jersey.internal.inject.ClassBinding;
import org.glassfish.jersey.internal.inject.InjectionManager;
import org.glassfish.jersey.internal.inject.Injections;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.utilities.Binder;
import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author Petr Bouda
*/
public class InjectionManagerTest {
@Test
public void testServiceLocatorParent() {
AbstractBinder binder = new AbstractBinder() {
@Override
protected void configure() {
bindAsContract(EnglishGreeting.class);
}
};
ServiceLocator parentLocator = ServiceLocatorUtilities.bind(binder);
InjectionManager injectionManager = Injections.createInjectionManager(parentLocator);
injectionManager.completeRegistration();
assertNotNull(injectionManager.getInstance(EnglishGreeting.class));
}
@Test
public void testInjectionManagerParent() {
ClassBinding<EnglishGreeting> greetingBinding = Bindings.serviceAsContract(EnglishGreeting.class);
InjectionManager parentInjectionManager = Injections.createInjectionManager();
parentInjectionManager.register(greetingBinding);
parentInjectionManager.completeRegistration();
InjectionManager injectionManager = Injections.createInjectionManager(parentInjectionManager);
injectionManager.completeRegistration();
assertNotNull(injectionManager.getInstance(EnglishGreeting.class));
}
@Test
public void testUnknownParent() {
assertThrows(IllegalArgumentException.class, () -> {
Injections.createInjectionManager(new Object());
});
}
@Test
public void testIsRegistrable() {
InjectionManager injectionManager = Injections.createInjectionManager();
assertTrue(injectionManager.isRegistrable(Binder.class));
assertTrue(injectionManager.isRegistrable(AbstractBinder.class));
assertFalse(injectionManager.isRegistrable(org.glassfish.jersey.internal.inject.AbstractBinder.class));
assertFalse(injectionManager.isRegistrable(String.class));
}
@Test
public void testRegisterBinder() {
AbstractBinder binder = new AbstractBinder() {
@Override
protected void configure() {
bindAsContract(EnglishGreeting.class);
}
};
InjectionManager injectionManager = Injections.createInjectionManager();
injectionManager.register(binder);
injectionManager.completeRegistration();
assertNotNull(injectionManager.getInstance(EnglishGreeting.class));
}
@Test
public void testRegisterUnknownProvider() {
assertThrows(IllegalArgumentException.class, () -> {
InjectionManager injectionManager = Injections.createInjectionManager();
injectionManager.register(new Object());
});
}
}