blob: 0b39be2820cfacfd38ab3f684b98612ab8794157 [file] [log] [blame]
mikehoranbe9102f2017-08-04 16:04:03 -07001#!/usr/bin/env python
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"""Unittests for cli_translator."""
18
19import unittest
easoncylee64644592019-06-17 22:23:13 +080020import json
mikehoran1e50d2b2017-08-28 14:00:46 -070021import os
mikehoran9e62c292018-01-31 12:05:19 -080022import re
Jim Tangd740fa52019-03-14 16:07:08 +080023import sys
mikehoranbe9102f2017-08-04 16:04:03 -070024import mock
25
26import cli_translator as cli_t
Dan Shi7a8e1ad2018-04-12 11:01:07 -070027import constants
Kevin Cheng8b2c94c2017-12-18 14:43:26 -080028import test_finder_handler
Dan Shicdbda552018-05-18 23:31:33 -070029import test_mapping
Kevin Cheng8b2c94c2017-12-18 14:43:26 -080030import unittest_constants as uc
Kevin Cheng7edb0b92017-12-14 15:00:25 -080031import unittest_utils
kellyhung23c55b82019-01-04 16:58:14 +080032from metrics import metrics
Jim Tangd740fa52019-03-14 16:07:08 +080033from test_finders import module_finder
Kevin Cheng8b2c94c2017-12-18 14:43:26 -080034from test_finders import test_finder_base
mikehoranbe9102f2017-08-04 16:04:03 -070035
Jim Tangd740fa52019-03-14 16:07:08 +080036# Import StringIO in Python2/3 compatible way.
37if sys.version_info[0] == 2:
38 from StringIO import StringIO
39else:
40 from io import StringIO
41
Dan Shid6881bb2017-10-12 15:13:25 -070042# TEST_MAPPING related consts
Dan Shie4e267f2018-06-01 11:31:57 -070043TEST_MAPPING_TOP_DIR = os.path.join(uc.TEST_DATA_DIR, 'test_mapping')
44TEST_MAPPING_DIR = os.path.join(TEST_MAPPING_TOP_DIR, 'folder1')
Dan Shi08c7b722018-11-29 10:25:59 -080045TEST_1 = test_mapping.TestDetail({'name': 'test1', 'host': True})
Dan Shie4e267f2018-06-01 11:31:57 -070046TEST_2 = test_mapping.TestDetail({'name': 'test2'})
47TEST_3 = test_mapping.TestDetail({'name': 'test3'})
48TEST_4 = test_mapping.TestDetail({'name': 'test4'})
Dan Shi350e7472018-06-19 12:25:32 -070049TEST_5 = test_mapping.TestDetail({'name': 'test5'})
50TEST_6 = test_mapping.TestDetail({'name': 'test6'})
51TEST_7 = test_mapping.TestDetail({'name': 'test7'})
52TEST_8 = test_mapping.TestDetail({'name': 'test8'})
53TEST_9 = test_mapping.TestDetail({'name': 'test9'})
54TEST_10 = test_mapping.TestDetail({'name': 'test10'})
Dan Shid6881bb2017-10-12 15:13:25 -070055
mikehoran9e62c292018-01-31 12:05:19 -080056SEARCH_DIR_RE = re.compile(r'^find ([^ ]*).*$')
57
mikehoran58a68c42017-08-30 13:18:21 -070058
Dan Shicdbda552018-05-18 23:31:33 -070059#pylint: disable=unused-argument
60def gettestinfos_side_effect(test_names, test_mapping_test_details=None):
Kevin Cheng09c2a2c2017-12-15 12:52:46 -080061 """Mock return values for _get_test_info."""
Kevin Cheng8b2c94c2017-12-18 14:43:26 -080062 test_infos = set()
63 for test_name in test_names:
64 if test_name == uc.MODULE_NAME:
65 test_infos.add(uc.MODULE_INFO)
66 if test_name == uc.CLASS_NAME:
67 test_infos.add(uc.CLASS_INFO)
68 return test_infos
mikehoran58a68c42017-08-30 13:18:21 -070069
mikehoran9e62c292018-01-31 12:05:19 -080070
mikehoranbe9102f2017-08-04 16:04:03 -070071#pylint: disable=protected-access
mikehoran43ed32d2017-08-18 17:13:36 -070072#pylint: disable=no-self-use
mikehoranbe9102f2017-08-04 16:04:03 -070073class CLITranslatorUnittests(unittest.TestCase):
74 """Unit tests for cli_t.py"""
75
76 def setUp(self):
77 """Run before execution of every test"""
Kevin Cheng8b2c94c2017-12-18 14:43:26 -080078 self.ctr = cli_t.CLITranslator()
mikehoranbe9102f2017-08-04 16:04:03 -070079
Dan Shi0ddd3e42018-05-30 11:24:30 -070080 # Create a mock of args.
81 self.args = mock.Mock
82 self.args.tests = []
83 # Test mapping related args
84 self.args.test_mapping = False
85 self.args.include_subdirs = False
kellyhung0d4d43a2019-12-30 11:32:27 +080086 self.args.enable_file_patterns = False
yangbill0b35e4b2019-06-10 20:36:28 +080087 # Cache finder related args
88 self.args.clear_cache = False
Simran Basi2cc996e2018-10-09 12:19:25 -070089 self.ctr.mod_info = mock.Mock
90 self.ctr.mod_info.name_to_module_info = {}
Dan Shi0ddd3e42018-05-30 11:24:30 -070091
Jim Tangae8eb442018-10-29 16:42:33 +080092 def tearDown(self):
93 """Run after execution of every test"""
94 reload(uc)
95
Jim Tangd740fa52019-03-14 16:07:08 +080096 @mock.patch('__builtin__.raw_input', return_value='n')
97 @mock.patch.object(module_finder.ModuleFinder, 'find_test_by_module_name')
98 @mock.patch.object(module_finder.ModuleFinder, 'get_fuzzy_searching_results')
kellyhung23c55b82019-01-04 16:58:14 +080099 @mock.patch.object(metrics, 'FindTestFinishEvent')
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800100 @mock.patch.object(test_finder_handler, 'get_find_methods_for_test')
Jim Tangd740fa52019-03-14 16:07:08 +0800101 # pylint: disable=too-many-locals
102 def test_get_test_infos(self, mock_getfindmethods, _metrics, mock_getfuzzyresults,
103 mock_findtestbymodule, mock_raw_input):
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800104 """Test _get_test_infos method."""
105 ctr = cli_t.CLITranslator()
kellyhung131b3e52019-04-10 17:58:25 +0800106 find_method_return_module_info = lambda x, y: uc.MODULE_INFOS
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800107 # pylint: disable=invalid-name
kellyhung131b3e52019-04-10 17:58:25 +0800108 find_method_return_module_class_info = (lambda x, test: uc.MODULE_INFOS
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800109 if test == uc.MODULE_NAME
kellyhung131b3e52019-04-10 17:58:25 +0800110 else uc.CLASS_INFOS)
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800111 find_method_return_nothing = lambda x, y: None
112 one_test = [uc.MODULE_NAME]
113 mult_test = [uc.MODULE_NAME, uc.CLASS_NAME]
mikehoran43ed32d2017-08-18 17:13:36 -0700114
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800115 # Let's make sure we return what we expect.
116 expected_test_infos = {uc.MODULE_INFO}
117 mock_getfindmethods.return_value = [
nelsonli34997d52018-08-17 09:43:28 +0800118 test_finder_base.Finder(None, find_method_return_module_info, None)]
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800119 unittest_utils.assert_strict_equal(
120 self, ctr._get_test_infos(one_test), expected_test_infos)
121
122 # Check we receive multiple test infos.
123 expected_test_infos = {uc.MODULE_INFO, uc.CLASS_INFO}
124 mock_getfindmethods.return_value = [
nelsonli34997d52018-08-17 09:43:28 +0800125 test_finder_base.Finder(None, find_method_return_module_class_info,
126 None)]
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800127 unittest_utils.assert_strict_equal(
128 self, ctr._get_test_infos(mult_test), expected_test_infos)
129
Jim Tangd740fa52019-03-14 16:07:08 +0800130 # Check return null set when we have no tests found or multiple results.
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800131 mock_getfindmethods.return_value = [
nelsonli34997d52018-08-17 09:43:28 +0800132 test_finder_base.Finder(None, find_method_return_nothing, None)]
nelsonlic4a71452018-09-13 14:10:30 +0800133 null_test_info = set()
Jim Tangd740fa52019-03-14 16:07:08 +0800134 mock_getfuzzyresults.return_value = []
nelsonlic4a71452018-09-13 14:10:30 +0800135 self.assertEqual(null_test_info, ctr._get_test_infos(one_test))
136 self.assertEqual(null_test_info, ctr._get_test_infos(mult_test))
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800137
Jim Tangd740fa52019-03-14 16:07:08 +0800138 # Check returning test_info when the user says Yes.
139 mock_raw_input.return_value = "Y"
140 mock_getfindmethods.return_value = [
141 test_finder_base.Finder(None, find_method_return_module_info, None)]
142 mock_getfuzzyresults.return_value = one_test
143 mock_findtestbymodule.return_value = uc.MODULE_INFO
144 unittest_utils.assert_strict_equal(
145 self, ctr._get_test_infos([uc.TYPO_MODULE_NAME]), {uc.MODULE_INFO})
146
Dan Shicdbda552018-05-18 23:31:33 -0700147 # Check the method works for test mapping.
148 test_detail1 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST)
149 test_detail2 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST_WITH_OPTION)
150 expected_test_infos = {uc.MODULE_INFO, uc.CLASS_INFO}
151 mock_getfindmethods.return_value = [
nelsonli34997d52018-08-17 09:43:28 +0800152 test_finder_base.Finder(None, find_method_return_module_class_info,
153 None)]
Dan Shicdbda552018-05-18 23:31:33 -0700154 test_infos = ctr._get_test_infos(
155 mult_test, [test_detail1, test_detail2])
156 unittest_utils.assert_strict_equal(
157 self, test_infos, expected_test_infos)
158 for test_info in test_infos:
159 if test_info == uc.MODULE_INFO:
160 self.assertEqual(
161 test_detail1.options,
162 test_info.data[constants.TI_MODULE_ARG])
163 else:
164 self.assertEqual(
165 test_detail2.options,
166 test_info.data[constants.TI_MODULE_ARG])
167
kellyhung131b3e52019-04-10 17:58:25 +0800168 @mock.patch.object(metrics, 'FindTestFinishEvent')
169 @mock.patch.object(test_finder_handler, 'get_find_methods_for_test')
170 def test_get_test_infos_2(self, mock_getfindmethods, _metrics):
171 """Test _get_test_infos method."""
172 ctr = cli_t.CLITranslator()
173 find_method_return_module_info2 = lambda x, y: uc.MODULE_INFOS2
174 find_method_ret_mod_cls_info2 = (
175 lambda x, test: uc.MODULE_INFOS2
176 if test == uc.MODULE_NAME else uc.CLASS_INFOS2)
177 one_test = [uc.MODULE_NAME]
178 mult_test = [uc.MODULE_NAME, uc.CLASS_NAME]
179 # Let's make sure we return what we expect.
180 expected_test_infos = {uc.MODULE_INFO, uc.MODULE_INFO2}
181 mock_getfindmethods.return_value = [
182 test_finder_base.Finder(None, find_method_return_module_info2,
183 None)]
184 unittest_utils.assert_strict_equal(
185 self, ctr._get_test_infos(one_test), expected_test_infos)
186 # Check we receive multiple test infos.
187 expected_test_infos = {uc.MODULE_INFO, uc.CLASS_INFO, uc.MODULE_INFO2,
188 uc.CLASS_INFO2}
189 mock_getfindmethods.return_value = [
190 test_finder_base.Finder(None, find_method_ret_mod_cls_info2,
191 None)]
192 unittest_utils.assert_strict_equal(
193 self, ctr._get_test_infos(mult_test), expected_test_infos)
194 # Check the method works for test mapping.
195 test_detail1 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST)
196 test_detail2 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST_WITH_OPTION)
197 expected_test_infos = {uc.MODULE_INFO, uc.CLASS_INFO, uc.MODULE_INFO2,
198 uc.CLASS_INFO2}
199 mock_getfindmethods.return_value = [
200 test_finder_base.Finder(None, find_method_ret_mod_cls_info2,
201 None)]
202 test_infos = ctr._get_test_infos(
203 mult_test, [test_detail1, test_detail2])
204 unittest_utils.assert_strict_equal(
205 self, test_infos, expected_test_infos)
206 for test_info in test_infos:
207 if test_info in [uc.MODULE_INFO, uc.MODULE_INFO2]:
208 self.assertEqual(
209 test_detail1.options,
210 test_info.data[constants.TI_MODULE_ARG])
211 elif test_info in [uc.CLASS_INFO, uc.CLASS_INFO2]:
212 self.assertEqual(
213 test_detail2.options,
214 test_info.data[constants.TI_MODULE_ARG])
215
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800216 @mock.patch.object(cli_t.CLITranslator, '_get_test_infos',
217 side_effect=gettestinfos_side_effect)
Dan Shi0ddd3e42018-05-30 11:24:30 -0700218 def test_translate_class(self, _info):
219 """Test translate method for tests by class name."""
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800220 # Check that we can find a class.
Dan Shi0ddd3e42018-05-30 11:24:30 -0700221 self.args.tests = [uc.CLASS_NAME]
222 targets, test_infos = self.ctr.translate(self.args)
Dan Shi7a8e1ad2018-04-12 11:01:07 -0700223 unittest_utils.assert_strict_equal(
224 self, targets, uc.CLASS_BUILD_TARGETS)
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800225 unittest_utils.assert_strict_equal(self, test_infos, {uc.CLASS_INFO})
mikehoranbe9102f2017-08-04 16:04:03 -0700226
Dan Shi0ddd3e42018-05-30 11:24:30 -0700227 @mock.patch.object(cli_t.CLITranslator, '_get_test_infos',
228 side_effect=gettestinfos_side_effect)
229 def test_translate_module(self, _info):
230 """Test translate method for tests by module or class name."""
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800231 # Check that we get all the build targets we expect.
Dan Shi0ddd3e42018-05-30 11:24:30 -0700232 self.args.tests = [uc.MODULE_NAME, uc.CLASS_NAME]
233 targets, test_infos = self.ctr.translate(self.args)
Dan Shi7a8e1ad2018-04-12 11:01:07 -0700234 unittest_utils.assert_strict_equal(
235 self, targets, uc.MODULE_CLASS_COMBINED_BUILD_TARGETS)
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800236 unittest_utils.assert_strict_equal(self, test_infos, {uc.MODULE_INFO,
237 uc.CLASS_INFO})
238
Dan Shi0ddd3e42018-05-30 11:24:30 -0700239 @mock.patch.object(cli_t.CLITranslator, '_find_tests_by_test_mapping')
240 @mock.patch.object(cli_t.CLITranslator, '_get_test_infos',
241 side_effect=gettestinfos_side_effect)
242 def test_translate_test_mapping(self, _info, mock_testmapping):
243 """Test translate method for tests in test mapping."""
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800244 # Check that test mappings feeds into get_test_info properly.
Dan Shicdbda552018-05-18 23:31:33 -0700245 test_detail1 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST)
246 test_detail2 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST_WITH_OPTION)
247 mock_testmapping.return_value = ([test_detail1, test_detail2], None)
Dan Shi0ddd3e42018-05-30 11:24:30 -0700248 self.args.tests = []
249 targets, test_infos = self.ctr.translate(self.args)
Dan Shi7a8e1ad2018-04-12 11:01:07 -0700250 unittest_utils.assert_strict_equal(
251 self, targets, uc.MODULE_CLASS_COMBINED_BUILD_TARGETS)
Kevin Cheng8b2c94c2017-12-18 14:43:26 -0800252 unittest_utils.assert_strict_equal(self, test_infos, {uc.MODULE_INFO,
253 uc.CLASS_INFO})
254
Dan Shie4e267f2018-06-01 11:31:57 -0700255 @mock.patch.object(cli_t.CLITranslator, '_find_tests_by_test_mapping')
256 @mock.patch.object(cli_t.CLITranslator, '_get_test_infos',
257 side_effect=gettestinfos_side_effect)
258 def test_translate_test_mapping_all(self, _info, mock_testmapping):
259 """Test translate method for tests in test mapping."""
260 # Check that test mappings feeds into get_test_info properly.
261 test_detail1 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST)
262 test_detail2 = test_mapping.TestDetail(uc.TEST_MAPPING_TEST_WITH_OPTION)
263 mock_testmapping.return_value = ([test_detail1, test_detail2], None)
264 self.args.tests = ['src_path:all']
265 self.args.test_mapping = True
266 targets, test_infos = self.ctr.translate(self.args)
267 unittest_utils.assert_strict_equal(
268 self, targets, uc.MODULE_CLASS_COMBINED_BUILD_TARGETS)
269 unittest_utils.assert_strict_equal(self, test_infos, {uc.MODULE_INFO,
270 uc.CLASS_INFO})
271
272 def test_find_tests_by_test_mapping_presubmit(self):
273 """Test _find_tests_by_test_mapping method to locate presubmit tests."""
Dan Shi350e7472018-06-19 12:25:32 -0700274 os_environ_mock = {constants.ANDROID_BUILD_TOP: uc.TEST_DATA_DIR}
275 with mock.patch.dict('os.environ', os_environ_mock, clear=True):
276 tests, all_tests = self.ctr._find_tests_by_test_mapping(
277 path=TEST_MAPPING_DIR, file_name='test_mapping_sample',
278 checked_files=set())
279 expected = set([TEST_1, TEST_2, TEST_5, TEST_7, TEST_9])
Dan Shi7a8e1ad2018-04-12 11:01:07 -0700280 expected_all_tests = {'presubmit': expected,
Dan Shi350e7472018-06-19 12:25:32 -0700281 'postsubmit': set(
282 [TEST_3, TEST_6, TEST_8, TEST_10]),
Dan Shie4e267f2018-06-01 11:31:57 -0700283 'other_group': set([TEST_4])}
Dan Shi7a8e1ad2018-04-12 11:01:07 -0700284 self.assertEqual(expected, tests)
285 self.assertEqual(expected_all_tests, all_tests)
Dan Shid6881bb2017-10-12 15:13:25 -0700286
Dan Shie4e267f2018-06-01 11:31:57 -0700287 def test_find_tests_by_test_mapping_postsubmit(self):
Dan Shi350e7472018-06-19 12:25:32 -0700288 """Test _find_tests_by_test_mapping method to locate postsubmit tests.
289 """
290 os_environ_mock = {constants.ANDROID_BUILD_TOP: uc.TEST_DATA_DIR}
291 with mock.patch.dict('os.environ', os_environ_mock, clear=True):
292 tests, all_tests = self.ctr._find_tests_by_test_mapping(
293 path=TEST_MAPPING_DIR,
294 test_group=constants.TEST_GROUP_POSTSUBMIT,
295 file_name='test_mapping_sample', checked_files=set())
296 expected_presubmit = set([TEST_1, TEST_2, TEST_5, TEST_7, TEST_9])
Dan Shi4f953162019-07-03 11:47:28 -0700297 expected = set([TEST_3, TEST_6, TEST_8, TEST_10])
Dan Shie4e267f2018-06-01 11:31:57 -0700298 expected_all_tests = {'presubmit': expected_presubmit,
Dan Shi350e7472018-06-19 12:25:32 -0700299 'postsubmit': set(
300 [TEST_3, TEST_6, TEST_8, TEST_10]),
Dan Shie4e267f2018-06-01 11:31:57 -0700301 'other_group': set([TEST_4])}
Dan Shi7a8e1ad2018-04-12 11:01:07 -0700302 self.assertEqual(expected, tests)
303 self.assertEqual(expected_all_tests, all_tests)
Dan Shid6881bb2017-10-12 15:13:25 -0700304
Dan Shie4e267f2018-06-01 11:31:57 -0700305 def test_find_tests_by_test_mapping_all_group(self):
Dan Shi350e7472018-06-19 12:25:32 -0700306 """Test _find_tests_by_test_mapping method to locate postsubmit tests.
307 """
308 os_environ_mock = {constants.ANDROID_BUILD_TOP: uc.TEST_DATA_DIR}
309 with mock.patch.dict('os.environ', os_environ_mock, clear=True):
310 tests, all_tests = self.ctr._find_tests_by_test_mapping(
311 path=TEST_MAPPING_DIR, test_group=constants.TEST_GROUP_ALL,
312 file_name='test_mapping_sample', checked_files=set())
313 expected_presubmit = set([TEST_1, TEST_2, TEST_5, TEST_7, TEST_9])
314 expected = set([
315 TEST_1, TEST_2, TEST_3, TEST_4, TEST_5, TEST_6, TEST_7, TEST_8,
316 TEST_9, TEST_10])
Dan Shie4e267f2018-06-01 11:31:57 -0700317 expected_all_tests = {'presubmit': expected_presubmit,
Dan Shi350e7472018-06-19 12:25:32 -0700318 'postsubmit': set(
319 [TEST_3, TEST_6, TEST_8, TEST_10]),
Dan Shie4e267f2018-06-01 11:31:57 -0700320 'other_group': set([TEST_4])}
321 self.assertEqual(expected, tests)
322 self.assertEqual(expected_all_tests, all_tests)
323
324 def test_find_tests_by_test_mapping_include_subdir(self):
325 """Test _find_tests_by_test_mapping method to include sub directory."""
Dan Shi350e7472018-06-19 12:25:32 -0700326 os_environ_mock = {constants.ANDROID_BUILD_TOP: uc.TEST_DATA_DIR}
327 with mock.patch.dict('os.environ', os_environ_mock, clear=True):
328 tests, all_tests = self.ctr._find_tests_by_test_mapping(
329 path=TEST_MAPPING_TOP_DIR, file_name='test_mapping_sample',
330 include_subdirs=True, checked_files=set())
331 expected = set([TEST_1, TEST_2, TEST_5, TEST_7, TEST_9])
Dan Shie4e267f2018-06-01 11:31:57 -0700332 expected_all_tests = {'presubmit': expected,
Dan Shi350e7472018-06-19 12:25:32 -0700333 'postsubmit': set([
334 TEST_3, TEST_6, TEST_8, TEST_10]),
Dan Shie4e267f2018-06-01 11:31:57 -0700335 'other_group': set([TEST_4])}
336 self.assertEqual(expected, tests)
337 self.assertEqual(expected_all_tests, all_tests)
338
Jim Tangd740fa52019-03-14 16:07:08 +0800339 @mock.patch('__builtin__.raw_input', return_value='')
340 def test_confirm_running(self, mock_raw_input):
341 """Test _confirm_running method."""
342 self.assertTrue(self.ctr._confirm_running([TEST_1]))
343 mock_raw_input.return_value = 'N'
344 self.assertFalse(self.ctr._confirm_running([TEST_2]))
345
346 def test_print_fuzzy_searching_results(self):
347 """Test _print_fuzzy_searching_results"""
348 modules = [uc.MODULE_NAME, uc.MODULE2_NAME]
349 capture_output = StringIO()
350 sys.stdout = capture_output
351 self.ctr._print_fuzzy_searching_results(modules)
352 sys.stdout = sys.__stdout__
353 output = 'Did you mean the following modules?\n{0}\n{1}\n'.format(
354 uc.MODULE_NAME, uc.MODULE2_NAME)
kellyhung0d4d43a2019-12-30 11:32:27 +0800355 self.assertEqual(capture_output.getvalue(), output)
Dan Shie4e267f2018-06-01 11:31:57 -0700356
easoncylee64644592019-06-17 22:23:13 +0800357 def test_filter_comments(self):
358 """Test filter_comments method"""
359 file_with_comments = os.path.join(TEST_MAPPING_TOP_DIR,
360 'folder6',
361 'test_mapping_sample_with_comments')
362 file_with_comments_golden = os.path.join(TEST_MAPPING_TOP_DIR,
363 'folder6',
364 'test_mapping_sample_golden')
365 test_mapping_dict = json.loads(
366 self.ctr.filter_comments(file_with_comments))
367 test_mapping_dict_gloden = None
368 with open(file_with_comments_golden) as json_file:
369 test_mapping_dict_gloden = json.load(json_file)
370
371 self.assertEqual(test_mapping_dict, test_mapping_dict_gloden)
372
373
mikehoranbe9102f2017-08-04 16:04:03 -0700374if __name__ == '__main__':
375 unittest.main()