root / logilab.pylintinstaller / logilab / common / test / unittest_table.py

Revision 202:d67e86292521, 17.0 kB (checked in by tziade@…, 11 months ago)

added logilab.pylintinstaller

Line 
1"""
2Unittests for table management
3"""
4
5__revision__ = '$Id: unittest_table.py,v 1.13 2006-04-09 22:30:53 nico Exp $'
6
7import sys
8import os
9from cStringIO import StringIO
10
11from logilab.common.testlib import TestCase, unittest_main
12from logilab.common.table import Table, TableStyleSheet, DocbookTableWriter, \
13     DocbookRenderer, TableStyle, TableWriter, TableCellRenderer
14from logilab.common.compat import set
15
16class TableTC(TestCase):
17    """Table TestCase class"""
18
19    def setUp(self):
20        """Creates a default table"""
21        # from logilab.common import table
22        # reload(table)
23        self.table = Table()
24        self.table.create_rows(['row1', 'row2', 'row3'])
25        self.table.create_columns(['col1', 'col2'])
26
27    def test_valeur_scalaire(self):
28        tab = Table()
29        tab.create_columns(['col1'])
30        tab.append_row([1])
31        self.assertEquals(tab, [[1]])
32        tab.append_row([2])
33        self.assertEquals(tab[0,0], 1)
34        self.assertEquals(tab[1,0], 2)
35
36    def test_valeur_ligne(self):
37        tab = Table()
38        tab.create_columns(['col1','col2'])
39        tab.append_row([1,2])
40        self.assertEquals(tab, [[1,2]])
41
42    def test_valeur_colonne(self):
43        tab = Table()
44        tab.create_columns(['col1'])
45        tab.append_row([1])
46        tab.append_row([2])
47        self.assertEquals(tab, [[1],[2]])
48        self.assertEquals(tab[:,0], [1,2])
49       
50    def test_indexation(self):
51        """we should be able to use [] to access rows"""
52        self.assert_(self.table[0] == self.table.data[0])
53        self.assert_(self.table[1] == self.table.data[1])
54
55    def test_iterable(self):
56        """test iter(table)"""
57        it = iter(self.table)
58        self.assert_(it.next() == self.table.data[0])
59        self.assert_(it.next() == self.table.data[1])
60
61    def test_get_rows(self):
62        """tests Table.get_rows()"""
63        self.assertEquals(self.table, [[0, 0], [0, 0], [0, 0]])
64        self.assertEquals(self.table[:], [[0, 0], [0, 0], [0, 0]])
65        self.table.insert_column(1, range(3), 'supp')
66        self.assertEquals(self.table, [[0, 0, 0], [0, 1, 0], [0, 2, 0]])
67        self.assertEquals(self.table[:], [[0, 0, 0], [0, 1, 0], [0, 2, 0]])
68       
69    def test_get_cells(self):
70        self.table.insert_column(1, range(3), 'supp')
71        self.assertEquals(self.table[0,1], 0)
72        self.assertEquals(self.table[1,1], 1)
73        self.assertEquals(self.table[2,1], 2)
74        self.assertEquals(self.table['row1', 'supp'], 0)
75        self.assertEquals(self.table['row2', 'supp'], 1)
76        self.assertEquals(self.table['row3', 'supp'], 2)
77        self.assertRaises(KeyError, self.table.__getitem__, ('row1', 'foo'))
78        self.assertRaises(KeyError, self.table.__getitem__, ('foo', 'bar'))
79       
80    def test_shape(self):
81        """tests table shape"""
82        self.assertEquals(self.table.shape, (3, 2))
83        self.table.insert_column(1, range(3), 'supp')
84        self.assertEquals(self.table.shape, (3, 3))
85       
86    def test_set_column(self):
87        """Tests that table.set_column() works fine.
88        """
89        self.table.set_column(0, range(3))
90        self.assertEquals(self.table[0,0], 0)
91        self.assertEquals(self.table[1,0], 1)
92        self.assertEquals(self.table[2,0], 2)
93
94    def test_set_column_by_id(self):
95        """Tests that table.set_column_by_id() works fine.
96        """
97        self.table.set_column_by_id('col1', range(3))
98        self.assertEquals(self.table[0,0], 0)
99        self.assertEquals(self.table[1,0], 1)
100        self.assertEquals(self.table[2,0], 2)
101        self.assertRaises(KeyError, self.table.set_column_by_id, 'col123', range(3))
102
103    def test_cells_ids(self):
104        """tests that we can access cells by giving row/col ids"""
105        self.assertRaises(KeyError, self.table.set_cell_by_ids, 'row12', 'col1', 12)
106        self.assertRaises(KeyError, self.table.set_cell_by_ids, 'row1', 'col12', 12)
107        self.assertEquals(self.table[0,0], 0)
108        self.table.set_cell_by_ids('row1', 'col1', 'DATA')
109        self.assertEquals(self.table[0,0], 'DATA')
110        self.assertRaises(KeyError, self.table.set_row_by_id, 'row12', [])
111        self.table.set_row_by_id('row1', ['1.0', '1.1'])
112        self.assertEquals(self.table[0,0], '1.0')
113
114    def test_insert_row(self):
115        """tests a row insertion"""
116        tmp_data = ['tmp1', 'tmp2']
117        self.table.insert_row(1, tmp_data, 'tmprow')
118        self.assertEquals(self.table[1], tmp_data)
119        self.assertEquals(self.table['tmprow'], tmp_data)
120        self.table.delete_row_by_id('tmprow')
121        self.assertRaises(KeyError, self.table.delete_row_by_id, 'tmprow')
122        self.assertEquals(self.table[1], [0, 0])
123        self.assertRaises(KeyError, self.table.__getitem__, 'tmprow')
124       
125    def test_get_column(self):
126        """Tests that table.get_column() works fine.
127        """
128        self.table.set_cell(0, 1, 12)
129        self.table.set_cell(2, 1, 13)
130        self.assertEquals(self.table[:,1], [12,0,13])
131        self.assertEquals(self.table[:,'col2'], [12,0,13])
132
133    def test_get_columns(self):
134        """Tests if table.get_columns() works fine.
135        """
136        self.table.set_cell(0, 1, 12)
137        self.table.set_cell(2, 1, 13)
138        self.assertEquals(self.table.get_columns(), [[0,0,0], [12,0,13]])
139   
140    def test_insert_column(self):
141        """Tests that table.insert_column() works fine.
142        """
143        self.table.insert_column(1, range(3), "inserted_column")
144        self.assertEquals(self.table[:,1], [0,1,2])
145        self.assertEquals(self.table.col_names,
146                          ['col1', 'inserted_column', 'col2'])
147
148    def test_delete_column(self):
149        """Tests that table.delete_column() works fine.
150        """
151        self.table.delete_column(1)
152        self.assertEquals(self.table.col_names, ['col1'])
153        self.assertEquals(self.table[:,0], [0,0,0])
154        self.assertRaises(KeyError, self.table.delete_column_by_id, 'col2')
155        self.table.delete_column_by_id('col1')
156        self.assertEquals(self.table.col_names, [])
157
158    def test_transpose(self):
159        """Tests that table.transpose() works fine.
160        """
161        self.table.append_column(range(5,8), 'col3')
162        ttable = self.table.transpose()
163        self.assertEquals(ttable.row_names, ['col1', 'col2', 'col3'])
164        self.assertEquals(ttable.col_names, ['row1', 'row2', 'row3'])
165        self.assertEquals(ttable.data, [[0,0,0], [0,0,0], [5,6,7]])
166
167    def test_sort_table(self):
168        """Tests the table sort by column
169        """
170        self.table.set_column(0, [3, 1, 2])
171        self.table.set_column(1, [1, 2, 3])
172        self.table.sort_by_column_index(0)
173        self.assertEquals(self.table.row_names, ['row2', 'row3', 'row1'])
174        self.assertEquals(self.table.data, [[1, 2], [2, 3], [3, 1]])
175        self.table.sort_by_column_index(1, 'desc')
176        self.assertEquals(self.table.row_names, ['row3', 'row2', 'row1'])
177        self.assertEquals(self.table.data, [[2, 3], [1, 2], [3, 1]])
178       
179    def test_sort_by_id(self):
180        """tests sort_by_column_id()"""
181        self.table.set_column_by_id('col1', [3, 1, 2])
182        self.table.set_column_by_id('col2', [1, 2, 3])
183        self.table.sort_by_column_id('col1')
184        self.assertRaises(KeyError, self.table.sort_by_column_id, 'col123')
185        self.assertEquals(self.table.row_names, ['row2', 'row3', 'row1'])
186        self.assertEquals(self.table.data, [[1, 2], [2, 3], [3, 1]])
187        self.table.sort_by_column_id('col2', 'desc')
188        self.assertEquals(self.table.row_names, ['row3', 'row2', 'row1'])
189        self.assertEquals(self.table.data, [[2, 3], [1, 2], [3, 1]])
190
191    def test_pprint(self):
192        """only tests pprint doesn't raise an exception"""
193        self.table.pprint()
194        str(self.table)
195
196
197class GroupByTC(TestCase):
198    """specific test suite for groupby()"""
199    def setUp(self):
200        t = Table()
201        t.create_columns(['date', 'res', 'task', 'usage'])
202        t.append_row(['date1', 'ing1', 'task1', 0.3])
203        t.append_row(['date1', 'ing2', 'task2', 0.3])
204        t.append_row(['date2', 'ing3', 'task3', 0.3])
205        t.append_row(['date3', 'ing4', 'task2', 0.3])
206        t.append_row(['date1', 'ing1', 'task3', 0.3])
207        t.append_row(['date3', 'ing1', 'task3', 0.3])       
208        self.table = t
209
210    def test_single_groupby(self):
211        """tests groupby() on several columns"""
212        grouped = self.table.groupby('date')
213        self.assertEquals(len(grouped), 3)
214        self.assertEquals(len(grouped['date1']), 3)
215        self.assertEquals(len(grouped['date2']), 1)
216        self.assertEquals(len(grouped['date3']), 2)
217        self.assertEquals(grouped['date1'], [
218            ('date1', 'ing1', 'task1', 0.3),
219            ('date1', 'ing2', 'task2', 0.3),
220            ('date1', 'ing1', 'task3', 0.3),
221            ])
222        self.assertEquals(grouped['date2'], [('date2', 'ing3', 'task3', 0.3)])
223        self.assertEquals(grouped['date3'], [
224            ('date3', 'ing4', 'task2', 0.3),
225            ('date3', 'ing1', 'task3', 0.3),
226            ])
227
228    def test_multiple_groupby(self):
229        """tests groupby() on several columns"""
230        grouped = self.table.groupby('date', 'task')
231        self.assertEquals(len(grouped), 3)
232        self.assertEquals(len(grouped['date1']), 3)
233        self.assertEquals(len(grouped['date2']), 1)
234        self.assertEquals(len(grouped['date3']), 2)
235        self.assertEquals(grouped['date1']['task1'], [('date1', 'ing1', 'task1', 0.3)])
236        self.assertEquals(grouped['date2']['task3'], [('date2', 'ing3', 'task3', 0.3)])
237        self.assertEquals(grouped['date3']['task2'], [('date3', 'ing4', 'task2', 0.3)])
238        date3 = grouped['date3']
239        self.assertRaises(KeyError, date3.__getitem__, 'task1')
240
241
242    def test_select(self):
243        """tests Table.select() method"""
244        rows = self.table.select('date', 'date1')
245        self.assertEquals(rows, [
246            ('date1', 'ing1', 'task1', 0.3),
247            ('date1', 'ing2', 'task2', 0.3),
248            ('date1', 'ing1', 'task3', 0.3),
249            ])
250
251class TableStyleSheetTC(TestCase):
252    """The Stylesheet test case
253    """
254    def setUp(self):
255        """Builds a simple table to test the stylesheet
256        """
257        self.table = Table()
258        self.table.create_row('row1')
259        self.table.create_columns(['a','b','c'])
260        self.stylesheet = TableStyleSheet()
261        # We don't want anything to be printed
262        self.stdout_backup = sys.stdout
263        sys.stdout = StringIO()
264
265    def tearDown(self):
266        sys.stdout = self.stdout_backup
267       
268    def test_add_rule(self):
269        """Tests that the regex pattern works as expected.
270        """
271        rule = '0_2 = sqrt(0_0**2 + 0_1**2)'
272        self.stylesheet.add_rule(rule)
273        self.table.set_row(0, [3,4,0])
274        self.table.apply_stylesheet(self.stylesheet)
275        self.assertEquals(self.table[0], [3,4,5])
276        self.assertEquals(len(self.stylesheet.rules), 1)
277        self.stylesheet.add_rule('some bad rule with bad syntax')
278        self.assertEquals(len(self.stylesheet.rules), 1, "Ill-formed rule mustn't be added")
279        self.assertEquals(len(self.stylesheet.instructions), 1, "Ill-formed rule mustn't be added")
280
281    def test_stylesheet_init(self):
282        """tests Stylesheet.__init__"""
283        rule = '0_2 = 1'
284        sheet = TableStyleSheet([rule, 'bad rule'])
285        self.assertEquals(len(sheet.rules), 1, "Ill-formed rule mustn't be added")
286        self.assertEquals(len(sheet.instructions), 1, "Ill-formed rule mustn't be added")
287   
288    def test_rowavg_rule(self):
289        """Tests that add_rowavg_rule works as expected
290        """
291