def test_for_two_cbox_error(self):
     with self.assertRaises(WrongCDBoxOrderExeption):
         CD_snoRNA(snor_id="test_snoRNA",
                   organism="hg",
                   chrom="chr1",
                   start=100,
                   end=170,
                   strand="+",
                   sequence="A" * 70,
                   snor_type="CD",
                   d_boxes="60..63",
                   c_boxes="30..36, 50..56")
     raised = False
     try:
         cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="60..63",
                            c_boxes="30..36, 50..56",
                            switch_boxes=True)
     except WrongCDBoxOrderExeption:
         raised = True
     self.assertFalse(
         raised, "WrongCDBoxOrderExeption raised with swith_boxes=True")
     self.assertEqual(cdsnor.c_box, (30, 36))
     self.assertEqual(cdsnor.cprime_box, (50, 56))
 def setUp(self):
     self.snor = CD_snoRNA(snor_id="test_snoRNA",
                           organism="hg",
                           chrom="chr1",
                           start=100,
                           end=164,
                           strand="+",
                           sequence="C" * 5 + "T" * 20 + "C" * 10 +
                           "A" * 20 + "CATG" + "T" * 5,
                           snor_type="CD",
                           d_boxes="26..29,56..59",
                           c_boxes="49..55,5..13")
 def test_for_non_dbox(self):
     with self.assertRaises(NoBoxException):
         cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes=None)
 def test_for_many_dbox_error(self):
     with self.assertRaises(ToManyBoxesException):
         cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="60..63, 20..23, 30..33")
 def test_for_one_dbox_error(self):
     with self.assertRaises(WrongCDBoxPlacementException):
         cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="20..23")
 def test_for_two_dbox(self):
     cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                        organism="hg",
                        chrom="chr1",
                        start=100,
                        end=170,
                        strand="+",
                        sequence="A" * 70,
                        snor_type="CD",
                        d_boxes="20..23, 60..63")
     self.assertEqual(cdsnor.d_box, (60, 63))
     self.assertEqual(cdsnor.dprime_box, (20, 23))
 def test_for_two_cbox(self):
     cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                        organism="hg",
                        chrom="chr1",
                        start=100,
                        end=170,
                        strand="+",
                        sequence="A" * 70,
                        snor_type="CD",
                        d_boxes="60..63",
                        c_boxes="50..56,30..36")
     self.assertEqual(cdsnor.c_box, (30, 36))
     self.assertEqual(cdsnor.cprime_box, (50, 56))
class TestCD_snoRNA(unittest.TestCase):
    """Test CD_snoRNA class"""
    def setUp(self):
        self.snor = CD_snoRNA(snor_id="test_snoRNA",
                              organism="hg",
                              chrom="chr1",
                              start=100,
                              end=164,
                              strand="+",
                              sequence="C" * 5 + "T" * 20 + "C" * 10 +
                              "A" * 20 + "CATG" + "T" * 5,
                              snor_type="CD",
                              d_boxes="26..29,56..59",
                              c_boxes="49..55,5..13")

    def test_for_non_dbox(self):
        with self.assertRaises(NoBoxException):
            cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                               organism="hg",
                               chrom="chr1",
                               start=100,
                               end=170,
                               strand="+",
                               sequence="A" * 70,
                               snor_type="CD",
                               d_boxes=None)

    def test_for_one_dbox_error(self):
        with self.assertRaises(WrongCDBoxPlacementException):
            cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                               organism="hg",
                               chrom="chr1",
                               start=100,
                               end=170,
                               strand="+",
                               sequence="A" * 70,
                               snor_type="CD",
                               d_boxes="20..23")

    def test_for_one_dbox(self):
        cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                           organism="hg",
                           chrom="chr1",
                           start=100,
                           end=170,
                           strand="+",
                           sequence="A" * 70,
                           snor_type="CD",
                           d_boxes="60..63")
        self.assertEqual(cdsnor.d_box, (60, 63))
        self.assertEqual(cdsnor.dprime_box, None)

    def test_for_two_dbox(self):
        cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                           organism="hg",
                           chrom="chr1",
                           start=100,
                           end=170,
                           strand="+",
                           sequence="A" * 70,
                           snor_type="CD",
                           d_boxes="20..23, 60..63")
        self.assertEqual(cdsnor.d_box, (60, 63))
        self.assertEqual(cdsnor.dprime_box, (20, 23))

    def test_for_two_dbox_error(self):
        with self.assertRaises(WrongCDBoxOrderExeption):
            CD_snoRNA(snor_id="test_snoRNA",
                      organism="hg",
                      chrom="chr1",
                      start=100,
                      end=170,
                      strand="+",
                      sequence="A" * 70,
                      snor_type="CD",
                      d_boxes="60..63, 20..23")
        raised = False
        try:
            cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                               organism="hg",
                               chrom="chr1",
                               start=100,
                               end=170,
                               strand="+",
                               sequence="A" * 70,
                               snor_type="CD",
                               d_boxes="60..63, 20..23",
                               switch_boxes=True)
        except WrongCDBoxOrderExeption:
            raised = True
        self.assertFalse(
            raised, "WrongCDBoxOrderExeption raised with swith_boxes=True")
        self.assertEqual(cdsnor.d_box, (60, 63))
        self.assertEqual(cdsnor.dprime_box, (20, 23))

    def test_for_many_dbox_error(self):
        with self.assertRaises(ToManyBoxesException):
            cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                               organism="hg",
                               chrom="chr1",
                               start=100,
                               end=170,
                               strand="+",
                               sequence="A" * 70,
                               snor_type="CD",
                               d_boxes="60..63, 20..23, 30..33")

    def test_for_one_cbox(self):
        cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                           organism="hg",
                           chrom="chr1",
                           start=100,
                           end=170,
                           strand="+",
                           sequence="A" * 70,
                           snor_type="CD",
                           d_boxes="60..63",
                           c_boxes="30..36")
        self.assertEqual(cdsnor.c_box, (30, 36))
        self.assertEqual(cdsnor.cprime_box, None)

    def test_for_two_cbox(self):
        cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                           organism="hg",
                           chrom="chr1",
                           start=100,
                           end=170,
                           strand="+",
                           sequence="A" * 70,
                           snor_type="CD",
                           d_boxes="60..63",
                           c_boxes="50..56,30..36")
        self.assertEqual(cdsnor.c_box, (30, 36))
        self.assertEqual(cdsnor.cprime_box, (50, 56))

    def test_for_two_cbox_error(self):
        with self.assertRaises(WrongCDBoxOrderExeption):
            CD_snoRNA(snor_id="test_snoRNA",
                      organism="hg",
                      chrom="chr1",
                      start=100,
                      end=170,
                      strand="+",
                      sequence="A" * 70,
                      snor_type="CD",
                      d_boxes="60..63",
                      c_boxes="30..36, 50..56")
        raised = False
        try:
            cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                               organism="hg",
                               chrom="chr1",
                               start=100,
                               end=170,
                               strand="+",
                               sequence="A" * 70,
                               snor_type="CD",
                               d_boxes="60..63",
                               c_boxes="30..36, 50..56",
                               switch_boxes=True)
        except WrongCDBoxOrderExeption:
            raised = True
        self.assertFalse(
            raised, "WrongCDBoxOrderExeption raised with swith_boxes=True")
        self.assertEqual(cdsnor.c_box, (30, 36))
        self.assertEqual(cdsnor.cprime_box, (50, 56))

    def test_for_many_cbox_error(self):
        with self.assertRaises(ToManyBoxesException):
            cdsnor = CD_snoRNA(snor_id="test_snoRNA",
                               organism="hg",
                               chrom="chr1",
                               start=100,
                               end=170,
                               strand="+",
                               sequence="A" * 70,
                               snor_type="CD",
                               d_boxes="60..63",
                               c_boxes="50..56, 20..26, 30..36")

    def test_for_plexy_string(self):
        cdsnor1 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="61..64",
                            c_boxes=None)
        plexy1 = ">test_snoRNA-_NNNNNNN_10_AAAA_61\n%s\n" % ("A" * 70)
        self.assertEqual(cdsnor1.get_plexy_string(), plexy1)

        cdsnor2 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="30..33,60..63",
                            c_boxes=None)
        plexy2 = ">test_snoRNA-_NNNNNNN_50_AAAA_30_NNNNNNN_10_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor2.get_plexy_string(), plexy2)

        cdsnor3 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="60..63",
                            c_boxes="21..27")
        plexy3 = ">test_snoRNA-_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor3.get_plexy_string(), plexy3)

        cdsnor4 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="30..33,60..63",
                            c_boxes="21..27")
        plexy4 = ">test_snoRNA-_NNNNNNN_50_AAAA_30_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor4.get_plexy_string(), plexy4)

        cdsnor5 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="60..63",
                            c_boxes="49..55,21..27")
        plexy5 = ">test_snoRNA-_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor5.get_plexy_string(), plexy5)

        cdsnor6 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="30..33,60..63",
                            c_boxes="49..55,21..27")
        plexy6 = ">test_snoRNA-_AAAAAAA_49_AAAA_30_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor6.get_plexy_string(), plexy6)

    def test_interaction_region_d_box(self):
        inreg = self.snor.get_d_interaction_region(length=20)
        self.assertEqual(type(inreg), type(Seq("AAAA")))
        self.assertEqual(str(inreg), "A" * 20)

    def test_interaction_region_dprime_box(self):
        inreg = self.snor.get_dprime_interaction_region(length=20)
        self.assertEqual(type(inreg), type(Seq("AAAA")))
        self.assertEqual(str(inreg), "T" * 20)
    def test_for_plexy_string(self):
        cdsnor1 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="61..64",
                            c_boxes=None)
        plexy1 = ">test_snoRNA-_NNNNNNN_10_AAAA_61\n%s\n" % ("A" * 70)
        self.assertEqual(cdsnor1.get_plexy_string(), plexy1)

        cdsnor2 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="30..33,60..63",
                            c_boxes=None)
        plexy2 = ">test_snoRNA-_NNNNNNN_50_AAAA_30_NNNNNNN_10_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor2.get_plexy_string(), plexy2)

        cdsnor3 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="60..63",
                            c_boxes="21..27")
        plexy3 = ">test_snoRNA-_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor3.get_plexy_string(), plexy3)

        cdsnor4 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="30..33,60..63",
                            c_boxes="21..27")
        plexy4 = ">test_snoRNA-_NNNNNNN_50_AAAA_30_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor4.get_plexy_string(), plexy4)

        cdsnor5 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="60..63",
                            c_boxes="49..55,21..27")
        plexy5 = ">test_snoRNA-_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor5.get_plexy_string(), plexy5)

        cdsnor6 = CD_snoRNA(snor_id="test_snoRNA",
                            organism="hg",
                            chrom="chr1",
                            start=100,
                            end=170,
                            strand="+",
                            sequence="A" * 70,
                            snor_type="CD",
                            d_boxes="30..33,60..63",
                            c_boxes="49..55,21..27")
        plexy6 = ">test_snoRNA-_AAAAAAA_49_AAAA_30_AAAAAAA_21_AAAA_60\n%s\n" \
                 % ("A"*70)
        self.assertEqual(cdsnor6.get_plexy_string(), plexy6)