blob: d664455c78330e807d832acd2cf92e7cd5e3c555 [file] [log] [blame]
#!/usr/bin/env vpython
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for instrumentation.InstrumentationParser."""
import unittest
from pylib.instrumentation import instrumentation_parser
class InstrumentationParserTest(unittest.TestCase):
def testInstrumentationParser_nothing(self):
parser = instrumentation_parser.InstrumentationParser([''])
statuses = list(parser.IterStatus())
code, bundle = parser.GetResult()
self.assertEqual(None, code)
self.assertEqual({}, bundle)
self.assertEqual([], statuses)
def testInstrumentationParser_noMatchingStarts(self):
raw_output = [
'',
'this.is.a.test.package.TestClass:.',
'Test result for =.',
'Time: 1.234',
'',
'OK (1 test)',
]
parser = instrumentation_parser.InstrumentationParser(raw_output)
statuses = list(parser.IterStatus())
code, bundle = parser.GetResult()
self.assertEqual(None, code)
self.assertEqual({}, bundle)
self.assertEqual([], statuses)
def testInstrumentationParser_resultAndCode(self):
raw_output = [
'INSTRUMENTATION_RESULT: shortMsg=foo bar',
'INSTRUMENTATION_RESULT: longMsg=a foo',
'walked into',
'a bar',
'INSTRUMENTATION_CODE: -1',
]
parser = instrumentation_parser.InstrumentationParser(raw_output)
statuses = list(parser.IterStatus())
code, bundle = parser.GetResult()
self.assertEqual(-1, code)
self.assertEqual(
{'shortMsg': 'foo bar', 'longMsg': 'a foo\nwalked into\na bar'}, bundle)
self.assertEqual([], statuses)
def testInstrumentationParser_oneStatus(self):
raw_output = [
'INSTRUMENTATION_STATUS: foo=1',
'INSTRUMENTATION_STATUS: bar=hello',
'INSTRUMENTATION_STATUS: world=false',
'INSTRUMENTATION_STATUS: class=this.is.a.test.package.TestClass',
'INSTRUMENTATION_STATUS: test=testMethod',
'INSTRUMENTATION_STATUS_CODE: 0',
]
parser = instrumentation_parser.InstrumentationParser(raw_output)
statuses = list(parser.IterStatus())
expected = [
(0, {
'foo': '1',
'bar': 'hello',
'world': 'false',
'class': 'this.is.a.test.package.TestClass',
'test': 'testMethod',
})
]
self.assertEqual(expected, statuses)
def testInstrumentationParser_multiStatus(self):
raw_output = [
'INSTRUMENTATION_STATUS: class=foo',
'INSTRUMENTATION_STATUS: test=bar',
'INSTRUMENTATION_STATUS_CODE: 1',
'INSTRUMENTATION_STATUS: test_skipped=true',
'INSTRUMENTATION_STATUS_CODE: 0',
'INSTRUMENTATION_STATUS: class=hello',
'INSTRUMENTATION_STATUS: test=world',
'INSTRUMENTATION_STATUS: stack=',
'foo/bar.py (27)',
'hello/world.py (42)',
'test/file.py (1)',
'INSTRUMENTATION_STATUS_CODE: -1',
]
parser = instrumentation_parser.InstrumentationParser(raw_output)
statuses = list(parser.IterStatus())
expected = [
(1, {'class': 'foo', 'test': 'bar',}),
(0, {'test_skipped': 'true'}),
(-1, {
'class': 'hello',
'test': 'world',
'stack': '\nfoo/bar.py (27)\nhello/world.py (42)\ntest/file.py (1)',
}),
]
self.assertEqual(expected, statuses)
def testInstrumentationParser_statusResultAndCode(self):
raw_output = [
'INSTRUMENTATION_STATUS: class=foo',
'INSTRUMENTATION_STATUS: test=bar',
'INSTRUMENTATION_STATUS_CODE: 1',
'INSTRUMENTATION_RESULT: result=hello',
'world',
'',
'',
'INSTRUMENTATION_CODE: 0',
]
parser = instrumentation_parser.InstrumentationParser(raw_output)
statuses = list(parser.IterStatus())
code, bundle = parser.GetResult()
self.assertEqual(0, code)
self.assertEqual({'result': 'hello\nworld\n\n'}, bundle)
self.assertEqual([(1, {'class': 'foo', 'test': 'bar'})], statuses)
if __name__ == '__main__':
unittest.main(verbosity=2)