class PrefixUnionDict_Test(unittest.TestCase):
    """
    Test for all of the basic dictionary functions on 'PrefixUnionDict'.
    """

    def setUp(self):
        dnaseq = testutil.datafile('dnaseq.fasta')
        seqdb = SequenceFileDB(dnaseq)     # contains 'seq1', 'seq2'
        self.db = PrefixUnionDict({'prefix': seqdb})

    def tearDown(self):
        close_pud_dicts(self.db)

    def test_keys(self):
        "PrefixUnionDict keys"
        k = self.db.keys()
        k.sort()
        assert k == ['prefix.seq1', 'prefix.seq2']

    def test_contains(self):
        "PrefixUnionDict contains"
        # first, check "is this sequence name in the PUD?"-style contains.
        assert 'prefix.seq1' in self.db
        assert 'prefix.seq2' in self.db
        assert 'foo' not in self.db
        assert 'prefix.foo' not in self.db

        # now, check "is this sequence in the PUD?"
        seq = self.db['prefix.seq1']
        assert seq in self.db

        # finally, check failure: "is something other than str/seq in db"
        try:
            12345 in self.db
            assert 0, "should not get to this point"
        except AttributeError:
            pass

    def test_invert_class(self):
        "PrefixUnionDict __invert__"
        seq = self.db['prefix.seq1']
        inversedb = ~self.db
        assert inversedb[seq] == 'prefix.seq1'
        assert seq in inversedb
        assert 'foo' not in inversedb

    def test_funny_key(self):
        "check handling of ID containing multiple separators"
        dnaseq = testutil.datafile('funnyseq.fasta')
        seqdb = SequenceFileDB(dnaseq)     # contains 'seq1', 'seq2'
        try:
            pudb = PrefixUnionDict({'prefix': seqdb})
            seq = pudb['prefix.seq.1.more']
        finally:
            seqdb.close()

    def test_funny_key2(self):
        "check handling of ID containing multiple separators"
        dnaseq = testutil.datafile('funnyseq.fasta')
        seqdb = SequenceFileDB(dnaseq)     # contains 'seq1', 'seq2'
        try:
            pudb = PrefixUnionDict({'prefix': seqdb})
            seq = pudb['prefix.seq.2.even.longer']
        finally:
            seqdb.close()

    def test_has_key(self):
        "PrefixUnionDict has key"
        assert 'prefix.seq1' in self.db
        assert 'prefix.seq2' in self.db
        assert 'prefix.foo' not in self.db
        assert 'foo' not in self.db

    def test_get(self):
        "PrefixUnionDict get"
        assert self.db.get('foo') is None
        assert self.db.get('prefix.foo') is None
        assert self.db.get('prefix.seq1') is not None
        assert str(self.db.get('prefix.seq1')).startswith('atggtgtca')
        assert self.db.get('prefix.seq2') is not None
        assert str(self.db.get('prefix.seq2')).startswith('GTGTTGAA')
        assert self.db.get('foo.bar') is None
        assert self.db.get(12345) is None

    def test_get_prefix_id(self):
        try:
            self.db.get_prefix_id(12345)
            assert 0, "should not get here"
        except KeyError:
            pass

    def test_getName(self):
        seq1 = self.db['prefix.seq1']
        name = self.db.getName(seq1)
        assert name == 'prefix.seq1'

    def test_items(self):
        "PrefixUnionDict items"
        i = [k for (k, v) in self.db.items()]
        i.sort()
        assert i == ['prefix.seq1', 'prefix.seq2']

    def test_iterkeys(self):
        "PrefixUnionDict iterkeys"
        kk = self.db.keys()
        kk.sort()
        ik = list(self.db.iterkeys())
        ik.sort()
        assert kk == ik

    def test_itervalues(self):
        "PrefixUnionDict itervalues"
        kv = self.db.values()
        kv.sort()
        iv = list(self.db.itervalues())
        iv.sort()
        assert kv == iv

    def test_iteritems(self):
        "PrefixUnionDict iteritems"
        ki = self.db.items()
        ki.sort()
        ii = list(self.db.iteritems())
        ii.sort()
        assert ki == ii

    # test some things other than dict behavior
    def test_keyerror(self):
        "PrefixUnionDict keyerror"
        "Make sure that the PrefixUnionDict KeyError is informative."
        try:
            self.db['prefix.foo']
        except KeyError, e:
            assert "no key 'foo' in " in str(e), str(e)
        try:
            self.db['foo']
        except KeyError, e:
            assert "invalid id format; no prefix: foo" in str(e), str(e)
Beispiel #2
0
class PrefixUnionDict_Test(unittest.TestCase):
    """
    Test for all of the basic dictionary functions on 'PrefixUnionDict'.
    """
    def setUp(self):
        dnaseq = testutil.datafile('dnaseq.fasta')
        seqdb = SequenceFileDB(dnaseq)  # contains 'seq1', 'seq2'
        self.db = PrefixUnionDict({'prefix': seqdb})

    def tearDown(self):
        close_pud_dicts(self.db)

    def test_keys(self):
        "PrefixUnionDict keys"
        k = self.db.keys()
        k.sort()
        assert k == ['prefix.seq1', 'prefix.seq2']

    def test_contains(self):
        "PrefixUnionDict contains"
        # first, check "is this sequence name in the PUD?"-style contains.
        assert 'prefix.seq1' in self.db
        assert 'prefix.seq2' in self.db
        assert 'foo' not in self.db
        assert 'prefix.foo' not in self.db

        # now, check "is this sequence in the PUD?"
        seq = self.db['prefix.seq1']
        assert seq in self.db

        # finally, check failure: "is something other than str/seq in db"
        try:
            12345 in self.db
            assert 0, "should not get to this point"
        except AttributeError:
            pass

    def test_invert_class(self):
        "PrefixUnionDict __invert__"
        seq = self.db['prefix.seq1']
        inversedb = ~self.db
        assert inversedb[seq] == 'prefix.seq1'
        assert seq in inversedb
        assert 'foo' not in inversedb

    def test_funny_key(self):
        "check handling of ID containing multiple separators"
        dnaseq = testutil.datafile('funnyseq.fasta')
        seqdb = SequenceFileDB(dnaseq)  # contains 'seq1', 'seq2'
        try:
            pudb = PrefixUnionDict({'prefix': seqdb})
            seq = pudb['prefix.seq.1.more']
        finally:
            seqdb.close()

    def test_funny_key2(self):
        "check handling of ID containing multiple separators"
        dnaseq = testutil.datafile('funnyseq.fasta')
        seqdb = SequenceFileDB(dnaseq)  # contains 'seq1', 'seq2'
        try:
            pudb = PrefixUnionDict({'prefix': seqdb})
            seq = pudb['prefix.seq.2.even.longer']
        finally:
            seqdb.close()

    def test_has_key(self):
        "PrefixUnionDict has key"
        assert 'prefix.seq1' in self.db
        assert 'prefix.seq2' in self.db
        assert 'prefix.foo' not in self.db
        assert 'foo' not in self.db

    def test_get(self):
        "PrefixUnionDict get"
        assert self.db.get('foo') is None
        assert self.db.get('prefix.foo') is None
        assert self.db.get('prefix.seq1') is not None
        assert str(self.db.get('prefix.seq1')).startswith('atggtgtca')
        assert self.db.get('prefix.seq2') is not None
        assert str(self.db.get('prefix.seq2')).startswith('GTGTTGAA')
        assert self.db.get('foo.bar') is None
        assert self.db.get(12345) is None

    def test_get_prefix_id(self):
        try:
            self.db.get_prefix_id(12345)
            assert 0, "should not get here"
        except KeyError:
            pass

    def test_getName(self):
        seq1 = self.db['prefix.seq1']
        name = self.db.getName(seq1)
        assert name == 'prefix.seq1'

    def test_items(self):
        "PrefixUnionDict items"
        i = [k for (k, v) in self.db.items()]
        i.sort()
        assert i == ['prefix.seq1', 'prefix.seq2']

    def test_iterkeys(self):
        "PrefixUnionDict iterkeys"
        kk = self.db.keys()
        kk.sort()
        ik = list(self.db.iterkeys())
        ik.sort()
        assert kk == ik

    def test_itervalues(self):
        "PrefixUnionDict itervalues"
        kv = self.db.values()
        kv.sort()
        iv = list(self.db.itervalues())
        iv.sort()
        assert kv == iv

    def test_iteritems(self):
        "PrefixUnionDict iteritems"
        ki = self.db.items()
        ki.sort()
        ii = list(self.db.iteritems())
        ii.sort()
        assert ki == ii

    # test some things other than dict behavior
    def test_keyerror(self):
        "PrefixUnionDict keyerror"
        "Make sure that the PrefixUnionDict KeyError is informative."
        try:
            self.db['prefix.foo']
        except KeyError, e:
            assert "no key 'foo' in " in str(e), str(e)
        try:
            self.db['foo']
        except KeyError, e:
            assert "invalid id format; no prefix: foo" in str(e), str(e)