import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import junit.extensions.PA;
-
public class FeatureColourTest
{
}
@Test(groups = { "Functional" })
+ public void testConstructors()
+ {
+ FeatureColourI fc = new FeatureColour();
+ assertNull(fc.getColour());
+ assertTrue(fc.isSimpleColour());
+ assertFalse(fc.isColourByLabel());
+ assertFalse(fc.isGraduatedColour());
+ assertFalse(fc.isColourByAttribute());
+ assertEquals(Color.white, fc.getMinColour());
+ assertEquals(Color.black, fc.getMaxColour());
+
+ fc = new FeatureColour(Color.RED);
+ assertEquals(Color.red, fc.getColour());
+ assertTrue(fc.isSimpleColour());
+ assertFalse(fc.isColourByLabel());
+ assertFalse(fc.isGraduatedColour());
+ assertFalse(fc.isColourByAttribute());
+ assertEquals(ColorUtils.bleachColour(Color.RED, 0.9f),
+ fc.getMinColour());
+ assertEquals(Color.RED, fc.getMaxColour());
+
+ }
+
+ @Test(groups = { "Functional" })
public void testCopyConstructor()
{
/*
/*
* min-max colour
*/
- fc = new FeatureColour(Color.gray, Color.black, 10f, 20f);
+ fc = new FeatureColour(null, Color.gray, Color.black, Color.gray, 10f,
+ 20f);
fc.setAboveThreshold(true);
fc.setThreshold(12f);
fc1 = new FeatureColour(fc);
/*
* min-max-noValue colour
*/
- fc = new FeatureColour(Color.gray, Color.black, Color.green, 10f, 20f);
+ fc = new FeatureColour(Color.red, Color.gray, Color.black, Color.green,
+ 10f, 20f);
fc.setAboveThreshold(true);
fc.setThreshold(12f);
fc1 = new FeatureColour(fc);
assertTrue(fc1.isGraduatedColour());
assertFalse(fc1.isColourByLabel());
+ assertFalse(fc1.isSimpleColour());
assertFalse(fc1.isColourByAttribute());
assertNull(fc1.getAttributeName());
assertTrue(fc1.isAboveThreshold());
assertEquals(Color.gray, fc1.getMinColour());
assertEquals(Color.black, fc1.getMaxColour());
assertEquals(Color.green, fc1.getNoColour());
+ assertEquals(Color.red, fc1.getColour());
assertEquals(10f, fc1.getMin());
assertEquals(20f, fc1.getMax());
/*
* colour by attribute (value)
*/
- fc = new FeatureColour(Color.gray, Color.black, Color.green, 10f, 20f);
+ fc = new FeatureColour(Color.yellow, Color.gray, Color.black,
+ Color.green, 10f, 20f);
fc.setAboveThreshold(true);
fc.setThreshold(12f);
fc.setAttributeName("AF");
assertTrue(fc1.isGraduatedColour());
assertFalse(fc1.isColourByLabel());
assertTrue(fc1.isColourByAttribute());
+ assertFalse(fc1.isSimpleColour());
assertArrayEquals(new String[] { "AF" }, fc1.getAttributeName());
assertTrue(fc1.isAboveThreshold());
assertEquals(12f, fc1.getThreshold());
assertEquals(Color.gray, fc1.getMinColour());
assertEquals(Color.black, fc1.getMaxColour());
assertEquals(Color.green, fc1.getNoColour());
+ assertEquals(Color.yellow, fc1.getColour());
assertEquals(10f, fc1.getMin());
assertEquals(20f, fc1.getMax());
- }
-
- @Test(groups = { "Functional" })
- public void testCopyConstructor_minMax()
- {
- /*
- * graduated colour
- */
- FeatureColour fc = new FeatureColour(Color.BLUE, Color.RED, 1f, 5f);
- assertTrue(fc.isGraduatedColour());
- assertFalse(fc.isColourByLabel());
- assertFalse(fc.isColourByAttribute());
- assertNull(fc.getAttributeName());
- assertEquals(1f, fc.getMin());
- assertEquals(5f, fc.getMax());
-
- /*
- * update min-max bounds
- */
- FeatureColour fc1 = new FeatureColour(fc, 2f, 6f);
- assertTrue(fc1.isGraduatedColour());
- assertFalse(fc1.isColourByLabel());
- assertFalse(fc1.isColourByAttribute());
- assertNull(fc1.getAttributeName());
- assertEquals(2f, fc1.getMin());
- assertEquals(6f, fc1.getMax());
- assertFalse((boolean) PA.getValue(fc1, "isHighToLow"));
-
- /*
- * update min-max bounds - high to low
- */
- fc1 = new FeatureColour(fc, 23f, 16f);
- assertTrue(fc1.isGraduatedColour());
- assertFalse(fc1.isColourByLabel());
- assertFalse(fc1.isColourByAttribute());
- assertNull(fc1.getAttributeName());
- assertEquals(23f, fc1.getMin());
- assertEquals(16f, fc1.getMax());
- assertTrue((boolean) PA.getValue(fc1, "isHighToLow"));
/*
- * graduated colour by attribute
+ * modify original attribute label and check that copy doesn't change
*/
- fc1.setAttributeName("AF");
- fc1 = new FeatureColour(fc1, 13f, 36f);
- assertTrue(fc1.isGraduatedColour());
- assertFalse(fc1.isColourByLabel());
- assertTrue(fc1.isColourByAttribute());
+ fc.setAttributeName("MAF", "AF");
assertArrayEquals(new String[] { "AF" }, fc1.getAttributeName());
- assertEquals(13f, fc1.getMin());
- assertEquals(36f, fc1.getMax());
- assertFalse((boolean) PA.getValue(fc1, "isHighToLow"));
-
- /*
- * colour by label
- */
- fc = new FeatureColour(Color.BLUE, Color.RED, 1f, 5f);
- fc.setColourByLabel(true);
- assertFalse(fc.isGraduatedColour());
- assertTrue(fc.isColourByLabel());
- assertFalse(fc.isColourByAttribute());
- assertNull(fc.getAttributeName());
- assertEquals(1f, fc.getMin());
- assertEquals(5f, fc.getMax());
-
- /*
- * update min-max bounds
- */
- fc1 = new FeatureColour(fc, 2f, 6f);
- assertFalse(fc1.isGraduatedColour());
- assertTrue(fc1.isColourByLabel());
- assertFalse(fc1.isColourByAttribute());
- assertNull(fc1.getAttributeName());
- assertEquals(2f, fc1.getMin());
- assertEquals(6f, fc1.getMax());
- /*
- * colour by attribute text
- */
- fc1.setAttributeName("AC");
- fc1 = new FeatureColour(fc1, 13f, 36f);
- assertFalse(fc1.isGraduatedColour());
- assertTrue(fc1.isColourByLabel());
- assertTrue(fc1.isColourByAttribute());
- assertArrayEquals(new String[] { "AC" }, fc1.getAttributeName());
- assertEquals(13f, fc1.getMin());
- assertEquals(36f, fc1.getMax());
}
@Test(groups = { "Functional" })
* score 0 to 100
* gray(128, 128, 128) to red(255, 0, 0)
*/
- FeatureColour fc = new FeatureColour(Color.GRAY, Color.RED, 0f, 100f);
+ FeatureColour fc = new FeatureColour(null, Color.GRAY, Color.RED, null,
+ 0f, 100f);
// feature score is 75 which is 3/4 of the way from GRAY to RED
SequenceFeature sf = new SequenceFeature("type", "desc", 0, 20, 75f,
null);
public void testGetColor_aboveBelowThreshold()
{
// gradient from [50, 150] from WHITE(255, 255, 255) to BLACK(0, 0, 0)
- FeatureColour fc = new FeatureColour(Color.WHITE, Color.BLACK, 50f,
- 150f);
+ FeatureColour fc = new FeatureColour(null, Color.WHITE, Color.BLACK,
+ Color.white, 50f, 150f);
SequenceFeature sf = new SequenceFeature("type", "desc", 0, 20, 70f,
null);
fc = new FeatureColour();
fc.setColourByLabel(true);
fc.setAttributeName("CLIN_SIG");
- assertEquals("domain\tattribute|CLIN_SIG", fc.toJalviewFormat("domain"));
-
+ assertEquals("domain\tattribute|CLIN_SIG",
+ fc.toJalviewFormat("domain"));
+
/*
* colour by label (autoscaled) (an odd state you can reach by selecting
* 'above threshold', then deselecting 'threshold is min/max' then 'colour
* graduated colour by score, no threshold
* - default constructor sets noValueColor = minColor
*/
- fc = new FeatureColour(Color.GREEN, Color.RED, 12f, 25f);
+ fc = new FeatureColour(null, Color.GREEN, Color.RED, Color.GREEN, 12f,
+ 25f);
String greenHex = Format.getHexString(Color.GREEN);
String expected = String.format(
"domain\tscore|%s|%s|noValueMin|abso|12.0|25.0|none", greenHex,
/*
* graduated colour by score, no threshold, no value gets min colour
*/
- fc = new FeatureColour(Color.GREEN, Color.RED, Color.GREEN, 12f, 25f);
+ fc = new FeatureColour(Color.RED, Color.GREEN, Color.RED, Color.GREEN,
+ 12f, 25f);
expected = String.format(
"domain\tscore|%s|%s|noValueMin|abso|12.0|25.0|none", greenHex,
redHex);
/*
* graduated colour by score, no threshold, no value gets max colour
*/
- fc = new FeatureColour(Color.GREEN, Color.RED, Color.RED, 12f, 25f);
+ fc = new FeatureColour(Color.RED, Color.GREEN, Color.RED, Color.RED,
+ 12f, 25f);
expected = String.format(
"domain\tscore|%s|%s|noValueMax|abso|12.0|25.0|none", greenHex,
redHex);
assertEquals(expected, fc.toJalviewFormat("domain"));
-
+
/*
* colour ranges over the actual score ranges (not min/max)
*/
fc.setThreshold(12.5f);
fc.setBelowThreshold(true);
expected = String.format(
- "domain\tscore|%s|%s|noValueMax|12.0|25.0|below|12.5",
- greenHex, redHex);
+ "domain\tscore|%s|%s|noValueMax|12.0|25.0|below|12.5", greenHex,
+ redHex);
assertEquals(expected, fc.toJalviewFormat("domain"));
/*
/*
* simple colour by hex code
*/
- fc = FeatureColour.parseJalviewFeatureColour(Format
- .getHexString(Color.RED));
+ fc = FeatureColour
+ .parseJalviewFeatureColour(Format.getHexString(Color.RED));
assertTrue(fc.isSimpleColour());
assertEquals(Color.RED, fc.getColour());
* graduated colour based on attribute value for AF
* given a min-max range of 0-100
*/
- FeatureColour fc = new FeatureColour(new Color(50, 100, 150),
- new Color(150, 200, 250), Color.yellow, 0f, 100f);
+ FeatureColour fc = new FeatureColour(Color.white,
+ new Color(50, 100, 150), new Color(150, 200, 250), Color.yellow,
+ 0f, 100f);
String attName = "AF";
fc.setAttributeName(attName);
public void testIsOutwithThreshold()
{
FeatureColourI fc = new FeatureColour(Color.red);
- SequenceFeature sf = new SequenceFeature("METAL", "desc", 10, 12, 1.2f, "grp");
+ SequenceFeature sf = new SequenceFeature("METAL", "desc", 10, 12, 1.2f,
+ "grp");
assertFalse(fc.isOutwithThreshold(null));
assertFalse(fc.isOutwithThreshold(sf));
- fc = new FeatureColour(Color.white, Color.black, Color.green, 0f, 10f);
+ fc = new FeatureColour(null, Color.white, Color.black, Color.green, 0f,
+ 10f);
assertFalse(fc.isOutwithThreshold(sf)); // no threshold
fc.setAboveThreshold(true);
sf.setValue("AC", "junk");
assertFalse(fc.isOutwithThreshold(sf)); // bad value is ignored
}
+
+ /**
+ * Test description of feature colour suitable for a tooltip
+ */
+ @Test(groups = { "Functional" })
+ public void testGetDescription()
+ {
+ /*
+ * plain colour
+ */
+ FeatureColour fc = new FeatureColour(Color.RED);
+ assertEquals(
+ String.format("r=%d,g=%d,b=%d", Color.RED.getRed(),
+ Color.red.getGreen(), Color.red.getBlue()),
+ fc.getDescription());
+
+ /*
+ * colour by label (no threshold)
+ */
+ fc = new FeatureColour();
+ fc.setColourByLabel(true);
+ assertEquals("By Label", fc.getDescription());
+
+ /*
+ * colour by attribute text (no threshold)
+ */
+ fc = new FeatureColour();
+ fc.setColourByLabel(true);
+ fc.setAttributeName("CLIN_SIG");
+ assertEquals("By CLIN_SIG", fc.getDescription());
+
+ /*
+ * colour by label (above score threshold)
+ */
+ fc = new FeatureColour();
+ fc.setColourByLabel(true);
+ fc.setAutoScaled(false);
+ fc.setThreshold(12.5f);
+ fc.setAboveThreshold(true);
+ assertEquals("By Label (Score > 12.5)", fc.getDescription());
+
+ /*
+ * colour by label (below score threshold)
+ */
+ fc.setBelowThreshold(true);
+ assertEquals("By Label (Score < 12.5)", fc.getDescription());
+
+ /*
+ * colour by attributes text (below score threshold)
+ */
+ fc.setBelowThreshold(true);
+ fc.setAttributeName("CSQ", "Consequence");
+ assertEquals("By CSQ:Consequence (Score < 12.5)", fc.getDescription());
+
+ /*
+ * graduated colour by score, no threshold
+ */
+ fc = new FeatureColour(null, Color.GREEN, Color.RED, null, 12f, 25f);
+ assertEquals("By Score", fc.getDescription());
+
+ /*
+ * graduated colour by score, below threshold
+ */
+ fc.setThreshold(12.5f);
+ fc.setBelowThreshold(true);
+ assertEquals("By Score (< 12.5)", fc.getDescription());
+
+ /*
+ * graduated colour by score, above threshold
+ */
+ fc.setThreshold(12.5f);
+ fc.setAboveThreshold(true);
+ fc.setAutoScaled(false);
+ assertEquals("By Score (> 12.5)", fc.getDescription());
+
+ /*
+ * graduated colour by attribute, no threshold
+ */
+ fc.setAttributeName("CSQ", "AF");
+ fc.setAboveThreshold(false);
+ fc.setAutoScaled(false);
+ assertEquals("By CSQ:AF", fc.getDescription());
+
+ /*
+ * graduated colour by attribute, above threshold
+ */
+ fc.setAboveThreshold(true);
+ fc.setAutoScaled(false);
+ assertEquals("By CSQ:AF (> 12.5)", fc.getDescription());
+ }
}