You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/AutomatedTesting/Gem/PythonTests/physics/UtilTest_Physmaterial_Edito...

205 lines
8.2 KiB
Python

"""
Copyright (c) Contributors to the Open 3D Engine Project
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
'''
This unittest might have to be refactored once changes to Physmaterial_Editor.py are made.
These changes will occur after the but, reverence below is resloved.
Bug: LY-107392
'''
class Tests:
opening_bad_file = ("Bad file could not be opened", "Bad file was opened")
opened_good_file = ("Valid file was opened", "Valid file was not opened")
opened_default_file = ("Default file was opened", "Default file was not opened")
number_of_materials = ("File has correct number of materials", "File has wrong number of materials")
material_deleted = ("Material successfully deleted", "Material was not deleted")
material_modified = ("Material successfully modified", "Material was not modified")
modify_attribute_error = ("Invalid attribute raises error", "Invalid attribute doesn't raise error")
modify_combine_error = ("Invalid combine value raises error", "Invalid combine value doesn't raise error")
modify_friction_error = ("Invalid friction value raises error", "Invalid restitution value doesn't raise error")
delete_value_error = ("Nonexistent material can't be deleted", "Nonexistend material deleted")
no_overwrite = ("File not updated with no write() call", "File updated with no write() call")
overwrite_works = ("File can be updated", "File can not be updated")
def run():
"""
Summary: Tests the utility of the Physmaterial_Editor
Level Description: Completely empty and used as method to run material editing methods from the editor
Expected Results: All Physmaterial tests work as expected.
Test Steps:
1) Open Level
2) Check that the correct files open
3) Check library properties
4) Check editor methods
5) Check write() works as expected
6) Close Editor
Note:
- This test file must be called from the Open 3D Engine Editor command terminal
- Any passed and failed tests are written to the Editor.log file.
Parsing the file or running a log_monitor are required to observe the test results.
:return: None
"""
import os
import sys
import ImportPathHelper as imports
imports.init()
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.legacy.general as general
from Physmaterial_Editor import Physmaterial_Editor
# Test file names
MATERIAL_LIBRARY = "UtilTest_Physmaterial_Editor_TestLibrary.physmaterial"
MATERIAL_LIBRARY_BAD = "UtilTest_Physmaterial_Editor_TestLibrary_Bad.physmaterial"
NUMBER_OF_MATERIALS = 21
# Test Functions
def test_open_good_file():
# type () -> bool
try:
Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception:
return False
return True
def test_fail_opening_bad_file():
# type () -> bool
try:
Physmaterial_Editor(MATERIAL_LIBRARY_BAD)
except Exception:
return True
return False
def test_open_default_file():
# type () -> bool
try:
Physmaterial_Editor()
except Exception:
return False
return True
def test_number_of_materials():
# type () -> bool
try:
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception as e:
print (e)
raise Exception("Something went wrong with test_number_of materials")
return material_library_object.number_of_materials == NUMBER_OF_MATERIALS
def test_can_modify_material_element():
# type () -> bool
try:
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception as e:
print (e)
raise Exception("Something went wrong with test_can_modify_material_element")
return material_library_object.modify_material("canopy", "StaticFriction", 1.56)
def test_bad_attribute_passed_modify_material():
# type () -> bool
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
try:
material_library_object.modify_material("canopy", "Friction", 1.56)
except Exception:
return True
return False
def test_bad_value_passed_modify_combine():
# type () -> bool
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
try:
material_library_object.modify_material("canopy", "FrictionCombine", 1.56)
except Exception:
return True
return False
def test_bad_value_passed_modify_friction():
# type () -> bool
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
try:
material_library_object.modify_material("canopy", "StaticFriction", "1.56")
except Exception:
return True
return False
def test_can_delete_material():
# type () -> bool
try:
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception as e:
print (e)
raise Exception("Something went wrong with test_can_delete_material")
return material_library_object.delete_material("default")
def test_can_not_delete_nonexistant_material():
# type () -> bool
try:
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception as e:
print (e)
raise Exception("Something went wrong with test_can_not_delete_nonexistant_material")
return material_library_object.delete_material("default")
def test_file_does_not_update_without_overwrite():
# type () -> bool
try:
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
material_deleted = material_library_object.delete_material("fabric")
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception as e:
print(e)
raise Exception("Something went wrong with test_file_does_not_update_without_overwrite")
return material_library_object.number_of_materials != (NUMBER_OF_MATERIALS - 1) and material_deleted
def test_file_does_update_with_overwrite():
# type () -> bool
try:
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
material_deleted = material_library_object.delete_material("glass")
material_library_object.save_changes()
material_library_object = Physmaterial_Editor(MATERIAL_LIBRARY)
except Exception as e:
print(e)
raise Exception("Something went wrong with test_file_does_update_with_overwrite")
return material_library_object.number_of_materials == (NUMBER_OF_MATERIALS - 1) or material_deleted
# Test Script
# 1) Open Level
helper.init_idle()
helper.open_level('physics', 'Physmaterial_Editor_Test')
# 2) Check that the correct files open
Report.result(Tests.opening_bad_file, test_fail_opening_bad_file())
Report.result(Tests.opened_good_file, test_open_good_file())
Report.result(Tests.opened_default_file, test_open_default_file())
# 3) Check library properties
Report.result(Tests.number_of_materials, test_number_of_materials())
# 4) Check editor methods
Report.result(Tests.material_deleted, test_can_delete_material())
Report.result(Tests.material_modified, test_can_modify_material_element())
Report.result(Tests.modify_attribute_error, test_bad_attribute_passed_modify_material())
Report.result(Tests.modify_combine_error, test_bad_value_passed_modify_combine())
Report.result(Tests.modify_friction_error, test_bad_value_passed_modify_friction())
Report.result(Tests.delete_value_error, test_can_not_delete_nonexistant_material())
# 5) Check write() works as expected
Report.result(Tests.no_overwrite, test_file_does_not_update_without_overwrite())
Report.result(Tests.overwrite_works, test_file_does_update_with_overwrite())
if __name__ == "__main__":
run()