| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Unit tests for instrumentation_test_instance.""" | 6 """Unit tests for instrumentation_test_instance.""" |
| 7 | 7 |
| 8 # pylint: disable=protected-access | 8 # pylint: disable=protected-access |
| 9 | 9 |
| 10 import unittest | 10 import unittest |
| 11 | 11 |
| 12 from pylib.base import base_test_result | 12 from pylib.base import base_test_result |
| 13 from pylib.constants import host_paths | 13 from pylib.constants import host_paths |
| 14 from pylib.instrumentation import instrumentation_test_instance | 14 from pylib.instrumentation import instrumentation_test_instance |
| 15 | 15 |
| 16 with host_paths.SysPath(host_paths.PYMOCK_PATH): | 16 with host_paths.SysPath(host_paths.PYMOCK_PATH): |
| 17 import mock # pylint: disable=import-error | 17 import mock # pylint: disable=import-error |
| 18 | 18 |
| 19 _INSTRUMENTATION_TEST_INSTANCE_PATH = ( |
| 20 'pylib.instrumentation.instrumentation_test_instance.%s') |
| 19 | 21 |
| 20 class InstrumentationTestInstanceTest(unittest.TestCase): | 22 class InstrumentationTestInstanceTest(unittest.TestCase): |
| 21 | 23 |
| 22 def setUp(self): | 24 def setUp(self): |
| 23 options = mock.Mock() | 25 options = mock.Mock() |
| 24 options.tool = '' | 26 options.tool = '' |
| 25 | 27 |
| 26 @staticmethod | 28 @staticmethod |
| 27 def createTestInstance(): | 29 def createTestInstance(): |
| 28 c = ('pylib.instrumentation.instrumentation_test_instance.' | 30 c = _INSTRUMENTATION_TEST_INSTANCE_PATH % 'InstrumentationTestInstance' |
| 29 'InstrumentationTestInstance') | |
| 30 with mock.patch('%s._initializeApkAttributes' % c), ( | 31 with mock.patch('%s._initializeApkAttributes' % c), ( |
| 31 mock.patch('%s._initializeDataDependencyAttributes' % c)), ( | 32 mock.patch('%s._initializeDataDependencyAttributes' % c)), ( |
| 32 mock.patch('%s._initializeTestFilterAttributes' % c)), ( | 33 mock.patch('%s._initializeTestFilterAttributes' % c)), ( |
| 33 mock.patch('%s._initializeFlagAttributes' % c)), ( | 34 mock.patch('%s._initializeFlagAttributes' % c)), ( |
| 34 mock.patch('%s._initializeDriverAttributes' % c)), ( | 35 mock.patch('%s._initializeDriverAttributes' % c)), ( |
| 35 mock.patch('%s._initializeTestControlAttributes' % c)), ( | 36 mock.patch('%s._initializeTestControlAttributes' % c)), ( |
| 36 mock.patch('%s._initializeTestCoverageAttributes' % c)): | 37 mock.patch('%s._initializeTestCoverageAttributes' % c)): |
| 37 return instrumentation_test_instance.InstrumentationTestInstance( | 38 return instrumentation_test_instance.InstrumentationTestInstance( |
| 38 mock.MagicMock(), mock.MagicMock(), lambda s: None) | 39 mock.MagicMock(), mock.MagicMock(), lambda s: None) |
| 39 | 40 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 59 'class': 'org.chromium.test.SampleTest2', | 60 'class': 'org.chromium.test.SampleTest2', |
| 60 'methods': [ | 61 'methods': [ |
| 61 { | 62 { |
| 62 'annotations': {'SmallTest': None}, | 63 'annotations': {'SmallTest': None}, |
| 63 'method': 'testMethod1', | 64 'method': 'testMethod1', |
| 64 }, | 65 }, |
| 65 ], | 66 ], |
| 66 } | 67 } |
| 67 ] | 68 ] |
| 68 | 69 |
| 69 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 70 | |
| 71 expected_tests = [ | 70 expected_tests = [ |
| 72 { | 71 { |
| 73 'annotations': { | 72 'annotations': { |
| 74 'Feature': {'value': ['Foo']}, | 73 'Feature': {'value': ['Foo']}, |
| 75 'SmallTest': None, | 74 'SmallTest': None, |
| 76 }, | 75 }, |
| 77 'class': 'org.chromium.test.SampleTest', | 76 'class': 'org.chromium.test.SampleTest', |
| 78 'method': 'testMethod1', | 77 'method': 'testMethod1', |
| 79 }, | 78 }, |
| 80 { | 79 { |
| 81 'annotations': { | 80 'annotations': { |
| 82 'Feature': {'value': ['Foo']}, | 81 'Feature': {'value': ['Foo']}, |
| 83 'MediumTest': None, | 82 'MediumTest': None, |
| 84 }, | 83 }, |
| 85 'class': 'org.chromium.test.SampleTest', | 84 'class': 'org.chromium.test.SampleTest', |
| 86 'method': 'testMethod2', | 85 'method': 'testMethod2', |
| 87 }, | 86 }, |
| 88 { | 87 { |
| 89 'annotations': { | 88 'annotations': { |
| 90 'Feature': {'value': ['Bar']}, | 89 'Feature': {'value': ['Bar']}, |
| 91 'SmallTest': None, | 90 'SmallTest': None, |
| 92 }, | 91 }, |
| 93 'class': 'org.chromium.test.SampleTest2', | 92 'class': 'org.chromium.test.SampleTest2', |
| 94 'method': 'testMethod1', | 93 'method': 'testMethod1', |
| 95 }, | 94 }, |
| 96 ] | 95 ] |
| 97 | 96 |
| 98 actual_tests = o.GetTests() | 97 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 98 return_value=raw_tests): |
| 99 actual_tests = o.GetTests() |
| 100 |
| 99 self.assertEquals(actual_tests, expected_tests) | 101 self.assertEquals(actual_tests, expected_tests) |
| 100 | 102 |
| 101 def testGetTests_simpleGtestFilter(self): | 103 def testGetTests_simpleGtestFilter(self): |
| 102 o = self.createTestInstance() | 104 o = self.createTestInstance() |
| 103 raw_tests = [ | 105 raw_tests = [ |
| 104 { | 106 { |
| 105 'annotations': {'Feature': {'value': ['Foo']}}, | 107 'annotations': {'Feature': {'value': ['Foo']}}, |
| 106 'class': 'org.chromium.test.SampleTest', | 108 'class': 'org.chromium.test.SampleTest', |
| 107 'methods': [ | 109 'methods': [ |
| 108 { | 110 { |
| 109 'annotations': {'SmallTest': None}, | 111 'annotations': {'SmallTest': None}, |
| 110 'method': 'testMethod1', | 112 'method': 'testMethod1', |
| 111 }, | 113 }, |
| 112 { | 114 { |
| 113 'annotations': {'MediumTest': None}, | 115 'annotations': {'MediumTest': None}, |
| 114 'method': 'testMethod2', | 116 'method': 'testMethod2', |
| 115 }, | 117 }, |
| 116 ], | 118 ], |
| 117 } | 119 } |
| 118 ] | 120 ] |
| 119 | 121 |
| 120 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 121 o._test_filter = 'org.chromium.test.SampleTest.testMethod1' | |
| 122 | |
| 123 expected_tests = [ | 122 expected_tests = [ |
| 124 { | 123 { |
| 125 'annotations': { | 124 'annotations': { |
| 126 'Feature': {'value': ['Foo']}, | 125 'Feature': {'value': ['Foo']}, |
| 127 'SmallTest': None, | 126 'SmallTest': None, |
| 128 }, | 127 }, |
| 129 'class': 'org.chromium.test.SampleTest', | 128 'class': 'org.chromium.test.SampleTest', |
| 130 'method': 'testMethod1', | 129 'method': 'testMethod1', |
| 131 }, | 130 }, |
| 132 ] | 131 ] |
| 133 | 132 |
| 134 actual_tests = o.GetTests() | 133 o._test_filter = 'org.chromium.test.SampleTest.testMethod1' |
| 134 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 135 return_value=raw_tests): |
| 136 actual_tests = o.GetTests() |
| 137 |
| 135 self.assertEquals(actual_tests, expected_tests) | 138 self.assertEquals(actual_tests, expected_tests) |
| 136 | 139 |
| 137 def testGetTests_wildcardGtestFilter(self): | 140 def testGetTests_wildcardGtestFilter(self): |
| 138 o = self.createTestInstance() | 141 o = self.createTestInstance() |
| 139 raw_tests = [ | 142 raw_tests = [ |
| 140 { | 143 { |
| 141 'annotations': {'Feature': {'value': ['Foo']}}, | 144 'annotations': {'Feature': {'value': ['Foo']}}, |
| 142 'class': 'org.chromium.test.SampleTest', | 145 'class': 'org.chromium.test.SampleTest', |
| 143 'methods': [ | 146 'methods': [ |
| 144 { | 147 { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 156 'class': 'org.chromium.test.SampleTest2', | 159 'class': 'org.chromium.test.SampleTest2', |
| 157 'methods': [ | 160 'methods': [ |
| 158 { | 161 { |
| 159 'annotations': {'SmallTest': None}, | 162 'annotations': {'SmallTest': None}, |
| 160 'method': 'testMethod1', | 163 'method': 'testMethod1', |
| 161 }, | 164 }, |
| 162 ], | 165 ], |
| 163 } | 166 } |
| 164 ] | 167 ] |
| 165 | 168 |
| 166 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 167 o._test_filter = 'org.chromium.test.SampleTest2.*' | |
| 168 | |
| 169 expected_tests = [ | 169 expected_tests = [ |
| 170 { | 170 { |
| 171 'annotations': { | 171 'annotations': { |
| 172 'Feature': {'value': ['Bar']}, | 172 'Feature': {'value': ['Bar']}, |
| 173 'SmallTest': None, | 173 'SmallTest': None, |
| 174 }, | 174 }, |
| 175 'class': 'org.chromium.test.SampleTest2', | 175 'class': 'org.chromium.test.SampleTest2', |
| 176 'method': 'testMethod1', | 176 'method': 'testMethod1', |
| 177 }, | 177 }, |
| 178 ] | 178 ] |
| 179 | 179 |
| 180 actual_tests = o.GetTests() | 180 o._test_filter = 'org.chromium.test.SampleTest2.*' |
| 181 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 182 return_value=raw_tests): |
| 183 actual_tests = o.GetTests() |
| 184 |
| 181 self.assertEquals(actual_tests, expected_tests) | 185 self.assertEquals(actual_tests, expected_tests) |
| 182 | 186 |
| 183 @unittest.skip('crbug.com/623047') | 187 @unittest.skip('crbug.com/623047') |
| 184 def testGetTests_negativeGtestFilter(self): | 188 def testGetTests_negativeGtestFilter(self): |
| 185 o = self.createTestInstance() | 189 o = self.createTestInstance() |
| 186 raw_tests = [ | 190 raw_tests = [ |
| 187 { | 191 { |
| 188 'annotations': {'Feature': {'value': ['Foo']}}, | 192 'annotations': {'Feature': {'value': ['Foo']}}, |
| 189 'class': 'org.chromium.test.SampleTest', | 193 'class': 'org.chromium.test.SampleTest', |
| 190 'methods': [ | 194 'methods': [ |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 'class': 'org.chromium.test.SampleTest2', | 261 'class': 'org.chromium.test.SampleTest2', |
| 258 'methods': [ | 262 'methods': [ |
| 259 { | 263 { |
| 260 'annotations': {'SmallTest': None}, | 264 'annotations': {'SmallTest': None}, |
| 261 'method': 'testMethod1', | 265 'method': 'testMethod1', |
| 262 }, | 266 }, |
| 263 ], | 267 ], |
| 264 } | 268 } |
| 265 ] | 269 ] |
| 266 | 270 |
| 267 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 268 o._annotations = {'SmallTest': None} | |
| 269 | |
| 270 expected_tests = [ | 271 expected_tests = [ |
| 271 { | 272 { |
| 272 'annotations': { | 273 'annotations': { |
| 273 'Feature': {'value': ['Foo']}, | 274 'Feature': {'value': ['Foo']}, |
| 274 'SmallTest': None, | 275 'SmallTest': None, |
| 275 }, | 276 }, |
| 276 'class': 'org.chromium.test.SampleTest', | 277 'class': 'org.chromium.test.SampleTest', |
| 277 'method': 'testMethod1', | 278 'method': 'testMethod1', |
| 278 }, | 279 }, |
| 279 { | 280 { |
| 280 'annotations': { | 281 'annotations': { |
| 281 'Feature': {'value': ['Bar']}, | 282 'Feature': {'value': ['Bar']}, |
| 282 'SmallTest': None, | 283 'SmallTest': None, |
| 283 }, | 284 }, |
| 284 'class': 'org.chromium.test.SampleTest2', | 285 'class': 'org.chromium.test.SampleTest2', |
| 285 'method': 'testMethod1', | 286 'method': 'testMethod1', |
| 286 }, | 287 }, |
| 287 ] | 288 ] |
| 288 | 289 |
| 289 actual_tests = o.GetTests() | 290 o._annotations = {'SmallTest': None} |
| 291 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 292 return_value=raw_tests): |
| 293 actual_tests = o.GetTests() |
| 294 |
| 290 self.assertEquals(actual_tests, expected_tests) | 295 self.assertEquals(actual_tests, expected_tests) |
| 291 | 296 |
| 292 def testGetTests_excludedAnnotationFilter(self): | 297 def testGetTests_excludedAnnotationFilter(self): |
| 293 o = self.createTestInstance() | 298 o = self.createTestInstance() |
| 294 raw_tests = [ | 299 raw_tests = [ |
| 295 { | 300 { |
| 296 'annotations': {'Feature': {'value': ['Foo']}}, | 301 'annotations': {'Feature': {'value': ['Foo']}}, |
| 297 'class': 'org.chromium.test.SampleTest', | 302 'class': 'org.chromium.test.SampleTest', |
| 298 'methods': [ | 303 'methods': [ |
| 299 { | 304 { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 311 'class': 'org.chromium.test.SampleTest2', | 316 'class': 'org.chromium.test.SampleTest2', |
| 312 'methods': [ | 317 'methods': [ |
| 313 { | 318 { |
| 314 'annotations': {'SmallTest': None}, | 319 'annotations': {'SmallTest': None}, |
| 315 'method': 'testMethod1', | 320 'method': 'testMethod1', |
| 316 }, | 321 }, |
| 317 ], | 322 ], |
| 318 } | 323 } |
| 319 ] | 324 ] |
| 320 | 325 |
| 321 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 322 o._excluded_annotations = {'SmallTest': None} | |
| 323 | |
| 324 expected_tests = [ | 326 expected_tests = [ |
| 325 { | 327 { |
| 326 'annotations': { | 328 'annotations': { |
| 327 'Feature': {'value': ['Foo']}, | 329 'Feature': {'value': ['Foo']}, |
| 328 'MediumTest': None, | 330 'MediumTest': None, |
| 329 }, | 331 }, |
| 330 'class': 'org.chromium.test.SampleTest', | 332 'class': 'org.chromium.test.SampleTest', |
| 331 'method': 'testMethod2', | 333 'method': 'testMethod2', |
| 332 }, | 334 }, |
| 333 ] | 335 ] |
| 334 | 336 |
| 335 actual_tests = o.GetTests() | 337 o._excluded_annotations = {'SmallTest': None} |
| 338 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 339 return_value=raw_tests): |
| 340 actual_tests = o.GetTests() |
| 341 |
| 336 self.assertEquals(actual_tests, expected_tests) | 342 self.assertEquals(actual_tests, expected_tests) |
| 337 | 343 |
| 338 def testGetTests_annotationSimpleValueFilter(self): | 344 def testGetTests_annotationSimpleValueFilter(self): |
| 339 o = self.createTestInstance() | 345 o = self.createTestInstance() |
| 340 raw_tests = [ | 346 raw_tests = [ |
| 341 { | 347 { |
| 342 'annotations': {'Feature': {'value': ['Foo']}}, | 348 'annotations': {'Feature': {'value': ['Foo']}}, |
| 343 'class': 'org.chromium.test.SampleTest', | 349 'class': 'org.chromium.test.SampleTest', |
| 344 'methods': [ | 350 'methods': [ |
| 345 { | 351 { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 366 'annotations': { | 372 'annotations': { |
| 367 'SmallTest': None, | 373 'SmallTest': None, |
| 368 'TestValue': '3', | 374 'TestValue': '3', |
| 369 }, | 375 }, |
| 370 'method': 'testMethod1', | 376 'method': 'testMethod1', |
| 371 }, | 377 }, |
| 372 ], | 378 ], |
| 373 } | 379 } |
| 374 ] | 380 ] |
| 375 | 381 |
| 376 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 377 o._annotations = {'TestValue': '1'} | |
| 378 | |
| 379 expected_tests = [ | 382 expected_tests = [ |
| 380 { | 383 { |
| 381 'annotations': { | 384 'annotations': { |
| 382 'Feature': {'value': ['Foo']}, | 385 'Feature': {'value': ['Foo']}, |
| 383 'SmallTest': None, | 386 'SmallTest': None, |
| 384 'TestValue': '1', | 387 'TestValue': '1', |
| 385 }, | 388 }, |
| 386 'class': 'org.chromium.test.SampleTest', | 389 'class': 'org.chromium.test.SampleTest', |
| 387 'method': 'testMethod1', | 390 'method': 'testMethod1', |
| 388 }, | 391 }, |
| 389 ] | 392 ] |
| 390 | 393 |
| 391 actual_tests = o.GetTests() | 394 o._annotations = {'TestValue': '1'} |
| 395 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 396 return_value=raw_tests): |
| 397 actual_tests = o.GetTests() |
| 398 |
| 392 self.assertEquals(actual_tests, expected_tests) | 399 self.assertEquals(actual_tests, expected_tests) |
| 393 | 400 |
| 394 def testGetTests_annotationDictValueFilter(self): | 401 def testGetTests_annotationDictValueFilter(self): |
| 395 o = self.createTestInstance() | 402 o = self.createTestInstance() |
| 396 raw_tests = [ | 403 raw_tests = [ |
| 397 { | 404 { |
| 398 'annotations': {'Feature': {'value': ['Foo']}}, | 405 'annotations': {'Feature': {'value': ['Foo']}}, |
| 399 'class': 'org.chromium.test.SampleTest', | 406 'class': 'org.chromium.test.SampleTest', |
| 400 'methods': [ | 407 'methods': [ |
| 401 { | 408 { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 413 'class': 'org.chromium.test.SampleTest2', | 420 'class': 'org.chromium.test.SampleTest2', |
| 414 'methods': [ | 421 'methods': [ |
| 415 { | 422 { |
| 416 'annotations': {'SmallTest': None}, | 423 'annotations': {'SmallTest': None}, |
| 417 'method': 'testMethod1', | 424 'method': 'testMethod1', |
| 418 }, | 425 }, |
| 419 ], | 426 ], |
| 420 } | 427 } |
| 421 ] | 428 ] |
| 422 | 429 |
| 423 o._GetTestsFromPickle = mock.MagicMock(return_value=raw_tests) | |
| 424 o._annotations = {'Feature': 'Bar'} | |
| 425 | |
| 426 expected_tests = [ | 430 expected_tests = [ |
| 427 { | 431 { |
| 428 'annotations': { | 432 'annotations': { |
| 429 'Feature': {'value': ['Bar']}, | 433 'Feature': {'value': ['Bar']}, |
| 430 'SmallTest': None, | 434 'SmallTest': None, |
| 431 }, | 435 }, |
| 432 'class': 'org.chromium.test.SampleTest2', | 436 'class': 'org.chromium.test.SampleTest2', |
| 433 'method': 'testMethod1', | 437 'method': 'testMethod1', |
| 434 }, | 438 }, |
| 435 ] | 439 ] |
| 436 | 440 |
| 437 actual_tests = o.GetTests() | 441 o._annotations = {'Feature': 'Bar'} |
| 442 with mock.patch(_INSTRUMENTATION_TEST_INSTANCE_PATH % '_GetTestsFromPickle', |
| 443 return_value=raw_tests): |
| 444 actual_tests = o.GetTests() |
| 445 |
| 438 self.assertEquals(actual_tests, expected_tests) | 446 self.assertEquals(actual_tests, expected_tests) |
| 439 | 447 |
| 440 def testGenerateTestResults_noStatus(self): | 448 def testGenerateTestResults_noStatus(self): |
| 441 results = instrumentation_test_instance.GenerateTestResults( | 449 results = instrumentation_test_instance.GenerateTestResults( |
| 442 None, None, [], 0, 1000) | 450 None, None, [], 0, 1000) |
| 443 self.assertEqual([], results) | 451 self.assertEqual([], results) |
| 444 | 452 |
| 445 def testGenerateTestResults_testPassed(self): | 453 def testGenerateTestResults_testPassed(self): |
| 446 statuses = [ | 454 statuses = [ |
| 447 (1, { | 455 (1, { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 ] | 537 ] |
| 530 results = instrumentation_test_instance.GenerateTestResults( | 538 results = instrumentation_test_instance.GenerateTestResults( |
| 531 None, None, statuses, 0, 1000) | 539 None, None, statuses, 0, 1000) |
| 532 self.assertEqual(1, len(results)) | 540 self.assertEqual(1, len(results)) |
| 533 self.assertEqual(base_test_result.ResultType.FAIL, results[0].GetType()) | 541 self.assertEqual(base_test_result.ResultType.FAIL, results[0].GetType()) |
| 534 self.assertEqual(stacktrace, results[0].GetLog()) | 542 self.assertEqual(stacktrace, results[0].GetLog()) |
| 535 | 543 |
| 536 | 544 |
| 537 if __name__ == '__main__': | 545 if __name__ == '__main__': |
| 538 unittest.main(verbosity=2) | 546 unittest.main(verbosity=2) |
| OLD | NEW |