| # Copyright 2020 The Pigweed Authors |
| # |
| # 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 |
| # |
| # https://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. |
| """Tests for file_operations module.""" |
| |
| import os |
| import shutil |
| import tempfile |
| import unittest |
| from pathlib import Path |
| from parameterized import parameterized # type: ignore |
| |
| from pw_arduino_build import file_operations |
| |
| |
| def file_set(): |
| return [ |
| "app.ino", |
| "core/asm.S", |
| "core/asm.s", |
| "core/pwm/pulse.c", |
| "core/pwm/pulse.h", |
| "libraries/a.c", |
| "libraries/b.cpp", |
| "libraries/c.cc", |
| "libraries/c.h", |
| ] |
| |
| |
| def create_files(root_dir, file_names): |
| for file_name in file_names: |
| folder_path = Path(root_dir) / Path(os.path.dirname(file_name)) |
| folder_path.mkdir(parents=True, exist_ok=True) |
| file_path = Path(root_dir) / Path(file_name) |
| file_path.touch(exist_ok=True) |
| |
| |
| class TestFileOperations(unittest.TestCase): |
| """Tests to ensure arduino core library source files can be found.""" |
| def setUp(self): |
| self.test_dir = tempfile.mkdtemp() |
| |
| def tearDown(self): |
| shutil.rmtree(self.test_dir) |
| |
| @parameterized.expand([ |
| ( |
| "sources recursive", file_set(), ["**/*.ino", "**/*.h", "**/*.cpp"], |
| [ |
| "app.ino", |
| os.path.join("core", "pwm", "pulse.h"), |
| os.path.join("libraries", "b.cpp"), |
| os.path.join("libraries", "c.h"), |
| ] |
| ), |
| ( |
| "directories recursive", file_set(), ["**"], |
| [ |
| "core", |
| os.path.join("core", "pwm"), |
| "libraries", |
| ] |
| ), |
| ( |
| "directories one level deep", file_set(), ["*"], |
| [ |
| "core", |
| "libraries", |
| ] |
| ), |
| ( |
| "items one level deep", file_set(), ["*"], |
| [ |
| "app.ino", |
| "core", |
| "libraries", |
| ] |
| ) |
| ]) # yapf: disable |
| def test_find_files(self, test_case, base_fileset, patterns, |
| expected_results): |
| """Test find_files on source files and directories.""" |
| create_files(self.test_dir, base_fileset) |
| result = file_operations.find_files(self.test_dir, |
| patterns, |
| directories_only=("directories" |
| in test_case)) |
| self.assertSequenceEqual(expected_results, result) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |