1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import sys
5import unittest
6
7from telemetry.core import exceptions
8
9
10class TestOutputStream(object):
11
12  def __init__(self):
13    self.output_data = []
14
15  def write(self, data):
16    assert isinstance(data, str)
17    self.output_data.append(data)
18
19  def flush(self):
20    pass
21
22
23class BaseTestResultsUnittest(unittest.TestCase):
24
25  def CreateException(self):
26    try:
27      raise exceptions.IntentionalException
28    except Exception:
29      return sys.exc_info()
30
31  def assertEquals(self, ex, res):
32    # This helps diagnose result mismatches.
33    if ex != res and isinstance(ex, list):
34      def CleanList(l):
35        res = []
36        for x in l:
37          x = x.split('\n')
38          res.extend(x)
39        return res
40      ex = CleanList(ex)
41      res = CleanList(res)
42      max_len = max(len(ex), len(res))
43      max_width = max([len(x) for x in ex + res])
44      max_width = max(10, max_width)
45      print 'Lists differ!'
46      print '%*s | %*s' % (max_width, 'expected', max_width, 'result')
47      for i in range(max_len):
48        if i < len(ex):
49          e = ex[i]
50        else:
51          e = ''
52        if i < len(res):
53          r = res[i]
54        else:
55          r = ''
56        if e != r:
57          sep = '*'
58        else:
59          sep = '|'
60        print '%*s %s %*s' % (max_width, e, sep, max_width, r)
61      print ''
62    if ex != res and isinstance(ex, str) and isinstance(res, str):
63      print 'Strings differ!'
64      print 'exepected:\n%s' % repr(ex)
65      print 'result:\n%s\n' % repr(res)
66    super(BaseTestResultsUnittest, self).assertEquals(ex, res)
67