Mercurial > bitten > bitten-test
annotate bitten/build/monotools.py @ 605:c94481bc4646
0.6dev: Reverting [677] as many of these paths are also used for URLs, and hadn't considered this change enough. No major point in changing code that already works well, so simply reverting seems the best idea...
author | osimons |
---|---|
date | Thu, 30 Jul 2009 19:51:11 +0000 |
parents | 7af6ebc30ff8 |
children | 7c80375d4817 |
rev | line source |
---|---|
550
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
2 # |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
3 # Copyright (C) 2005-2007 Christopher Lenz <cmlenz@gmx.de> |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
4 # Copyright (C) 2006 Matthew Good <matt@matt-good.net> |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
5 # Copyright (C) 2007 Edgewall Software |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
6 # Copyright (C) 2009 Grzegorz Sobanski <silk@boktor.net> |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
7 # All rights reserved. |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
8 # |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
9 # This software is licensed as described in the file COPYING, which |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
10 # you should have received as part of this distribution. The terms |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
11 # are also available at http://bitten.edgewall.org/wiki/License. |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
12 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
13 """Recipe commands for tools commonly used in Mono projects.""" |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
14 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
15 from glob import glob |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
16 import logging |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
17 import os |
605
c94481bc4646
0.6dev: Reverting [677] as many of these paths are also used for URLs, and hadn't considered this change enough. No major point in changing code that already works well, so simply reverting seems the best idea...
osimons
parents:
603
diff
changeset
|
18 import posixpath |
550
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
19 import shlex |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
20 import tempfile |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
21 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
22 from bitten.build import CommandLine |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
23 from bitten.util import xmlio |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
24 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
25 log = logging.getLogger('bitten.build.monotools') |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
26 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
27 __docformat__ = 'restructuredtext en' |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
28 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
29 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
30 def _parse_suite(element): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
31 for child in element.children('results'): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
32 testcases = list(child.children('test-case')) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
33 if testcases: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
34 yield element, testcases |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
35 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
36 for xmlsuite in child.children('test-suite'): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
37 for suite in _parse_suite(xmlsuite): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
38 yield suite |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
39 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
40 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
41 def _get_cases(fileobj): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
42 for testsuite in xmlio.parse(fileobj).children('test-suite'): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
43 for suite in _parse_suite(testsuite): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
44 yield suite |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
45 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
46 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
47 def nunit(ctxt, file_=None): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
48 """Extract test results from a NUnit XML report. |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
49 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
50 :param ctxt: the build context |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
51 :type ctxt: `Context` |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
52 :param file\_: path to the NUnit XML test results; may contain globbing |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
53 wildcards for matching multiple results files |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
54 """ |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
55 assert file_, 'Missing required attribute "file"' |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
56 try: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
57 total, failed = 0, 0 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
58 results = xmlio.Fragment() |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
59 for path in glob(ctxt.resolve(file_)): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
60 fileobj = file(path, 'r') |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
61 try: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
62 for suite, testcases in _get_cases(fileobj): |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
63 for testcase in testcases: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
64 test = xmlio.Element('test') |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
65 test.attr['fixture'] = suite.attr['name'] |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
66 if 'time' in testcase.attr: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
67 test.attr['duration'] = testcase.attr['time'] |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
68 if testcase.attr['executed'] == 'True': |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
69 if testcase.attr['success'] != 'True': |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
70 test.attr['status'] = 'failure' |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
71 failure = list(testcase.children('failure')) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
72 if failure: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
73 stacktraceNode = list(failure[0].children('stack-trace')) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
74 if stacktraceNode: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
75 test.append(xmlio.Element('traceback')[ |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
76 stacktraceNode[0].gettext() |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
77 ]) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
78 failed += 1 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
79 else: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
80 test.attr['status'] = 'success' |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
81 else: |
551
6b4def531a4e
Added support for graphing ignored tests (currently only supported for `nunit`)
dfraser
parents:
550
diff
changeset
|
82 test.attr['status'] = 'ignore' |
550
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
83 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
84 results.append(test) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
85 total += 1 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
86 finally: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
87 fileobj.close() |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
88 if failed: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
89 ctxt.error('%d of %d test%s failed' % (failed, total, |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
90 total != 1 and 's' or '')) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
91 ctxt.report('test', results) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
92 except IOError, e: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
93 log.warning('Error opening NUnit results file (%s)', e) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
94 except xmlio.ParseError, e: |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
95 log.warning('Error parsing NUnit results file (%s)', e) |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
96 |
6a8dcbffdce2
Added support for nunit (applied patch from silk in #348)
dfraser
parents:
diff
changeset
|
97 |