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')
Copyright (C) 2012-2017 Edgewall Software