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. 4 5import os 6import sys 7import traceback 8import unittest 9 10from telemetry import value 11from telemetry.page import page_set 12from telemetry.value import failure 13 14 15class TestBase(unittest.TestCase): 16 def setUp(self): 17 self.page_set = page_set.PageSet(file_path=os.path.dirname(__file__)) 18 self.page_set.AddPageWithDefaultRunNavigate("http://www.bar.com/") 19 20 @property 21 def pages(self): 22 return self.page_set.pages 23 24class ValueTest(TestBase): 25 def testName(self): 26 v0 = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 27 self.assertEquals('Exception', v0.name) 28 try: 29 raise NotImplementedError() 30 except Exception: 31 v1 = failure.FailureValue(self.pages[0], sys.exc_info()) 32 self.assertEquals('NotImplementedError', v1.name) 33 34 def testBuildbotAndRepresentativeValue(self): 35 v = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 36 self.assertIsNone(v.GetBuildbotValue()) 37 self.assertIsNone(v.GetBuildbotDataType( 38 value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) 39 self.assertIsNone(v.GetChartAndTraceNameForPerPageResult()) 40 self.assertIsNone(v.GetRepresentativeNumber()) 41 self.assertIsNone(v.GetRepresentativeString()) 42 43 def testAsDict(self): 44 v = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 45 d = v.AsDictWithoutBaseClassEntries() 46 self.assertTrue(d['value'].find('Exception: Failure') > -1) 47 48 def testFromDict(self): 49 try: 50 raise Exception('test') 51 except Exception: 52 exc_info = sys.exc_info() 53 d = { 54 'type': 'failure', 55 'name': exc_info[0].__name__, 56 'units': '', 57 'value': ''.join(traceback.format_exception(*exc_info)) 58 } 59 v = value.Value.FromDict(d, {}) 60 61 self.assertTrue(isinstance(v, failure.FailureValue)) 62 self.assertEquals(v.name, 'Exception') 63