def test_base_fixed_continuation(log): ''' Tests that FortranReaderBase.get_source_item() logs the correct messages when there are quote mismatches across a continuation in fixed format. ''' code = ' character(4) :: cheese = "a & !\n & b' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(False, False) unit_under_test.set_format(mode) # Force sloppy fixed format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] expected = 'following character continuation: \'"\', expected None.' result = log.messages['warning'][0].split('<==')[1].lstrip() assert result == expected code = ' x=1 &\n +1 &\n -2' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(False, False) unit_under_test.set_format(mode) # Force sloppy fixed format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] expected = 'free format line continuation character `&\' detected ' \ + 'in fix format code\n 2: +1 &\n 3: -2' result = log.messages['warning'][0].split('<==')[1].lstrip() assert result == expected
def test_base_handle_multilines(log): ''' Tests that FortranReaderBase.get_source_item() logs the correct messages when there are quote discrepancies. ''' code = 'character(8) :: test = \'foo"""bar' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(True, True) unit_under_test.set_format(mode) # Force strict free format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] expected = 'multiline prefix contains odd number of "\'" characters' result = log.messages['warning'][0].split('<==')[1].lstrip() assert result == expected code = 'goo """boo\n doo""" soo \'foo' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(True, True) unit_under_test.set_format(mode) # Force strict free format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] expected = 'following character continuation: "\'", expected None.' result = log.messages['warning'][0].split('<==')[1].lstrip() assert result == expected
def test_base_free_continuation(log): ''' Tests that FortranReaderBase.get_source_item() logs the correct messages when there are quote mismatches across a continuation in free format. ''' code = 'character(4) :: "boo & que' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(True, False) unit_under_test.set_format(mode) # Force sloppy free format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['warning'] == [] assert log.messages['critical'] == [] expected = 'following character continuation: \'"\', expected None.' result = log.messages['error'][0].split('<==')[1].lstrip() assert result == expected
def test_fortranreaderbase_warning(log): ''' Tests that FortranReaderBase.warning() causes a message to be logged. ''' unit_under_test = FortranStringReader('x=1') thing = unit_under_test.get_source_item() unit_under_test.warning('Flatulent Hermit', thing) assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] expected = ' 1:x=1 <== Flatulent Hermit' result = log.messages['warning'][0].split('\n')[1] assert result == expected
def test_fortranreaderbase_info(log): ''' Tests that FortranReaderBase.info() causes a message to be logged. ''' unit_under_test = FortranStringReader('x=3') thing = unit_under_test.get_source_item() unit_under_test.info('Mighty Whirlitzer', thing) assert log.messages['debug'] == [] assert log.messages['error'] == [] assert log.messages['warning'] == [] assert log.messages['critical'] == [] expected = ' 1:x=3 <== Mighty Whirlitzer' result = log.messages['info'][0].split('\n')[1] assert result == expected
def test_fortranreaderbase_error(log): ''' Tests that FortranReaderBase.error() causes a message to be logged. ''' unit_under_test = FortranStringReader('x=2') thing = unit_under_test.get_source_item() with pytest.raises(SystemExit): unit_under_test.error('Thundering Chalmer', thing) assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['warning'] == [] assert log.messages['critical'] == [] expected = ' 1:x=2 <== Thundering Chalmer' result = log.messages['error'][0].split('\n')[1] assert result == expected
def test_base_fixed_nonlabel(log): ''' Tests that FortranReaderBase.get_source_item() logs the correct messages when there is an unexpected character in the initial 6 columns. ''' # Checks that a bad character in the first column causes an event to be # logged. code = 'w integer :: i' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(False, True) unit_under_test.set_format(mode) # Force fixed format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] result = log.messages['warning'][0].split('<==')[1].lstrip() expected = "non-space/digit char 'w' found in column 1 of fixed " \ + "Fortran code, interpreting line as comment line" assert result == expected # Checks a bad character in columns 2-6 for i in range(1, 5): code = ' ' * i + 'w' + ' ' * (5 - i) + 'integer :: i' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(False, True) unit_under_test.set_format(mode) # Force strict fixed format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] result = log.messages['warning'][0].split('<==')[1].lstrip() expected = "non-space/digit char 'w' found in column {col} " \ + "of fixed Fortran code" assert result == expected.format(col=i + 1) # Checks for a bad character, not in the first column, with "sloppy" mode # engaged. code = ' w integer :: i' log.reset() unit_under_test = FortranStringReader(code) mode = FortranFormat(False, False) unit_under_test.set_format(mode) # Force sloppy fixed format unit_under_test.get_source_item() assert log.messages['debug'] == [] assert log.messages['info'] == [] assert log.messages['error'] == [] assert log.messages['critical'] == [] expected = "non-space/digit char 'w' found in column 2 " \ + "of fixed Fortran code, switching to free format mode" result = log.messages['warning'][0].split('<==')[1].lstrip() assert result == expected