mirror of
https://github.com/jopohl/urh.git
synced 2026-03-06 08:24:01 +01:00
159 lines
6.1 KiB
Python
159 lines
6.1 KiB
Python
import array
|
|
|
|
from tests.QtTestCase import QtTestCase
|
|
from urh.controller.widgets.ChecksumWidget import ChecksumWidget
|
|
from urh.controller.dialogs.ProtocolLabelDialog import ProtocolLabelDialog
|
|
from urh.signalprocessing.ChecksumLabel import ChecksumLabel
|
|
from urh.signalprocessing.FieldType import FieldType
|
|
from urh.signalprocessing.Message import Message
|
|
from urh.signalprocessing.MessageType import MessageType
|
|
from urh.util import util
|
|
from urh.util.GenericCRC import GenericCRC
|
|
from urh.util.WSPChecksum import WSPChecksum
|
|
|
|
|
|
class TestChecksumWidget(QtTestCase):
|
|
def test_configure_crc_ranges(self):
|
|
checksum_label = ChecksumLabel(
|
|
"checksum_label", 50, 100, 0, FieldType("crc", FieldType.Function.CHECKSUM)
|
|
)
|
|
|
|
crc_widget_controller = ChecksumWidget(
|
|
checksum_label, Message([0] * 100, 0, MessageType("test")), 0
|
|
)
|
|
model = crc_widget_controller.data_range_table_model
|
|
self.assertEqual(model.data(model.index(0, 0)), 1)
|
|
self.assertEqual(model.data(model.index(0, 1)), 50)
|
|
self.assertEqual(model.rowCount(), 1)
|
|
|
|
crc_widget_controller.ui.btnAddRange.click()
|
|
self.assertEqual(model.rowCount(), 2)
|
|
crc_widget_controller.ui.btnAddRange.click()
|
|
self.assertEqual(model.rowCount(), 3)
|
|
|
|
crc_widget_controller.ui.btnRemoveRange.click()
|
|
self.assertEqual(model.rowCount(), 2)
|
|
crc_widget_controller.ui.btnRemoveRange.click()
|
|
self.assertEqual(model.rowCount(), 1)
|
|
crc_widget_controller.ui.btnRemoveRange.click()
|
|
self.assertEqual(model.rowCount(), 1)
|
|
|
|
def test_configure_crc_parameters(self):
|
|
crc_label = ChecksumLabel(
|
|
"crc_label", 25, 120, 0, FieldType("crc", FieldType.Function.CHECKSUM)
|
|
)
|
|
|
|
crc_widget_controller = ChecksumWidget(
|
|
crc_label, Message([0] * 150, 0, MessageType("test")), 0
|
|
)
|
|
|
|
crc = GenericCRC(polynomial=list(GenericCRC.DEFAULT_POLYNOMIALS.keys())[0])
|
|
self.assertEqual(
|
|
crc_widget_controller.ui.lineEditCRCPolynomial.text(),
|
|
crc.polynomial_as_hex_str,
|
|
)
|
|
self.assertEqual(
|
|
crc_widget_controller.ui.lineEditStartValue.text(),
|
|
util.bit2hex(crc.start_value),
|
|
)
|
|
self.assertEqual(
|
|
crc_widget_controller.ui.lineEditFinalXOR.text(),
|
|
util.bit2hex(crc.final_xor),
|
|
)
|
|
|
|
crc_widget_controller.ui.comboBoxCRCFunction.setCurrentIndex(2)
|
|
crc.polynomial = crc.choose_polynomial(2)
|
|
self.assertEqual(
|
|
crc_widget_controller.ui.lineEditCRCPolynomial.text(),
|
|
crc.polynomial_as_hex_str,
|
|
)
|
|
|
|
crc_widget_controller.ui.lineEditCRCPolynomial.setText("abcde")
|
|
crc_widget_controller.ui.lineEditCRCPolynomial.editingFinished.emit()
|
|
self.assertEqual(
|
|
crc_label.checksum.polynomial, array.array("B", [1]) + util.hex2bit("abcde")
|
|
)
|
|
|
|
crc_widget_controller.ui.lineEditStartValue.setText("12345")
|
|
crc_widget_controller.ui.lineEditStartValue.editingFinished.emit()
|
|
self.assertEqual(util.bit2hex(crc_label.checksum.start_value), "12345")
|
|
|
|
crc_widget_controller.ui.lineEditFinalXOR.setText("cccaa")
|
|
crc_widget_controller.ui.lineEditFinalXOR.editingFinished.emit()
|
|
self.assertEqual(util.bit2hex(crc_label.checksum.final_xor), "cccaa")
|
|
|
|
def test_default_crcs(self):
|
|
crc_label = ChecksumLabel(
|
|
"crc_label", 25, 120, 0, FieldType("crc", FieldType.Function.CHECKSUM)
|
|
)
|
|
crc_widget_controller = ChecksumWidget(
|
|
crc_label, Message([0] * 150, 0, MessageType("test")), 0
|
|
)
|
|
|
|
default_crc_polynomials = GenericCRC.DEFAULT_POLYNOMIALS
|
|
special_crcs = ChecksumWidget.SPECIAL_CRCS
|
|
|
|
self.assertEqual(
|
|
len(default_crc_polynomials) + len(special_crcs),
|
|
crc_widget_controller.ui.comboBoxCRCFunction.count(),
|
|
)
|
|
for i, default_polynomial_name in enumerate(default_crc_polynomials):
|
|
self.assertEqual(
|
|
default_polynomial_name,
|
|
crc_widget_controller.ui.comboBoxCRCFunction.itemText(i),
|
|
)
|
|
|
|
for i, special_crc in enumerate(special_crcs):
|
|
self.assertEqual(
|
|
special_crc,
|
|
crc_widget_controller.ui.comboBoxCRCFunction.itemText(
|
|
i + len(default_crc_polynomials)
|
|
),
|
|
)
|
|
|
|
crc_widget_controller.ui.comboBoxCRCFunction.setCurrentIndex(1)
|
|
self.assertNotEqual(
|
|
crc_widget_controller.ui.comboBoxCRCFunction.currentText(), "8_standard"
|
|
)
|
|
crc_widget_controller.ui.comboBoxCRCFunction.setCurrentText("8_standard")
|
|
self.assertEqual(
|
|
crc_widget_controller.ui.comboBoxCRCFunction.currentText(), "8_standard"
|
|
)
|
|
self.assertEqual(crc_widget_controller.ui.lineEditCRCPolynomial.text(), "d5")
|
|
|
|
def test_crc_widget_in_protocol_label_dialog(self):
|
|
mt = MessageType("test")
|
|
mt.append(
|
|
ChecksumLabel(
|
|
"test_crc", 8, 16, 0, FieldType("test_crc", FieldType.Function.CHECKSUM)
|
|
)
|
|
)
|
|
|
|
self.dialog = ProtocolLabelDialog(Message([0] * 100, 0, mt), 0)
|
|
self.assertEqual(self.dialog.ui.tabWidgetAdvancedSettings.count(), 1)
|
|
self.assertEqual(
|
|
self.dialog.ui.tabWidgetAdvancedSettings.tabText(0), "test_crc"
|
|
)
|
|
|
|
def test_enocean_checksum(self):
|
|
checksum_label = ChecksumLabel(
|
|
"checksum_label", 50, 100, 0, FieldType("crc", FieldType.Function.CHECKSUM)
|
|
)
|
|
crc_widget_controller = ChecksumWidget(
|
|
checksum_label, Message([0] * 100, 0, MessageType("test")), 0
|
|
)
|
|
|
|
crc_widget_controller.ui.comboBoxCategory.setCurrentIndex(1)
|
|
self.assertEqual(
|
|
crc_widget_controller.ui.stackedWidget.currentWidget(),
|
|
crc_widget_controller.ui.page_wsp,
|
|
)
|
|
|
|
self.assertTrue(crc_widget_controller.ui.radioButtonWSPAuto.isChecked())
|
|
|
|
crc_widget_controller.ui.radioButtonWSPChecksum8.click()
|
|
|
|
self.assertEqual(
|
|
checksum_label.checksum.mode, WSPChecksum.ChecksumMode.checksum8
|
|
)
|