package org.arquillian.cube.docker.impl.util; import java.util.List; import org.arquillian.cube.containerobject.Cube; import org.arquillian.cube.containerobject.Environment; import org.junit.Test; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class ContainerObjectUtilTest { @Test public void shouldReturnFirstValue() throws NoSuchMethodException { final String value = ContainerObjectUtil.getTopCubeAttribute(SecondClassAnnotated.class, "value", Cube.class, ""); assertThat(value, is("secondValue")); } @Test public void shouldReturnTopValue() throws NoSuchMethodException { final String value = ContainerObjectUtil.getTopCubeAttribute(FirstClassAnnotated.class, "value", Cube.class, ""); assertThat(value, is("firstValue")); } @Test public void shouldReturnNullIfNoClassAnnotated() throws NoSuchMethodException { final String value = ContainerObjectUtil.getTopCubeAttribute(EmptyClassAnnotation.class, "value", Cube.class, ""); assertThat(value, is(nullValue())); } @Test public void shouldReturnParentValueIfClassNotAnnotated() throws NoSuchMethodException { final String value = ContainerObjectUtil.getTopCubeAttribute(ParentWithAnnotation.class, "value", Cube.class, ""); assertThat(value, is("secondValue")); } @Test public void shouldReturnDefaultValueInCaseOfDefaults() throws NoSuchMethodException { final String value = ContainerObjectUtil.getTopCubeAttribute(DefaultAnnotation.class, "value", Cube.class, ""); assertThat(value, is("")); } @Test public void shouldReturnParentValueIfCurrentIsDefault() throws NoSuchMethodException { final String value = ContainerObjectUtil.getTopCubeAttribute(DefaultAnnotationWithExtension.class, "value", Cube.class, ""); assertThat(value, is("secondValue")); } @Test public void shouldReturnArrays() throws NoSuchMethodException { final String[] ports = ContainerObjectUtil. getTopCubeAttribute(FirstClassWithArray.class, "portBinding", Cube.class, new String[] {}); assertThat(ports[0], is("2222->22/tcp")); } @Test public void shouldReturnAnnotationsFromRootObject() { final List<Environment> environments = (List<Environment>) ContainerObjectUtil.getAllAnnotations(SecondEnvironmentAnnotation.class, Environment.class); assertThat(environments.size(), is(1)); } @Test public void shouldReturnAggregationAnnotationsOfAllObjectHierarchy() { final List<Environment> environments = (List<Environment>) ContainerObjectUtil.getAllAnnotations(FirstEnvironmentAnnotation.class, Environment.class); assertThat(environments.size(), is(2)); } @Cube("secondValue") private static class SecondClassAnnotated { } @Cube("firstValue") private static class FirstClassAnnotated extends SecondClassAnnotated { } private static class EmptyClassAnnotation { } private static class ParentWithAnnotation extends SecondClassAnnotated { } @Cube private static class DefaultAnnotation { } @Cube private static class DefaultAnnotationWithExtension extends SecondClassAnnotated { } @Cube(portBinding = "2222->22/tcp") private static class FirstClassWithArray { } @Environment(key = "A", value = "B") public static class SecondEnvironmentAnnotation { } @Environment(key = "C", value = "D") public static class FirstEnvironmentAnnotation extends SecondEnvironmentAnnotation { } }