def test_comment_char(self): # Check to see if the use of the comment # characters works data = "Junk\n" + \ "CAnchor\n" + \ " Z 11, 22 344, Test 1e65\n" + \ " B 4 Stuff\n" + \ " $ Anchor\n" + \ " Q 1, 2 34, Test 1e65\n" + \ " B 4 Stuff\n" + \ "Anchor\n" + \ " A 1, 2 34, Test 1e65\n" + \ " B 4 Stuff\n" + \ "Anchor\n" + \ " C 77 False NaN 333.444\n" + \ " 1,2,3,4,5\n" + \ " Inf 1.#QNAN -1.#IND\n" outfile = open(self.filename, 'w') outfile.write(data) outfile.close() # Test full line comments gen = FileParser(full_line_comment_char="C") gen.set_file(self.filename) gen.set_delimiters(' ') gen.mark_anchor('Anchor') val = gen.transfer_var(1, 1) self.assertEqual(val, 'A') # Test end of line comments also gen = FileParser(full_line_comment_char="C", end_of_line_comment_char="$") gen.set_file(self.filename) gen.set_delimiters(' ') gen.mark_anchor('Anchor') val = gen.transfer_var(1, 1) self.assertEqual(val, 'A')
def test_output_parse_same_anchors(self): data = "CQUAD4 1 3.456\n" + \ "CQUAD4 2 4.123\n" + \ "CQUAD4 3 7.222\n" + \ "CQUAD4 4\n" outfile = open(self.filename, 'w') outfile.write(data) outfile.close() gen = FileParser() gen.set_file(self.filename) gen.set_delimiters(' ') gen.mark_anchor('CQUAD4') val = gen.transfer_var(0, 3) self.assertEqual(val, 3.456) gen.mark_anchor('CQUAD4') val = gen.transfer_var(0, 3) self.assertEqual(val, 4.123) gen.mark_anchor('CQUAD4', 2) val = gen.transfer_var(0, 2) self.assertEqual(val, 4) gen.reset_anchor() gen.mark_anchor('CQUAD4', -1) val = gen.transfer_var(0, 2) self.assertEqual(val, 4) gen.mark_anchor('CQUAD4', -1) val = gen.transfer_var(0, 3) self.assertEqual(val, 7.222) gen.mark_anchor('CQUAD4', -2) val = gen.transfer_var(0, 3) self.assertEqual(val, 4.123)
def test_more_delims(self): data = "anchor,1.0,2.0\n" + \ "abc=123.456\n" + \ "c=1,2,Word,6\n" + \ "d=C:/abc/def,a+b*c^2,(%#%),!true\n" + \ "a^33 1.#QNAN^#$%^" outfile = open(self.filename, 'w') outfile.write(data) outfile.close() op = FileParser() op.set_file(self.filename) olddelims = op.delimiter op.set_delimiters(' \t,=') op.mark_anchor('anchor') val = op.transfer_var(0, 1) self.assertEqual(val, 'anchor') val = op.transfer_var(0, 2) self.assertEqual(val, 1.0) val = op.transfer_var(1, 1) self.assertEqual(val, 'abc') val = op.transfer_var(1, 2) self.assertEqual(val, 123.456) val = op.transfer_var(2, 4) self.assertEqual(val, 'Word') val = op.transfer_var(2, 5) self.assertEqual(val, 6) val = op.transfer_var(3, 2) self.assertEqual(val, 'C:/abc/def') val = op.transfer_var(3, 3) self.assertEqual(val, 'a+b*c^2') val = op.transfer_var(3, 4) self.assertEqual(val, '(%#%)') val = op.transfer_var(3, 5) self.assertEqual(val, '!true') op.set_delimiters(' \t^') val = op.transfer_var(4, 1) self.assertEqual(val, 'a') val = op.transfer_var(4, 2) self.assertEqual(val, 33) val = op.transfer_var(4, 3) self.assertEqual(isnan(val), True) val = op.transfer_var(4, 4) self.assertEqual(val, '#$%')
def test_output_parse(self): data = "Junk\n" + \ "Anchor\n" + \ " A 1, 2 34, Test 1e65\n" + \ " B 4 Stuff\n" + \ "Anchor\n" + \ " C 77 False NaN 333.444\n" + \ " 1,2,3,4,5\n" + \ " Inf 1.#QNAN -1.#IND\n" outfile = open(self.filename, 'w') outfile.write(data) outfile.close() gen = FileParser() gen.set_file(self.filename) gen.set_delimiters(' ') gen.mark_anchor('Anchor') val = gen.transfer_var(1, 1) self.assertEqual(val, 'A') gen.reset_anchor() val = gen.transfer_var(3, 2) self.assertEqual(val, 4) self.assertEqual(type(val), int) gen.mark_anchor('Anchor',2) val = gen.transfer_var(1, 4) self.assertEqual(isnan(val), True) val = gen.transfer_var(3, 1) self.assertEqual(isinf(val), True) val = gen.transfer_var(3, 2) self.assertEqual(isnan(val), True) val = gen.transfer_var(3, 3) self.assertEqual(isnan(val), True) val = gen.transfer_line(-1) self.assertEqual(val, ' B 4 Stuff') # Now, let's try column delimiters gen.set_delimiters('columns') gen.mark_anchor('Anchor',-1) val = gen.transfer_var(1, 8, 10) self.assertEqual(val, 'als') val = gen.transfer_var(1, 17) self.assertEqual(val, 333.444) # Test some errors try: gen.mark_anchor('C 77', 3.14) except ValueError as err: msg = "The value for occurrence must be an integer" self.assertEqual(str(err), msg) else: self.fail('ValueError expected') try: gen.mark_anchor('C 77', 0) except ValueError as err: msg = "0 is not valid for an anchor occurrence." self.assertEqual(str(err), msg) else: self.fail('ValueError expected') try: gen.mark_anchor('ZZZ') except RuntimeError as err: msg = "Could not find pattern ZZZ in output file filename.dat" self.assertEqual(str(err), msg) else: self.fail('RuntimeError expected')