Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

241 lines (209 sloc) 9.905 kb
#!/usr/bin/env python
"""Tests for Primer-based programs in the Emboss suite.
"""
# standard library
import sys
import os
import unittest
# local stuff
from Bio.Emboss import PrimerSearch, Primer3
class Primer3ParseTest(unittest.TestCase):
def setUp(self):
self.test_files = \
[os.path.join("Emboss", "bac_find.primer3"),
os.path.join("Emboss", "cds_forward.primer3"),
os.path.join("Emboss", "cds_reverse.primer3"),
os.path.join("Emboss", "short.primer3"),
os.path.join("Emboss", "internal_oligo.primer3"),
]
def test_simple_parse(self):
"""Make sure that we can use all single target primer3 files.
"""
for file in self.test_files:
# First using read...
h = open(file, "r")
Primer3.read(h)
h.close()
# Now using parse...
h = open(file, "r")
self.assertEqual(1, len(list(Primer3.parse(h))))
h.close()
def test_indepth_regular_parse(self):
"""Make sure we get the data from normal primer3 files okay.
"""
regular_file = self.test_files[0]
h = open(regular_file, "r")
primer_info = Primer3.read(h)
h.close()
self.assertEqual(len(primer_info.primers), 5)
self.assertEqual(primer_info.comments,
"# PRIMER3 RESULTS FOR AC074298\n")
self.assertEqual(primer_info.primers[1].forward_seq,
"CCGGTTTCTCTGGTTGAAAA")
self.assertEqual(primer_info.primers[2].reverse_seq,
"TCACATTCCCAAATGTAGATCG")
self.assertEqual(primer_info.primers[0].size, 218)
self.assertEqual(len(primer_info.primers[0]), 218)
self.assertEqual(primer_info.primers[3].forward_start, 112)
self.assertEqual(primer_info.primers[3].forward_length, 20)
self.assertEqual(primer_info.primers[3].forward_tm, 59.57)
self.assertEqual(primer_info.primers[3].forward_gc, 45.00)
self.assertEqual(primer_info.primers[4].reverse_start, 304)
self.assertEqual(primer_info.primers[4].reverse_length, 22)
self.assertEqual(primer_info.primers[4].reverse_tm, 59.61)
self.assertEqual(primer_info.primers[4].reverse_gc, 40.91)
def test_in_depth_single_parse(self):
"""Make sure we get info right from a single primer find.
"""
file = self.test_files[1]
h = open(file, "r")
primer_info = Primer3.read(h)
h.close()
self.assertEqual(len(primer_info.primers), 5)
self.assertEqual(primer_info.comments,
"# PRIMER3 RESULTS FOR 26964-28647#\n")
self.assertEqual(primer_info.primers[1].reverse_seq, "")
self.assertEqual(primer_info.primers[1].internal_seq, "")
self.assertEqual(primer_info.primers[3].forward_seq, "TGTGATTGCTTGAGCTGGAC")
self.assertEqual(primer_info.primers[3].internal_seq, "")
self.assertEqual(primer_info.primers[3].forward_start, 253)
def test_internal_oligo_single_parse(self):
''' Make sure we can parse an internal oligo file correctly '''
# these files are generated when designing hybridization probes.
file = self.test_files[4]
h = open(file, "r")
primer_info = Primer3.read(h)
h.close()
self.assertEqual(len(primer_info.primers), 5)
self.assertEqual(primer_info.comments,
"# EPRIMER3 RESULTS FOR YNL138W-A\n")
self.assertEqual(primer_info.primers[0].internal_length, 22)
self.assertEqual(primer_info.primers[1].internal_seq,
'TTGCGCTTTAGTTTGAATTGAA')
self.assertEqual(primer_info.primers[2].internal_tm, 58.62)
self.assertEqual(primer_info.primers[3].internal_start, 16)
self.assertEqual(primer_info.primers[4].internal_gc, 35.00)
def test_mutli_record_fwd(self):
"""Test parsing multiple primer sets (NirK forward)"""
h = open(os.path.join("Emboss", "NirK.primer3"))
targets = list(Primer3.parse(h))
h.close()
self.assertEqual(len(targets), 16)
for target in targets:
self.assertEqual(len(target.primers), 5)
self.assertEqual(targets[0].primers[0].forward_seq,
"GCAAACTGAAAAGCGGACTC")
self.assertEqual(targets[0].primers[1].forward_seq,
"GGGACGTACTTTCGCACAAT")
self.assertEqual(targets[0].primers[2].forward_seq,
"GTCTTATGCGTGGTGGAGGT")
self.assertEqual(targets[0].primers[3].forward_seq,
"GTACATCAACATCCGCAACG")
self.assertEqual(targets[0].primers[4].forward_seq,
"CGTACATCAACATCCGCAAC")
self.assertEqual(targets[1].primers[0].forward_seq,
"GGAAGTGCTTCTCGTTTTCG")
self.assertEqual(targets[1].primers[1].forward_seq,
"TACAGAGCGTCACGGATGAG")
self.assertEqual(targets[1].primers[2].forward_seq,
"TTGTCATCGTGCTCTTCGTC")
self.assertEqual(targets[1].primers[3].forward_seq,
"GACTCCAACCTCAGCTTTCG")
self.assertEqual(targets[1].primers[4].forward_seq,
"GGCACGAAGAAGGACAGAAG")
self.assertEqual(targets[15].primers[0].forward_seq,
"TGCTTGAAAATGACGCACTC")
self.assertEqual(targets[15].primers[1].forward_seq,
"CTCGCTGGCTAGGTCATAGG")
self.assertEqual(targets[15].primers[2].forward_seq,
"TATCGCACCAAACACGGTAA")
self.assertEqual(targets[15].primers[3].forward_seq,
"CGATTACCCTCACCGTCACT")
self.assertEqual(targets[15].primers[4].forward_seq,
"TATCGCAACCACTGAGCAAG")
def test_mutli_record_full(self):
"""Test parsing multiple primer sets (NirK full)"""
h = open(os.path.join("Emboss", "NirK_full.primer3"))
targets = list(Primer3.parse(h))
h.close()
self.assertEqual(len(targets), 16)
for target in targets:
self.assertEqual(len(target.primers), 5)
self.assertEqual(targets[15].primers[0].forward_seq,
"ACTCACTTCGGCTGAATGCT")
self.assertEqual(targets[15].primers[1].forward_seq,
"GGCGATTAGCGCTGTCTATC")
self.assertEqual(targets[15].primers[2].forward_seq,
"ACTCACTTCGGCTGAATGCT")
self.assertEqual(targets[15].primers[3].forward_seq,
"TAGGCGTATAGACCGGGTTG")
self.assertEqual(targets[15].primers[4].forward_seq,
"AGCAAGCTGACCACTGGTTT")
self.assertEqual(targets[15].primers[0].reverse_seq,
"CATTTAATCCGGATGCCAAC")
self.assertEqual(targets[15].primers[1].reverse_seq,
"TGGCCTTTCTCTCCTCTTCA")
self.assertEqual(targets[15].primers[2].reverse_seq,
"ATTTAATCCGGATGCCAACA")
self.assertEqual(targets[15].primers[3].reverse_seq,
"CACACATTATTGGCGGTCAC")
self.assertEqual(targets[15].primers[4].reverse_seq,
"TCTGAAACCACCAAGGAAGC")
self.assertEqual(targets[15].primers[0].internal_seq,
"CCCACCAATATTTGGCTAGC")
self.assertEqual(targets[15].primers[1].internal_seq,
"AATCTTCTGTGCACCTTGCC")
self.assertEqual(targets[15].primers[2].internal_seq,
"CCCACCAATATTTGGCTAGC")
self.assertEqual(targets[15].primers[3].internal_seq,
"TGAGCCTGTGTTCCACACAT")
self.assertEqual(targets[15].primers[4].internal_seq,
"CTATGCCCTTCTGCCACAAT")
class PrimersearchParseTest(unittest.TestCase):
def setUp(self):
self.test_files = \
[os.path.join("Emboss", "bac_find.psearch")]
def test_simple_parse(self):
"""Make sure that we can parse all primersearch files.
"""
for file in self.test_files:
h = open(file, "r")
PrimerSearch.read(h)
h.close()
def test_in_depth_normal_parse(self):
"""Make sure the output from a simple primersearch file is correct.
"""
file = self.test_files[0]
h = open(file, "r")
amp_info = PrimerSearch.read(h)
h.close()
self.assertEqual(len(amp_info.amplifiers), 1)
self.assertTrue("Test" in amp_info.amplifiers)
self.assertEqual(len(amp_info.amplifiers["Test"]), 1)
self.assertEqual(amp_info.amplifiers["Test"][0].length, 218)
self.assertEqual(amp_info.amplifiers["Test"][0].hit_info,
"AC074298 AC074298 \n"
"\tTelomere associated sequence for Arabidopsis thaliana "
"TEL1N from chromosome I, complete sequence.\n"
"\tCCGGTTTCTCTGGTTGAAAA hits forward strand at 114 with "
"0 mismatches\n"
"\tTCACATTCCCAAATGTAGATCG hits reverse strand at [114] with "
"0 mismatches")
class PrimerSearchInputTest(unittest.TestCase):
"""Test creating input files for primersearch.
"""
def setUp(self):
pass
def test_primer_representation(self):
"""Make sure we can output primer information correctly.
"""
p_info = PrimerSearch.InputRecord()
p_info.add_primer_set("Test", "GATC", "CATG")
p_info.add_primer_set("Test2", "AATA", "TTAT")
output = str(p_info)
self.assertEqual(output,
"Test GATC CATG\n"
"Test2 AATA TTAT\n")
if __name__ == "__main__":
runner = unittest.TextTestRunner(verbosity = 2)
unittest.main(testRunner=runner)
Jump to Line
Something went wrong with that request. Please try again.