import targets
import testlib
-from testlib import assertRegexpMatches
+from testlib import assertIn, assertEqual
class OpenOcdTest(testlib.BaseTest):
def __init__(self, target):
def setup(self):
# pylint: disable=attribute-defined-outside-init
self.cli = testlib.OpenocdCli()
+ self.cli.command("halt")
+
+ def write_nops(self, count):
+ for address in range(self.target.ram, self.target.ram + 4 * count, 4):
+ # 0x13 is nop
+ self.cli.command("mww 0x%x 0x13" % address)
class RegTest(OpenOcdTest):
def test(self):
- self.cli.command("halt")
- output = self.cli.command("reg")
- assertRegexpMatches(output, r"x18 \(/%d\): 0x[0-9A-F]+" %
- self.target.xlen)
+ self.write_nops(4)
+
+ regs = self.cli.reg()
+ assertIn("x18", regs)
+
+ self.cli.command("reg x18 0x11782")
+ self.cli.command("step 0x%x" % self.target.ram)
+
+ assertEqual(self.cli.reg("x18"), 0x11782)
+
+class StepTest(OpenOcdTest):
+ def test(self):
+ self.write_nops(4)
+
+ self.cli.command("step 0x%x" % self.target.ram)
+ for i in range(4):
+ pc = self.cli.reg("pc")
+ assertEqual(pc, self.target.ram + 4 * (i+1))
+ self.cli.command("step")
+
+class ResumeTest(OpenOcdTest):
+ def test(self):
+ self.write_nops(16)
+
+ self.cli.command("bp 0x%x 4" % (self.target.ram + 12))
+ self.cli.command("bp 0x%x 4" % (self.target.ram + 24))
+
+ self.cli.command("resume 0x%x" % self.target.ram)
+ assertEqual(self.cli.reg("pc"), self.target.ram + 12)
+
+ self.cli.command("resume")
+ assertEqual(self.cli.reg("pc"), self.target.ram + 24)
+
+ self.cli.command("resume 0x%x" % self.target.ram)
+ assertEqual(self.cli.reg("pc"), self.target.ram + 12)
def main():
parser = argparse.ArgumentParser(
parsed = parser.parse_args()
- target = parsed.target(parsed.cmd, parsed.run, parsed.isolate)
+ target = parsed.target(parsed.server_cmd, parsed.sim_cmd, parsed.isolate)
if parsed.xlen:
target.xlen = parsed.xlen
module = sys.modules[__name__]
- return testlib.run_all_tests(module, target, parsed.test, parsed.fail_fast)
+ return testlib.run_all_tests(module, target, parsed)
if __name__ == '__main__':
sys.exit(main())