Coverage for regtest.py : 83%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3#
4# This module contains the regression test driver for capasm
5# (c) 2020 Joachim Siebold
6#
7#
8import os
9from pathlib import Path
10from capasm.assembler import clsAssembler, capasmError
11from capasm.tools import clsLifFileCreator,binDiff, clsSymClassGenerator
13ROMTESTFILES=["rom000.asm","romsys1.asm","romsys2.asm","romsys3.asm", \
14 "rom050.asm"]
15LEX75TESTFILES=["fky75l.asm","hpilcmd.asm","phyconst.asm","riowio.asm"]
16#
17# Test binary file, the reference is in the "ref" directory below
18#
19def testBinFile(fileName):
20 fp=Path(fileName)
21 fn=fp.name
22 rn=fp.parents[0] / "ref" / fn
23 ret=binDiff.compare(fileName,str(rn))
24 if ret is None:
25 return True
26 if ret[0]!=0:
27 print(str(fileName)+": compare failed, "+str(ret[0])+" differences found")
28# print("First occurrence at {:o}".format(ret[3][0]))
29 if ret[1]!=ret[2]:
30 print(str(fileName)+": file length differs, "+str(ret[1])+" "+str(ret[2]))
31 if ret[0]==0 and (ret[1]==ret[2]):
32 return False
33 else:
34 return True
36def main():
37 os.environ["CAPASMREGRESSIONTEST"]="1"
38 testDir=Path("test")
39 a=clsAssembler()
40 l=clsLifFileCreator()
41 numTests=0
42 numFailed=0
43#
44# Run ROM tests
45#
46 for romTestfile in ROMTESTFILES:
47 srcFile=testDir / romTestfile
48 lstFile=srcFile.with_suffix(".lst")
49 binFile=srcFile.with_suffix(".bin")
51 a.assemble(str(srcFile),labelSize=7,listFileName=str(lstFile), \
52 referenceOpt=2)
53 numTests+=1
54 if testBinFile(binFile):
55 numFailed+=1
56 srcFile=None
57 lstFile=None
58 binFile=None
59#
60# Test statements not covered by rom tests
61#
62 srcFile=testDir / "missing.asm"
63 lstFile=srcFile.with_suffix(".lst")
64 binFile=srcFile.with_suffix(".bin")
65 a.assemble(str(srcFile),labelSize=7,listFileName=str(lstFile),\
66 referenceOpt=2, extendedChecks=True)
67 numTests+=1
68 if testBinFile(binFile):
69 numFailed+=1
70#
71# Test error messages
72#
73 srcFile=testDir / "bad.asm"
74 lstFile=srcFile.with_suffix(".lst")
75 a.assemble(str(srcFile),labelSize=7,listFileName=str(lstFile),\
76 referenceOpt=0, extendedChecks=True)
77#
78# TODO
79# check list file with a reference file
80# create read only file and remove it later
81#
82# Process HP-75 lex files
83#
84 lexDir=Path("lex75")
85 for lexTestFile in LEX75TESTFILES:
86 srcFile=lexDir / lexTestFile
87 lstFile=srcFile.with_suffix(".lst")
88 binFile=srcFile.with_suffix(".bin")
89 lexFile=srcFile.with_suffix(".lex")
90 a.assemble(str(srcFile),labelSize=7,machine="75")
91 if binFile.is_file():
92 l.create(str(binFile))
93#
94# TODO:
95#
96# compare binary lex file
97#
98# open nonexisting file as source file
99#
100 numTests+=1
101 try:
102 a.assemble("nonexising")
103 except capasmError as e:
104 if e.msg!="Error opening source file":
105 print("Unexpected exception message: "+e.msg)
106 numFailed+=1
107#
108# open a read only file as source file
109#
110 numTests+=1
111 try:
112 a.assemble("readonly")
113 except capasmError as e:
114 if e.msg!="Error opening source file":
115 print("Unexpected exception message: "+e.msg)
116 numFailed+=1
117#
118# open a read only file as binary object file
119#
120 numTests+=1
121 srcFile=testDir / "bad.asm"
122 try:
123 a.assemble(str(srcFile),binFileName="readonly")
124 except capasmError as e:
125 if e.msg!="Error opening object file":
126 print("Unexpected exception message: "+e.msg)
127 numFailed+=1
128#
129# open a read only file as list file
130#
131 numTests+=1
132 srcFile=testDir / "bad.asm"
133 try:
134 a.assemble(str(srcFile),listFileName="readonly")
135 except capasmError as e:
136 if e.msg!="Error opening list file":
137 print("Unexpected exception message: "+e.msg)
138 numFailed+=1
139#
140# generate a global class file
141#
142 gen=clsSymClassGenerator()
143 inf=Path("symbols") / Path("globals85.txt")
144 outf="symtest.py"
145 gen.generate(str(inf),outf)
146 os.remove(outf)
148#
149 print("{:d} of {:d} tests failed".format(numFailed,numTests))
151if __name__ == "__main__":
152 main()