From 68c5cdaccfc2426a5bcd7ac89ff3dcf5ed984a26 Mon Sep 17 00:00:00 2001 From: Peter Cock Date: Fri, 25 Aug 2017 16:18:44 +0100 Subject: [PATCH] Generalise short-arrow test to other sigils. This fails to reproduce the short BIGARROW issue which Spencer Bliven reported in #1329, but does identify a similar corner case with short OCTO sigils in linear diagrams. --- Tests/test_GenomeDiagram.py | 73 ++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/Tests/test_GenomeDiagram.py b/Tests/test_GenomeDiagram.py index 4f8b308a4a6..457ca932dfd 100755 --- a/Tests/test_GenomeDiagram.py +++ b/Tests/test_GenomeDiagram.py @@ -466,50 +466,95 @@ def test_arrow_heads(self): self.assertEqual(len(self.gdd.tracks), 4) self.finish("GD_sigil_arrows") - def test_small_arrow_heads(self): - """Feature arrow sigil heads within bounding box.""" + def short_sigils(self, glyph): + """Draw sigils on top of grey box backgrounds.""" + # The blue boxes are only relevant for the BIGARROW # Add a track of features, bigger height to emphasise any sigil errors self.gdt_features = self.gdd.new_track(1, greytrack=True, height=3) # We'll just use one feature set for these features, self.gds_features = self.gdt_features.new_set() - # Green arrows just have small heads (meaning if there is a mitre - # it will escape the bounding box). Red arrows are small triangles. + # For the ARROW and BIGARROW sigils: + # - Green arrows just have small heads (meaning if there is a mitre + # it will escape the bounding box). + # - Red arrows should be small triangles (so short no shaft shown) + + # Forward strand: + feature = SeqFeature(FeatureLocation(15, 30), strand=-1) + self.gds_features.add_feature(feature, color="blue") feature = SeqFeature(FeatureLocation(15, 30), strand=+1) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Forward", sigil="ARROW", + self.gds_features.add_feature(feature, name="Forward", sigil=glyph, arrowhead_length=0.05) + + feature = SeqFeature(FeatureLocation(55, 60), strand=-1) + self.gds_features.add_feature(feature, color="blue") feature = SeqFeature(FeatureLocation(55, 60), strand=+1) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Forward", sigil="ARROW", + self.gds_features.add_feature(feature, name="Forward", sigil=glyph, arrowhead_length=1000, color="red") + + feature = SeqFeature(FeatureLocation(75, 125), strand=-1) + self.gds_features.add_feature(feature, color="blue") feature = SeqFeature(FeatureLocation(75, 125), strand=+1) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Forward", sigil="ARROW", + self.gds_features.add_feature(feature, name="Forward", sigil=glyph, arrowhead_length=0.05) + + # Strandless: feature = SeqFeature(FeatureLocation(140, 155), strand=None) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Strandless", sigil="ARROW", + self.gds_features.add_feature(feature, name="Strandless", sigil=glyph, arrowhead_length=0.05) + feature = SeqFeature(FeatureLocation(180, 185), strand=None) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Strandless", sigil="ARROW", + self.gds_features.add_feature(feature, name="Strandless", sigil=glyph, arrowhead_length=1000, color="red") + feature = SeqFeature(FeatureLocation(200, 250), strand=None) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Strandless", sigil="ARROW", + self.gds_features.add_feature(feature, name="Strandless", sigil=glyph, arrowhead_length=0.05) + + # Reverse strand: + feature = SeqFeature(FeatureLocation(265, 280), strand=+1) + self.gds_features.add_feature(feature, color="blue") feature = SeqFeature(FeatureLocation(265, 280), strand=-1) - self.gds_features.add_feature(feature, name="Reverse", sigil="ARROW", + self.gds_features.add_feature(feature, color="grey") + self.gds_features.add_feature(feature, name="Reverse", sigil=glyph, arrowhead_length=0.05) + + feature = SeqFeature(FeatureLocation(305, 310), strand=+1) + self.gds_features.add_feature(feature, color="blue") feature = SeqFeature(FeatureLocation(305, 310), strand=-1) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Reverse", sigil="ARROW", + self.gds_features.add_feature(feature, name="Reverse", sigil=glyph, arrowhead_length=1000, color="red") + + feature = SeqFeature(FeatureLocation(325, 375), strand=+1) + self.gds_features.add_feature(feature, color="blue") feature = SeqFeature(FeatureLocation(325, 375), strand=-1) self.gds_features.add_feature(feature, color="grey") - self.gds_features.add_feature(feature, name="Reverse", sigil="ARROW", + self.gds_features.add_feature(feature, name="Reverse", sigil=glyph, arrowhead_length=0.05) - self.finish("GD_sigil_arrows_small") + + self.finish("GD_sigil_short_%s" % glyph) + + def test_short_arrow(self): + """Feature arrow sigil heads within bounding box.""" + self.short_sigils("ARROW") + + def test_short_bigarrow(self): + """Feature big-arrow sigil heads within bounding box.""" + self.short_sigils("BIGARROW") + + def test_short_jaggy(self): + """Feature arrow sigil heads within bounding box.""" + self.short_sigils("JAGGY") + + def test_short_octo(self): + """Feature big-arrow sigil heads within bounding box.""" + self.short_sigils("OCTO") def long_sigils(self, glyph): """Check feature sigils within bounding box."""