TestXmlMaterialProfile.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from unittest.mock import patch, MagicMock
  2. # Prevents error: "PyCapsule_GetPointer called with incorrect name" with conflicting SIP configurations between Arcus and PyQt: Import custom Sip bindings first!
  3. import Savitar # Dont remove this line
  4. import Arcus # No really. Don't. It needs to be there!
  5. import pynest2d # Really!
  6. from UM.Qt.QtApplication import QtApplication # QtApplication import is required, even though it isn't used.
  7. import pytest
  8. import XmlMaterialProfile
  9. def createXmlMaterialProfile(material_id):
  10. try:
  11. return XmlMaterialProfile.XmlMaterialProfile.XmlMaterialProfile(material_id)
  12. except AttributeError:
  13. return XmlMaterialProfile.XmlMaterialProfile(material_id)
  14. def test_setName():
  15. material_1 = createXmlMaterialProfile("herpderp")
  16. material_2 = createXmlMaterialProfile("OMGZOMG")
  17. material_1.getMetaData()["base_file"] = "herpderp"
  18. material_2.getMetaData()["base_file"] = "herpderp"
  19. container_registry = MagicMock()
  20. container_registry.isReadOnly = MagicMock(return_value = False)
  21. container_registry.findInstanceContainers = MagicMock(return_value = [material_1, material_2])
  22. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)):
  23. material_1.setName("beep!")
  24. assert material_1.getName() == "beep!"
  25. assert material_2.getName() == "beep!"
  26. def test_setDirty():
  27. material_1 = createXmlMaterialProfile("herpderp")
  28. material_2 = createXmlMaterialProfile("OMGZOMG")
  29. material_1.getMetaData()["base_file"] = "herpderp"
  30. material_2.getMetaData()["base_file"] = "herpderp"
  31. container_registry = MagicMock()
  32. container_registry.isReadOnly = MagicMock(return_value=False)
  33. container_registry.findContainers = MagicMock(return_value=[material_1, material_2])
  34. # Sanity check. Since we did a hacky thing to set the metadata, the container should not be dirty.
  35. # But this test assumes that it works like that, so we need to validate that.
  36. assert not material_1.isDirty()
  37. assert not material_2.isDirty()
  38. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
  39. material_2.setDirty(True)
  40. assert material_1.isDirty()
  41. assert material_2.isDirty()
  42. # Setting the base material dirty does not set it's child as dirty.
  43. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
  44. material_1.setDirty(False)
  45. assert not material_1.isDirty()
  46. assert material_2.isDirty()
  47. def test_serializeNonBaseMaterial():
  48. material_1 = createXmlMaterialProfile("herpderp")
  49. material_1.getMetaData()["base_file"] = "omgzomg"
  50. container_registry = MagicMock()
  51. container_registry.isReadOnly = MagicMock(return_value=False)
  52. container_registry.findContainers = MagicMock(return_value=[material_1])
  53. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
  54. with pytest.raises(NotImplementedError):
  55. # This material is not a base material, so it can't be serialized!
  56. material_1.serialize()