blob: bcd771daec683cef6f73d81b6fe26855385917d0 [file] [log] [blame]
#!/usr/bin/python2.6
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for the table module."""
import unittest
import table
class TableTest(unittest.TestCase):
"""Unit tests for the Table class."""
COL0 = 'Column1'
COL1 = 'Column2'
COL2 = 'Column3'
COL3 = 'Column4'
COLUMNS=[COL0, COL1, COL2, COL3]
ROW0 = {COL0: 'Xyz', COL1: 'Bcd', COL2: 'Cde'}
ROW1 = {COL0: 'Abc', COL1: 'Bcd', COL2: 'Opq', COL3: 'Foo'}
ROW2 = {COL0: 'Abc', COL1: 'Nop', COL2: 'Wxy', COL3: 'Bar'}
EXTRAROW = {COL1: 'Walk', COL2: 'The', COL3: 'Line'}
def setUp(self):
self._table = table.Table(self.COLUMNS)
self._table.AppendRow(self.ROW0)
self._table.AppendRow(self.ROW1)
self._table.AppendRow(self.ROW2)
def testLen(self):
self.assertEquals(3, len(self._table))
def testGetNumRows(self):
self.assertEquals(3, self._table.GetNumRows())
def testGetNumColumns(self):
self.assertEquals(4, self._table.GetNumColumns())
def testGetByIndex(self):
self.assertEquals(self.ROW0, self._table.GetRowByIndex(0))
self.assertEquals(self.ROW0, self._table[0])
self.assertEquals(self.ROW2, self._table.GetRowByIndex(2))
self.assertEquals(self.ROW2, self._table[2])
def testSlice(self):
self.assertEquals([self.ROW0, self.ROW1], self._table[0:2])
self.assertEquals([self.ROW2], self._table[-1:])
def testGetByValue(self):
rows = self._table.GetRowsByValue({self.COL0: 'Abc'})
self.assertEquals([self.ROW1, self.ROW2], rows)
rows = self._table.GetRowsByValue({self.COL2: 'Opq'})
self.assertEquals([self.ROW1], rows)
rows = self._table.GetRowsByValue({self.COL3: 'Foo'})
self.assertEquals([self.ROW1], rows)
def testAppendRow(self):
self._table.AppendRow(self.EXTRAROW)
self.assertEquals(4, self._table.GetNumRows())
self.assertEquals(self.EXTRAROW, self._table[len(self._table) - 1])
def testSetRowByIndex(self):
self._table.SetRowByIndex(1, self.EXTRAROW)
self.assertEquals(3, self._table.GetNumRows())
self.assertEquals(self.EXTRAROW, self._table[1])
def testRemoveRowByIndex(self):
self._table.RemoveRowByIndex(1)
self.assertEquals(2, self._table.GetNumRows())
self.assertEquals(self.ROW2, self._table[1])
def testRemoveRowBySlice(self):
del self._table[0:2]
self.assertEquals(1, self._table.GetNumRows())
self.assertEquals(self.ROW2, self._table[0])
def testIteration(self):
ix = 0
for row in self._table:
self.assertEquals(row, self._table[ix])
ix += 1
def testClear(self):
self._table.Clear()
self.assertEquals(0, len(self._table))
def testSort1(self):
self.assertEquals(self.ROW0, self._table[0])
self.assertEquals(self.ROW1, self._table[1])
self.assertEquals(self.ROW2, self._table[2])
# Sort by COL3
self._table.Sort(lambda row : row[self.COL3])
self.assertEquals(3, len(self._table))
self.assertEquals(self.ROW0, self._table[0])
self.assertEquals(self.ROW2, self._table[1])
self.assertEquals(self.ROW1, self._table[2])
# Reverse sort by COL3
self._table.Sort(lambda row : row[self.COL3], reverse=True)
self.assertEquals(3, len(self._table))
self.assertEquals(self.ROW1, self._table[0])
self.assertEquals(self.ROW2, self._table[1])
self.assertEquals(self.ROW0, self._table[2])
def testSort2(self):
"""Test multiple key sort."""
self.assertEquals(self.ROW0, self._table[0])
self.assertEquals(self.ROW1, self._table[1])
self.assertEquals(self.ROW2, self._table[2])
# Sort by COL0 then COL1
def sorter(row):
return (row[self.COL0], row[self.COL1])
self._table.Sort(sorter)
self.assertEquals(3, len(self._table))
self.assertEquals(self.ROW1, self._table[0])
self.assertEquals(self.ROW2, self._table[1])
self.assertEquals(self.ROW0, self._table[2])
# Reverse the sort
self._table.Sort(sorter, reverse=True)
self.assertEquals(3, len(self._table))
self.assertEquals(self.ROW0, self._table[0])
self.assertEquals(self.ROW2, self._table[1])
self.assertEquals(self.ROW1, self._table[2])
if __name__ == "__main__":
unittest.main()