Mercurial > hg > Lemuriformes
diff tests/test_columns.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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_columns.py Sun Dec 10 17:57:03 2017 -0800 @@ -0,0 +1,91 @@ +#!/usr/bin/env python + +import csv +import os +import shutil +import tempfile +import unittest +from collections import OrderedDict +from orion.columns import read_columns +from orion.transpose import transpose +from StringIO import StringIO + + +class TestColumns(unittest.TestCase): + + # fake data + header = ["Animal", "Baby", "Group"] + data = [("Fox", "Kit", "Leash"), + ("Whale", "Calf", "Pod"), + ("Cuttlefish", "Hatchling", "Bob"), + ("Crow", "Hatchling", "Murder")] + + def create_data(self, fp): + """write simple data to a test file and return its path""" + + writer = csv.writer(fp) + writer.writerow(self.header) + writer.writerows(self.data) + fp.flush() + + def fake_data_assertions(self, columns): + """test the columns created from our fake data""" + + assert len(columns) == len(self.header) + assert set(columns.keys()) == set(self.header) + transposed = transpose(self.data) + assert set([len(row) for row in transposed]) == set([len(self.data)]) + for key, column in zip(self.header, transposed): + assert len(columns[key]) == len(self.data) + assert columns[key] == column + + def test_string(self): + """basic test of columns interface""" + + # write fake data + fileobj = StringIO() + self.create_data(fileobj) + fileobj.seek(0) + + # read into columns + columns = read_columns(fileobj) + + # test what we have + self.fake_data_assertions(columns) + + def test_file(self): + """write to a real file and use that""" + + tmpdir = tempfile.mkdtemp() + try: + # write the data + path = os.path.join(tmpdir, 'tmp.csv') + with open(path, 'w') as f: + self.create_data(f) + assert os.path.exists(path) + + # read into columns + columns = read_columns(path) + + # test what we have + self.fake_data_assertions(columns) + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + def test_ordered_dict(self): + """ensure we can make use of an OrderedDict""" + + # write fake data + fileobj = StringIO() + self.create_data(fileobj) + fileobj.seek(0) + + # read into columns + columns = read_columns(fileobj, type=OrderedDict) + + # test what we have + self.fake_data_assertions(columns) + + +if __name__ == '__main__': + unittest.main()