test_slicer_strings.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """slicer_strings: slicer string-list options as a JSON array or an INI-style string (#3380)."""
  2. import pytest
  3. from backend.app.utils.slicer_strings import first_slicer_string, slicer_strings, unescape_strings_cstyle
  4. def test_ini_string():
  5. assert slicer_strings('"Bambu Lab X1 Carbon 0.4 nozzle";"Bambu Lab H2C 0.4 nozzle"') == [
  6. "Bambu Lab X1 Carbon 0.4 nozzle",
  7. "Bambu Lab H2C 0.4 nozzle",
  8. ]
  9. assert slicer_strings("PLA;PETG") == ["PLA", "PETG"]
  10. assert slicer_strings('"Printer \\"A\\""') == ['Printer "A"']
  11. def test_quoted_items_decode_like_orca():
  12. assert slicer_strings('"a\\nb";"c\\rd";"e\\\\f"') == ["a\nb", "c\rd", "e\\f"]
  13. assert slicer_strings(' \t"X1C" \t; "P1S"') == ["X1C", "P1S"]
  14. def test_unquoted_items_are_read_as_is():
  15. assert slicer_strings("C:\\x") == ["C:\\x"]
  16. assert slicer_strings("Bambu Lab P2S 0.4 nozzle") == ["Bambu Lab P2S 0.4 nozzle"]
  17. def test_json_array_items_are_kept_as_they_are():
  18. """A JSON array is never INI-encoded: a ``;``, ``\\`` or ``"`` in a name stays."""
  19. assert slicer_strings(["X1C", "", 5, "A1"]) == ["X1C", "A1"]
  20. assert slicer_strings(["My X1C; tuned", '"C:\\profiles\\X1C"']) == ["My X1C; tuned", '"C:\\profiles\\X1C"']
  21. def test_the_slicer_parse_keeps_empty_items():
  22. """Per-extruder lists keep their positions."""
  23. assert unescape_strings_cstyle('"";"#FF0000"') == ["", "#FF0000"]
  24. assert unescape_strings_cstyle('""') == [""]
  25. assert unescape_strings_cstyle('"#FF0000";') == ["#FF0000", ""]
  26. assert unescape_strings_cstyle("") == []
  27. assert unescape_strings_cstyle('"X1C" P1S') is None
  28. def test_first_item():
  29. assert first_slicer_string('"";" #FF0000 "') == "#FF0000"
  30. assert first_slicer_string(["PLA"]) == "PLA"
  31. assert first_slicer_string('""') is None
  32. @pytest.mark.parametrize("raw", ['"X1C" P1S', '"X1C', '"X1C\\', '"X1C";"P1S'])
  33. def test_string_orca_cannot_parse_is_no_data(raw):
  34. assert slicer_strings(raw) == []
  35. @pytest.mark.parametrize("raw", [None, "", '""', " ", ";", [], ["", " "], {"a": 1}, 5])
  36. def test_empty_and_malformed(raw):
  37. assert slicer_strings(raw) == []