-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
aafcf55
commit ac51eb6
Showing
3 changed files
with
461 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
""" | ||
mbed SDK | ||
Copyright (c) 2016 ARM Limited | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
""" | ||
|
||
import unittest | ||
from mock import patch | ||
from tools.build_api import prepare_toolchain, build_project, build_library | ||
|
||
""" | ||
Tests for build_api.py | ||
""" | ||
|
||
class BuildApiTests(unittest.TestCase): | ||
""" | ||
Test cases for Build Api | ||
""" | ||
|
||
def setUp(self): | ||
""" | ||
Called before each test case | ||
:return: | ||
""" | ||
self.target = "K64F" | ||
self.src_paths = ['.'] | ||
self.toolchain_name = "ARM" | ||
self.build_path = "build_path" | ||
|
||
def tearDown(self): | ||
""" | ||
Called after each test case | ||
:return: | ||
""" | ||
pass | ||
|
||
@patch('tools.config.Config.__init__') | ||
def test_prepare_toolchain_app_config(self, mock_config_init): | ||
""" | ||
Test that prepare_toolchain uses app_config correctly | ||
:param mock_config_init: mock of Config __init__ | ||
:return: | ||
""" | ||
app_config = "app_config" | ||
mock_config_init.return_value = None | ||
|
||
prepare_toolchain(self.src_paths, self.target, self.toolchain_name, | ||
app_config=app_config) | ||
|
||
mock_config_init.assert_called_with(self.target, self.src_paths, | ||
app_config=app_config) | ||
|
||
@patch('tools.config.Config.__init__') | ||
def test_prepare_toolchain_no_app_config(self, mock_config_init): | ||
""" | ||
Test that prepare_toolchain correctly deals with no app_config | ||
:param mock_config_init: mock of Config __init__ | ||
:return: | ||
""" | ||
mock_config_init.return_value = None | ||
|
||
prepare_toolchain(self.src_paths, self.target, self.toolchain_name) | ||
|
||
mock_config_init.assert_called_with(self.target, self.src_paths, | ||
app_config=None) | ||
|
||
@patch('tools.build_api.scan_resources') | ||
@patch('tools.build_api.mkdir') | ||
@patch('os.path.exists') | ||
@patch('tools.build_api.prepare_toolchain') | ||
def test_build_project_app_config(self, mock_prepare_toolchain, mock_exists, _, __): | ||
""" | ||
Test that build_project uses app_config correctly | ||
:param mock_prepare_toolchain: mock of function prepare_toolchain | ||
:param mock_exists: mock of function os.path.exists | ||
:param _: mock of function mkdir (not tested) | ||
:param __: mock of function scan_resources (not tested) | ||
:return: | ||
""" | ||
app_config = "app_config" | ||
mock_exists.return_value = False | ||
mock_prepare_toolchain().link_program.return_value = 1, 2 | ||
|
||
build_project(self.src_paths, self.build_path, self.target, | ||
self.toolchain_name, app_config=app_config) | ||
|
||
args = mock_prepare_toolchain.call_args | ||
self.assertTrue('app_config' in args[1], | ||
"prepare_toolchain was not called with app_config") | ||
self.assertEqual(args[1]['app_config'], app_config, | ||
"prepare_toolchain was called with an incorrect app_config") | ||
|
||
@patch('tools.build_api.scan_resources') | ||
@patch('tools.build_api.mkdir') | ||
@patch('os.path.exists') | ||
@patch('tools.build_api.prepare_toolchain') | ||
def test_build_project_no_app_config(self, mock_prepare_toolchain, mock_exists, _, __): | ||
""" | ||
Test that build_project correctly deals with no app_config | ||
:param mock_prepare_toolchain: mock of function prepare_toolchain | ||
:param mock_exists: mock of function os.path.exists | ||
:param _: mock of function mkdir (not tested) | ||
:param __: mock of function scan_resources (not tested) | ||
:return: | ||
""" | ||
mock_exists.return_value = False | ||
# Needed for the unpacking of the returned value | ||
mock_prepare_toolchain().link_program.return_value = 1, 2 | ||
|
||
build_project(self.src_paths, self.build_path, self.target, | ||
self.toolchain_name) | ||
|
||
args = mock_prepare_toolchain.call_args | ||
self.assertTrue('app_config' in args[1], | ||
"prepare_toolchain was not called with app_config") | ||
self.assertEqual(args[1]['app_config'], None, | ||
"prepare_toolchain was called with an incorrect app_config") | ||
|
||
@patch('tools.build_api.scan_resources') | ||
@patch('tools.build_api.mkdir') | ||
@patch('os.path.exists') | ||
@patch('tools.build_api.prepare_toolchain') | ||
def test_build_library_app_config(self, mock_prepare_toolchain, mock_exists, _, __): | ||
""" | ||
Test that build_library uses app_config correctly | ||
:param mock_prepare_toolchain: mock of function prepare_toolchain | ||
:param mock_exists: mock of function os.path.exists | ||
:param _: mock of function mkdir (not tested) | ||
:param __: mock of function scan_resources (not tested) | ||
:return: | ||
""" | ||
app_config = "app_config" | ||
mock_exists.return_value = False | ||
|
||
build_library(self.src_paths, self.build_path, self.target, | ||
self.toolchain_name, app_config=app_config) | ||
|
||
args = mock_prepare_toolchain.call_args | ||
self.assertTrue('app_config' in args[1], | ||
"prepare_toolchain was not called with app_config") | ||
self.assertEqual(args[1]['app_config'], app_config, | ||
"prepare_toolchain was called with an incorrect app_config") | ||
|
||
@patch('tools.build_api.scan_resources') | ||
@patch('tools.build_api.mkdir') | ||
@patch('os.path.exists') | ||
@patch('tools.build_api.prepare_toolchain') | ||
def test_build_library_no_app_config(self, mock_prepare_toolchain, mock_exists, _, __): | ||
""" | ||
Test that build_library correctly deals with no app_config | ||
:param mock_prepare_toolchain: mock of function prepare_toolchain | ||
:param mock_exists: mock of function os.path.exists | ||
:param _: mock of function mkdir (not tested) | ||
:param __: mock of function scan_resources (not tested) | ||
:return: | ||
""" | ||
mock_exists.return_value = False | ||
|
||
build_library(self.src_paths, self.build_path, self.target, | ||
self.toolchain_name) | ||
|
||
args = mock_prepare_toolchain.call_args | ||
self.assertTrue('app_config' in args[1], | ||
"prepare_toolchain was not called with app_config") | ||
self.assertEqual(args[1]['app_config'], None, | ||
"prepare_toolchain was called with an incorrect app_config") | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
""" | ||
mbed SDK | ||
Copyright (c) 2016 ARM Limited | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
""" | ||
|
||
import os.path | ||
import unittest | ||
from mock import patch | ||
from tools.config import Config | ||
|
||
""" | ||
Tests for config.py | ||
""" | ||
|
||
class ConfigTests(unittest.TestCase): | ||
""" | ||
Test cases for Config class | ||
""" | ||
|
||
def setUp(self): | ||
""" | ||
Called before each test case | ||
:return: | ||
""" | ||
self.target = "K64F" | ||
|
||
def tearDown(self): | ||
""" | ||
Called after each test case | ||
:return: | ||
""" | ||
pass | ||
|
||
@patch.object(Config, '_process_config_and_overrides') | ||
@patch('tools.config.json_file_to_dict') | ||
def test_init_app_config(self, mock_json_file_to_dict, _): | ||
""" | ||
Test that the initialisation correctly uses app_config | ||
:param mock_json_file_to_dict: mock of function json_file_to_dict | ||
:param _: mock of function _process_config_and_overrides (not tested) | ||
:return: | ||
""" | ||
app_config = "app_config" | ||
mock_return = {'config': 'test'} | ||
mock_json_file_to_dict.return_value = mock_return | ||
|
||
config = Config(self.target, app_config=app_config) | ||
|
||
mock_json_file_to_dict.assert_called_with(app_config) | ||
self.assertEqual(config.app_config_data, mock_return, | ||
"app_config_data should be set to the returned value") | ||
|
||
@patch.object(Config, '_process_config_and_overrides') | ||
@patch('tools.config.json_file_to_dict') | ||
def test_init_no_app_config(self, mock_json_file_to_dict, _): | ||
""" | ||
Test that the initialisation works without app config | ||
:param mock_json_file_to_dict: mock of function json_file_to_dict | ||
:param _: patch of function _process_config_and_overrides (not tested) | ||
:return: | ||
""" | ||
config = Config(self.target) | ||
|
||
mock_json_file_to_dict.assert_not_called() | ||
self.assertEqual(config.app_config_data, {}, | ||
"app_config_data should be set an empty dictionary") | ||
|
||
@patch.object(Config, '_process_config_and_overrides') | ||
@patch('os.path.isfile') | ||
@patch('tools.config.json_file_to_dict') | ||
def test_init_no_app_config_with_dir(self, mock_json_file_to_dict, mock_isfile, _): | ||
""" | ||
Test that the initialisation works without app config and with a | ||
specified top level directory | ||
:param mock_json_file_to_dict: mock of function json_file_to_dict | ||
:param _: patch of function _process_config_and_overrides (not tested) | ||
:return: | ||
""" | ||
directory = '.' | ||
path = os.path.join('.', 'mbed_app.json') | ||
mock_return = {'config': 'test'} | ||
mock_json_file_to_dict.return_value = mock_return | ||
mock_isfile.return_value = True | ||
|
||
config = Config(self.target, [directory]) | ||
|
||
mock_isfile.assert_called_with(path) | ||
mock_json_file_to_dict.assert_called_once_with(path) | ||
self.assertEqual(config.app_config_data, mock_return, | ||
"app_config_data should be set to the returned value") | ||
|
||
@patch.object(Config, '_process_config_and_overrides') | ||
@patch('tools.config.json_file_to_dict') | ||
def test_init_override_app_config(self, mock_json_file_to_dict, _): | ||
""" | ||
Test that the initialisation uses app_config instead of top_level_dir | ||
when both are specified | ||
:param mock_json_file_to_dict: mock of function json_file_to_dict | ||
:param _: patch of function _process_config_and_overrides (not tested) | ||
:return: | ||
""" | ||
app_config = "app_config" | ||
directory = '.' | ||
mock_return = {'config': 'test'} | ||
mock_json_file_to_dict.return_value = mock_return | ||
|
||
config = Config(self.target, [directory], app_config=app_config) | ||
|
||
mock_json_file_to_dict.assert_called_once_with(app_config) | ||
self.assertEqual(config.app_config_data, mock_return, | ||
"app_config_data should be set to the returned value") | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
Oops, something went wrong.