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