Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/env python3
      2 #
      3 #   Copyright 2017 - The Android Open Source Project
      4 #
      5 #   Licensed under the Apache License, Version 2.0 (the "License");
      6 #   you may not use this file except in compliance with the License.
      7 #   You may obtain a copy of the License at
      8 #
      9 #       http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 #   Unless required by applicable law or agreed to in writing, software
     12 #   distributed under the License is distributed on an "AS IS" BASIS,
     13 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 #   See the License for the specific language governing permissions and
     15 #   limitations under the License.
     16 
     17 from mock import Mock
     18 import unittest
     19 import tempfile
     20 
     21 from acts import keys
     22 from acts import test_runner
     23 
     24 import mock_controller
     25 
     26 
     27 class TestRunnerTest(unittest.TestCase):
     28     def setUp(self):
     29         self.tmp_dir = tempfile.mkdtemp()
     30         self.base_mock_test_config = {
     31             "testbed": {
     32                 "name": "SampleTestBed",
     33             },
     34             "logpath": self.tmp_dir,
     35             "cli_args": None,
     36             "testpaths": ["./"],
     37             "icecream": 42,
     38             "extra_param": "haha"
     39         }
     40 
     41     def create_mock_context(self):
     42         context = Mock()
     43         context.__exit__ = Mock()
     44         context.__enter__ = Mock()
     45         return context
     46 
     47     def create_test_classes(self, class_names):
     48         return {
     49             class_name: Mock(return_value=self.create_mock_context())
     50             for class_name in class_names
     51         }
     52 
     53     def test_class_name_pattern_single(self):
     54         class_names = ['test_class_1', 'test_class_2']
     55         pattern = 'test*1'
     56         tr = test_runner.TestRunner(self.base_mock_test_config, [(pattern,
     57                                                                   None)])
     58 
     59         test_classes = self.create_test_classes(class_names)
     60         tr.import_test_modules = Mock(return_value=test_classes)
     61         tr.run()
     62         self.assertTrue(test_classes[class_names[0]].called)
     63         self.assertFalse(test_classes[class_names[1]].called)
     64 
     65     def test_class_name_pattern_multi(self):
     66         class_names = ['test_class_1', 'test_class_2', 'other_name']
     67         pattern = 'test_class*'
     68         tr = test_runner.TestRunner(self.base_mock_test_config, [(pattern,
     69                                                                   None)])
     70 
     71         test_classes = self.create_test_classes(class_names)
     72         tr.import_test_modules = Mock(return_value=test_classes)
     73         tr.run()
     74         self.assertTrue(test_classes[class_names[0]].called)
     75         self.assertTrue(test_classes[class_names[1]].called)
     76         self.assertFalse(test_classes[class_names[2]].called)
     77 
     78     def test_class_name_pattern_question_mark(self):
     79         class_names = ['test_class_1', 'test_class_12']
     80         pattern = 'test_class_?'
     81         tr = test_runner.TestRunner(self.base_mock_test_config, [(pattern,
     82                                                                   None)])
     83 
     84         test_classes = self.create_test_classes(class_names)
     85         tr.import_test_modules = Mock(return_value=test_classes)
     86         tr.run()
     87         self.assertTrue(test_classes[class_names[0]].called)
     88         self.assertFalse(test_classes[class_names[1]].called)
     89 
     90     def test_class_name_pattern_char_seq(self):
     91         class_names = ['test_class_1', 'test_class_2', 'test_class_3']
     92         pattern = 'test_class_[1357]'
     93         tr = test_runner.TestRunner(self.base_mock_test_config, [(pattern,
     94                                                                   None)])
     95 
     96         test_classes = self.create_test_classes(class_names)
     97         tr.import_test_modules = Mock(return_value=test_classes)
     98         tr.run()
     99         self.assertTrue(test_classes[class_names[0]].called)
    100         self.assertFalse(test_classes[class_names[1]].called)
    101         self.assertTrue(test_classes[class_names[2]].called)
    102 
    103 
    104 if __name__ == "__main__":
    105     unittest.main()
    106