Esempio n. 1
0
class TestSignalTabGUI(unittest.TestCase):
    def setUp(self):
        constants.SETTINGS.setValue("not_show_save_dialog", True)
        self.form = MainController()
        self.form.add_signalfile(get_path_for_data_file("esaver.complex"))
        self.frame = self.form.signal_tab_controller.signal_frames[0]

    def test_close_all(self):
        self.form.close_all()
        QTest.qWait(250)
        self.assertEqual(self.form.signal_tab_controller.num_signals, 0)

        # Add a bunch of signals
        num_signals = 10
        for _ in range(num_signals):
            self.form.add_signalfile(get_path_for_data_file("esaver.complex"))

        self.assertEqual(self.form.signal_tab_controller.num_signals, num_signals)

        self.form.close_all()
        QTest.qWait(250)

        self.form.add_signalfile(get_path_for_data_file("ask.complex"))
        self.assertEqual(self.form.signal_tab_controller.num_signals, 1)

    def test_zoom(self):
        x_zoom = self.frame.ui.spinBoxXZoom.value()
        self.assertEqual(x_zoom, 100)

        for _ in range(10):
            self.frame.ui.gvSignal.zoom(1.01)
            self.assertGreater(self.frame.ui.spinBoxXZoom.value(), x_zoom)
            x_zoom = self.frame.ui.spinBoxXZoom.value()

        for _ in range(10):
            self.frame.ui.gvSignal.zoom(0.99)
            self.assertLess(self.frame.ui.spinBoxXZoom.value(), x_zoom)
            x_zoom = self.frame.ui.spinBoxXZoom.value()

        samples_in_view = self.frame.ui.lSamplesInView.text()
        self.frame.ui.spinBoxXZoom.setValue(self.frame.ui.spinBoxXZoom.value() + 400)
        self.assertNotEqual(samples_in_view, self.frame.ui.lSamplesInView.text())

    def test_load_proto(self):
        self.form.add_files([get_path_for_data_file("protocol.proto")])
        self.assertEqual(self.form.signal_tab_controller.signal_frames[1].ui.lSignalTyp.text(), "Protocol (*.proto)")

    def test_graphic_view_selection(self):
        self.frame.ui.gvSignal.selection_area.start = 0
        self.frame.ui.gvSignal.selection_area.end = 4000
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(0, 4000)

        self.assertEqual(self.frame.ui.lNumSelectedSamples.text(), "4000")

        noise_val = self.frame.ui.spinBoxNoiseTreshold.value()
        self.frame.ui.gvSignal.set_noise_clicked.emit()
        self.assertNotEqual(noise_val, self.frame.ui.spinBoxNoiseTreshold.value())

        self.frame.ui.spinBoxSelectionStart.setValue(300)
        self.assertEqual(self.frame.ui.gvSignal.selection_area.start, 300)
        self.frame.ui.spinBoxSelectionEnd.setValue(6000)
        self.assertEqual(self.frame.ui.gvSignal.selection_area.end, 6000)

    def test_graphic_view_zoom_to_selection(self):
        self.frame.ui.gvSignal.context_menu_position = QPoint(0, 0)
        menu = self.frame.ui.gvSignal.create_context_menu()
        self.assertTrue(self.frame.ui.gvSignal.selection_area.is_empty)
        self.assertIsNone(next((action for action in menu.actions() if action.text() == "Zoom selection"), None))

        self.frame.ui.gvSignal.selection_area.start = 1337
        self.frame.ui.gvSignal.selection_area.end = 4711
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(1337, 4711)

        menu = self.frame.ui.gvSignal.create_context_menu()
        self.assertFalse(self.frame.ui.gvSignal.selection_area.is_empty)
        zoom_action = next(action for action in menu.actions() if action.text() == "Zoom selection")
        zoom_action.trigger()
        self.assertEqual(self.frame.ui.spinBoxSelectionStart.value(), 1337)
        self.assertEqual(self.frame.ui.spinBoxSelectionEnd.value(), 4711)

    def test_show_hide_start_end(self):
        self.assertEqual(self.frame.ui.btnShowHideStartEnd.text(), "+")
        self.frame.ui.btnShowHideStartEnd.click()
        self.assertEqual(self.frame.ui.btnShowHideStartEnd.text(), "-")

    def test_apply_to_all(self):
        self.form.add_signalfile(get_path_for_data_file("ask.complex"))
        frame2 = self.form.signal_tab_controller.signal_frames[1]

        self.frame.ui.spinBoxInfoLen.setValue(42)
        self.frame.ui.spinBoxInfoLen.editingFinished.emit()

        self.frame.ui.spinBoxCenterOffset.setValue(0.1)
        self.frame.ui.spinBoxCenterOffset.editingFinished.emit()

        self.frame.ui.spinBoxNoiseTreshold.setValue(0.5)
        self.frame.ui.spinBoxNoiseTreshold.editingFinished.emit()

        self.frame.ui.spinBoxTolerance.setValue(10)
        self.frame.ui.spinBoxTolerance.editingFinished.emit()

        self.frame.apply_to_all_clicked.emit(self.frame.signal)

        self.assertEqual(42, frame2.ui.spinBoxInfoLen.value())
        self.assertEqual(0.1, frame2.ui.spinBoxCenterOffset.value())
        self.assertEqual(0.5, frame2.ui.spinBoxNoiseTreshold.value())
        self.assertEqual(10, frame2.ui.spinBoxTolerance.value())

    def test_save_all(self):
        self.form.add_signalfile(get_path_for_data_file("ask.complex"))
        frame2 = self.form.signal_tab_controller.signal_frames[1]

        self.frame.signal.changed = True
        self.frame.signal.filename = os.path.join(QDir.tempPath(), "sig1.complex")

        frame2.signal.changed = True
        frame2.signal.filename = os.path.join(QDir.tempPath(), "sig2.complex")

        self.assertFalse(os.path.isfile(self.frame.signal.filename))
        self.assertFalse(os.path.isfile(frame2.signal.filename))

        self.form.signal_tab_controller.save_all()

        self.assertTrue(os.path.isfile(self.frame.signal.filename))
        self.assertTrue(os.path.isfile(frame2.signal.filename))

        os.remove(self.frame.signal.filename)
        os.remove(frame2.signal.filename)

    def test_crop_and_save_signal(self):
        self.frame.ui.gvSignal.selection_area.end = 4000
        self.frame.ui.gvSignal.selection_area.start = 1000

        self.assertEqual(self.frame.ui.gvSignal.selection_area.end, 4000)
        self.assertEqual(self.frame.ui.gvSignal.selection_area.width, 3000)
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(1000, 4000)

        self.frame.ui.gvSignal.on_crop_action_triggered()
        self.assertEqual(self.frame.signal.num_samples, 3000)
        self.assertTrue(self.frame.signal.changed)

        self.frame.signal.filename = os.path.join(QDir.tempPath(), "sig.complex")
        self.assertFalse(os.path.isfile(self.frame.signal.filename))
        self.frame.ui.btnSaveSignal.click()
        self.form.close_signal_frame(self.frame)
        QTest.qWait(50)
        self.form.add_signalfile(os.path.join(QDir.tempPath(), "sig.complex"))
        self.assertEqual(self.form.signal_tab_controller.signal_frames[0].signal.num_samples, 3000)
        os.remove(os.path.join(QDir.tempPath(), "sig.complex"))
Esempio n. 2
0
class TestSignalTabGUI(unittest.TestCase):
    def setUp(self):
        constants.SETTINGS.setValue("not_show_save_dialog", True)
        logger.debug("Init Form")
        tests.utils_testing.short_wait()
        self.form = MainController()
        tests.utils_testing.short_wait()
        logger.debug("Add Signal")
        self.form.add_signalfile(get_path_for_data_file("esaver.complex"))
        logger.debug("Added Signal")
        app.processEvents()
        self.frame = self.form.signal_tab_controller.signal_frames[0]
        self.frame.signal.noise_threshold = 0.0023
        self.frame.signal.qad_center = 0.3817
        self.frame.signal.bit_len = 84

    def tearDown(self):
        self.form.close_all()
        tests.utils_testing.short_wait()
        self.form.close()
        self.form.setParent(None)
        self.form.deleteLater()
        tests.utils_testing.short_wait()

    def test_close_all(self):
        logger.debug("Close all")
        self.form.close_all()
        tests.utils_testing.short_wait()
        logger.debug("Called close all")
        app.processEvents()
        self.assertEqual(self.form.signal_tab_controller.num_signals, 0)

        # Add a bunch of signals
        num_signals = 5
        for _ in range(num_signals):
            tests.utils_testing.short_wait()
            self.form.add_signalfile(get_path_for_data_file("esaver.complex"))

        self.assertEqual(self.form.signal_tab_controller.num_signals,
                         num_signals)

        self.form.close_all()
        tests.utils_testing.short_wait()

        self.form.add_signalfile(get_path_for_data_file("ask.complex"))
        self.assertEqual(self.form.signal_tab_controller.num_signals, 1)

    def test_zoom(self):
        tests.utils_testing.short_wait()
        x_zoom = self.frame.ui.spinBoxXZoom.value()
        self.assertEqual(x_zoom, 100)

        for _ in range(10):
            self.frame.ui.gvSignal.zoom(1.01)
            self.assertGreater(self.frame.ui.spinBoxXZoom.value(), x_zoom)
            x_zoom = self.frame.ui.spinBoxXZoom.value()

        for _ in range(10):
            self.frame.ui.gvSignal.zoom(0.99)
            self.assertLess(self.frame.ui.spinBoxXZoom.value(), x_zoom)
            x_zoom = self.frame.ui.spinBoxXZoom.value()

        samples_in_view = self.frame.ui.lSamplesInView.text()
        self.frame.ui.spinBoxXZoom.setValue(
            self.frame.ui.spinBoxXZoom.value() + 400)
        self.assertNotEqual(samples_in_view,
                            self.frame.ui.lSamplesInView.text())

    def test_load_proto(self):
        self.form.add_files([get_path_for_data_file("protocol.proto")])
        self.assertEqual(
            self.form.signal_tab_controller.signal_frames[1].ui.lSignalTyp.
            text(), "Protocol (*.proto)")

    def test_graphic_view_selection(self):
        self.frame.ui.gvSignal.selection_area.start = 0
        self.frame.ui.gvSignal.selection_area.end = 4000
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(0, 4000)

        self.assertEqual(self.frame.ui.lNumSelectedSamples.text(), "4000")

        noise_val = self.frame.ui.spinBoxNoiseTreshold.value()
        self.frame.ui.gvSignal.set_noise_clicked.emit()
        self.assertNotEqual(noise_val,
                            self.frame.ui.spinBoxNoiseTreshold.value())

        self.frame.ui.spinBoxSelectionStart.setValue(300)
        self.assertEqual(self.frame.ui.gvSignal.selection_area.start, 300)
        self.frame.ui.spinBoxSelectionEnd.setValue(6000)
        self.assertEqual(self.frame.ui.gvSignal.selection_area.end, 6000)

    def test_graphic_view_zoom_to_selection(self):
        self.frame.ui.gvSignal.context_menu_position = QPoint(0, 0)
        menu = self.frame.ui.gvSignal.create_context_menu()
        self.assertTrue(self.frame.ui.gvSignal.selection_area.is_empty)
        self.assertIsNone(
            next((action for action in menu.actions()
                  if action.text() == "Zoom selection"), None))

        self.frame.ui.gvSignal.selection_area.start = 1337
        self.frame.ui.gvSignal.selection_area.end = 4711
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(1337, 4711)

        menu = self.frame.ui.gvSignal.create_context_menu()
        self.assertFalse(self.frame.ui.gvSignal.selection_area.is_empty)
        zoom_action = next(action for action in menu.actions()
                           if action.text() == "Zoom selection")
        zoom_action.trigger()
        self.assertEqual(self.frame.ui.spinBoxSelectionStart.value(), 1337)
        self.assertEqual(self.frame.ui.spinBoxSelectionEnd.value(), 4711)

    def test_show_hide_start_end(self):
        self.assertEqual(self.frame.ui.btnShowHideStartEnd.text(), "+")
        self.frame.ui.btnShowHideStartEnd.click()
        self.assertEqual(self.frame.ui.btnShowHideStartEnd.text(), "-")

    def test_apply_to_all(self):
        logger.debug("Test apply to all")
        tests.utils_testing.short_wait()
        self.form.add_signalfile(get_path_for_data_file("ask.complex"))
        logger.debug("added new signal")
        frame2 = self.form.signal_tab_controller.signal_frames[1]

        self.frame.ui.spinBoxInfoLen.setValue(42)
        self.frame.ui.spinBoxInfoLen.editingFinished.emit()

        self.frame.ui.spinBoxCenterOffset.setValue(0.1)
        self.frame.ui.spinBoxCenterOffset.editingFinished.emit()

        self.frame.ui.spinBoxNoiseTreshold.setValue(0.5)
        self.frame.ui.spinBoxNoiseTreshold.editingFinished.emit()

        self.frame.ui.spinBoxTolerance.setValue(10)
        self.frame.ui.spinBoxTolerance.editingFinished.emit()

        self.frame.apply_to_all_clicked.emit(self.frame.signal)

        self.assertEqual(42, frame2.ui.spinBoxInfoLen.value())
        self.assertEqual(0.1, frame2.ui.spinBoxCenterOffset.value())
        self.assertEqual(0.5, frame2.ui.spinBoxNoiseTreshold.value())
        self.assertEqual(10, frame2.ui.spinBoxTolerance.value())

    def test_save_all(self):
        logger.debug("Test save all")
        tests.utils_testing.short_wait()
        self.form.add_signalfile(get_path_for_data_file("ask.complex"))
        frame2 = self.form.signal_tab_controller.signal_frames[1]

        self.frame.signal.changed = True
        self.frame.signal.filename = os.path.join(QDir.tempPath(),
                                                  "sig1.complex")

        frame2.signal.changed = True
        frame2.signal.filename = os.path.join(QDir.tempPath(), "sig2.complex")

        self.assertFalse(os.path.isfile(self.frame.signal.filename))
        self.assertFalse(os.path.isfile(frame2.signal.filename))

        self.form.signal_tab_controller.save_all()

        self.assertTrue(os.path.isfile(self.frame.signal.filename))
        self.assertTrue(os.path.isfile(frame2.signal.filename))

        os.remove(self.frame.signal.filename)
        os.remove(frame2.signal.filename)

    def test_crop_and_save_signal(self):
        self.frame.ui.gvSignal.selection_area.end = 4000
        self.frame.ui.gvSignal.selection_area.start = 1000

        self.assertEqual(self.frame.ui.gvSignal.selection_area.end, 4000)
        self.assertEqual(self.frame.ui.gvSignal.selection_area.width, 3000)
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(1000, 4000)

        self.frame.ui.gvSignal.on_crop_action_triggered()
        self.assertEqual(self.frame.signal.num_samples, 3000)
        self.assertTrue(self.frame.signal.changed)

        self.frame.signal.filename = os.path.join(QDir.tempPath(),
                                                  "sig.complex")
        if os.path.isfile(self.frame.signal.filename):
            os.remove(self.frame.signal.filename)

        self.assertFalse(os.path.isfile(self.frame.signal.filename))
        self.frame.ui.btnSaveSignal.click()
        self.form.close_signal_frame(self.frame)
        tests.utils_testing.short_wait()
        self.form.add_signalfile(os.path.join(QDir.tempPath(), "sig.complex"))
        self.assertEqual(
            self.form.signal_tab_controller.signal_frames[0].signal.
            num_samples, 3000)
        os.remove(os.path.join(QDir.tempPath(), "sig.complex"))

    def test_selection_sync(self):
        self.frame.ui.gvSignal.selection_area.end = 128440
        self.frame.ui.gvSignal.selection_area.start = 89383
        self.frame.ui.gvSignal.sel_area_start_end_changed.emit(89383, 128440)
        tests.utils_testing.short_wait()
        self.assertEqual(self.frame.proto_analyzer.messages[0].plain_bits_str,
                         self.frame.ui.txtEdProto.selected_text)
        self.frame.ui.txtEdProto.show_proto_clicked.emit()
        tests.utils_testing.short_wait()
        self.assertAlmostEqual(
            (128440 - 89383) / 1000000,
            (self.frame.ui.gvSignal.view_rect().width()) / 1000000,
            places=1)

    def test_show_demod_view(self):
        self.assertTrue(self.frame.ui.gvLegend.isHidden())
        self.frame.ui.cbSignalView.setCurrentIndex(1)
        self.assertFalse(self.frame.ui.gvLegend.isHidden())

    def test_auto_detect_button(self):
        self.assertTrue(self.frame.ui.btnAutoDetect.isChecked())
        self.frame.ui.btnAutoDetect.click()
        self.assertFalse(self.frame.ui.btnAutoDetect.isChecked())