package rtt.core.tests.junit.annotations;
import static org.junit.Assert.*;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import rtt.annotations.Node.Value;
import rtt.annotations.processing.AnnotationProcessor;
import rtt.annotations.processing.ValueMember;
import rtt.core.tests.junit.annotations.NamedMethodProcessingTests.NamedAttributeClass;
import rtt.core.tests.junit.annotations.NamedMethodProcessingTests.NoNameAttributeClass;
import rtt.core.tests.junit.utils.TestAnnotationUtils;
@SuppressWarnings("unused")
public class IndexedFieldProcessingTests {
@Before
public void setUp() throws Exception {}
// --------------------------------------------------------------
// Test: annotated fields without index attribute
// --> compare fields count = 3
// --> informational fields count = 3
public static class NoIndexAttributeClass {
@Value(informational=true) private String infoC = "";
@Value(informational=true) protected String infoB = "";
@Value(informational=true) public String infoA = "";
@Value private String compareC = "";
@Value protected String compareB = "";
@Value public String compareA = "";
}
@Test
public void testNonIndexedFields() throws Exception {
Set<ValueMember<?>> valueMembers = AnnotationProcessor.getValueMembers(
NoIndexAttributeClass.class);
TestAnnotationUtils.countMembers(valueMembers, 3, 3);
TestAnnotationUtils.checkOrder(valueMembers,
"NoIndexAttributeClass.compareA",
"NoIndexAttributeClass.compareB",
"NoIndexAttributeClass.compareC",
"NoIndexAttributeClass.infoA",
"NoIndexAttributeClass.infoB",
"NoIndexAttributeClass.infoC");
TestAnnotationUtils.executeMembers(valueMembers, NoIndexAttributeClass.class);
}
// --------------------------------------------------------------
// Test: annotated fields with index attribute
// --> compare fields count = 3
// --> informational fields count = 3
public static class AscendingIndexAttributeClass {
@Value(index=6) public String compareA = "";
@Value(index=5) protected String compareB = "";
@Value(index=4) private String compareC = "";
@Value(informational=true, index=3) public String infoA = "";
@Value(informational=true, index=2) protected String infoB = "";
@Value(informational=true, index=1) private String infoC = "";
}
@Test
public void testAscendingIndexedFields() throws Exception {
Set<ValueMember<?>> valueMembers = AnnotationProcessor.getValueMembers(
AscendingIndexAttributeClass.class);
TestAnnotationUtils.countMembers(valueMembers, 3, 3);
TestAnnotationUtils.checkOrder(valueMembers,
"AscendingIndexAttributeClass.infoC",
"AscendingIndexAttributeClass.infoB",
"AscendingIndexAttributeClass.infoA",
"AscendingIndexAttributeClass.compareC",
"AscendingIndexAttributeClass.compareB",
"AscendingIndexAttributeClass.compareA");
TestAnnotationUtils.executeMembers(valueMembers, AscendingIndexAttributeClass.class);
}
// --------------------------------------------------------------
// Test: annotated fields with index attribute
// --> compare fields count = 3
// --> informational fields count = 3
public static class EqualIndexAttributeClass {
@Value(index=3) private String compareC = "";
@Value(index=3) protected String compareB = "";
@Value(index=3) public String compareA = "";
@Value(informational=true, index=2) private String infoC = "";
@Value(informational=true, index=2) protected String infoB = "";
@Value(informational=true, index=2) public String infoA = "";
}
@Test
public void testEqualIndexedFields() throws Exception {
Set<ValueMember<?>> valueMembers = AnnotationProcessor.getValueMembers(
EqualIndexAttributeClass.class);
TestAnnotationUtils.countMembers(valueMembers, 3, 3);
TestAnnotationUtils.checkOrder(valueMembers,
"EqualIndexAttributeClass.infoA",
"EqualIndexAttributeClass.infoB",
"EqualIndexAttributeClass.infoC",
"EqualIndexAttributeClass.compareA",
"EqualIndexAttributeClass.compareB",
"EqualIndexAttributeClass.compareC");
TestAnnotationUtils.executeMembers(valueMembers, EqualIndexAttributeClass.class);
}
// --------------------------------------------------------------
// Test: annotated fields with but changed index
// --> compare fields count = 2
// --> informational fields count = 2
public static class SuperClass {
@Value public String compareField = "";
@Value(informational=true) public String infoField = "";
}
public static class ExtendingClass extends SuperClass {
@Value public String compareField = "";
@Value(informational=true) public String infoField = "";
}
@Test
public void testExtendingFields() throws Exception {
Set<ValueMember<?>> valueMembers = AnnotationProcessor.getValueMembers(
ExtendingClass.class);
TestAnnotationUtils.countMembers(valueMembers, 2, 2);
TestAnnotationUtils.checkOrder(valueMembers,
"ExtendingClass.compareField",
"SuperClass.compareField",
"ExtendingClass.infoField",
"SuperClass.infoField");
TestAnnotationUtils.executeMembers(valueMembers, ExtendingClass.class);
}
// --------------------------------------------------------------
// Test: extended annotated fields with but changed index
// --> compare fields count = 2
// --> informational fields count = 2
public static class IndexedSuperClass {
@Value(index=22) public String compareField = "";
@Value(informational=true, index=21) public String infoField = "";
}
public static class IndexedExtendingClass extends IndexedSuperClass {
@Value(index=12) public String compareField = "";
@Value(informational=true, index=11) public String infoField = "";
}
@Test
public void testExtendingIndexedFields() throws Exception {
Set<ValueMember<?>> valueMembers = AnnotationProcessor.getValueMembers(
IndexedExtendingClass.class);
TestAnnotationUtils.countMembers(valueMembers, 2, 2);
TestAnnotationUtils.checkOrder(valueMembers,
"IndexedExtendingClass.infoField",
"IndexedExtendingClass.compareField",
"IndexedSuperClass.infoField",
"IndexedSuperClass.compareField");
TestAnnotationUtils.executeMembers(valueMembers, IndexedExtendingClass.class);
}
}