comparison tests/test_uniques.py @ 18:56596902e9ae default tip

add some setup + tests
author Jeff Hammel <k0scist@gmail.com>
date Sun, 10 Dec 2017 17:57:03 -0800
parents
children
comparison
equal deleted inserted replaced
17:4793f99b73e0 18:56596902e9ae
1 #!/usr/bin/env python
2
3 """
4 test CSV file uniques counter
5 """
6
7 import csv
8 import os
9 import shutil
10 import tempfile
11 import unittest
12 from lemuriformes.uniques import uniques
13 from StringIO import StringIO
14
15
16 class TestUniques(unittest.TestCase):
17
18 header = ['a', 'b', 'c']
19 dataset = [[1,2,3],
20 [1,1,2],
21 [1,2,4]]
22
23 def write_dataset(self, fp):
24
25 writer = csv.writer(fp)
26 writer.writerow(self.header)
27 writer.writerows(self.dataset)
28 fp.flush()
29
30 def validate(self, uniq):
31 """validate `uniq` for object dataset"""
32
33 # count them
34 counts = {key: len(value)
35 for key, value in uniq.items()}
36 assert counts['a'] == 1
37 assert counts['b'] == 2
38 assert counts['c'] == 3
39
40
41 def test_file(self):
42 """test reading uniques from a file"""
43
44 tmpdir = tempfile.mkdtemp()
45 try:
46 # write test data
47 dst = os.path.join(tmpdir, 'test.csv')
48 with open(dst, 'w') as fp:
49 self.write_dataset(fp)
50
51 # determine uniques
52 self.validate(uniques(dst))
53
54 finally:
55 shutil.rmtree(tmpdir, ignore_errors=True)
56
57 def test_buffer(self):
58 """test using a StringIO buffer object"""
59
60 # write test data to buffer
61 buffer = StringIO()
62 self.write_dataset(buffer)
63 buffer.seek(0)
64
65 # determine uniques
66 self.validate(uniques(buffer))
67
68 if __name__ == '__main__':
69 unittest.main()