HackRF-Treasure-Chest/Software/Universal Radio Hacker/tests/test_modulator_gui.py
2022-09-22 13:46:47 -07:00

152 lines
7.2 KiB
Python

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QDropEvent
from PyQt5.QtTest import QTest
from PyQt5.QtWidgets import QApplication
from tests.QtTestCase import QtTestCase
from urh.controller.dialogs.ModulatorDialog import ModulatorDialog
from urh.util.Logger import logger
class TestModulatorGUI(QtTestCase):
def setUp(self):
super().setUp()
self.form.ui.tabWidget.setCurrentIndex(2)
logger.debug("Preparing Modulation dialog")
self.dialog, _ = self.form.generator_tab_controller.prepare_modulation_dialog()
if self.SHOW:
self.dialog.show()
logger.debug("Initializing Modulation dialog")
self.dialog.initialize("1111")
logger.debug("Preparation success")
def test_add_remove_modulator(self):
self.assertEqual(len(self.dialog.modulators), 1)
self.dialog.ui.btnAddModulation.click()
self.assertEqual(len(self.dialog.modulators), 2)
self.dialog.ui.btnAddModulation.click()
self.assertEqual(len(self.dialog.modulators), 3)
self.app.processEvents()
self.dialog.ui.btnRemoveModulation.click()
self.assertEqual(len(self.dialog.modulators), 2)
self.dialog.ui.btnRemoveModulation.click()
self.assertEqual(len(self.dialog.modulators), 1)
self.assertFalse(self.dialog.ui.btnRemoveModulation.isEnabled())
def test_edit_carrier(self):
self.dialog.ui.doubleSpinBoxCarrierFreq.setValue(1e9)
self.dialog.ui.doubleSpinBoxCarrierFreq.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.carrier_freq_hz, 1e9)
self.dialog.ui.doubleSpinBoxCarrierPhase.setValue(100)
self.dialog.ui.doubleSpinBoxCarrierPhase.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.carrier_phase_deg, 100)
def test_edit_data(self):
bits = self.dialog.current_modulator.display_bits
self.dialog.ui.linEdDataBits.setText("10101010")
self.dialog.ui.linEdDataBits.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.display_bits, "10101010")
assert isinstance(self.dialog, ModulatorDialog)
self.dialog.restore_bits_action.trigger()
self.dialog.ui.linEdDataBits.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.display_bits, bits)
self.dialog.ui.spinBoxSamplesPerSymbol.setValue(1337)
self.dialog.ui.spinBoxSamplesPerSymbol.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.samples_per_symbol, 1337)
self.dialog.ui.spinBoxSampleRate.setValue(5e6)
self.dialog.ui.spinBoxSampleRate.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.sample_rate, 5e6)
def test_zoom(self):
self.dialog.ui.gVModulated.zoom(1.1)
self.assertIn(int(self.dialog.ui.gVModulated.view_rect().width()),
[int(self.dialog.ui.gVCarrier.view_rect().width())-1,
int(self.dialog.ui.gVCarrier.view_rect().width()),
int(self.dialog.ui.gVCarrier.view_rect().width()+1)])
self.assertIn(int(self.dialog.ui.gVModulated.view_rect().width()),
[int(self.dialog.ui.gVData.view_rect().width())-1,
int(self.dialog.ui.gVData.view_rect().width()),
int(self.dialog.ui.gVData.view_rect().width()+1)])
self.dialog.ui.gVModulated.zoom(1.01)
self.assertIn(int(self.dialog.ui.gVModulated.view_rect().width()),
[int(self.dialog.ui.gVCarrier.view_rect().width())-1,
int(self.dialog.ui.gVCarrier.view_rect().width()),
int(self.dialog.ui.gVCarrier.view_rect().width()+1)])
self.assertIn(int(self.dialog.ui.gVModulated.view_rect().width()),
[int(self.dialog.ui.gVData.view_rect().width())-1,
int(self.dialog.ui.gVData.view_rect().width()),
int(self.dialog.ui.gVData.view_rect().width()+1)])
def test_edit_modulation(self):
self.dialog.ui.comboBoxModulationType.setCurrentText("Amplitude Shift Keying (ASK)")
self.assertEqual(self.dialog.ui.labelParameters.text(), "Amplitudes in %:")
self.dialog.ui.comboBoxModulationType.setCurrentText("Frequency Shift Keying (FSK)")
self.assertEqual(self.dialog.ui.labelParameters.text(), "Frequencies in Hz:")
self.dialog.ui.comboBoxModulationType.setCurrentText("Gaussian Frequency Shift Keying (GFSK)")
self.assertEqual(self.dialog.ui.labelParameters.text(), "Frequencies in Hz:")
self.dialog.ui.spinBoxGaussBT.setValue(0.5)
self.dialog.ui.spinBoxGaussBT.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.gauss_bt, 0.5)
self.dialog.ui.spinBoxGaussFilterWidth.setValue(5)
self.dialog.ui.spinBoxGaussFilterWidth.editingFinished.emit()
self.assertEqual(self.dialog.current_modulator.gauss_filter_width, 5)
self.dialog.ui.comboBoxModulationType.setCurrentText("Phase Shift Keying (PSK)")
self.assertEqual(self.dialog.ui.labelParameters.text(), "Phases in degree:")
self.dialog.ui.comboBoxModulationType.setCurrentText("Amplitude Shift Keying (ASK)")
self.assertEqual(self.dialog.ui.labelParameters.text(), "Amplitudes in %:")
self.assertEqual(int(self.dialog.ui.lSamplesInViewModulated.text()),
int(self.dialog.ui.gVModulated.view_rect().width()))
def test_signal_view(self):
self.add_signal_to_form("esaver.complex16s")
signal = self.form.signal_tab_controller.signal_frames[0].signal
tree_view = self.dialog.ui.treeViewSignals
tree_model = tree_view.model()
item = tree_model.rootItem.children[0].children[0]
index = tree_model.createIndex(0, 0, item)
rect = tree_view.visualRect(index)
QTest.mousePress(tree_view.viewport(), Qt.LeftButton, pos=rect.center())
mime_data = tree_model.mimeData([index])
drag_drop = QDropEvent(rect.center(), Qt.CopyAction | Qt.MoveAction, mime_data, Qt.LeftButton, Qt.NoModifier)
drag_drop.acceptProposedAction()
self.dialog.ui.gVOriginalSignal.dropEvent(drag_drop)
self.assertEqual(self.dialog.ui.gVOriginalSignal.sceneRect().width(), signal.num_samples)
self.dialog.ui.cbShowDataBitsOnly.click()
self.dialog.ui.chkBoxLockSIV.click()
self.assertEqual(int(self.dialog.ui.gVOriginalSignal.view_rect().width()),
int(self.dialog.ui.gVModulated.view_rect().width()))
freq = self.dialog.ui.doubleSpinBoxCarrierFreq.value()
self.dialog.ui.btnAutoDetect.click()
self.assertNotEqual(freq, self.dialog.ui.doubleSpinBoxCarrierFreq.value())
self.dialog.ui.comboBoxModulationType.setCurrentText("Frequency Shift Keying (FSK)")
self.dialog.ui.btnAutoDetect.click()
self.assertEqual(self.dialog.ui.lCurrentSearchResult.text(), "1")
self.dialog.ui.btnSearchNext.click()
self.assertEqual(self.dialog.ui.lCurrentSearchResult.text(), "2")
self.dialog.ui.btnSearchPrev.click()
self.assertEqual(self.dialog.ui.lCurrentSearchResult.text(), "1")