package org.radargun.traits;
import java.util.HashMap;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
/**
* @author Matej Cimbora
*/
@Test
public class TraitHelperTest {
public void testInjectDefault() {
TestStageDefault testStageDefault = new TestStageDefault();
TestTrait testTrait = new TestTraitImpl();
TraitHelper.InjectResult result = TraitHelper.inject(testStageDefault, new HashMap<Class<?>, Object>() {{
put(TestTrait.class, testTrait);
}});
assertEquals(result, TraitHelper.InjectResult.SUCCESS);
assertEquals(testStageDefault.testTrait, testTrait);
}
public void testInjectMandatory() {
TestStageMandatory testStageMandatory = new TestStageMandatory();
TraitHelper.InjectResult result = TraitHelper.inject(testStageMandatory, new HashMap<>());
assertEquals(result, TraitHelper.InjectResult.FAILURE);
assertNull(testStageMandatory.testTrait);
}
public void testInjectOptional() {
TestStageOptional testStageOptional = new TestStageOptional();
TraitHelper.InjectResult result = TraitHelper.inject(testStageOptional, new HashMap<>());
assertEquals(result, TraitHelper.InjectResult.SUCCESS);
assertNull(testStageOptional.testTrait);
}
public void testInjectSkip() {
TestStageSkip testStageSkip = new TestStageSkip();
TraitHelper.InjectResult result = TraitHelper.inject(testStageSkip, new HashMap<>());
assertEquals(result, TraitHelper.InjectResult.SKIP);
assertNull(testStageSkip.testTrait);
}
private static class TestStageDefault {
@InjectTrait
TestTrait testTrait;
}
private static class TestStageMandatory {
@InjectTrait(dependency = InjectTrait.Dependency.MANDATORY)
TestTrait testTrait;
}
private static class TestStageOptional {
@InjectTrait(dependency = InjectTrait.Dependency.OPTIONAL)
TestTrait testTrait;
}
private static class TestStageSkip {
@InjectTrait(dependency = InjectTrait.Dependency.SKIP)
TestTrait testTrait;
}
@Trait(doc = "Test trait")
private interface TestTrait {
}
private static class TestTraitImpl implements TestTrait {
}
}