Merge "AIDEGen: add more unittests to config_unittest.py to increase code coverage to over 85%"
am: d2cf200bd4

Change-Id: I56accdd711b3df0715942e73c3c6b32c9c6a9f39
diff --git a/aidegen/lib/config_unittest.py b/aidegen/lib/config_unittest.py
index b51c356..a31ad78 100644
--- a/aidegen/lib/config_unittest.py
+++ b/aidegen/lib/config_unittest.py
@@ -16,10 +16,9 @@
 
 """Unittests for AidegenConfig class."""
 
-import os
 import unittest
+from unittest import mock
 
-from aidegen import unittest_constants
 from aidegen.lib import config
 from aidegen.lib import common_util
 
@@ -28,30 +27,105 @@
 class AidegenConfigUnittests(unittest.TestCase):
     """Unit tests for config.py"""
 
-    _ENABLE_DEBUG_CONFIG_FILE = 'enable_debugger.iml'
-    _TEST_API_LEVEL = '28'
-    _TEST_DATA_PATH = unittest_constants.TEST_DATA_PATH
-    _ANDROID_PROJECT_PATH = os.path.join(_TEST_DATA_PATH, 'android_project')
-    _ENABLE_DEBUGGER_IML_SAMPLE = os.path.join(_TEST_DATA_PATH,
-                                               _ENABLE_DEBUG_CONFIG_FILE)
-    _GENERATED_ENABLE_DEBUGGER_IML = os.path.join(_ANDROID_PROJECT_PATH,
-                                                  _ENABLE_DEBUG_CONFIG_FILE)
+    @mock.patch('logging.info')
+    @mock.patch('logging.error')
+    @mock.patch('builtins.open')
+    @mock.patch('os.path.exists')
+    def test_load_aidegen_config(self, mock_exists, mock_open, mock_error,
+                                 mock_info):
+        """Test _load_aidegen_config."""
+        mock_exists.return_value = True
+        cfg = config.AidegenConfig()
+        mock_open.side_effect = IOError()
+        with self.assertRaises(IOError):
+            cfg._load_aidegen_config()
+            self.assertTrue(mock_error.called)
+            self.assertFalse(mock_info.called)
+        mock_open.reset()
+        mock_open.side_effect = ValueError()
+        cfg._load_aidegen_config()
+        self.assertTrue(mock_info.called)
 
-    def test_gen_enable_debugger_config(self):
+    @mock.patch('json.dump')
+    @mock.patch('builtins.open')
+    @mock.patch.object(config.AidegenConfig, '_is_config_modified')
+    def test_save_aidegen_config(self, mock_is_modified, mock_open, mock_dump):
+        """Test _save_aidegen_config."""
+        mock_is_modified.return_value = False
+        cfg = config.AidegenConfig()
+        cfg._save_aidegen_config()
+        self.assertFalse(mock_open.called)
+        self.assertFalse(mock_dump.called)
+        mock_is_modified.return_value = True
+        cfg._save_aidegen_config()
+        self.assertTrue(mock_open.called)
+        self.assertTrue(mock_dump.called)
+
+    @mock.patch('logging.warning')
+    @mock.patch.object(config.AidegenConfig, '_gen_enable_debugger_config')
+    @mock.patch.object(config.AidegenConfig, '_gen_empty_androidmanifest')
+    @mock.patch.object(config.AidegenConfig, '_gen_enable_debug_sub_dir')
+    def test_create_enable_debugger(self, mock_debug, mock_empty, mock_enable,
+                                    mock_warning):
+        """Test create_enable_debugger_module."""
+        cfg = config.AidegenConfig()
+        mock_debug.side_effect = IOError()
+        self.assertFalse(cfg.create_enable_debugger_module(0))
+        self.assertTrue(mock_warning.called)
+        mock_debug.side_effect = OSError()
+        self.assertFalse(cfg.create_enable_debugger_module(0))
+        self.assertTrue(mock_warning.called)
+        mock_empty.side_effect = IOError()
+        self.assertFalse(cfg.create_enable_debugger_module(0))
+        self.assertTrue(mock_warning.called)
+        mock_empty.side_effect = OSError()
+        self.assertFalse(cfg.create_enable_debugger_module(0))
+        self.assertTrue(mock_warning.called)
+        mock_enable.side_effect = IOError()
+        self.assertFalse(cfg.create_enable_debugger_module(0))
+        self.assertTrue(mock_warning.called)
+        mock_enable.side_effect = OSError()
+        self.assertFalse(cfg.create_enable_debugger_module(0))
+        self.assertTrue(mock_warning.called)
+
+    @mock.patch.object(common_util, 'file_generate')
+    @mock.patch.object(common_util, 'read_file_content')
+    @mock.patch('os.path.exists')
+    def test_gen_enable_debugger_config(self, mock_exists, mock_read, mock_gen):
         """Test _gen_enable_debugger_config."""
-        try:
-            _cfg = config.AidegenConfig()
-            _cfg.DEBUG_ENABLED_FILE_PATH = os.path.join(
-                self._ANDROID_PROJECT_PATH, _cfg._ENABLE_DEBUG_CONFIG_FILE)
-            _cfg._gen_enable_debugger_config(self._TEST_API_LEVEL)
-            expected_content = common_util.read_file_content(
-                self._ENABLE_DEBUGGER_IML_SAMPLE)
-            test_content = common_util.read_file_content(
-                self._GENERATED_ENABLE_DEBUGGER_IML)
-            self.assertEqual(test_content, expected_content)
-        finally:
-            if os.path.exists(self._GENERATED_ENABLE_DEBUGGER_IML):
-                os.remove(self._GENERATED_ENABLE_DEBUGGER_IML)
+        cfg = config.AidegenConfig()
+        mock_exists.return_value = True
+        cfg._gen_enable_debugger_config(0)
+        self.assertFalse(mock_read.called)
+        self.assertFalse(mock_gen.called)
+        mock_exists.return_value = False
+        cfg._gen_enable_debugger_config(0)
+        self.assertTrue(mock_read.called)
+        self.assertTrue(mock_gen.called)
+
+    @mock.patch.object(common_util, 'file_generate')
+    @mock.patch('os.path.exists')
+    def test_gen_empty_androidmanifest(self, mock_exists, mock_gen):
+        """Test _gen_empty_androidmanifest."""
+        cfg = config.AidegenConfig()
+        mock_exists.return_value = True
+        cfg._gen_empty_androidmanifest()
+        self.assertFalse(mock_gen.called)
+        mock_exists.return_value = False
+        cfg._gen_empty_androidmanifest()
+        self.assertTrue(mock_gen.called)
+
+    @mock.patch('os.makedirs')
+    @mock.patch('os.path.exists')
+    def test_create_config_folder(self, mock_exists, mock_makedirs):
+        """Test _create_config_folder."""
+        cfg = config.AidegenConfig()
+        mock_exists.return_value = True
+        cfg._create_config_folder()
+        self.assertFalse(mock_makedirs.called)
+        mock_exists.return_value = False
+        cfg._create_config_folder()
+        self.assertTrue(mock_makedirs.called)
 
 
 if __name__ == '__main__':