| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 import os | 4 import os |
| 5 import unittest | 5 import unittest |
| 6 | 6 |
| 7 from telemetry import page as page_module | 7 from telemetry import page as page_module |
| 8 from telemetry import value | 8 from telemetry import value |
| 9 from telemetry.page import page_set | 9 from telemetry.page import page_set |
| 10 from telemetry.value import improvement_direction |
| 10 from telemetry.value import none_values | 11 from telemetry.value import none_values |
| 11 from telemetry.value import scalar | 12 from telemetry.value import scalar |
| 12 | 13 |
| 13 | 14 |
| 14 class TestBase(unittest.TestCase): | 15 class TestBase(unittest.TestCase): |
| 15 def setUp(self): | 16 def setUp(self): |
| 16 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) | 17 ps = page_set.PageSet(file_path=os.path.dirname(__file__)) |
| 17 ps.AddUserStory(page_module.Page('http://www.bar.com/', ps, ps.base_dir)) | 18 ps.AddUserStory(page_module.Page('http://www.bar.com/', ps, ps.base_dir)) |
| 18 ps.AddUserStory(page_module.Page('http://www.baz.com/', ps, ps.base_dir)) | 19 ps.AddUserStory(page_module.Page('http://www.baz.com/', ps, ps.base_dir)) |
| 19 ps.AddUserStory(page_module.Page('http://www.foo.com/', ps, ps.base_dir)) | 20 ps.AddUserStory(page_module.Page('http://www.foo.com/', ps, ps.base_dir)) |
| 20 self.page_set = ps | 21 self.page_set = ps |
| 21 | 22 |
| 22 @property | 23 @property |
| 23 def pages(self): | 24 def pages(self): |
| 24 return self.page_set.pages | 25 return self.page_set.pages |
| 25 | 26 |
| 26 class ValueTest(TestBase): | 27 class ValueTest(TestBase): |
| 27 def testBuildbotValueType(self): | 28 def testBuildbotValueType(self): |
| 28 page0 = self.pages[0] | 29 page0 = self.pages[0] |
| 29 v = scalar.ScalarValue(page0, 'x', 'unit', 3, important=True) | 30 v = scalar.ScalarValue(page0, 'x', 'unit', 3, important=True, |
| 31 improvement_direction=improvement_direction.DOWN) |
| 30 self.assertEquals('default', v.GetBuildbotDataType( | 32 self.assertEquals('default', v.GetBuildbotDataType( |
| 31 value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) | 33 value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) |
| 32 self.assertEquals([3], v.GetBuildbotValue()) | 34 self.assertEquals([3], v.GetBuildbotValue()) |
| 33 self.assertEquals(('x', page0.display_name), | 35 self.assertEquals(('x', page0.display_name), |
| 34 v.GetChartAndTraceNameForPerPageResult()) | 36 v.GetChartAndTraceNameForPerPageResult()) |
| 35 | 37 |
| 36 v = scalar.ScalarValue(page0, 'x', 'unit', 3, important=False) | 38 v = scalar.ScalarValue(page0, 'x', 'unit', 3, important=False, |
| 39 improvement_direction=improvement_direction.DOWN) |
| 37 self.assertEquals( | 40 self.assertEquals( |
| 38 'unimportant', | 41 'unimportant', |
| 39 v.GetBuildbotDataType(value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) | 42 v.GetBuildbotDataType(value.COMPUTED_PER_PAGE_SUMMARY_OUTPUT_CONTEXT)) |
| 40 | 43 |
| 41 def testScalarSamePageMerging(self): | 44 def testScalarSamePageMerging(self): |
| 42 page0 = self.pages[0] | 45 page0 = self.pages[0] |
| 43 v0 = scalar.ScalarValue(page0, 'x', 'unit', 1) | 46 v0 = scalar.ScalarValue(page0, 'x', 'unit', 1, |
| 44 v1 = scalar.ScalarValue(page0, 'x', 'unit', 2) | 47 improvement_direction=improvement_direction.UP) |
| 48 v1 = scalar.ScalarValue(page0, 'x', 'unit', 2, |
| 49 improvement_direction=improvement_direction.UP) |
| 45 self.assertTrue(v1.IsMergableWith(v0)) | 50 self.assertTrue(v1.IsMergableWith(v0)) |
| 46 | 51 |
| 47 vM = scalar.ScalarValue.MergeLikeValuesFromSamePage([v0, v1]) | 52 vM = scalar.ScalarValue.MergeLikeValuesFromSamePage([v0, v1]) |
| 48 self.assertEquals(page0, vM.page) | 53 self.assertEquals(page0, vM.page) |
| 49 self.assertEquals('x', vM.name) | 54 self.assertEquals('x', vM.name) |
| 50 self.assertEquals('unit', vM.units) | 55 self.assertEquals('unit', vM.units) |
| 51 self.assertEquals(True, vM.important) | 56 self.assertEquals(True, vM.important) |
| 52 self.assertEquals([1, 2], vM.values) | 57 self.assertEquals([1, 2], vM.values) |
| 58 self.assertEquals(improvement_direction.UP, vM.improvement_direction) |
| 53 | 59 |
| 54 def testScalarDifferentPageMerging(self): | 60 def testScalarDifferentPageMerging(self): |
| 55 page0 = self.pages[0] | 61 page0 = self.pages[0] |
| 56 page1 = self.pages[1] | 62 page1 = self.pages[1] |
| 57 v0 = scalar.ScalarValue(page0, 'x', 'unit', 1) | 63 v0 = scalar.ScalarValue( |
| 58 v1 = scalar.ScalarValue(page1, 'x', 'unit', 2) | 64 page0, 'x', 'unit', 1, improvement_direction=improvement_direction.UP) |
| 65 v1 = scalar.ScalarValue( |
| 66 page1, 'x', 'unit', 2, improvement_direction=improvement_direction.UP) |
| 59 | 67 |
| 60 vM = scalar.ScalarValue.MergeLikeValuesFromDifferentPages([v0, v1]) | 68 vM = scalar.ScalarValue.MergeLikeValuesFromDifferentPages([v0, v1]) |
| 61 self.assertEquals(None, vM.page) | 69 self.assertEquals(None, vM.page) |
| 62 self.assertEquals('x', vM.name) | 70 self.assertEquals('x', vM.name) |
| 63 self.assertEquals('unit', vM.units) | 71 self.assertEquals('unit', vM.units) |
| 64 self.assertEquals(True, vM.important) | 72 self.assertEquals(True, vM.important) |
| 65 self.assertEquals([1, 2], vM.values) | 73 self.assertEquals([1, 2], vM.values) |
| 74 self.assertEquals(improvement_direction.UP, vM.improvement_direction) |
| 66 | 75 |
| 67 def testScalarWithNoneValueMerging(self): | 76 def testScalarWithNoneValueMerging(self): |
| 68 page0 = self.pages[0] | 77 page0 = self.pages[0] |
| 69 v0 = scalar.ScalarValue(page0, 'x', 'unit', 1) | 78 v0 = scalar.ScalarValue( |
| 70 v1 = scalar.ScalarValue(page0, 'x', 'unit', None, none_value_reason='n') | 79 page0, 'x', 'unit', 1, improvement_direction=improvement_direction.DOWN) |
| 80 v1 = scalar.ScalarValue(page0, 'x', 'unit', None, none_value_reason='n', |
| 81 improvement_direction=improvement_direction.DOWN) |
| 71 self.assertTrue(v1.IsMergableWith(v0)) | 82 self.assertTrue(v1.IsMergableWith(v0)) |
| 72 | 83 |
| 73 vM = scalar.ScalarValue.MergeLikeValuesFromSamePage([v0, v1]) | 84 vM = scalar.ScalarValue.MergeLikeValuesFromSamePage([v0, v1]) |
| 74 self.assertEquals(None, vM.values) | 85 self.assertEquals(None, vM.values) |
| 75 self.assertEquals(none_values.MERGE_FAILURE_REASON, | 86 self.assertEquals(none_values.MERGE_FAILURE_REASON, |
| 76 vM.none_value_reason) | 87 vM.none_value_reason) |
| 77 | 88 |
| 78 def testScalarWithNoneValueMustHaveNoneReason(self): | 89 def testScalarWithNoneValueMustHaveNoneReason(self): |
| 79 page0 = self.pages[0] | 90 page0 = self.pages[0] |
| 80 self.assertRaises(none_values.NoneValueMissingReason, | 91 self.assertRaises(none_values.NoneValueMissingReason, |
| 81 lambda: scalar.ScalarValue(page0, 'x', 'unit', None)) | 92 lambda: scalar.ScalarValue( |
| 93 page0, 'x', 'unit', None, |
| 94 improvement_direction=improvement_direction.UP)) |
| 82 | 95 |
| 83 def testScalarWithNoneReasonMustHaveNoneValue(self): | 96 def testScalarWithNoneReasonMustHaveNoneValue(self): |
| 84 page0 = self.pages[0] | 97 page0 = self.pages[0] |
| 85 self.assertRaises(none_values.ValueMustHaveNoneValue, | 98 self.assertRaises(none_values.ValueMustHaveNoneValue, |
| 86 lambda: scalar.ScalarValue(page0, 'x', 'unit', 1, | 99 lambda: scalar.ScalarValue( |
| 87 none_value_reason='n')) | 100 page0, 'x', 'unit', 1, none_value_reason='n', |
| 101 improvement_direction=improvement_direction.UP)) |
| 88 | 102 |
| 89 def testAsDict(self): | 103 def testAsDict(self): |
| 90 v = scalar.ScalarValue(None, 'x', 'unit', 42, important=False) | 104 v = scalar.ScalarValue(None, 'x', 'unit', 42, important=False, |
| 105 improvement_direction=improvement_direction.DOWN) |
| 91 d = v.AsDictWithoutBaseClassEntries() | 106 d = v.AsDictWithoutBaseClassEntries() |
| 92 | 107 |
| 93 self.assertEquals(d, { | 108 self.assertEquals(d, { |
| 94 'value': 42 | 109 'value': 42 |
| 95 }) | 110 }) |
| 96 | 111 |
| 97 def testNoneValueAsDict(self): | 112 def testNoneValueAsDict(self): |
| 98 v = scalar.ScalarValue(None, 'x', 'unit', None, important=False, | 113 v = scalar.ScalarValue(None, 'x', 'unit', None, important=False, |
| 99 none_value_reason='n') | 114 none_value_reason='n', |
| 115 improvement_direction=improvement_direction.DOWN) |
| 100 d = v.AsDictWithoutBaseClassEntries() | 116 d = v.AsDictWithoutBaseClassEntries() |
| 101 | 117 |
| 102 self.assertEquals(d, { | 118 self.assertEquals(d, { |
| 103 'value': None, | 119 'value': None, |
| 104 'none_value_reason': 'n' | 120 'none_value_reason': 'n' |
| 105 }) | 121 }) |
| 106 | 122 |
| 107 def testFromDictInt(self): | 123 def testFromDictInt(self): |
| 108 d = { | 124 d = { |
| 109 'type': 'scalar', | 125 'type': 'scalar', |
| 110 'name': 'x', | 126 'name': 'x', |
| 111 'units': 'unit', | 127 'units': 'unit', |
| 112 'value': 42 | 128 'value': 42, |
| 129 'improvement_direction': improvement_direction.DOWN, |
| 113 } | 130 } |
| 114 | 131 |
| 115 v = value.Value.FromDict(d, {}) | 132 v = value.Value.FromDict(d, {}) |
| 116 | 133 |
| 117 self.assertTrue(isinstance(v, scalar.ScalarValue)) | 134 self.assertTrue(isinstance(v, scalar.ScalarValue)) |
| 118 self.assertEquals(v.value, 42) | 135 self.assertEquals(v.value, 42) |
| 136 self.assertEquals(v.improvement_direction, improvement_direction.DOWN) |
| 119 | 137 |
| 120 def testFromDictFloat(self): | 138 def testFromDictFloat(self): |
| 121 d = { | 139 d = { |
| 122 'type': 'scalar', | 140 'type': 'scalar', |
| 123 'name': 'x', | 141 'name': 'x', |
| 124 'units': 'unit', | 142 'units': 'unit', |
| 125 'value': 42.4 | 143 'value': 42.4, |
| 144 'improvement_direction': improvement_direction.UP, |
| 126 } | 145 } |
| 127 | 146 |
| 128 v = value.Value.FromDict(d, {}) | 147 v = value.Value.FromDict(d, {}) |
| 129 | 148 |
| 130 self.assertTrue(isinstance(v, scalar.ScalarValue)) | 149 self.assertTrue(isinstance(v, scalar.ScalarValue)) |
| 131 self.assertEquals(v.value, 42.4) | 150 self.assertEquals(v.value, 42.4) |
| 132 | 151 |
| 133 def testFromDictNoneValue(self): | 152 def testFromDictNoneValue(self): |
| 134 d = { | 153 d = { |
| 135 'type': 'scalar', | 154 'type': 'scalar', |
| 136 'name': 'x', | 155 'name': 'x', |
| 137 'units': 'unit', | 156 'units': 'unit', |
| 138 'value': None, | 157 'value': None, |
| 139 'none_value_reason': 'n' | 158 'none_value_reason': 'n', |
| 159 'improvement_direction': improvement_direction.UP, |
| 140 } | 160 } |
| 141 | 161 |
| 142 v = value.Value.FromDict(d, {}) | 162 v = value.Value.FromDict(d, {}) |
| 143 | 163 |
| 144 self.assertTrue(isinstance(v, scalar.ScalarValue)) | 164 self.assertTrue(isinstance(v, scalar.ScalarValue)) |
| 145 self.assertEquals(v.value, None) | 165 self.assertEquals(v.value, None) |
| 146 self.assertEquals(v.none_value_reason, 'n') | 166 self.assertEquals(v.none_value_reason, 'n') |
| OLD | NEW |