Hide keyboard shortcuts

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 

12 

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 

35 

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") 

50 

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) 

147 

148# 

149 print("{:d} of {:d} tests failed".format(numFailed,numTests)) 

150 

151if __name__ == "__main__": 

152 main()