/******************************************************************************* | |
* Copyright (c) 2012, 2016 IBM Corporation and others. | |
* | |
* This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 474274, 496305 | |
******************************************************************************/ | |
package org.eclipse.e4.core.internal.tests.di; | |
import static org.junit.Assert.assertNotNull; | |
import static org.junit.Assert.assertTrue; | |
import javax.inject.Inject; | |
import org.eclipse.e4.core.contexts.ContextInjectionFactory; | |
import org.eclipse.e4.core.contexts.EclipseContextFactory; | |
import org.eclipse.e4.core.contexts.IEclipseContext; | |
import org.eclipse.e4.core.di.InjectionException; | |
import org.eclipse.e4.core.di.annotations.Creatable; | |
import org.junit.Before; | |
import org.junit.Test; | |
public class AutoConstructWithCreatableTest { | |
private IEclipseContext context; | |
@Creatable | |
static class Dependent1 { | |
@Inject | |
public Dependent1() { | |
// placeholder | |
} | |
} | |
static class Dependent2 { | |
@Inject | |
public Dependent2() { | |
// placeholder | |
} | |
} | |
static class Consumer1 { | |
@Inject | |
public Consumer1(Dependent1 dep) { | |
// placeholder | |
} | |
} | |
static class Consumer2 { | |
@Inject | |
public Consumer2(Dependent2 dep) { | |
// placeholder | |
} | |
} | |
@Before | |
public void createContext() { | |
context = EclipseContextFactory.create(); | |
} | |
/** | |
* Checks that classes with @Creatable are auto-constructed | |
*/ | |
@Test | |
public void testCreatableIsCreated() { | |
Consumer1 consumer1 = ContextInjectionFactory.make(Consumer1.class, context); | |
assertNotNull(consumer1); | |
boolean exception = false; | |
try { | |
ContextInjectionFactory.make(Consumer2.class, context); | |
} catch (InjectionException e) { | |
exception = true; // expected | |
} | |
assertTrue(exception); | |
context.set(Dependent2.class, new Dependent2()); | |
Consumer2 consumer2 = ContextInjectionFactory.make(Consumer2.class, context); | |
assertNotNull(consumer2); | |
} | |
/** | |
* Checks that only classes with @Creatable are auto-constructed | |
*/ | |
@Test(expected = InjectionException.class) | |
public void testNonCreatableInstanceAreNotCreated() { | |
ContextInjectionFactory.make(Consumer2.class, context); | |
// should not be reached as exception is thrown | |
assertTrue(false); | |
} | |
@Test // ensure "normal" dependency injection | |
public void testNonCreatableInstancesAreUsedFromContext() { | |
context.set(Dependent2.class, new Dependent2()); | |
Consumer2 consumer2 = ContextInjectionFactory.make(Consumer2.class, context); | |
assertNotNull(consumer2); | |
} | |
} |