1# Copyright 2016 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 unittest
6import os
7
8from tracing.mre import function_handle
9from tracing.mre import failure
10from tracing.mre import job as job_module
11
12from telemetry import page
13from telemetry import story
14from telemetry.value import improvement_direction
15from telemetry.value import scalar
16from telemetry.value import common_value_helpers
17
18
19def _SingleFileFunctionHandle(filename, function_name, guid):
20  return function_handle.FunctionHandle(
21      modules_to_load=[function_handle.ModuleToLoad(filename=filename)],
22      function_name=function_name, guid=guid)
23
24
25class TranslateCommonValuesTest(unittest.TestCase):
26  def testTranslateMreFailure(self):
27    map_function_handle = _SingleFileFunctionHandle('foo.html', 'Foo', '2')
28    job = job_module.Job(map_function_handle, '1')
29
30    story_set = story.StorySet(base_dir=os.path.dirname(__file__))
31    p = page.Page('http://www.foo.com/', story_set, story_set.base_dir)
32
33    f = failure.Failure(job, 'foo', '/a.json', 'MyFailure', 'failure', 'stack')
34    fv = common_value_helpers.TranslateMreFailure(f, p)
35
36    self.assertIn('stack', str(fv))
37
38  def testTranslateScalarValue(self):
39    story_set = story.StorySet(base_dir=os.path.dirname(__file__))
40    p = page.Page('http://www.foo.com/', story_set, story_set.base_dir)
41
42    scalar_value = {
43        'type': 'numeric',
44        'numeric': {
45            'type': 'scalar',
46            'unit': 'timeInMs_smallerIsBetter',
47            'value': 42
48        },
49        'name': 'foo',
50        'description': 'desc'
51    }
52
53    v = common_value_helpers.TranslateScalarValue(scalar_value, p)
54
55    self.assertIsInstance(v, scalar.ScalarValue)
56    self.assertEquals('foo', v.name)
57    self.assertEquals(p, v.page)
58    self.assertEquals('timeInMs', v.units)
59    self.assertEquals(42, v.value)
60    self.assertEquals(improvement_direction.DOWN, v.improvement_direction)
61    self.assertEquals('desc', v.description)
62
63  def testTranslateScalarNoneValue(self):
64    story_set = story.StorySet(base_dir=os.path.dirname(__file__))
65    p = page.Page('http://www.foo.com/', story_set, story_set.base_dir)
66
67    scalar_value = {
68        'type': 'numeric',
69        'numeric': {
70            'type': 'scalar',
71            'unit': 'timeInMs_smallerIsBetter',
72            'value': None
73        },
74        'name': 'foo'
75    }
76
77    v = common_value_helpers.TranslateScalarValue(scalar_value, p)
78
79    self.assertIsNone(v.value)
80    self.assertEquals('Common scalar contained None', v.none_value_reason)
81