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