~klaussfreire/meliae/meliae

« back to all changes in this revision

Viewing changes to meliae/tests/test_scanner.py

  • Committer: Claudio Freire
  • Date: 2014-05-09 19:43:29 UTC
  • Revision ID: klaussfreire@gmail.com-20140509194329-271qddzc3znb2clk
Add tests for dumping to file-like objects

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
 
15
15
"""The core routines for scanning python references and dumping memory info."""
16
16
 
 
17
import gzip
17
18
import tempfile
18
19
 
 
20
try:
 
21
    import cStringIO
 
22
except ImportError:
 
23
    import StringIO as cStringIO
 
24
 
19
25
from meliae import (
20
26
    scanner,
21
27
    tests,
82
88
        self.assertDumpAllReferenced([a, b, c, l], l)
83
89
        self.assertDumpAllReferenced([a, b, c, l], c)
84
90
 
 
91
def rewind(f):
 
92
    f.seek(0)
 
93
    return f
 
94
 
 
95
class TestDumpToFile(tests.TestCase):
 
96
 
 
97
    def assertDumpAllReferenced(self, t_file, reopen = rewind):
 
98
        a = 1
 
99
        b = 'str'
 
100
        c = {}
 
101
        l = [a, b, c]
 
102
        c[a] = l
 
103
        ref_objs = [a, b, c, l]
 
104
        obj = l
 
105
        
 
106
        scanner.dump_all_referenced(t_file, obj, is_pending=False)
 
107
        t_file.flush()
 
108
        t_file = reopen(t_file)
 
109
        # We don't care if the same entries are printed multiple times, just
 
110
        # that they are all correct
 
111
        lines = t_file.readlines()
 
112
        # py_dump_object_info will create a string that covers multpile lines,
 
113
        # so we need to split it back into 1-line-per-record
 
114
        ref_lines = [test__scanner.py_dump_object_info(ref_obj)
 
115
                     for ref_obj in ref_objs]
 
116
        ref_lines = set(''.join(ref_lines).splitlines(True))
 
117
        self.assertEqual(sorted(ref_lines), sorted(lines))
 
118
 
 
119
    def test_dump_str(self):
 
120
        self.assertDumpAllReferenced(cStringIO.StringIO())
 
121
 
 
122
    def test_dump_tmp(self):
 
123
        self.assertDumpAllReferenced(tempfile.TemporaryFile(prefix='meliae-'))
 
124
 
 
125
    def test_dump_gzip(self):
 
126
        s = cStringIO.StringIO()
 
127
        def reopen(f):
 
128
            f.flush()
 
129
            f.close()
 
130
            s.seek(0)
 
131
            return gzip.GzipFile(fileobj=s, mode='r')
 
132
        self.assertDumpAllReferenced(gzip.GzipFile(fileobj=s, mode='w'), reopen=reopen)
 
133
 
85
134
 
86
135
class TestGetRecursiveSize(tests.TestCase):
87
136