test_tcl_shell.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import sys
  2. import unittest
  3. from PyQt4 import QtGui
  4. from PyQt4.QtCore import QThread
  5. from FlatCAMApp import App
  6. from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry, FlatCAMCNCjob, FlatCAMExcellon
  7. from ObjectUI import GerberObjectUI, GeometryObjectUI
  8. from time import sleep
  9. import os
  10. import tempfile
  11. class TclShellTest(unittest.TestCase):
  12. gerber_files = 'tests/gerber_files'
  13. copper_bottom_filename = 'detector_copper_bottom.gbr'
  14. copper_top_filename = 'detector_copper_top.gbr'
  15. cutout_filename = 'detector_contour.gbr'
  16. excellon_filename = 'detector_drill.txt'
  17. excellon_name = "excellon"
  18. gerber_top_name = "top"
  19. gerber_bottom_name = "bottom"
  20. gerber_cutout_name = "cutout"
  21. engraver_diameter = 0.3
  22. cutout_diameter = 3
  23. drill_diameter = 0.8
  24. @classmethod
  25. def setUpClass(self):
  26. self.setup=True
  27. self.app = QtGui.QApplication(sys.argv)
  28. # Create App, keep app defaults (do not load
  29. # user-defined defaults).
  30. self.fc = App(user_defaults=False)
  31. self.fc.ui.shell_dock.show()
  32. @classmethod
  33. def tearDownClass(self):
  34. self.fc.tcl=None
  35. self.app.closeAllWindows()
  36. del self.fc
  37. del self.app
  38. pass
  39. def test_set_get_units(self):
  40. self.fc.exec_command_test('set_sys units MM')
  41. self.fc.exec_command_test('new')
  42. self.fc.exec_command_test('set_sys units IN')
  43. self.fc.exec_command_test('new')
  44. units=self.fc.exec_command_test('get_sys units')
  45. self.assertEquals(units, "IN")
  46. self.fc.exec_command_test('set_sys units MM')
  47. self.fc.exec_command_test('new')
  48. units=self.fc.exec_command_test('get_sys units')
  49. self.assertEquals(units, "MM")
  50. def test_gerber_flow(self):
  51. # open gerber files top, bottom and cutout
  52. self.fc.exec_command_test('set_sys units MM')
  53. self.fc.exec_command_test('new')
  54. self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
  55. gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
  56. self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
  57. "Expected FlatCAMGerber, instead, %s is %s" %
  58. (self.gerber_top_name, type(gerber_top_obj)))
  59. self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_bottom_filename, self.gerber_bottom_name))
  60. gerber_bottom_obj = self.fc.collection.get_by_name(self.gerber_bottom_name)
  61. self.assertTrue(isinstance(gerber_bottom_obj, FlatCAMGerber),
  62. "Expected FlatCAMGerber, instead, %s is %s" %
  63. (self.gerber_bottom_name, type(gerber_bottom_obj)))
  64. self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.cutout_filename, self.gerber_cutout_name))
  65. gerber_cutout_obj = self.fc.collection.get_by_name(self.gerber_cutout_name)
  66. self.assertTrue(isinstance(gerber_cutout_obj, FlatCAMGerber),
  67. "Expected FlatCAMGerber, instead, %s is %s" %
  68. (self.gerber_cutout_name, type(gerber_cutout_obj)))
  69. # exteriors delete and join geometries for top layer
  70. self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_cutout_name, self.engraver_diameter))
  71. self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_iso', self.gerber_cutout_name + '_iso_exterior'))
  72. self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_iso'))
  73. obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_iso_exterior')
  74. self.assertTrue(isinstance(obj, FlatCAMGeometry),
  75. "Expected FlatCAMGeometry, instead, %s is %s" %
  76. (self.gerber_cutout_name + '_iso_exterior', type(obj)))
  77. # mirror bottom gerbers
  78. self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.gerber_bottom_name, self.gerber_cutout_name))
  79. self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.gerber_cutout_name, self.gerber_cutout_name))
  80. # exteriors delete and join geometries for bottom layer
  81. self.fc.exec_command_test('isolate %s -dia %f -outname %s' % (self.gerber_cutout_name, self.engraver_diameter, self.gerber_cutout_name + '_bottom_iso'))
  82. self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_bottom_iso', self.gerber_cutout_name + '_bottom_iso_exterior'))
  83. self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_bottom_iso'))
  84. obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_bottom_iso_exterior')
  85. self.assertTrue(isinstance(obj, FlatCAMGeometry),
  86. "Expected FlatCAMGeometry, instead, %s is %s" %
  87. (self.gerber_cutout_name + '_bottom_iso_exterior', type(obj)))
  88. # at this stage we should have 5 objects
  89. names = self.fc.collection.get_names()
  90. self.assertEqual(len(names), 5,
  91. "Expected 5 objects, found %d" % len(names))
  92. # isolate traces
  93. self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_top_name, self.engraver_diameter))
  94. self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_bottom_name, self.engraver_diameter))
  95. # join isolated geometries for top and bottom
  96. self.fc.exec_command_test('join_geometries %s %s %s' % (self.gerber_top_name + '_join_iso', self.gerber_top_name + '_iso', self.gerber_cutout_name + '_iso_exterior'))
  97. self.fc.exec_command_test('join_geometries %s %s %s' % (self.gerber_bottom_name + '_join_iso', self.gerber_bottom_name + '_iso', self.gerber_cutout_name + '_bottom_iso_exterior'))
  98. # at this stage we should have 9 objects
  99. names = self.fc.collection.get_names()
  100. self.assertEqual(len(names), 9,
  101. "Expected 9 objects, found %d" % len(names))
  102. # clean unused isolations
  103. self.fc.exec_command_test('delete %s' % (self.gerber_bottom_name + '_iso'))
  104. self.fc.exec_command_test('delete %s' % (self.gerber_top_name + '_iso'))
  105. self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_iso_exterior'))
  106. self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_bottom_iso_exterior'))
  107. # at this stage we should have 5 objects again
  108. names = self.fc.collection.get_names()
  109. self.assertEqual(len(names), 5,
  110. "Expected 5 objects, found %d" % len(names))
  111. # geocutout bottom test (it cuts to same object)
  112. self.fc.exec_command_test('isolate %s -dia %f -outname %s' % (self.gerber_cutout_name, self.cutout_diameter, self.gerber_cutout_name + '_bottom_iso'))
  113. self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_bottom_iso', self.gerber_cutout_name + '_bottom_iso_exterior'))
  114. self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_bottom_iso'))
  115. obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_bottom_iso_exterior')
  116. self.assertTrue(isinstance(obj, FlatCAMGeometry),
  117. "Expected FlatCAMGeometry, instead, %s is %s" %
  118. (self.gerber_cutout_name + '_bottom_iso_exterior', type(obj)))
  119. self.fc.exec_command_test('geocutout %s -dia %f -gapsize 0.3 -gaps 4' % (self.gerber_cutout_name + '_bottom_iso_exterior', self.cutout_diameter))
  120. # at this stage we should have 6 objects
  121. names = self.fc.collection.get_names()
  122. self.assertEqual(len(names), 6,
  123. "Expected 6 objects, found %d" % len(names))
  124. # TODO: tests for tcl
  125. def test_open_gerber(self):
  126. self.fc.exec_command_test('set_sys units MM')
  127. self.fc.exec_command_test('new')
  128. self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
  129. gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
  130. self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
  131. "Expected FlatCAMGerber, instead, %s is %s" %
  132. (self.gerber_top_name, type(gerber_top_obj)))
  133. def test_excellon_flow(self):
  134. self.fc.exec_command_test('set_sys units MM')
  135. self.fc.exec_command_test('new')
  136. self.fc.exec_command_test('open_excellon %s/%s -outname %s' % (self.gerber_files, self.excellon_filename, self.excellon_name))
  137. excellon_obj = self.fc.collection.get_by_name(self.excellon_name)
  138. self.assertTrue(isinstance(excellon_obj, FlatCAMExcellon),
  139. "Expected FlatCAMExcellon, instead, %s is %s" %
  140. (self.excellon_name, type(excellon_obj)))
  141. # mirror bottom excellon
  142. self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.excellon_name, self.gerber_cutout_name))
  143. # TODO: tests for tcl