Style cleanups for tests/

This commit is contained in:
Dan Smith 2023-03-10 16:07:36 -08:00 committed by Dan Smith
parent 0f14ee5b12
commit 5ad747a0bd
10 changed files with 45 additions and 76 deletions

View File

@ -80,10 +80,7 @@ def _load_tests(loader, tests, pattern, suite=None):
subdevs = _get_sub_devices(rclass, image)
has_subdevs = subdevs != [rclass]
for index, device in enumerate(subdevs):
if isinstance(device, type):
dst = None
else:
dst = device
if not isinstance(device, type):
device = device.__class__
for case in driver_test_cases:
tc = TestAdapterMeta(

View File

@ -8,7 +8,6 @@ from chirp import bandplan_na
LOG = logging.getLogger(__name__)
class DriverTest(unittest.TestCase):
RADIO_CLASS = None
SUB_DEVICE = None
@ -139,12 +138,12 @@ class DriverTest(unittest.TestCase):
elif k == "tuning_step" and not self.rf.has_tuning_step:
continue
elif k == "rtone" and not (
a.tmode == "Tone" or
(a.tmode == "TSQL" and not self.rf.has_ctone) or
(a.tmode == "Cross" and tx_mode == "Tone") or
(a.tmode == "Cross" and rx_mode == "Tone" and
not self.rf.has_ctone)
):
a.tmode == "Tone" or
(a.tmode == "TSQL" and not self.rf.has_ctone) or
(a.tmode == "Cross" and tx_mode == "Tone") or
(a.tmode == "Cross" and rx_mode == "Tone" and
not self.rf.has_ctone)
):
continue
elif k == "ctone" and (not self.rf.has_ctone or
not (a.tmode == "TSQL" or

View File

@ -13,6 +13,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
from builtins import bytes
import struct
@ -24,10 +25,10 @@ import logging
LOG = logging.getLogger(__name__)
import sys
l = logging.getLogger()
l.level = logging.ERROR
l.addHandler(logging.StreamHandler(sys.stdout))
log = logging.getLogger()
log.level = logging.ERROR
log.addHandler(logging.StreamHandler(sys.stdout))
class FakeIcomRadio(object):
def __init__(self, radio, mapfile=None):
@ -82,24 +83,18 @@ class FakeIcomRadio(object):
break
header = bytes(struct.pack('>%sB' % self.address_fmt,
addr, size))
#LOG.debug('Header for %02x@%04x: %r' % (
# size, addr, header))
chunk = []
cs = 0
for byte in header:
chunk.extend(x for x in bytes(b'%02X' % byte))
cs += byte
#LOG.debug('Chunk so far: %r' % chunk)
for byte in self._memory[addr:addr + size]:
chunk.extend(x for x in bytes(b'%02X' % byte))
cs += byte
#LOG.debug('Chunk is %r' % chunk)
vx = ((cs ^ 0xFFFF) + 1) & 0xFF
chunk.extend(x for x in bytes(b'%02X' % vx))
self.queue(self.make_response(icf.CMD_CLONE_DAT, bytes(chunk)))
#LOG.debug('Stopping after first frame')
#break
self.queue(self.make_response(icf.CMD_CLONE_END, bytes([])))
def do_clone_in(self):
@ -118,23 +113,10 @@ class FakeIcomRadio(object):
payload_bytes = bytes([hex_to_byte(payload_hex[i:i+2])
for i in range(0, len(payload_hex), 2)])
addr, size = struct.unpack('>%sB' % self.address_fmt, payload_bytes[:header_len])
addr, size = struct.unpack(
'>%sB' % self.address_fmt, payload_bytes[:header_len])
data = payload_bytes[header_len:-1]
csum = payload_bytes[-1]
#addr_hex = payload[0:size_offset]
#size_hex = payload[size_offset:size_offset + 2]
#data_hex = payload[size_offset + 2:-2]
#csum_hex = payload[-2:]
#addr = hex_to_byte(addr_hex[0:2]) << 8 | hex_to_byte(addr_hex[2:4])
#size = hex_to_byte(size_hex)
#csum = hex_to_byte(csum_hex)
#data = []
#for i in range(0, len(data_hex), 2):
# data.append(hex_to_byte(data_hex[i:i+2]))
# csum = payload_bytes[-1]
if len(data) != size:
LOG.debug('Invalid frame size: expected %i, but got %i' % (
@ -159,16 +141,17 @@ class FakeIcomRadio(object):
def write(self, data):
"""write() to radio, so here we process requests"""
assert isinstance(data, bytes), 'Bytes required, %s received' % data.__class__
assert isinstance(
data, bytes), 'Bytes required, %s received' % data.__class__
while data.startswith(b'\xfe\xfe\xfe'):
data = data[1:]
src = data[2]
dst = data[3]
# src = data[2]
# dst = data[3]
cmd = data[4]
payload = data[5:-1]
end = data[-1]
# end = data[-1]
LOG.debug('Received command: %x' % cmd)
LOG.debug(' Full frame: %r' % data)

View File

@ -10,7 +10,7 @@ class TestCaseBanks(base.DriverTest):
for bank in banks:
self.assertIsInstance(bank.get_name(), str,
'Bank model returned non-string name')
'Bank model returned non-string name')
bank.set_name(testname)
for bank in bm.get_mappings():
@ -52,7 +52,7 @@ class TestCaseBanks(base.DriverTest):
# add a variable named channelAlwaysHasBank to it and make it True
try:
channelAlwaysHasBank = model.channelAlwaysHasBank
except:
except Exception:
channelAlwaysHasBank = False
mem_banks = model.get_memory_mappings(mem)
@ -63,7 +63,7 @@ class TestCaseBanks(base.DriverTest):
else:
self.assertEqual(0, len(mem_banks),
'Freshly-created memory has banks '
'and should not')
'and should not')
banks = model.get_mappings()
@ -74,7 +74,6 @@ class TestCaseBanks(base.DriverTest):
for x in model.get_mapping_memories(banks[0])],
'Bank does not claim memory after add')
model.remove_memory_from_mapping(mem, banks[0])
if not channelAlwaysHasBank:
self.assertNotIn(banks[0], model.get_memory_mappings(mem),
@ -89,7 +88,7 @@ class TestCaseBanks(base.DriverTest):
# catching Exception here papers over the likely failures from
# this going unchecked.
self.assertRaises(Exception,
model.remove_memory_from_mapping, mem, banks[0])
model.remove_memory_from_mapping, mem, banks[0])
@base.requires_feature('has_bank_index')
def test_bank_index(self):
@ -112,4 +111,4 @@ class TestCaseBanks(base.DriverTest):
suggested_index = model.get_next_mapping_index(banks[0])
self.assertIn(suggested_index, list(range(*index_bounds)),
'Suggested bank index not in valid range')
'Suggested bank index not in valid range')

View File

@ -52,7 +52,7 @@ class TestCaseBruteForce(base.DriverTest):
try:
self.set_and_compare(m)
except errors.UnsupportedToneError as e:
except errors.UnsupportedToneError:
# If a radio doesn't support a particular tone value,
# don't punish it
pass
@ -137,15 +137,16 @@ class TestCaseBruteForce(base.DriverTest):
m = self.get_mem()
if 'mode' in m.immutable:
self.skipTest('Test memory has immutable duplex')
def ensure_urcall(call):
l = self.radio.get_urcall_list()
l[0] = call
self.radio.set_urcall_list(l)
lst = self.radio.get_urcall_list()
lst[0] = call
self.radio.set_urcall_list(lst)
def ensure_rptcall(call):
l = self.radio.get_repeater_call_list()
l[0] = call
self.radio.set_repeater_call_list(l)
lst = self.radio.get_repeater_call_list()
lst[0] = call
self.radio.set_repeater_call_list(lst)
def freq_is_ok(freq):
for lo, hi in self.rf.valid_bands:
@ -159,8 +160,8 @@ class TestCaseBruteForce(base.DriverTest):
'Radio exposes non-standard mode')
tmp = copy.deepcopy(m)
if mode == "DV" and \
isinstance(self.radio,
chirp_common.IcomDstarSupport):
isinstance(self.radio,
chirp_common.IcomDstarSupport):
tmp = chirp_common.DVMemory()
try:
ensure_urcall(tmp.dv_urcall)

View File

@ -4,7 +4,6 @@ from unittest import mock
from chirp import chirp_common
from chirp import errors
from chirp import memmap
from tests import base
LOG = logging.getLogger(__name__)
@ -62,13 +61,14 @@ class TestCaseClone(base.DriverTest):
self.skipTest('Does not support clone')
real_time = time.time
def fake_time():
return real_time() * 1000
self.patches = []
self.use_patch(mock.patch('time.sleep'))
self.use_patch(mock.patch('time.time',
side_effect=fake_time))
side_effect=fake_time))
def _test_with_serial(self, serial):
# The base case sets us up with a file, so re-init with our serial.
@ -82,14 +82,14 @@ class TestCaseClone(base.DriverTest):
msg = ('Clone should have failed and raised an exception '
'that inherits from RadioError')
with self.assertRaises(errors.RadioError,msg=msg):
with self.assertRaises(errors.RadioError, msg=msg):
self.radio.sync_in()
msg = ('Clone should have failed and raised an exception '
'that inherits from RadioError')
with self.assertRaises(errors.RadioError, msg=msg):
self.radio.sync_out()
def test_clone_serial_error(self):
self._test_with_serial(SerialError())

View File

@ -1,6 +1,5 @@
import os
from chirp import chirp_common
from chirp.drivers import generic_csv
from chirp import import_logic
from tests import base
@ -31,8 +30,6 @@ class TestCaseCopyAll(base.DriverTest):
else:
self.skipTest('No channels with mutable freq found to use')
failures = []
for number in range(bounds[0], bounds[1]):
src_mem = self.src_radio.get_memory(number)
if src_mem.empty:
@ -42,7 +39,7 @@ class TestCaseCopyAll(base.DriverTest):
dst_mem = import_logic.import_mem(self.radio,
src_rf, src_mem,
overrides={
"number": dst_number})
"number": dst_number})
import_logic.import_bank(self.radio,
self.src_radio,
dst_mem,

View File

@ -28,7 +28,7 @@ class TestCaseDetect(base.DriverTest):
reason="requires python3.10 or higher")
@mock.patch('builtins.print')
def test_match_model_is_quiet_no_match(self, mock_print):
with self.assertNoLogs(level=logging.DEBUG) as logs:
with self.assertNoLogs(level=logging.DEBUG):
self.radio.match_model(b'', 'foo.img')
mock_print.assert_not_called()
@ -36,7 +36,7 @@ class TestCaseDetect(base.DriverTest):
reason="requires python3.10 or higher")
@mock.patch('builtins.print')
def test_match_model_is_quiet_with_match(self, mock_print):
with self.assertNoLogs(level=logging.DEBUG) as logs:
with self.assertNoLogs(level=logging.DEBUG):
with open(self.TEST_IMAGE, 'rb') as f:
self.radio.match_model(f.read(), self.TEST_IMAGE)
mock_print.assert_not_called()
mock_print.assert_not_called()

View File

@ -1,6 +1,3 @@
import sys
import unittest
from chirp import directory
from tests import load_tests

View File

@ -1,5 +1,3 @@
import pytest
from chirp import chirp_common
from chirp import errors
from tests import base
@ -50,7 +48,7 @@ class TestCaseEdges(base.DriverTest):
145000000: [145856250, 145862500],
445000000: [445856250, 445862500],
862000000: [862731250, 862737500],
}
}
m = self.get_mem()
@ -88,8 +86,6 @@ class TestCaseEdges(base.DriverTest):
break
def test_delete_memory(self):
firstband = self.rf.valid_bands[0]
testfreq = firstband[0]
for loc in range(*self.rf.memory_bounds):
m = self.radio.get_memory(loc)
if 'empty' in m.immutable:
@ -143,4 +139,4 @@ class TestCaseEdges(base.DriverTest):
m2 = self.radio.get_memory(m1.number)
self.assertEqual(m2.name.rstrip(), m2.name,
'Radio set and returned a memory with trailing '
'whitespace in the name')
'whitespace in the name')