mirror of
https://github.com/jopohl/urh.git
synced 2026-03-03 06:54:00 +01:00
190 lines
7.6 KiB
Python
190 lines
7.6 KiB
Python
from PyQt6.QtCore import Qt
|
|
from PyQt6.QtGui import QDropEvent
|
|
from PyQt6.QtTest import QTest
|
|
|
|
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.MouseButton.LeftButton, pos=rect.center()
|
|
)
|
|
mime_data = tree_model.mimeData([index])
|
|
drag_drop = QDropEvent(
|
|
rect.center().toPointF(),
|
|
Qt.DropAction.CopyAction | Qt.DropAction.MoveAction,
|
|
mime_data,
|
|
Qt.MouseButton.LeftButton,
|
|
Qt.KeyboardModifier.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")
|