run_tests.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import os
  2. import sys
  3. import io
  4. import pprint
  5. import tempfile
  6. import unittest
  7. from drawio2py import parser, abstract_syntax, generator, shapelib, util
  8. DATADIR = os.path.join(os.path.dirname(__file__), "data")
  9. class DummyOutput:
  10. def write(self, text: str):
  11. pass
  12. def run_test(filename):
  13. # Parse (1st time):
  14. asyntax = parser.Parser.parse(os.path.join(DATADIR,filename))
  15. # Generate .drawio (1st time):
  16. csyntax = io.BytesIO()
  17. generator.generate(asyntax, csyntax)
  18. csyntax.seek(0)
  19. # Parse (2nd time):
  20. asyntax2 = parser.Parser.parse(csyntax)
  21. # Generate .drawio (2nd time):
  22. csyntax2 = io.BytesIO()
  23. generator.generate(asyntax2, csyntax2)
  24. csyntax2.seek(0)
  25. if (csyntax.getvalue() != csyntax2.getvalue()):
  26. # print("csyntax:", csyntax.getvalue())
  27. # print("csyntax2:", csyntax2.getvalue())
  28. raise Exception("Files differ after round-trip!")
  29. def parse_shapelib(filename):
  30. return shapelib.parse_library(os.path.join(DATADIR,filename))
  31. class Tests(unittest.TestCase):
  32. def test_1(self):
  33. run_test("test.drawio")
  34. def test_2(self):
  35. run_test("overview.drawio") # we eat our own dog food :)
  36. def test_3(self):
  37. run_test("TrivialPM.drawio")
  38. def test_label_offset(self):
  39. run_test("labelOffset.drawio")
  40. # asyntax = parser.Parser.parse(os.path.join(DATADIR, "labelOffset.drawio"))
  41. # with open(os.path.join(DATADIR, "labelOffset-1.drawio"), 'wb') as f:
  42. # generator.generate(asyntax, f)
  43. def test_edge_label(self):
  44. run_test("edgeLabel.drawio")
  45. def test_shapelib(self):
  46. common_lib = parse_shapelib("shapelibs/common.xml")
  47. pm_lib = parse_shapelib("shapelibs/pm.xml")
  48. id_gen = util.DrawioIDGenerator()
  49. page = util.generate_empty_page(id_gen, "MyFancyPage")
  50. cloner = shapelib.ShapeCloner(id_gen)
  51. initial = cloner.clone_vertex(pm_lib["(PM) Initial"], page.root, 100, 100)
  52. final = cloner.clone_vertex(pm_lib["(PM) Final"], page.root, 300, 300)
  53. cloner.clone_edge(common_lib["Control Flow"], page.root, initial, final)
  54. def parse_shapelib1(self):
  55. parse_shapelib("shapelibs/ftg.xml")
  56. def parse_shapelib2(self):
  57. parse_shapelib("shapelibs/pt.xml")
  58. def parse_shapelib3(self):
  59. parse_shapelib("shapelibs/ss.xml")