package org.apache.webbeans.newtests.util;
import org.apache.webbeans.config.DefaultAnnotation;
import org.apache.webbeans.util.AnnotationUtil;
import org.junit.Assert;
import org.junit.Test;
import javax.enterprise.util.AnnotationLiteral;
import javax.enterprise.util.Nonbinding;
import javax.inject.Qualifier;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
{
@Test
{
Annotation q1 = DefaultAnnotation.of(EmptyQualifier.class);
Annotation q2 = DefaultAnnotation.of(EmptyQualifier.class);
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
Annotation q1 = DefaultAnnotation.of(EmptyQualifier.class);
EmptyQualifier q2 = new EmptyQualifierAnnotationLiteral();
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
Annotation q1 = DefaultAnnotation.of(TestQualifier.class);
Annotation q2 = DefaultAnnotation.of(TestQualifier.class);
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
Annotation q1 = DefaultAnnotation.of(TestQualifier.class);
TestQualifier q2 = new TestQualifierAnnotationLiteral();
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifier q1 = new TestQualifierAnnotationLiteral();
TestQualifier q2 = new TestQualifierAnnotationLiteral();
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifier q1 = new TestQualifierAnnotationLiteral();
TestQualifierAnnotationLiteral q2 = new TestQualifierAnnotationLiteral();
q2.setValue("different value");
Assert.assertFalse(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifier q1 = new TestQualifierAnnotationLiteral();
TestQualifierAnnotationLiteral q2 = new TestQualifierAnnotationLiteral();
q2.setNumber(4711);
Assert.assertFalse(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifier q1 = new TestQualifierAnnotationLiteral();
TestQualifierAnnotationLiteral q2 = new TestQualifierAnnotationLiteral();
q2.setFloatArray(new float[]{47F, 11F});
Assert.assertFalse(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifier q1 = new TestQualifierAnnotationLiteral();
TestQualifierAnnotationLiteral q2 = new TestQualifierAnnotationLiteral();
q2.setEnumValue(RetentionPolicy.SOURCE);
Assert.assertFalse(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
Annotation q1 = DefaultAnnotation.of(TestQualifierNonbinding.class);
TestQualifierNonbinding q2 = new TestQualifierNonbindingAnnotationLiteral();
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
Annotation q1 = DefaultAnnotation.of(TestQualifierMultipleNonbinding.class);
TestQualifierMultipleNonbindingAnnotationLiteral q2 = new TestQualifierMultipleNonbindingAnnotationLiteral();
q2.setValue("my value");
Assert.assertFalse(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
Annotation q1 = DefaultAnnotation.of(TestQualifierMultipleNonbinding.class);
TestQualifierMultipleNonbindingAnnotationLiteral q2 = new TestQualifierMultipleNonbindingAnnotationLiteral();
q2.setValue("default-value");
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifierMultipleNonbindingAnnotationLiteral q1 = new TestQualifierMultipleNonbindingAnnotationLiteral();
q1.setValue("hello");
TestQualifierMultipleNonbindingAnnotationLiteral q2 = new TestQualifierMultipleNonbindingAnnotationLiteral();
q2.setValue("hello");
Assert.assertTrue(AnnotationUtil.isQualifierEqual(q1, q2));
}
@Test
{
TestQualifierMultipleNonbindingAnnotationLiteral q1 = new TestQualifierMultipleNonbindingAnnotationLiteral();
q1.setValue("hello_different");
TestQualifierMultipleNonbindingAnnotationLiteral q2 = new TestQualifierMultipleNonbindingAnnotationLiteral();
q2.setValue("hello");
Assert.assertFalse(AnnotationUtil.isQualifierEqual(q1, q2));
}
}
@Retention(RUNTIME)
@Qualifier
@interface EmptyQualifier
{
}
extends AnnotationLiteral<EmptyQualifier>
implements EmptyQualifier
{
}
@Retention(RUNTIME)
@Qualifier
@interface TestQualifier
{
String value() default "default-value";
int number() default -1;
float[] floatArray() default {1.0F, 1.2F};
RetentionPolicy enumValue() default RetentionPolicy.RUNTIME;
}
extends AnnotationLiteral<TestQualifier>
implements TestQualifier
{
private String value = "default-value";
private int number = -1;
private float[] floatArray = new float[]{1.0F, 1.2F};
private RetentionPolicy enumValue = RetentionPolicy.RUNTIME;
{
return value;
}
{
return number;
}
{
return floatArray;
}
{
return enumValue;
}
{
this.value = value;
}
{
this.number = number;
}
{
this.floatArray = floatArray;
}
{
this.enumValue = enumValue;
}
}
@Retention(RUNTIME)
@Qualifier
@interface TestQualifierNonbinding
{
String value() default "default-value";
@MyCustomAnnotation
@Nonbinding
int number() default -1;
}
@Retention(RUNTIME)
@Qualifier
@interface TestQualifierMultipleNonbinding
{
String value() default "default-value";
@Nonbinding
int number() default -1;
@Nonbinding
long card() default -1;
}
@Retention(RUNTIME)
@interface MyCustomAnnotation
{
}
extends AnnotationLiteral<TestQualifierMultipleNonbinding>
implements TestQualifierMultipleNonbinding
{
String value;
{
this.value = value;
}
@Override
{
return value;
}
@Override
{
return 10;
}
@Override
{
return 20;
}
}
extends AnnotationLiteral<TestQualifierNonbinding>
implements TestQualifierNonbinding
{
{
return "default-value";
}
{
return 4711;
}
}