opbtest/opbtest/opbtestassertions.py

184 lines
5.8 KiB
Python

import functools
class OpbTestBaseAssertions():
def __init__(self, json, case):
self.jsondata = json
self.case = case
def dong(self):
print("dong")
def _tocontain(self, expected):
raise Exception("to implement in sublcass")
def _contains(self, expected):
raise Exception("to implement in sublcass")
def _getlist_to_fill(self):
raise Exception("to implement in sublcass")
def contains(self, expected):
listtofill = self._getlist_to_fill()
if listtofill is None:
self.case.fail("First setup what to check by calling other methods!")
if type(expected) is int or type(expected) is str:
return self._tocontain(expected)
if type(expected) is not list:
self.case.fail("Expected array as expected values!")
if len(expected) != len(listtofill):
self.case.fail("Given values and expected results arrays length does not match!")
self.fail_if_results(self._contains(expected))
def fail_if_results(self, results):
if len(results) > 0:
self.case.fail(
"Output dos not contain expected values: \n" + functools.reduce(lambda a, b: a + "\n" + b, results))
class OpbTestRegAssertions(OpbTestBaseAssertions):
def __init__(self, json, case, bank):
super().__init__(json, case)
self.registers = None
self.bank = bank
def torawregistername(self, register):
return int(register[1], 16)
def assertregistername(self, register):
if not register.startswith("s"):
self.case.fail("Register name should start with 's', followed with 0-F")
def reg(self, register):
self.assertregistername(register)
self.registers = [int(register[1], 16)]
return self
def regs(self, registers):
if type(registers) is not list:
self.case.fail("Expected a list of registers")
self.registers = list(map(lambda reg: self.torawregistername(reg), registers))
return self
def _getlist_to_fill(self):
return self.registers
def _tocontain(self, expected):
for register in self.registers:
result = self.case.checkReg(self.jsondata, self.bank, register, expected)
if result != "":
self.case.fail(result)
def _contains(self, expected):
results = []
for i in range(0, len(expected)):
result = self.case.checkReg(self.jsondata, self.bank, self.registers[i], expected[i])
if result != "":
results.append(result)
return results
class OpbTestIndexAssertions(OpbTestBaseAssertions):
def __init__(self, json, case, maxindex, json_index_name):
super().__init__(json, case)
self.indices = None
self.maxindex = maxindex
self.json_index_name = json_index_name
def assertindexname(self, index):
if index < 0 or index > self.maxindex:
self.case.fail("Index should be between 0 and 255, but instead was " + index)
def torawindex(self, index):
if type(index) is str:
index = int(index, 16)
self.assertindexname(index)
return index
def _index(self, index):
self.indices = [self.torawindex(index)]
return self
def _indices(self, indices):
if type(indices) is not list:
self.case.fail("Expected a list of indices")
self.indices = list(map(lambda port: self.torawindex(port), indices))
return self
def _getlist_to_fill(self):
return self.indices
def _tocontain(self, expected):
for index in self.indices:
result = self.case._check(self.json_index_name, self.jsondata, index, expected)
if result != "":
self.case.fail(result)
def _contains(self, expected):
results = []
for i in range(0, len(expected)):
result = self.case._check(self.json_index_name, self.jsondata, self.indices[i], expected[i])
if result != "":
results.append(result)
return results
class OpbTestOutputAssertions(OpbTestIndexAssertions):
def __init__(self, json, case):
super().__init__(json, case, 16 * 16, "ports_out")
def port(self, port):
return self._index(port)
def ports(self, ports):
return self._indices(ports)
class OpbTestScratchAssertions(OpbTestIndexAssertions):
def __init__(self, json, case):
super().__init__(json, case, 16 * 4, "scratchpad")
def scratchpad(self, port):
return self._index(port)
def scratchpads(self, ports):
return self._indices(ports)
class OpbTestAssertions():
def __init__(self, json, case):
self.jsondata = json
self.case = case
def port(self, port):
return OpbTestOutputAssertions(self.jsondata, self.case).port(port)
def ports(self, port):
return OpbTestOutputAssertions(self.jsondata, self.case).ports(port)
def scratchpad(self, index):
return OpbTestScratchAssertions(self.jsondata, self.case).scratchpad(index)
def scratchpads(self, indices):
return OpbTestScratchAssertions(self.jsondata, self.case).scratchpads(indices)
def regs(self, registers):
return OpbTestRegAssertions(self.jsondata, self.case, "a").regs(registers)
def reg(self, register):
return OpbTestRegAssertions(self.jsondata, self.case, "a").reg(register)
def regsa(self, registers):
return OpbTestRegAssertions(self.jsondata, self.case, "a").regs(registers)
def rega(self, register):
return OpbTestRegAssertions(self.jsondata, self.case, "a").reg(register)
def regsb(self, registers):
return OpbTestRegAssertions(self.jsondata, self.case, "b").regs(registers)
def regb(self, register):
return OpbTestRegAssertions(self.jsondata, self.case, "b").reg(register)