def find_first_device_or_simulate(self): simulated_device = SimulatedUSB() try: fd = FindDevices() result, usb_info = fd.list_usb() log.debug(" USB ID strings: %s" % usb_info[0]) (vid, pid) = usb_info[0].split(':')[0:2] except: log.debug("Error find devices: %s" % str(sys.exc_info())) try: real_device = CameraUSB() log.debug("Attempt real device connection") if real_device.connect(9386, pid): log.debug("Succesfull connection to: %s" % pid) return real_device except: log.debug("Exception %s" % str(sys.exc_info())) pass log.debug("Return simulated device") simulated_device.assign("Stroker785L") simulated_device.serial_number = "Simulated Stroker785L" return simulated_device
def test_xml_output(self): # Click the acquire button, read from the last generated xml # output variable xml_output = self.form.last_xml_output() self.assertEqual(xml_output, "invalid") # Simulated device is rquired sim_device = SimulatedUSB() sim_device.assign("Stroker785L") self.assertTrue(self.form.set_device(sim_device)) QtTest.QTest.mouseClick(self.form.ui.toolButtonAcquire, QtCore.Qt.LeftButton) xml_output = self.form.last_xml_output() head_str = "<title>Data from Wasatch Photonics device</title>" self.assertTrue(head_str in xml_output) self.assertTrue("$datestamp" not in xml_output) self.assertTrue("$timestamp" not in xml_output) # Make sure none of the python string template tags persist in # the xml output - check for $ which as of this writing only # appears in the python template tag areas self.assertFalse("$" in xml_output)
def test_device_status_displayed(self): # Form will create a Stroker785L simulated device on first call # to set_device self.assertEqual(self.form.ui.labelDeviceText.text(), "Connected to Simulated Stroker785L") # Create a simulation device, set in form, make sure the device # label updates sim_device = SimulatedUSB() sim_device.assign("Stroker785L") self.assertTrue(self.form.set_device(sim_device)) self.assertEqual(self.form.ui.labelDeviceText.text(), "Connected to Stroker785L")
def test_wavenumber_translation(self): # Create a simulation device, assign it to the device in the # application sim_device = SimulatedUSB() self.assertTrue(sim_device.assign("Stroker785L")) # Assign the calibration coefficients self.form.ui.lineEditCoeff0.setText("7.25405E+02") self.form.ui.lineEditCoeff1.setText("1.43880E-01") self.form.ui.lineEditCoeff2.setText("7.16617E-06") self.form.ui.lineEditCoeff3.setText("-8.68137E-09") self.assertTrue(self.form.set_device(sim_device)) # Click the acquire button, expect the Y axis to match the # wavenumbers specified by the calibration coefficients QtTest.QTest.mouseClick(self.form.ui.toolButtonAcquire, QtCore.Qt.LeftButton) xml_output = self.form.last_xml_output() xval = xml_output.split("dim = \"x\">")[1] xval = xval.split(" \n\t\t</values>")[0] xval = xval.replace('\n\t\t\t', '') # remove prefix xaxis_data = xval.split(' ') first_conv = "-1046.55" last_conv = "1255.15" self.assertEqual("%05.2f" % float(xaxis_data[0]), first_conv) self.assertEqual("%05.2f" % float(xaxis_data[-1]), last_conv)
def test_coefficient_updates(self): sim = SimulatedUSB() coeff_dict = {'C0': '7.25405E+02', 'C1': '1.43880E-01', 'C2': '7.16617E-06', 'C3': '-8.68137E-09' } # Raises error when trying to update without assignment self.assertRaises(ValueError, sim.new_coefficients, coeff_dict) self.assertTrue(sim.assign("Stroker785M")) # Assign new coefficients self.assertTrue(sim.new_coefficients(coeff_dict)) wavenum_axis, intensity_data = sim.get_line_wavenumber() first_conv = "-1046.55" last_conv = "2487.62" self.assertEqual("%05.2f" % wavenum_axis[0], first_conv) self.assertEqual("%05.2f" % wavenum_axis[-1], last_conv) self.assertEqual(intensity_data[0], 0) self.assertEqual(intensity_data[2047], 2047)
def test_acquire_closes_window(self): # Simulated device is rquired sim_device = SimulatedUSB() sim_device.assign("Stroker785L") self.assertTrue(self.form.set_device(sim_device)) self.form.ui.spinBoxIntegrationTime.setValue(3000) QtTest.QTest.mouseClick(self.form.ui.toolButtonAcquire, QtCore.Qt.LeftButton) # Wait 1 second, make sure lcd number values are 'around' the # appropriate range QtTest.QTest.qWait(1000) lcd_num = self.form.ui.lcdNumber.value() self.assertLess(lcd_num, 2500) self.assertGreater(lcd_num, 1500) QtTest.QTest.qWait(2500) self.assertFalse(self.form.isVisible())
def test_get_line_of_data(self): # Create a device with 1024 simulated pixels sim = SimulatedUSB() self.assertRaises(ValueError, sim.get_line_pixel) self.assertTrue(sim.assign("Stroker785L")) self.assertEqual(sim.pixel_count, 1024) pixel_data = sim.get_line_pixel() self.assertEqual(len(pixel_data), 1024) self.assertEqual(pixel_data[0], 0) self.assertEqual(pixel_data[1023], 1023) # Check a device with 2048 pixels sim = SimulatedUSB() self.assertTrue(sim.assign("Stroker785M")) self.assertEqual(sim.pixel_count, 2048) pixel_data = sim.get_line_pixel() self.assertEqual(len(pixel_data), 2048) self.assertEqual(pixel_data[0], 0) self.assertEqual(pixel_data[2047], 2047)
def test_simulated_integration_times(self): # Create a regular simulated device, trigger a long integration, # expect it to return instantly sim = SimulatedUSB() self.assertTrue(sim.assign("Stroker785L")) self.assertTrue(sim.set_integration_time(3000)) start_time = time.time() pixel_data = sim.get_line_pixel() end_time = time.time() self.assertLess(end_time - start_time, 1)
def test_connect_reconnect_disconnect(self): sim = SimulatedUSB() # Connect ok self.assertTrue(sim.assign("Stroker785L")) self.assertTrue(sim.connect()) # Re-connect raises typeerror self.assertRaises(TypeError, sim.connect) # disconnect ok self.assertTrue(sim.disconnect()) # re-disconnect raises typeerror self.assertRaises(TypeError, sim.disconnect)
def test_simulated_assign(self): sim = SimulatedUSB() # This is the break in functionality in the api. If you attempt # to connect to a simulation device before assigning a type, it # throws a valueerror exception. self.assertRaises(ValueError, sim.connect) self.assertRaises(ValueError, sim.disconnect) # Specify an invalid type, throw an error self.assertRaises(ValueError, sim.assign, "KnownInvalid") # Now that the type assignment has completed, connect will pass self.assertTrue(sim.assign("Stroker785L")) self.assertTrue(sim.connect())
def test_wavenumber_conversion(self): # Set some default coefficients, make sure the returned # wavenumber conversion is accurate sim = SimulatedUSB() self.assertRaises(ValueError, sim.get_line_wavenumber) self.assertTrue(sim.assign("Stroker785L")) self.assertEqual(sim.pixel_count, 1024) wavenum_axis, intensity_data = sim.get_line_wavenumber() self.assertEqual(len(intensity_data), 1024) self.assertEqual(len(wavenum_axis), 1024) first_conv = "164.33" last_conv = "836.76" self.assertEqual("%05.2f" % wavenum_axis[0], first_conv) self.assertEqual("%05.2f" % wavenum_axis[-1], last_conv) self.assertEqual(intensity_data[0], 0) self.assertEqual(intensity_data[1023], 1023)