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