package jenkins.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import hudson.ExtensionPoint;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.TestExtension;
import java.util.Arrays;
import java.util.Comparator;
/**
* @author Kohsuke Kawaguchi
*/
public class ExtensionTypeHierarchyTest {
@Rule
public JenkinsRule j = new JenkinsRule();
public static interface Animal extends ExtensionPoint {}
public static interface White extends ExtensionPoint {}
@TestExtension
public static class Swan implements Animal, White {}
@TestExtension
public static class Crow implements Animal {}
/**
* Swan is both white and animal, so a single swan instance gets listed to both.
*/
@Test
public void sameExtensionCanImplementMultipleExtensionPoints() {
Animal[] animals = sort(j.jenkins.getExtensionList(Animal.class).toArray(new Animal[2]));
assertTrue(animals[0] instanceof Crow);
assertTrue(animals[1] instanceof Swan);
assertEquals(2, animals.length);
White[] whites = sort(j.jenkins.getExtensionList(White.class).toArray(new White[1]));
assertTrue(whites[0] instanceof Swan);
assertEquals(1, whites.length);
assertSame(animals[1], whites[0]);
}
/**
* Sort by class name
*/
private <T> T[] sort(T[] a) {
Arrays.sort(a,new Comparator<T>() {
public int compare(T o1, T o2) {
return o1.getClass().getName().compareTo(o2.getClass().getName());
}
});
return a;
}
}