| Tor Norbye | 3a2425a | 2013-11-04 10:16:08 -0800 | [diff] [blame^] | 1 | import sys |
| 2 | |
| 3 | class TeamcityServiceMessages: |
| 4 | quote = {"'": "|'", "|": "||", "\n": "|n", "\r": "|r", ']': '|]'} |
| 5 | |
| 6 | def __init__(self, output=sys.stdout, prepend_linebreak=False): |
| 7 | self.output = output |
| 8 | self.prepend_linebreak = prepend_linebreak |
| 9 | |
| 10 | def escapeValue(self, value): |
| 11 | if sys.version_info[0] <= 2 and isinstance(value, unicode): |
| 12 | s = value.encode("utf-8") |
| 13 | else: |
| 14 | s = str(value) |
| 15 | return "".join([self.quote.get(x, x) for x in s]) |
| 16 | |
| 17 | def message(self, messageName, **properties): |
| 18 | s = "##teamcity[" + messageName |
| 19 | for k, v in properties.items(): |
| 20 | if v is None: |
| 21 | continue |
| 22 | s = s + " %s='%s'" % (k, self.escapeValue(v)) |
| 23 | s += "]\n" |
| 24 | |
| 25 | if self.prepend_linebreak: self.output.write("\n") |
| 26 | self.output.write(s) |
| 27 | |
| 28 | def testSuiteStarted(self, suiteName, location=None): |
| 29 | self.message('testSuiteStarted', name=suiteName, locationHint=location) |
| 30 | |
| 31 | def testSuiteFinished(self, suiteName): |
| 32 | self.message('testSuiteFinished', name=suiteName) |
| 33 | |
| 34 | def testStarted(self, testName, location=None): |
| 35 | self.message('testStarted', name=testName, locationHint=location) |
| 36 | |
| 37 | def testFinished(self, testName, duration=None): |
| 38 | self.message('testFinished', name=testName, duration=duration) |
| 39 | |
| 40 | def testIgnored(self, testName, message=''): |
| 41 | self.message('testIgnored', name=testName, message=message) |
| 42 | |
| 43 | def testFailed(self, testName, message='', details='', expected='', actual=''): |
| 44 | if expected and actual: |
| 45 | self.message('testFailed', type='comparisonFailure', name=testName, message=message, |
| 46 | details=details, expected=expected, actual=actual) |
| 47 | else: |
| 48 | self.message('testFailed', name=testName, message=message, details=details) |
| 49 | |
| 50 | def testError(self, testName, message='', details=''): |
| 51 | self.message('testFailed', name=testName, message=message, details=details, error="true") |
| 52 | |
| 53 | def testStdOut(self, testName, out): |
| 54 | self.message('testStdOut', name=testName, out=out) |
| 55 | |
| 56 | def testStdErr(self, testName, out): |
| 57 | self.message('testStdErr', name=testName, out=out) |
| 58 | |
| 59 | def testCount(self, count): |
| 60 | self.message('testCount', count=count) |
| 61 | |
| 62 | def testMatrixEntered(self): |
| 63 | self.message('enteredTheMatrix') |