mirror of
https://github.com/kk7ds/chirp
synced 2026-08-13 17:51:36 -04:00
Some radios like the UV17Pro lineage have fixed bank assignments by location which are not changeable. This allows us to show the banks tab so people can see that mapping, but disallow changes.
118 lines
4.5 KiB
Python
118 lines
4.5 KiB
Python
from chirp import chirp_common
|
|
from tests import base
|
|
|
|
|
|
class TestCaseBanks(base.DriverTest):
|
|
@base.requires_feature('has_bank_names')
|
|
def test_bank_names(self, testname='T'):
|
|
bm = self.radio.get_bank_model()
|
|
banks = bm.get_mappings()
|
|
|
|
for bank in banks:
|
|
self.assertIsInstance(bank.get_name(), str,
|
|
'Bank model returned non-string name')
|
|
bank.set_name(testname)
|
|
|
|
for bank in bm.get_mappings():
|
|
# We allow truncated storage of the name
|
|
self.assertTrue(
|
|
testname.lower().startswith(bank.get_name().lower()),
|
|
'Bank name %r did not stick after set_name(%r)' % (
|
|
bank.get_name(), testname))
|
|
# Bank names should not contain trailing whitespace
|
|
self.assertEqual(bank.get_name(), bank.get_name().rstrip(),
|
|
'Bank stored with trailing whitespace')
|
|
|
|
@base.requires_feature('has_bank_names')
|
|
def test_bank_names_toolong(self):
|
|
testname = "Not possibly this long"
|
|
self.test_bank_names(testname)
|
|
|
|
@base.requires_feature('has_bank_names')
|
|
def test_bank_names_no_trailing_whitespace(self):
|
|
self.test_bank_names('foo ')
|
|
|
|
@base.requires_feature('has_bank')
|
|
def test_bank_store(self):
|
|
loc = self.rf.memory_bounds[0]
|
|
mem = chirp_common.Memory()
|
|
mem.number = loc
|
|
mem.freq = self.rf.valid_bands[0][0] + 100000
|
|
|
|
# Make sure the memory is empty and we create it from scratch
|
|
mem.empty = True
|
|
self.radio.set_memory(mem)
|
|
|
|
mem.empty = False
|
|
self.radio.set_memory(mem)
|
|
|
|
model = self.radio.get_bank_model()
|
|
|
|
if isinstance(model, chirp_common.StaticBankModel):
|
|
# Nothing to test with this type
|
|
return
|
|
|
|
# If in your bank model every channel has to be tied to a bank, just
|
|
# add a variable named channelAlwaysHasBank to it and make it True
|
|
try:
|
|
channelAlwaysHasBank = model.channelAlwaysHasBank
|
|
except Exception:
|
|
channelAlwaysHasBank = False
|
|
|
|
mem_banks = model.get_memory_mappings(mem)
|
|
if channelAlwaysHasBank:
|
|
self.assertNotEqual(0, len(mem_banks),
|
|
'Freshly-created memory has no banks '
|
|
'but it should')
|
|
else:
|
|
self.assertEqual(0, len(mem_banks),
|
|
'Freshly-created memory has banks '
|
|
'and should not')
|
|
|
|
banks = model.get_mappings()
|
|
|
|
model.add_memory_to_mapping(mem, banks[0])
|
|
self.assertIn(banks[0], model.get_memory_mappings(mem),
|
|
'Memory does not claim bank after add')
|
|
self.assertIn(loc, [x.number
|
|
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),
|
|
'Memory claims bank after remove')
|
|
self.assertNotIn(loc, [x.number
|
|
for x in model.get_mapping_memories(
|
|
banks[0])],
|
|
'Bank claims memory after remove')
|
|
|
|
if not channelAlwaysHasBank:
|
|
# FIXME: We really need a standard exception for this, because
|
|
# catching Exception here papers over the likely failures from
|
|
# this going unchecked.
|
|
self.assertRaises(Exception,
|
|
model.remove_memory_from_mapping, mem, banks[0])
|
|
|
|
@base.requires_feature('has_bank_index')
|
|
def test_bank_index(self):
|
|
loc = self.rf.memory_bounds[0]
|
|
mem = chirp_common.Memory()
|
|
mem.number = loc
|
|
mem.freq = self.rf.valid_bands[0][0] + 100000
|
|
|
|
self.radio.set_memory(mem)
|
|
|
|
model = self.radio.get_bank_model()
|
|
banks = model.get_mappings()
|
|
index_bounds = model.get_index_bounds()
|
|
|
|
model.add_memory_to_mapping(mem, banks[0])
|
|
for i in range(*index_bounds):
|
|
model.set_memory_index(mem, banks[0], i)
|
|
self.assertEqual(i, model.get_memory_index(mem, banks[0]),
|
|
'Bank index not persisted')
|
|
|
|
suggested_index = model.get_next_mapping_index(banks[0])
|
|
self.assertIn(suggested_index, list(range(*index_bounds)),
|
|
'Suggested bank index not in valid range')
|