test_tcl_shell.py 8.8 KB

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