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