TestPrintInformation.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import functools
  2. from UM.Qt.Duration import Duration
  3. from cura import PrintInformation
  4. from cura.Settings.MachineManager import MachineManager
  5. from unittest.mock import MagicMock, patch
  6. from UM.Application import Application
  7. from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
  8. def getPrintInformation(printer_name) -> PrintInformation:
  9. mock_application = MagicMock(name = "mock_application")
  10. mocked_preferences = MagicMock(name="mocked_preferences")
  11. mocked_extruder_stack = MagicMock()
  12. mocked_extruder_stack.getProperty = MagicMock(return_value = 3)
  13. mocked_material = MagicMock(name= "mocked material")
  14. mocked_material.getMetaDataEntry = MagicMock(return_value = "omgzomg")
  15. mocked_extruder_stack.material = mocked_material
  16. mock_application.getInstance = MagicMock(return_value = mock_application)
  17. mocked_preferences.getValue = MagicMock(return_value = '{"omgzomg": {"spool_weight": 10, "spool_cost": 9}}')
  18. global_container_stack = MagicMock()
  19. global_container_stack.extruders = {"0": mocked_extruder_stack}
  20. global_container_stack.definition.getName = MagicMock(return_value = printer_name)
  21. mock_application.getGlobalContainerStack = MagicMock(return_value = global_container_stack)
  22. mock_application.getPreferences = MagicMock(return_value = mocked_preferences)
  23. multi_build_plate_model = MagicMock()
  24. multi_build_plate_model.maxBuildPlate = 0
  25. mock_application.getMultiBuildPlateModel = MagicMock(return_value = multi_build_plate_model)
  26. # Mock-up the entire machine manager except the function that needs to be tested: getAbbreviatedMachineName
  27. original_get_abbreviated_name = MachineManager.getAbbreviatedMachineName
  28. mock_machine_manager = MagicMock()
  29. mock_machine_manager.getAbbreviatedMachineName = functools.partial(original_get_abbreviated_name, mock_machine_manager)
  30. mock_application.getMachineManager = MagicMock(return_value = mock_machine_manager)
  31. Application.getInstance = MagicMock(return_value = mock_application)
  32. with patch("json.loads", lambda x: {}):
  33. print_information = PrintInformation.PrintInformation(mock_application)
  34. return print_information
  35. def setup_module():
  36. MimeTypeDatabase.addMimeType(
  37. MimeType(
  38. name = "application/vnd.ms-package.3dmanufacturing-3dmodel+xml",
  39. comment = "3MF",
  40. suffixes = ["3mf"]
  41. )
  42. )
  43. MimeTypeDatabase.addMimeType(
  44. MimeType(
  45. name = "application/x-cura-gcode-file",
  46. comment = "Cura GCode File",
  47. suffixes = ["gcode"]
  48. )
  49. )
  50. def test_duration():
  51. print_information = getPrintInformation("ultimaker")
  52. feature_print_times = print_information.getFeaturePrintTimes()
  53. assert int(feature_print_times["Travel"]) == int(Duration(None))
  54. # Fake a print duration message
  55. print_information._onPrintDurationMessage(0, {"Travel": 20}, [10])
  56. feature_print_times = print_information.getFeaturePrintTimes()
  57. assert int(feature_print_times["Travel"]) == 20
  58. print_information.setToZeroPrintInformation()
  59. assert int(feature_print_times["Travel"]) == 0
  60. def test_setProjectName():
  61. print_information = getPrintInformation("ultimaker")
  62. # Test simple name
  63. project_name = ["HelloWorld", ".3mf"]
  64. print_information.setProjectName(project_name[0] + project_name[1])
  65. assert "UM_" + project_name[0] == print_information._job_name
  66. # Test the name with one dot
  67. project_name = ["Hello.World", ".3mf"]
  68. print_information.setProjectName(project_name[0] + project_name[1])
  69. assert "UM_" + project_name[0] == print_information._job_name
  70. # Test the name with two dot
  71. project_name = ["Hello.World.World", ".3mf"]
  72. print_information.setProjectName(project_name[0] + project_name[1])
  73. assert "UM_" + project_name[0] == print_information._job_name
  74. # Test the name with dot at the beginning
  75. project_name = [".Hello.World", ".3mf"]
  76. print_information.setProjectName(project_name[0] + project_name[1])
  77. assert "UM_" + project_name[0] == print_information._job_name
  78. # Test the name with underline
  79. project_name = ["Hello_World", ".3mf"]
  80. print_information.setProjectName(project_name[0] + project_name[1])
  81. assert "UM_" + project_name[0] == print_information._job_name
  82. # Test gcode extension
  83. project_name = ["Hello_World", ".gcode"]
  84. print_information.setProjectName(project_name[0] + project_name[1])
  85. assert "UM_" + project_name[0] == print_information._job_name
  86. # Test empty project name
  87. project_name = ["", ""]
  88. print_information.setProjectName(project_name[0] + project_name[1])
  89. assert print_information.UNTITLED_JOB_NAME == print_information._job_name
  90. # Test wrong file extension
  91. project_name = ["Hello_World", ".test"]
  92. print_information.setProjectName(project_name[0] + project_name[1])
  93. assert "UM_" + project_name[0] != print_information._job_name
  94. def test_setJobName():
  95. print_information = getPrintInformation("ultimaker")
  96. print_information._abbr_machine = "UM"
  97. print_information.setJobName("UM_HelloWorld", is_user_specified_job_name = False)
  98. def test_defineAbbreviatedMachineName():
  99. printer_name = "Test"
  100. print_information = getPrintInformation(printer_name)
  101. # Test not ultimaker printer, name suffix should have first letter from the printer name
  102. project_name = ["HelloWorld", ".3mf"]
  103. print_information.setProjectName(project_name[0] + project_name[1])
  104. assert printer_name[0] + "_" + project_name[0] == print_information._job_name