Mercurial > bitten > bitten-test
changeset 299:a89b9d945136 0.5.x
Ported [310] to 0.5.x.
author | cmlenz |
---|---|
date | Thu, 03 Nov 2005 16:12:36 +0000 |
parents | 920a32df62c3 |
children | 556dbf79394a |
files | bitten/trac_ext/charts.py bitten/trac_ext/tests/__init__.py bitten/trac_ext/tests/charts.py |
diffstat | 3 files changed, 203 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/bitten/trac_ext/charts.py +++ b/bitten/trac_ext/charts.py @@ -58,36 +58,43 @@ db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute(""" -SELECT build.rev, item_status.value AS status, COUNT(*) AS num +SELECT build.rev, build.platform, item_status.value AS status, COUNT(*) AS num FROM bitten_build AS build LEFT OUTER JOIN bitten_report AS report ON (report.build=build.id) LEFT OUTER JOIN bitten_report_item AS item_status ON (item_status.report=report.id AND item_status.name='status') WHERE build.config=%s AND report.category='test' -GROUP BY build.rev, build.platform, item_status.value -ORDER BY build.rev_time""", (config.name,)) +GROUP BY build.rev_time, build.rev, build.platform, item_status.value +ORDER BY build.rev_time, build.platform""", (config.name,)) prev_rev = None + prev_platform, platform_total = None, 0 tests = [] - for rev, status, num in cursor: + for rev, platform, status, num in cursor: if rev != prev_rev: tests.append([rev, 0, 0]) - slot = int(status != 'success') + 1 - if num > tests[-1][slot]: - tests[-1][slot] = num - prev_rev = rev + prev_rev = rev + platform_total = 0 + if platform != prev_platform: + prev_platform = platform + platform_total = 0 + + platform_total += num + tests[-1][1] = max(platform_total, tests[-1][1]) + if status != 'success': + tests[-1][2] = max(num, tests[-1][2]) req.hdf['chart.title'] = 'Unit Tests' req.hdf['chart.data'] = [ [''] + ['[%s]' % item[0] for item in tests], - ['Total'] + [sum(item[1:]) for item in tests], + ['Total'] + [item[1] for item in tests], ['Failures'] + [item[2] for item in tests] ] return 'bitten_chart_tests.cs' -class CodeCoverageChartGenerator(Component): +class TestCoverageChartGenerator(Component): implements(IReportChartGenerator) # IReportChartGenerator methods @@ -120,12 +127,12 @@ if rev != prev_rev: coverage.append([rev, 0, 0]) if loc > coverage[-1][1]: - coverage[-1][1] = loc + coverage[-1][1] = int(loc) if cov > coverage[-1][2]: - coverage[-1][2] = cov + coverage[-1][2] = int(cov) prev_rev = rev - req.hdf['chart.title'] = 'Code Coverage' + req.hdf['chart.title'] = 'Test Coverage' req.hdf['chart.data'] = [ [''] + ['[%s]' % item[0] for item in coverage], ['Lines of code'] + [item[1] for item in coverage],
--- a/bitten/trac_ext/tests/__init__.py +++ b/bitten/trac_ext/tests/__init__.py @@ -9,10 +9,11 @@ import unittest -from bitten.trac_ext.tests import web_ui +from bitten.trac_ext.tests import charts, web_ui def suite(): suite = unittest.TestSuite() + suite.addTest(charts.suite()) suite.addTest(web_ui.suite()) return suite
new file mode 100644 --- /dev/null +++ b/bitten/trac_ext/tests/charts.py @@ -0,0 +1,181 @@ +# -*- coding: iso8859-1 -*- +# +# Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de> +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://bitten.cmlenz.net/wiki/License. + +import unittest + +from trac.test import EnvironmentStub, Mock +from trac.web.clearsilver import HDFWrapper +from bitten.model import * +from bitten.trac_ext.charts import * + + +class TestResultsChartGeneratorTestCase(unittest.TestCase): + + def setUp(self): + self.env = EnvironmentStub() + db = self.env.get_db_cnx() + cursor = db.cursor() + for table in schema: + for stmt in db.to_sql(table): + cursor.execute(stmt) + + def test_supported_categories(self): + generator = TestResultsChartGenerator(self.env) + self.assertEqual(['test'], generator.get_supported_categories()) + + def test_no_reports(self): + req = Mock(hdf=HDFWrapper()) + config = Mock(name='trunk') + generator = TestResultsChartGenerator(self.env) + template = generator.generate_chart_data(req, config, 'test') + self.assertEqual('bitten_chart_tests.cs', template) + self.assertEqual('Unit Tests', req.hdf['chart.title']) + self.assertEqual('', req.hdf['chart.data.0.0']) + self.assertEqual('Total', req.hdf['chart.data.1.0']) + self.assertEqual('Failures', req.hdf['chart.data.2.0']) + + def test_single_platform(self): + config = Mock(name='trunk') + build = Build(self.env, config='trunk', platform=1, rev=123, + rev_time=42) + build.insert() + report = Report(self.env, build=build.id, step='foo', category='test') + report.items += [{'status': 'success'}, {'status': 'failure'}, + {'status': 'success'}] + report.insert() + + req = Mock(hdf=HDFWrapper()) + generator = TestResultsChartGenerator(self.env) + template = generator.generate_chart_data(req, config, 'test') + self.assertEqual('bitten_chart_tests.cs', template) + self.assertEqual('Unit Tests', req.hdf['chart.title']) + self.assertEqual('', req.hdf['chart.data.0.0']) + self.assertEqual('[123]', req.hdf['chart.data.0.1']) + self.assertEqual('Total', req.hdf['chart.data.1.0']) + self.assertEqual('3', req.hdf['chart.data.1.1']) + self.assertEqual('Failures', req.hdf['chart.data.2.0']) + self.assertEqual('1', req.hdf['chart.data.2.1']) + + def test_multi_platform(self): + config = Mock(name='trunk') + + build = Build(self.env, config='trunk', platform=1, rev=123, + rev_time=42) + build.insert() + report = Report(self.env, build=build.id, step='foo', category='test') + report.items += [{'status': 'success'}, {'status': 'failure'}, + {'status': 'success'}] + report.insert() + + build = Build(self.env, config='trunk', platform=2, rev=123, + rev_time=42) + build.insert() + report = Report(self.env, build=build.id, step='foo', category='test') + report.items += [{'status': 'success'}, {'status': 'failure'}, + {'status': 'failure'}] + report.insert() + + req = Mock(hdf=HDFWrapper()) + generator = TestResultsChartGenerator(self.env) + template = generator.generate_chart_data(req, config, 'test') + self.assertEqual('bitten_chart_tests.cs', template) + self.assertEqual('Unit Tests', req.hdf['chart.title']) + self.assertEqual('', req.hdf['chart.data.0.0']) + self.assertEqual('[123]', req.hdf['chart.data.0.1']) + self.assertEqual('Total', req.hdf['chart.data.1.0']) + self.assertEqual('3', req.hdf['chart.data.1.1']) + self.assertEqual('Failures', req.hdf['chart.data.2.0']) + self.assertEqual('2', req.hdf['chart.data.2.1']) + + +class TestCoverageChartGeneratorTestCase(unittest.TestCase): + + def setUp(self): + self.env = EnvironmentStub() + db = self.env.get_db_cnx() + cursor = db.cursor() + for table in schema: + for stmt in db.to_sql(table): + cursor.execute(stmt) + + def test_supported_categories(self): + generator = TestCoverageChartGenerator(self.env) + self.assertEqual(['coverage'], generator.get_supported_categories()) + + def test_no_reports(self): + req = Mock(hdf=HDFWrapper()) + config = Mock(name='trunk') + generator = TestCoverageChartGenerator(self.env) + template = generator.generate_chart_data(req, config, 'coverage') + self.assertEqual('bitten_chart_coverage.cs', template) + self.assertEqual('Test Coverage', req.hdf['chart.title']) + self.assertEqual('', req.hdf['chart.data.0.0']) + self.assertEqual('Lines of code', req.hdf['chart.data.1.0']) + self.assertEqual('Coverage', req.hdf['chart.data.2.0']) + + def test_single_platform(self): + config = Mock(name='trunk') + build = Build(self.env, config='trunk', platform=1, rev=123, + rev_time=42) + build.insert() + report = Report(self.env, build=build.id, step='foo', + category='coverage') + report.items += [{'lines': '12', 'percentage': '25'}] + report.insert() + + req = Mock(hdf=HDFWrapper()) + generator = TestCoverageChartGenerator(self.env) + template = generator.generate_chart_data(req, config, 'coverage') + self.assertEqual('bitten_chart_coverage.cs', template) + self.assertEqual('Test Coverage', req.hdf['chart.title']) + self.assertEqual('', req.hdf['chart.data.0.0']) + self.assertEqual('[123]', req.hdf['chart.data.0.1']) + self.assertEqual('Lines of code', req.hdf['chart.data.1.0']) + self.assertEqual('12', req.hdf['chart.data.1.1']) + self.assertEqual('Coverage', req.hdf['chart.data.2.0']) + self.assertEqual('3', req.hdf['chart.data.2.1']) + + def test_multi_platform(self): + config = Mock(name='trunk') + build = Build(self.env, config='trunk', platform=1, rev=123, + rev_time=42) + build.insert() + report = Report(self.env, build=build.id, step='foo', + category='coverage') + report.items += [{'lines': '12', 'percentage': '25'}] + report.insert() + build = Build(self.env, config='trunk', platform=2, rev=123, + rev_time=42) + build.insert() + report = Report(self.env, build=build.id, step='foo', + category='coverage') + report.items += [{'lines': '12', 'percentage': '50'}] + report.insert() + + req = Mock(hdf=HDFWrapper()) + generator = TestCoverageChartGenerator(self.env) + template = generator.generate_chart_data(req, config, 'coverage') + self.assertEqual('bitten_chart_coverage.cs', template) + self.assertEqual('Test Coverage', req.hdf['chart.title']) + self.assertEqual('', req.hdf['chart.data.0.0']) + self.assertEqual('[123]', req.hdf['chart.data.0.1']) + self.assertEqual('Lines of code', req.hdf['chart.data.1.0']) + self.assertEqual('12', req.hdf['chart.data.1.1']) + self.assertEqual('Coverage', req.hdf['chart.data.2.0']) + self.assertEqual('6', req.hdf['chart.data.2.1']) + + +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestResultsChartGeneratorTestCase)) + suite.addTest(unittest.makeSuite(TestCoverageChartGeneratorTestCase)) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='suite')