Mercurial > lbo > hg > pcombinators
view pcombinators/tests/test_csv.py @ 85:7c5b59a0ff66 draft
Add CSV parser test
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 26 May 2019 00:15:03 +0200 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat May 25 23:58:21 2019 @author: lbo """ import io import unittest import pcombinators.state as st import pcombinators.tests.csv as csv def line(l): return csv.line.parse(st.ps(l))[0] def value(v): return csv.value.parse(st.ps(v))[0] def file(f): return csv.file.parse(st.ps(f))[0] class CSVTest(unittest.TestCase): def test_values(self): self.assertEqual(1, value('1')) self.assertEqual(12, value('12,')) self.assertEqual(1.23, value('1.23')) self.assertEqual('abc', value('"abc"')) def test_line(self): self.assertEqual([1], line('1,')) self.assertEqual([1], line('1')) self.assertEqual([1,2,3,4,5], line('1, 2,3, 4,5\n')) self.assertEqual(["a,b", "c", 22], line('"a,b","c", 22\n')) def test_file(self): csv_in = '"title1", "title2", "title3"\n\n1, 2, "aaa"\n"12", 4, "bbb"\n' want = [['title1', 'title2', 'title3'], [], [1, 2, 'aaa'], ['12', 4, 'bbb']] self.assertEqual(want, file(csv_in)) self.assertEqual(want, csv.file.parse(st.ParseFileState(io.StringIO(csv_in)))[0]) if __name__ == '__main__': st.ParseFileState.COLLECT_LOWER_LIMIT = 0 unittest.main()