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 story 11from telemetry import page as page_module 12from telemetry import value 13from telemetry.value import failure 14 15 16class TestBase(unittest.TestCase): 17 def setUp(self): 18 self.story_set = story.StorySet(base_dir=os.path.dirname(__file__)) 19 self.story_set.AddStory(page_module.Page( 20 'http://www.bar.com/', self.story_set, self.story_set.base_dir)) 21 22 @property 23 def pages(self): 24 return self.story_set.stories 25 26class ValueTest(TestBase): 27 def testRepr(self): 28 v = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 29 30 exc_info_str = failure.GetStringFromExcInfo(v.exc_info) 31 expected = 'FailureValue(http://www.bar.com/, %s)' % exc_info_str 32 33 self.assertEquals(expected, str(v)) 34 35 def testName(self): 36 v0 = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 37 self.assertEquals('Exception', v0.name) 38 try: 39 raise NotImplementedError() 40 except Exception: 41 v1 = failure.FailureValue(self.pages[0], sys.exc_info()) 42 self.assertEquals('NotImplementedError', v1.name) 43 44 def testBuildbotAndRepresentativeValue(self): 45 v = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 46 self.assertIsNone(v.GetBuildbotValue()) 47 self.assertIsNone(v.GetBuildbotDataType( 48 value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) 49 self.assertIsNone(v.GetChartAndTraceNameForPerPageResult()) 50 self.assertIsNone(v.GetRepresentativeNumber()) 51 self.assertIsNone(v.GetRepresentativeString()) 52 53 def testAsDict(self): 54 v = failure.FailureValue.FromMessage(self.pages[0], 'Failure') 55 d = v.AsDictWithoutBaseClassEntries() 56 self.assertTrue(d['value'].find('Exception: Failure') > -1) 57 58 def testFromDict(self): 59 try: 60 raise Exception('test') 61 except Exception: 62 exc_info = sys.exc_info() 63 d = { 64 'type': 'failure', 65 'name': exc_info[0].__name__, 66 'units': '', 67 'value': ''.join(traceback.format_exception(*exc_info)) 68 } 69 v = value.Value.FromDict(d, {}) 70 71 self.assertTrue(isinstance(v, failure.FailureValue)) 72 self.assertEquals(v.name, 'Exception') 73