blob: 24f4a2eec6ad5709af8c19b3ab55ace01ec67949 [file] [log] [blame]
Tor Norbye3a2425a2013-11-04 10:16:08 -08001import sys
2
3class 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')