X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2Ffeatures%2FFeatureAttributesTest.java;fp=test%2Fjalview%2Fdatamodel%2Ffeatures%2FFeatureAttributesTest.java;h=0846ec26814e1a875f819773cadc9fb3e3924d27;hb=b83eff8c672cede0305da3c76823dab414749dde;hp=0000000000000000000000000000000000000000;hpb=d943fcd0dc04fd4974344eddd13902c89fb595b2;p=jalview.git diff --git a/test/jalview/datamodel/features/FeatureAttributesTest.java b/test/jalview/datamodel/features/FeatureAttributesTest.java new file mode 100644 index 0000000..0846ec2 --- /dev/null +++ b/test/jalview/datamodel/features/FeatureAttributesTest.java @@ -0,0 +1,133 @@ +package jalview.datamodel.features; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.features.FeatureAttributes.Datatype; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; + +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import junit.extensions.PA; + +public class FeatureAttributesTest +{ + + /** + * clear down attributes map before tests + */ + @BeforeClass(alwaysRun = true) + public void setUp() + { + FeatureAttributes fa = FeatureAttributes.getInstance(); + ((Map) PA.getValue(fa, "attributes")).clear(); + } + + /** + * clear down attributes map after tests + */ + @AfterMethod(alwaysRun = true) + public void tearDown() + { + FeatureAttributes fa = FeatureAttributes.getInstance(); + ((Map) PA.getValue(fa, "attributes")).clear(); + } + + /** + * Test the method that keeps attribute names in non-case-sensitive order, + * including handling of 'compound' names + */ + @Test(groups="Functional") + public void testAttributeNameComparator() + { + FeatureAttributes fa = FeatureAttributes.getInstance(); + Comparator comp = (Comparator) PA.getValue(fa, + "comparator"); + + assertEquals( + comp.compare(new String[] { "CSQ" }, new String[] { "csq" }), 0); + + assertTrue(comp.compare(new String[] { "CSQ", "a" }, + new String[] { "csq" }) > 0); + + assertTrue(comp.compare(new String[] { "CSQ" }, new String[] { "csq", + "b" }) < 0); + + assertTrue(comp.compare(new String[] { "CSQ", "AF" }, new String[] { + "csq", "ac" }) > 0); + + assertTrue(comp.compare(new String[] { "CSQ", "ac" }, new String[] { + "csq", "AF" }) < 0); + } + + @Test(groups = "Functional") + public void testGetMinMax() + { + SequenceFeature sf = new SequenceFeature("Pfam", "desc", 10, 20, + "group"); + FeatureAttributes fa = FeatureAttributes.getInstance(); + assertNull(fa.getMinMax("Pfam", "kd")); + sf.setValue("domain", "xyz"); + assertNull(fa.getMinMax("Pfam", "kd")); + sf.setValue("kd", "1.3"); + assertEquals(fa.getMinMax("Pfam", "kd"), new float[] { 1.3f, 1.3f }); + sf.setValue("kd", "-2.6"); + assertEquals(fa.getMinMax("Pfam", "kd"), new float[] { -2.6f, 1.3f }); + // setting 'mixed' character and numeric values wipes the min/max value + sf.setValue("kd", "some text"); + assertNull(fa.getMinMax("Pfam", "kd")); + + Map csq = new HashMap<>(); + csq.put("AF", "-3"); + sf.setValue("CSQ", csq); + assertEquals(fa.getMinMax("Pfam", "CSQ", "AF"), + new float[] + { -3f, -3f }); + csq.put("AF", "4"); + sf.setValue("CSQ", csq); + assertEquals(fa.getMinMax("Pfam", "CSQ", "AF"), + new float[] + { -3f, 4f }); + } + + /** + * Test the method that returns an attribute description, provided it is + * recorded and unique + */ + @Test(groups = "Functional") + public void testGetDescription() + { + FeatureAttributes fa = FeatureAttributes.getInstance(); + // with no description returns null + assertNull(fa.getDescription("Pfam", "kd")); + // with a unique description, returns that value + fa.addDescription("Pfam", "desc1", "kd"); + assertEquals(fa.getDescription("Pfam", "kd"), "desc1"); + // with ambiguous description, returns null + fa.addDescription("Pfam", "desc2", "kd"); + assertNull(fa.getDescription("Pfam", "kd")); + } + + @Test(groups = "Functional") + public void testDatatype() + { + FeatureAttributes fa = FeatureAttributes.getInstance(); + assertNull(fa.getDatatype("Pfam", "kd")); + SequenceFeature sf = new SequenceFeature("Pfam", "desc", 10, 20, + "group"); + sf.setValue("kd", "-1"); + sf.setValue("domain", "Metal"); + sf.setValue("phase", "1"); + sf.setValue("phase", "reverse"); + assertEquals(fa.getDatatype("Pfam", "kd"), Datatype.Number); + assertEquals(fa.getDatatype("Pfam", "domain"), Datatype.Character); + assertEquals(fa.getDatatype("Pfam", "phase"), Datatype.Mixed); + } +}