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