| #!/usr/bin/env python3 |
| |
| # Copyright 2022 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import tempfile |
| import unittest |
| import os |
| import update_workspace |
| from parameterized import parameterized |
| |
| |
| class RemoveDirTests(unittest.TestCase): |
| def _empty_dir(root): |
| dir = tempfile.mkdtemp(dir=root) |
| return dir, (dir,) |
| |
| def _dir_with_file(root): |
| dir = tempfile.mkdtemp(dir=root) |
| _, f = tempfile.mkstemp(dir=dir) |
| return dir, (dir, f) |
| |
| def _dir_with_symlink(root): |
| dir = tempfile.mkdtemp(dir=root) |
| _, f = tempfile.mkstemp(dir=dir) |
| l = f"{f}_link" |
| os.symlink(f, l) |
| return dir, (dir, f, l) |
| |
| def _dir_with_subdir_symlink(root): |
| dir = tempfile.mkdtemp(dir=root) |
| subdir = tempfile.mkdtemp(dir=dir) |
| _, f = tempfile.mkstemp(dir=subdir) |
| l = f"{subdir}_link" |
| os.symlink(subdir, l, target_is_directory=True) |
| return dir, (dir, subdir, f, l) |
| |
| @parameterized.expand( |
| ( |
| ("empty_dir", _empty_dir), |
| ("dir_with_file", _dir_with_file), |
| ("dir_with_symlink", _dir_with_symlink), |
| ("dir_with_subdir_symlink", _dir_with_subdir_symlink), |
| ) |
| ) |
| def test_remove_dir(self, name, create_test_dir): |
| # Create all test dirs and files under a top-level temporary directory so |
| # they are properly cleaned up on test failures as well. |
| with tempfile.TemporaryDirectory() as root: |
| top_dir, all_paths = create_test_dir(root) |
| |
| for p in all_paths: |
| self.assertTrue( |
| os.path.exists(p), |
| f"setup failure: {p} does not exist after test dir creation", |
| ) |
| |
| update_workspace.remove_dir(top_dir) |
| |
| for p in all_paths: |
| self.assertFalse( |
| os.path.exists(p), |
| f"{p} still exists after remove_dir({top_dir})", |
| ) |