test_tcl_shell.py 8.9 KB

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