18
|
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()
|