forked from wireservice/csvkit
/
test_grep.py
69 lines (59 loc) · 2.26 KB
/
test_grep.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python
import unittest
import re
from csvkit.grep import FilteringCSVReader
class TestGrep(unittest.TestCase):
def setUp(self):
self.tab1 = [
['id', 'name', 'i_work_here'],
[u'1', u'Chicago Reader', u'first'],
[u'2', u'Chicago Sun-Times', u'only'],
[u'3', u'Chicago Tribune', u'only'],
[u'1', u'Chicago Reader', u'second']]
self.tab2 = [
['id', 'age', 'i_work_here'],
[u'1', u'first', u'0'],
[u'4', u'only', u'0'],
[u'1', u'second', u'0'],
[u'2', u'only', u'0', u'0']] # Note extra value in this column
def test_pattern(self):
fcr = FilteringCSVReader(iter(self.tab1),patterns=['1'])
self.assertEqual(self.tab1[0],fcr.next())
self.assertEqual(self.tab1[1],fcr.next())
self.assertEqual(self.tab1[4],fcr.next())
try:
fcr.next()
self.fail("Should be no more rows left.")
except StopIteration:
pass
def test_no_header(self):
fcr = FilteringCSVReader(iter(self.tab1),patterns={ 2: 'only' },header=False)
self.assertEqual(self.tab1[2],fcr.next())
self.assertEqual(self.tab1[3],fcr.next())
try:
fcr.next()
self.fail("Should be no more rows left.")
except StopIteration:
pass
def test_regex(self):
pattern = re.compile(".*(Reader|Tribune).*")
fcr = FilteringCSVReader(iter(self.tab1),patterns = { 1: pattern })
self.assertEqual(self.tab1[0],fcr.next())
self.assertEqual(self.tab1[1],fcr.next())
self.assertEqual(self.tab1[3],fcr.next())
self.assertEqual(self.tab1[4],fcr.next())
try:
fcr.next()
self.fail("Should be no more rows left.")
except StopIteration:
pass
def test_inverse(self):
fcr = FilteringCSVReader(iter(self.tab2),patterns = ['1'], inverse=True)
self.assertEqual(self.tab2[0],fcr.next())
self.assertEqual(self.tab2[2],fcr.next())
self.assertEqual(self.tab2[4],fcr.next())
try:
fcr.next()
self.fail("Should be no more rows left.")
except StopIteration:
pass