123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- import os
- import pytest
- import sys
- import ly_test_tools.environment.file_system as fs
- from .utils.FileManagement import FileManagement as fm
- sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
- from base import TestAutomationBase
- @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
- @pytest.mark.parametrize("project", ["AutomatedTesting"])
- class TestUtils(TestAutomationBase):
- def test_UtilTest_Tracer_PicksErrorsAndWarnings(self, request, workspace, launcher_platform, editor):
- from .utils import UtilTest_Tracer_PicksErrorsAndWarnings as testcase_module
- self._run_test(request, workspace, editor, testcase_module, [], [])
- def test_FileManagement_FindingFiles(self, workspace, launcher_platform):
- """
- Tests the functionality of "searching for files" with FileManagement._find_files()
- :param workspace: ly_test_tools workspace fixture
- :return: None
- """
- # Set up known files and paths
- search_dir = os.path.join(workspace.paths.project(), "Levels", "Utils", "Managed_Files")
- find_me_path = search_dir
- first_also_find_me_path = os.path.join(search_dir, "some_folder")
- second_also_find_me_path = os.path.join(search_dir, "some_folder", "another_folder", "one_more_folder")
- find_me_too_path = os.path.join(search_dir, "some_folder", "another_folder")
- # Test for expected failures
- call_failed = False
- try:
- # Should throw a warning from finding too many copies of "AlsoFindMe.txt"
- fm._find_files(["FindMe.txt", "AlsoFindMe.txt", "FindMeToo.txt"], search_dir, search_subdirs=True)
- except RuntimeWarning:
- call_failed = True
- assert call_failed, "_find_files() DID NOT fail when finding multiple files"
- call_failed = False
- try:
- # Should throw a warning from not finding "DNE.txt"
- fm._find_files(["FindMe.txt", "DNE.txt"], search_dir, search_subdirs=True)
- except RuntimeWarning:
- call_failed = True
- assert call_failed, "_find_files() DID NOT fail when looking for a non-existent file"
- # Expected successful usages
- found_me = fm._find_files(["FindMe.txt"], search_dir)
- also_found_me_1 = fm._find_files(["AlsoFindMe.txt"], os.path.join(search_dir, "some_folder"))
- also_found_me_2 = fm._find_files(
- ["AlsoFindMe.txt"], os.path.join(search_dir, "some_folder", "another_folder", "one_more_folder")
- )
- find_a_few = fm._find_files(["FindMe.txt", "FindMeToo.txt"], search_dir, search_subdirs=True)
- # Test results
- assert (
- found_me["FindMe.txt"] == find_me_path
- ), "FindMe.txt path was not as expected. Expected: {} Found: {} ".format(find_me_path, found_me["FindMe.txt"])
- assert (
- also_found_me_1["AlsoFindMe.txt"] == first_also_find_me_path
- ), "First AlsoFindMe.txt path was not as expected. Expected: {} Found: {} ".format(
- first_also_find_me_path, also_found_me_1["AlsoFindMe.txt"]
- )
- assert (
- also_found_me_2["AlsoFindMe.txt"] == second_also_find_me_path
- ), "Second AlsoFindMe.txt path was not as expected. Expected: {} Found: {} ".format(
- second_also_find_me_path, also_found_me_2["AlsoFindMe.txt"]
- )
- for file_name, file_path in find_a_few.items():
- assert file_name == "FindMe.txt" or file_name == "FindMeToo.txt", "{} was found on accident".format(
- file_name
- )
- assert (
- "FindMe.txt" in find_a_few and find_a_few["FindMe.txt"] is not None
- ), "Finding multiple files did not find 'FindMe.txt'"
- assert (
- find_a_few["FindMe.txt"] == find_me_path
- ), "FindMe.txt path was not as expected. Expected: {} Found: {} ".format(find_me_path, found_me["FindMe.txt"])
- assert (
- "FindMeToo.txt" in find_a_few and find_a_few["FindMeToo.txt"] is not None
- ), "Finding multiple files did not find 'FindMeToo.txt'"
- assert (
- find_a_few["FindMeToo.txt"] == find_me_too_path
- ), "FindMeToo.txt path was not as expected. Expected: {} Found: {} ".format(
- find_me_too_path, found_me["FindMeToo.txt"]
- )
- def test_FileManagement_FileBackup(self, workspace, launcher_platform):
- """
- Tests the functionality of the file back up system via the FileManagement class
- :param workspace: ly_test_tools workspace fixture
- :return: None
- """
- def get_contents(file_path):
- # type: (str) -> [str]
- """
- Simply gets the contents of a file specified by the [file_path]
- :param file_path: file to get contents of
- :return: a list of strings
- """
- lines = []
- with open(file_path, "r") as file:
- for line in file:
- lines.append(line)
- return lines
- # Set up known paths and file names
- target_folder = os.path.join(workspace.paths.project(), "Levels", "Utils", "Managed_Files")
- target_file_path = os.path.join(target_folder, "FindMe.txt")
- backup_folder = fm.backup_folder_path
- # Make sure the target file exists
- assert os.path.exists(target_file_path), "Target file: {} does not exist".format(target_file_path)
- original_contents = get_contents(target_file_path)
- fm._backup_file("FindMe.txt", target_folder)
- # Get newly-created backup file full path
- file_map = fm._load_file_map()
- assert target_file_path in file_map.keys(), "File path {} was not added to FileManagement file_map"
- backup_file_path = os.path.join(backup_folder, file_map[target_file_path])
- # Ensure back up worked as expected
- assert os.path.exists(target_file_path), "Original file got destroyed: {}".format(target_file_path)
- for i, line in enumerate(get_contents(target_file_path)):
- assert (
- original_contents[i] == line
- ), "Original file ({}) changed after being backed up. Line[{}]: expected: {}, found: {}".format(
- target_file_path, i, original_contents[i], line
- )
- for i, line in enumerate(get_contents(backup_file_path)):
- assert (
- original_contents[i] == line
- ), "Backed up file ({}) different from original. Line[{}]: expected: {}, found: {}".format(
- backup_file_path, i, original_contents[i], line
- )
- # Delete up back up file and clear entry in file map
- fs.delete([backup_file_path], True, False)
- del file_map[target_file_path]
- fm._save_file_map(file_map)
- def test_FileManagement_FileRestoration(self, workspace, launcher_platform):
- """
- Tests the restore file system via the FileManagement class
- :param workspace: ly_test_tools workspace fixture
- :return: None
- """
- def get_contents(file_path):
- # type: (str) -> [str]
- """
- Simply gets the contents of a file specified by the [file_path]
- :param file_path: file to get contents of
- :return: a list of strings
- """
- lines = []
- with open(file_path, "r") as file:
- for line in file:
- lines.append(line)
- return lines
- # Set know files and paths
- target_folder = os.path.join(workspace.paths.project(), "Levels", "Utils", "Managed_Files")
- target_file_path = os.path.join(target_folder, "FindMe.txt")
- backup_folder = fm.backup_folder_path
- assert os.path.exists(target_file_path), "Target file: {} does not exist".format(target_file_path)
- # original file back up
- original_contents = get_contents(target_file_path)
- fm._backup_file("FindMe.txt", target_folder)
- # Get newly-created backup file full path
- file_map = fm._load_file_map()
- assert target_file_path in file_map.keys(), "File path {} was not added to FileManagement file_map".format(
- target_file_path
- )
- backup_file_path = os.path.join(backup_folder, file_map[target_file_path])
- assert os.path.exists(backup_file_path), "Back up file {} was not created".format(backup_file_path)
- # Makes sure back up is exactly the same as original
- for i, line in enumerate(get_contents(backup_file_path)):
- assert (
- original_contents[i] == line
- ), "Backed up file ({}) different than original. Line[{}]: expected: {}, found: {}".format(
- backup_file_path, i, original_contents[i], line
- )
- # Change original file
- fs.unlock_file(target_file_path)
- text_to_write = "Some new text to write into the target file!"
- with open(target_file_path, "w") as target_file:
- target_file.write(text_to_write)
- fs.lock_file(target_file_path)
- # Make sure original actually got changed
- changed_lines = get_contents(target_file_path)
- assert changed_lines[0] == text_to_write, "The file {} did not get changed while writing in test".format(
- target_file_path
- )
- assert changed_lines[0] != original_contents[0], "The file {} did not get changed while writing in test".format(
- target_file_path
- )
- # Restore the file!
- fm._restore_file("FindMe.txt", target_folder)
- # Ensure backup file was deleted after restoration
- assert not os.path.exists(backup_file_path), "Backup file {} WAS NOT deleted on restoration".format(
- backup_file_path
- )
- # Ensure saved file map was updated
- file_map = fm._load_file_map()
- assert (
- target_file_path not in file_map.keys()
- ), "File path {} was not cleared from file map after restoration".format(target_file_path)
- # Ensure restore brought original file back to it's default state
- restored_lines = get_contents(target_file_path)
- assert restored_lines[0] != text_to_write, "File restore for {} did not work".format(target_file_path)
- for restored, original, i in zip(restored_lines, original_contents, range(len(original_contents))):
- assert (
- restored == original
- ), "Restored file varies from original. Line [{}]: original: {}, restored: {}".format(i, original, restored)
- # Clean up back up folder and file
- fs.delete([backup_file_path], True, False)
|