MaterialEditor_Atom_PeriodicTests.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. """
  6. class Tests:
  7. changed_original_material_document_color = (
  8. "original_material_document_color baseColor.color property value was changed successfully.",
  9. "P0: original_material_document_color failed to change baseColor.color property value.")
  10. changed_new_material_document_color = (
  11. "new_material_document_color baseColor.color property value was changed successfully.",
  12. "P0: new_material_document_color failed to change baseColor.color property value.")
  13. changed_child_material_document_color = (
  14. "child_material_document baseColor.color property value was changed successfully.",
  15. "P0: child_material_document failed to change baseColor.color property value.")
  16. changed_first_material_document_color = (
  17. "first_material_document baseColor.color property value changed successfully.",
  18. "P0: Failed to change the first_material_document color factor property.")
  19. changed_second_material_document_color = (
  20. "second_material_document baseColor.color property value was changed successfully.",
  21. "P0: second_material_document failed to change baseColor.color property value.")
  22. closed_original_new_and_child_material_documents = (
  23. "Closed original_material_document, new_material_document, & child_material_document successfully.",
  24. "P0: Failed to close original_material_document, new_material_document, & child_material_document.")
  25. closed_first_material_document = (
  26. "Closed first_material_document successfully.",
  27. "P0: Failed to close first_material_document.")
  28. closed_second_material_document = (
  29. "Closed second_material_document successfully.",
  30. "P0: Failed to close second_material_document.")
  31. closed_first_and_second_material_documents = (
  32. "Closed first_material_document & second_material_document successfully.",
  33. "P0: Failed to close first_material_document & second_material_document.")
  34. first_material_document_has_expected_starting_color = (
  35. "first_material_document has expected baseColor.color property value",
  36. "P0: first_material_document did not have expected baseColor.color property value.")
  37. first_material_document_is_not_open = (
  38. "first_material_document is not currently open.",
  39. "P0: first_material_document was unexpectedly open.")
  40. opened_original_material_document = (
  41. "original_material_document opened successfully",
  42. "P0: Failed to open original_material_document.")
  43. opened_first_material_document = (
  44. "Opened first_material_document.",
  45. "P0: Failed to open first_material_document.")
  46. opened_second_material_document = (
  47. "Opened second_material_document.",
  48. "P0: Failed to open second_material_document.")
  49. opened_first_material_document_copy = (
  50. "Opened first_material_document_copy successfully",
  51. "P0: Failed to open first_material_document_copy.")
  52. opened_second_material_document_copy = (
  53. "Opened second_material_document_copy successfully",
  54. "P0: Failed to open second_material_document_copy.")
  55. original_material_document_has_expected_starting_color = (
  56. "original_material_document has expected baseColor.color property value",
  57. "P0: original_material_document did not have expected baseColor.color property value.")
  58. reclosed_original_new_child_material_documents = (
  59. "Re-closed original_material_document, new_material_document, & child_material_document.",
  60. "P0: Failed to re-close original_material_document, new_material_document, & child_material_document.")
  61. reclosed_first_material_document = (
  62. "Re-closed first_material_document.",
  63. "P0: Failed to re-close first_material_document.")
  64. reclosed_second_material_document = (
  65. "Re-closed second material document.",
  66. "P0: Failed to re-cloe second material document.")
  67. resaved_original_material_document = (
  68. "original_material_document was re-saved successfully.",
  69. "P0: original_material_document could not be re-saved.")
  70. resaved_first_material_document = (
  71. "first_material_document was re-saved successfully.",
  72. "P0: first_material_document could not be re-saved.")
  73. resaved_second_material_document = (
  74. "second_material_document was re-saved successfully.",
  75. "P0: second_material_document could not be re-saved.")
  76. reverted_original_material_document_color = (
  77. "original_material_document baseColor.color property value reverted to original value before changing it.",
  78. "P0: Failed to revert original_material_document baseColor.color property value to original value.")
  79. reverted_first_material_document_color = (
  80. "first_material_document baseColor.color property value reverted to original value before changing it.",
  81. "P0: Failed to revert first_material_document baseColor.color property value to original value.")
  82. reverted_second_material_document_color = (
  83. "second_material_document baseColor.color property value reverted to original value before changing it.",
  84. "P0: Failed to revert second_material_document baseColor.color property value to original value.")
  85. saved_original_material_document = (
  86. "original_material_document was saved successfully.",
  87. "P0: original_material_document could not be saved.")
  88. saved_new_material_document = (
  89. "new_material_document was saved successfully.",
  90. "P0: new_material_document could not be saved.")
  91. saved_child_material_document = (
  92. "child_material_document was saved successfully.",
  93. "P0: child_material_document could not be saved.")
  94. saved_changes_to_original_material_document = (
  95. "Changes saved successfully for original_material_document",
  96. "P0: original_material_document changes could not be saved.")
  97. saved_changes_to_new_material_document = (
  98. "Changes saved successfully for new_material_document",
  99. "P0: new_material_document changes could not be saved.")
  100. saved_first_material_document = (
  101. "Changes saved successfully for first_material_document",
  102. "P0: first_material_document changes could not be saved.")
  103. saved_changes_to_child_material_document = (
  104. "Changes saved successfully for child_material_document",
  105. "P0: child_material_document changes could not be saved.")
  106. saved_second_material_document = (
  107. "Changes saved successfully for second_material_document",
  108. "P0: second_material_document changes could not be saved.")
  109. second_material_document_has_expected_starting_color = (
  110. "second_material_document has expected baseColor.color property value",
  111. "P0: second_material_document did not have expected baseColor.color property value.")
  112. second_material_document_is_not_open = (
  113. "second_material_document is not currently open.",
  114. "P0: second_material_document was unexpectedly open.")
  115. verified_first_material_document_color = (
  116. "Verified first_material_document_copy property value for baseColor.color is accurate",
  117. "P0: Unexpected first_material_document property value for baseColor.color returned.")
  118. verified_second_material_document_color = (
  119. "Verified second_material_document_copy property value for baseColor.color is accurate",
  120. "P0: Unexpected second_material_document property value for baseColor.color returned.")
  121. def MaterialEditor_FileSaveChecks_AllChecksPass():
  122. """
  123. Summary:
  124. Tests basic MaterialEditor functionality that deals with file I/O writes (i.e. saving materials).
  125. Expected Behavior:
  126. All MaterialEditor tests dealing with file saving all pass without issues.
  127. Test Steps:
  128. 1) Open an existing material document referred to as "original_material_document".
  129. 2) Verify original_material_document baseColor.color property value is 1.0, 1.0, 1.0, 1.0.
  130. 3) Change the baseColor.color property value of original_material_document to 0.25, 0.25, 0.25, 1.0.
  131. 4) Save over original_material_document.
  132. 5) Change the baseColor.color property value of original_material_document to 0.5, 0.5, 0.5, 1.0.
  133. 6) Save a new material document from original_material_document referred to as "new_material_document".
  134. 7) Change the baseColor.color property value of original_material_document to 0.75, 0.75, 0.75, 1.0.
  135. 8) Save a new child material document referred to as "child_material_document".
  136. 9) Close & open previously saved original_material_document, new_material_document, & child_material_document.
  137. 10) Verify the changes are saved in original_material_document.
  138. 11) Verify the changes are saved in new_material_document.
  139. 12) Verify the changes are saved in child_material_document.
  140. 13) Revert changes to original_material_document and save them.
  141. 14) Close all currently opened documents.
  142. 15) Open a material document referred to as "first_material_document".
  143. 16) Verify first_material_document baseColor.color property value is 0.5, 0.5, 0.5, 1.0.
  144. 17) Change the baseColor.color property value of first_material_document to 0.4156, 0.0196, 0.6862, 1.0.
  145. 18) Save the first_material_document as a new material document file.
  146. 19) Open a second material document referred to as "second_material_document".
  147. 20) Verify second_material_document baseColor.color property value
  148. is 0.5093766450881958, 0.5093766450881958, 0.5093766450881958, 1.0.
  149. 21) Change the baseColor.color property value of the second_material_document to 0.4156, 0.0196, 0.6862, 1.0.
  150. 22) Save the second_material_document as a new material document file.
  151. 23) Close the first_material_document and second_material_document.
  152. 24) Open the first_material_document & verify the changes are saved.
  153. 25) Open the second_material_document & verify the changes are saved.
  154. 26) Revert changes to first_material_document and second_material_document.
  155. 27) Re-save first_material_document and second_material_document to restore their original values.
  156. 28) Close all currently opened documents.
  157. 29) Look for errors and asserts.
  158. :return: None
  159. """
  160. import os
  161. from azlmbr.math import Color
  162. import Atom.atom_utils.atom_tools_utils as atom_tools_utils
  163. import Atom.atom_utils.material_editor_utils as material_editor_utils
  164. from editor_python_test_tools.utils import Report, Tracer, TestHelper
  165. with Tracer() as error_tracer:
  166. # Set constants before starting test steps.
  167. base_color_property_name = "baseColor.color"
  168. original_material_document = os.path.join(
  169. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "StandardPbrTestCases", "001_DefaultWhite.material")
  170. new_material_document = os.path.join(
  171. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "new_material_document.material")
  172. child_material_document = os.path.join(
  173. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "child_material_document.material")
  174. first_material_document = os.path.join(
  175. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "StandardPbrTestCases", "003_MetalMatte.material")
  176. first_material_document_copy = os.path.join(
  177. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "first_material_document.material")
  178. second_material_document = os.path.join(
  179. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "StandardPbrTestCases", "004_MetalMap.material")
  180. second_material_document_copy = os.path.join(
  181. atom_tools_utils.TEST_DATA_MATERIALS_PATH, "second_material_document.material")
  182. # Disable registry settings to prevent message boxes from blocking test progression.
  183. atom_tools_utils.disable_document_message_box_settings()
  184. # 1. Open an existing material document referred to as "original_material_document".
  185. original_material_document_id = atom_tools_utils.open_document(original_material_document)
  186. Report.result(
  187. Tests.opened_original_material_document,
  188. atom_tools_utils.is_document_open(original_material_document_id) is True)
  189. # 2. Verify original_material_document baseColor.color property value is 1.0, 1.0, 1.0, 1.0.
  190. expected_original_material_starting_color = Color(1.0, 1.0, 1.0, 1.0)
  191. Report.result(
  192. Tests.original_material_document_has_expected_starting_color,
  193. material_editor_utils.get_property(
  194. original_material_document_id, base_color_property_name) == expected_original_material_starting_color)
  195. # 3. Change the baseColor.color property value of original_material_document to 0.25, 0.25, 0.25, 1.0.
  196. original_material_document_color = Color(0.25, 0.25, 0.25, 1.0)
  197. material_editor_utils.set_property(
  198. original_material_document_id, base_color_property_name, original_material_document_color)
  199. Report.result(
  200. Tests.changed_original_material_document_color,
  201. material_editor_utils.get_property(
  202. original_material_document_id, base_color_property_name) == original_material_document_color)
  203. # 4. Save over original_material_document.
  204. original_material_document_saved = atom_tools_utils.save_document(original_material_document_id)
  205. Report.result(
  206. Tests.saved_original_material_document,
  207. original_material_document_saved is True)
  208. # 5. Change the baseColor.color property value of original_material_document to 0.5, 0.5, 0.5, 1.0.
  209. new_material_document_color = Color(0.5, 0.5, 0.5, 1.0)
  210. material_editor_utils.set_property(
  211. original_material_document_id, base_color_property_name, new_material_document_color)
  212. Report.result(
  213. Tests.changed_new_material_document_color,
  214. material_editor_utils.get_property(
  215. original_material_document_id, base_color_property_name) == new_material_document_color)
  216. # 6. Save a new material document from original_material_document referred to as "new_material_document".
  217. new_material_document_saved = atom_tools_utils.save_document_as_copy(
  218. original_material_document_id, new_material_document)
  219. Report.result(
  220. Tests.saved_new_material_document,
  221. new_material_document_saved is True)
  222. # 7. Change the baseColor.color property value of original_material_document to 0.75, 0.75, 0.75, 1.0.
  223. child_material_document_color = Color(0.75, 0.75, 0.75, 1.0)
  224. material_editor_utils.set_property(
  225. original_material_document_id, base_color_property_name, child_material_document_color)
  226. Report.result(
  227. Tests.changed_child_material_document_color,
  228. material_editor_utils.get_property(
  229. original_material_document_id, base_color_property_name) == child_material_document_color)
  230. # 8. Save a new child material document referred to as "child_material_document".
  231. child_material_document_saved = atom_tools_utils.save_document_as_child(
  232. original_material_document_id, child_material_document)
  233. Report.result(
  234. Tests.saved_child_material_document,
  235. child_material_document_saved is True)
  236. # 9. Close & open previously saved original_material_document, new_material_document, & child_material_document.
  237. closed_all_material_documents = atom_tools_utils.close_all_documents()
  238. Report.result(
  239. Tests.closed_original_new_and_child_material_documents,
  240. closed_all_material_documents is True)
  241. original_material_document_id = atom_tools_utils.open_document(original_material_document)
  242. new_material_document_id = atom_tools_utils.open_document(new_material_document)
  243. child_material_document_id = atom_tools_utils.open_document(child_material_document)
  244. material_document_ids = {
  245. "original_material_document": original_material_document_id,
  246. "new_material_document": new_material_document_id,
  247. "child_material_document": child_material_document_id}
  248. for material_document_key, material_document_id in material_document_ids.items():
  249. Report.result(
  250. (f"Opened {material_document_key} with document_id value of {material_document_id}",
  251. f"Failed to open {material_document_key} with document_id value of {material_document_id}"),
  252. atom_tools_utils.is_document_open(material_document_id) is True)
  253. # 10. Verify the changes are saved in original_material_document.
  254. Report.result(
  255. Tests.saved_changes_to_original_material_document,
  256. material_editor_utils.get_property(
  257. original_material_document_id, base_color_property_name) == original_material_document_color)
  258. # 11. Verify the changes are saved in new_material_document.
  259. Report.result(
  260. Tests.saved_changes_to_new_material_document,
  261. material_editor_utils.get_property(
  262. new_material_document_id, base_color_property_name) == new_material_document_color)
  263. # 12. Verify the changes are saved in child_material_document.
  264. Report.result(
  265. Tests.saved_changes_to_child_material_document,
  266. material_editor_utils.get_property(
  267. child_material_document_id, base_color_property_name) == child_material_document_color)
  268. # 13. Revert original_material_document color to expected_original_material_starting_color and save it.
  269. material_editor_utils.set_property(
  270. original_material_document_id, base_color_property_name, expected_original_material_starting_color)
  271. original_document_saved = atom_tools_utils.save_document(original_material_document_id)
  272. Report.result(
  273. Tests.resaved_original_material_document,
  274. original_document_saved is True)
  275. Report.result(
  276. Tests.reverted_original_material_document_color,
  277. material_editor_utils.get_property(
  278. original_material_document_id, base_color_property_name) == expected_original_material_starting_color)
  279. # 14. Close all currently opened documents.
  280. closed_all_material_documents = atom_tools_utils.close_all_documents()
  281. Report.result(
  282. Tests.reclosed_original_new_child_material_documents,
  283. closed_all_material_documents is True)
  284. for material_document_key, material_document_id in material_document_ids.items():
  285. Report.result(
  286. (f"Closed {material_document_key} with document_id value of {material_document_id}",
  287. f"Failed to close {material_document_key} with document_id value of {material_document_id}"),
  288. atom_tools_utils.is_document_open(material_document_id) is False)
  289. # 15. Open a material document referred to as "first_material_document".
  290. first_material_document_id = atom_tools_utils.open_document(first_material_document)
  291. Report.result(
  292. Tests.opened_first_material_document,
  293. atom_tools_utils.is_document_open(first_material_document_id) is True)
  294. # 16. Verify first_material_document baseColor.color property value is 0.5, 0.5, 0.5, 1.0.
  295. expected_first_material_starting_color = Color(0.5, 0.5, 0.5, 1.0)
  296. Report.result(
  297. Tests.first_material_document_has_expected_starting_color,
  298. material_editor_utils.get_property(
  299. first_material_document_id, base_color_property_name) == expected_first_material_starting_color)
  300. # 17. Change the baseColor.color property value of first_material_document to 0.0156, 0.0196, 0.0862, 1.0.
  301. first_material_document_color = Color(0.0156, 0.0196, 0.0862, 1.0)
  302. material_editor_utils.set_property(
  303. first_material_document_id, base_color_property_name, first_material_document_color)
  304. Report.result(
  305. Tests.changed_first_material_document_color,
  306. material_editor_utils.get_property(
  307. first_material_document_id, base_color_property_name) == first_material_document_color)
  308. # 18. Save the first_material_document as a new material document file.
  309. first_material_document_saved = atom_tools_utils.save_document_as_copy(
  310. first_material_document_id, first_material_document_copy)
  311. Report.result(
  312. Tests.saved_first_material_document,
  313. first_material_document_saved is True)
  314. # 19. Open a second material document referred to as "second_material_document".
  315. second_material_document_id = atom_tools_utils.open_document(second_material_document)
  316. Report.result(
  317. Tests.opened_second_material_document,
  318. atom_tools_utils.is_document_open(second_material_document_id) is True)
  319. # 20. Verify second_material_document baseColor.color property value
  320. # is 0.5093766450881958, 0.5093766450881958, 0.5093766450881958, 1.0.
  321. expected_second_material_starting_color = Color(0.5093766450881958, 0.5093766450881958, 0.5093766450881958, 1.0)
  322. Report.result(
  323. Tests.second_material_document_has_expected_starting_color,
  324. material_editor_utils.get_property(
  325. second_material_document_id, base_color_property_name) == expected_second_material_starting_color)
  326. # 21. Change the baseColor.color property value of the second_material_document to 0.4156, 0.0196, 0.6862, 1.0.
  327. second_material_document_color = Color(0.4156, 0.0196, 0.6862, 1.0)
  328. material_editor_utils.set_property(
  329. second_material_document_id, base_color_property_name, second_material_document_color)
  330. Report.result(
  331. Tests.changed_second_material_document_color,
  332. material_editor_utils.get_property(
  333. second_material_document_id, base_color_property_name) == second_material_document_color)
  334. # 22. Save the second_material_document as a new material document file.
  335. second_material_document_saved = atom_tools_utils.save_document_as_copy(
  336. second_material_document_id, second_material_document_copy)
  337. Report.result(
  338. Tests.saved_second_material_document,
  339. second_material_document_saved is True)
  340. # 23. Close the first_material_document and second_material_document.
  341. first_material_document_closed = atom_tools_utils.close_document(first_material_document_id)
  342. Report.result(
  343. Tests.closed_first_material_document,
  344. first_material_document_closed is True)
  345. Report.result(
  346. Tests.first_material_document_is_not_open,
  347. atom_tools_utils.is_document_open(first_material_document_id) is False)
  348. second_material_document_closed = atom_tools_utils.close_document(second_material_document_id)
  349. Report.result(
  350. Tests.closed_second_material_document,
  351. second_material_document_closed is True)
  352. Report.result(
  353. Tests.second_material_document_is_not_open,
  354. atom_tools_utils.is_document_open(second_material_document_id) is False)
  355. # 24. Open the first_material_document & verify the changes are saved.
  356. first_material_document_id = atom_tools_utils.open_document(first_material_document_copy)
  357. Report.result(
  358. Tests.opened_first_material_document_copy,
  359. atom_tools_utils.is_document_open(first_material_document_id) is True)
  360. Report.result(
  361. Tests.verified_first_material_document_color,
  362. material_editor_utils.get_property(
  363. first_material_document_id, base_color_property_name) == first_material_document_color)
  364. # 25. Open the second_material_document & verify the changes are saved.
  365. second_material_document_id = atom_tools_utils.open_document(second_material_document_copy)
  366. Report.result(
  367. Tests.opened_second_material_document_copy,
  368. atom_tools_utils.is_document_open(first_material_document_id) is True)
  369. Report.result(
  370. Tests.verified_second_material_document_color,
  371. material_editor_utils.get_property(
  372. second_material_document_id, base_color_property_name) == second_material_document_color)
  373. # 26. Revert changes to first_material_document and second_material_document.
  374. material_editor_utils.set_property(
  375. first_material_document_id, base_color_property_name, expected_first_material_starting_color)
  376. Report.result(
  377. Tests.reverted_first_material_document_color,
  378. material_editor_utils.get_property(
  379. first_material_document_id,
  380. base_color_property_name) == expected_first_material_starting_color)
  381. material_editor_utils.set_property(
  382. second_material_document_id, base_color_property_name, expected_second_material_starting_color)
  383. Report.result(
  384. Tests.reverted_second_material_document_color,
  385. material_editor_utils.get_property(
  386. second_material_document_id,
  387. base_color_property_name) == expected_second_material_starting_color)
  388. # 27. Re-save first_material_document and second_material_document to restore their original values.
  389. first_material_document_resaved = atom_tools_utils.save_document(first_material_document_id)
  390. Report.result(
  391. Tests.resaved_first_material_document,
  392. first_material_document_resaved is True)
  393. second_material_document_resaved = atom_tools_utils.save_document(second_material_document_id)
  394. Report.result(
  395. Tests.resaved_second_material_document,
  396. second_material_document_resaved is True)
  397. # 28. Close all currently opened documents.
  398. closed_all_material_documents = atom_tools_utils.close_all_documents()
  399. Report.result(
  400. Tests.closed_first_and_second_material_documents,
  401. closed_all_material_documents is True)
  402. Report.result(
  403. Tests.reclosed_first_material_document,
  404. atom_tools_utils.is_document_open(first_material_document_id) is False)
  405. Report.result(
  406. Tests.reclosed_second_material_document,
  407. atom_tools_utils.is_document_open(second_material_document_id) is False)
  408. # 28. Look for errors and asserts.
  409. TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
  410. for error_info in error_tracer.errors:
  411. Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
  412. for assert_info in error_tracer.asserts:
  413. Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
  414. if __name__ == "__main__":
  415. from editor_python_test_tools.utils import Report
  416. Report.start_test(MaterialEditor_FileSaveChecks_AllChecksPass)