class TestCalculatedOutput(unittest.TestCase): # Grid fixture grid = None def setUp(self): """Setup for all tests in class""" self.grid = DataGrid(testData, testCols) self.grid.calculatedcolumns = {"four": "{two}+{three}"} def testBasicRender(self): # Output of test run should look like this expected = ("[t][h/]" "[r][c]1[/c][c]2[/c][c]3[/c][c]5.0[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][c]11.0[/c][/r]" "[f][c][/c][c][/c][c][/c][c]--[/c][/f]" "[/t]") self.assertEquals(expected, self.grid.render(EchoRenderer())) def testFormattedRender(self): # Output of test run should look like this expected = ("[t][h/]" "[r][c]1[/c][c]2[/c][c]3[/c][c]5[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][c]11[/c][/r]" "[f][c][/c][c][/c][c][/c][c]--[/c][/f]" "[/t]") self.grid.formatters = {'four': format.number} self.assertEquals(expected, self.grid.render(EchoRenderer())) def testSortByRender(self): # Output of test run should look like this expected = ("[t][h/]" "[r][c]4[/c][c]5[/c][c]6[/c][c]11.0[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][c]5.0[/c][/r]" "[f][c][/c][c][/c][c][/c][c]--[/c][/f]" "[/t]") self.grid.sortby = [('four', 'desc')] self.assertEquals(expected, self.grid.render(EchoRenderer())) def testPostAggregateFilter(self): self.grid.data = [[1,2,3],[2,2,5],[4,5,2]] self.grid.aggregate['one'] = vars(__builtin__)['sum'] self.grid.post_aggregate_filters = ['{four} == 7'] expected = ("[t][h/]" "[r][c]2[/c][c]2[/c][c]5[/c][c]7.0[/c][/r]" "[r][c]4[/c][c]5[/c][c]2[/c][c]7.0[/c][/r]" "[f][c]7[/c][c][/c][c][/c][c]--[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual)
class TestRenderInteract(unittest.TestCase): """DataGrid core unit-test""" # Grid fixture grid = None def setUp(self): """Setup fixtures""" self.grid = DataGrid(testData, testCols) def tearDown(self): """Cleanup and prep for next run""" StackTestRenderer.callLog = [] def testRender(self): # Evaluation order or render methods for given test table testLog = ['setup', 'head', # Setup table and header 'cell', 'cell', 'cell', 'row', # Rendering Row 1 'cell', 'cell', 'cell', 'row', # Rendering Row 2 'cell', 'cell', 'cell', 'tail', # Rendering Footer 'table'] # Wrap up table render # Test simple render self.grid.render(StackTestRenderer()) self.assertEquals(testLog, self.grid.renderer.callLog) def testRenderAggregate(self): # Aggregation eval order testLog = ['setup', 'head', # Setup table and header 'cell', 'cell', 'cell', 'row', # Rendering Agg Row 1 'cell', 'cell', 'cell', 'row', # Rendering Row 1 'cell', 'cell', 'cell', 'row', # Rendering Agg Row 2 'cell', 'cell', 'cell', 'row', # Rendering Row 2 'cell', 'cell', 'cell', 'tail', # Rendering Footer 'table'] # Wrap up table render # Test simple render self.grid.groupby = ['one'] self.grid.render(StackTestRenderer()) self.assertEquals(testLog, self.grid.renderer.callLog)
def output_results(stats, labels, display_options): """Output results table.""" # Columns are all averages, reflect in labels labels[1:] = ["%s (avg)" % label for label in labels[1:]] # Aggregate Methods time_sum = partial(reduce, lambda x, y: x+y) average = lambda vals: time_sum(vals) / len(vals) # Setup DataGrid grid = DataGrid(stats, labels, aggregate=dict((label, average) for label in labels[1:]), groupby=['command'], suppressdetail=True) print "\n", grid.render(ascii.Renderer())
class TestOutput(unittest.TestCase): # Grid fixture grid = None def setUp(self): """Setup for all tests in class""" self.grid = DataGrid(testData, testCols) def testBasicRender(self): # Output of test run should look like this expected = "[t][h/][r][c]1[/c][c]2[/c][c]3[/c][/r]" \ "[r][c]4[/c][c]5[/c][c]6[/c][/r][f][c][/c][c][/c][c][/c][/f][/t]" self.assertEquals(expected, self.grid.render(EchoRenderer())) def testHideColumn(self): # Output of test run should look like this expected = "[t][h/][r][c]1[/c][c]2[/c][/r]" \ "[r][c]4[/c][c]5[/c][/r][f][c][/c][c][/c][/f][/t]" # Only show first two columns self.grid.columns = ('one', 'two') self.assertEquals(expected, self.grid.render(EchoRenderer())) def testFormattedRender(self): # Output of test run should look like this expected = "[t][h/][r][c]01[/c][c]2[/c][c]3[/c][/r]" \ "[r][c]04[/c][c]5[/c][c]6[/c][/r][f][c][/c][c][/c][c][/c][/f][/t]" self.grid.formatters = {'one': lambda x: x.zfill(2)} self.assertEquals(expected, self.grid.render(EchoRenderer())) def testSortByRender(self): # Output of test run should look like this expected = ("[t][h/]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c][/c][c][/c][/f]" "[/t]") self.grid.sortby = [('one', 'desc')] self.assertEquals(expected, self.grid.render(EchoRenderer())) def testGroup(self): self.grid.groupby = ['one'] expected = ("[t][h/]" "[r][c]1[/c][c][/c][c][/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c][/c][c][/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[f][c][/c][c][/c][c][/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testGroupAggrigate(self): self.grid.data = [[1, 2, 3], [4, 5, 6]] self.grid.groupby = ['one'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] expected = ("[t][h/]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[f][c][/c][c]7[/c][c]9[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testGroupAggrigateSort(self): self.grid.data = [[1, 2, 3], [4, 5, 6]] self.grid.groupby = ['one'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] self.grid.sortby = [('two', 'desc')] expected = ("[t][h/]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c]7[/c][c]9[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testGroupAggrigateSortDesc(self): self.grid.data = [[1, 2, 3], [1, 2, 3], [1, 2, 3], [4, 5, 6]] self.grid.groupby = ['one'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] self.grid.sortby = [('two', 'desc')] expected = ("[t][h/]" "[r][c]1[/c][c]6[/c][c]9[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[f][c][/c][c]11[/c][c]15[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testGroupAggrigateSortAsc(self): self.grid.data = [[1, 2, 3], [1, 2, 3], [1, 2, 3], [4, 5, 6]] self.grid.groupby = ['one'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] self.grid.sortby = [('two', 'asc')] expected = ("[t][h/]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]6[/c][c]9[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c]11[/c][c]15[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testGroupAggrigateSortAscComplex(self): self.grid.data = [[4, 2, 3], [4, 2, 3], [4, 2, 3], [1, 5, 6]] self.grid.groupby = ['one'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] self.grid.sortby = [('two', 'asc')] expected = ("[t][h/]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]6[/c][c]9[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c]11[/c][c]15[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testGroupAggrigateSortDescComplex(self): self.grid.data = [[4, 2, 3], [4, 2, 3], [4, 2, 3], [1, 5, 6]] self.grid.groupby = ['one'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] self.grid.sortby = [('two', 'desc')] expected = ("[t][h/]" "[r][c]4[/c][c]6[/c][c]9[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[f][c][/c][c]11[/c][c]15[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testMultiGroupAggrigate(self): self.grid.data = [[4, 2, 3], [4, 2, 3], [4, 2, 3], [1, 5, 6]] self.grid.groupby = ['one','two'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] expected = ("[t][h/]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]6[/c][c]9[/c][/r]" "[r][c]4[/c][c]2[/c][c]9[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c]11[/c][c]15[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testMultiGroupAggrigateSort(self): self.grid.data = [[4, 2, 3], [4, 2, 3], [4, 2, 3], [1, 5, 6]] self.grid.groupby = ['one','two'] self.grid.aggregate['two'] = vars(__builtin__)['sum'] self.grid.aggregate['three'] = vars(__builtin__)['sum'] self.grid.sortby = [('three', 'asc')] expected = ("[t][h/]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]1[/c][c]5[/c][c]6[/c][/r]" "[r][c]4[/c][c]6[/c][c]9[/c][/r]" "[r][c]4[/c][c]2[/c][c]9[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[r][c]4[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c]11[/c][c]15[/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testFilter(self): self.grid.data = [[1,2,3],[4,5,6]] self.grid.filters = ["{one} == 1"] expected = ("[t][h/]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[f][c][/c][c][/c][c][/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testPostAggregateFilter(self): self.grid.data = [[1,2,3],[2,2,5], [4,5,6]] self.grid.aggregate['one'] = vars(__builtin__)['sum'] self.grid.post_aggregate_filters = ['{two} == 2'] expected = ("[t][h/]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[r][c]2[/c][c]2[/c][c]5[/c][/r]" "[f][c]7[/c][c][/c][c][/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual) def testMultiPostAggregateFilter(self): self.grid.data = [[1,2,3],[2,2,5], [4,5,6]] self.grid.aggregate['one'] = vars(__builtin__)['sum'] self.grid.post_aggregate_filters = ['{two} == 2', '{three} == 3'] expected = ("[t][h/]" "[r][c]1[/c][c]2[/c][c]3[/c][/r]" "[f][c]7[/c][c][/c][c][/c][/f]" "[/t]") actual = self.grid.render(EchoRenderer()) self.assertEquals(expected, actual)