Commit 891754df authored by Asitha Senanayake's avatar Asitha Senanayake
Browse files

fix(#134): improve check for AGS4 Rule 5

Lines ending with ',"' do not have the final field enclosed in
double-quotes. This update will flag such lines.

Tests added for Rule 5 as well.
parent a604d849
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -453,7 +453,7 @@ def rule_5(line, line_number=0, ags_errors={}):
    import re

    if not line.isspace():
        if not line.startswith('"') or not line.strip('\r\n').endswith('"'):
        if not line.startswith('"') or not line.strip('\r\n').endswith('"') or line.strip('\r\n').endswith('","'):
            add_error_msg(ags_errors, 'AGS Format Rule 5', line_number, '', 'Contains fields that are not enclosed in double quotes.')

        elif line.strip('"').startswith(('HEADING', 'UNIT', 'TYPE')):
+16 −0
Original line number Diff line number Diff line
@@ -114,6 +114,22 @@ def test_rule_3():
    assert error_list['AGS Format Rule 3'][0]['desc'] == 'Does not start with a valid data descriptor.'


def test_rule_5_1():
    error_list = AGS4.check_file('tests/test_files/4.1-rule5-1.ags', standard_AGS4_dictionary='python_ags4/Standard_dictionary_v4_1.ags')

    assert 'AGS Format Rule 5' in error_list.keys()
    assert error_list['AGS Format Rule 5'][0]['line'] == 5
    assert error_list['AGS Format Rule 5'][0]['desc'] == 'Contains quotes within a data field. All such quotes should be enclosed by a second quote.'


def test_rule_5_2():
    error_list = AGS4.check_file('tests/test_files/4.1-rule5-2.ags', standard_AGS4_dictionary='python_ags4/Standard_dictionary_v4_1.ags')

    assert 'AGS Format Rule 5' in error_list.keys()
    assert error_list['AGS Format Rule 5'][0]['line'] == 5
    assert error_list['AGS Format Rule 5'][0]['desc'] == 'Contains fields that are not enclosed in double quotes.'


def test_rule_6_1():
    # Check file that is not in CSV format
    error_list = AGS4.check_file('tests/test_files/4.1-rule6_1.ags')
+32 −0
Original line number Diff line number Diff line
"GROUP","PROJ"
"HEADING","PROJ_ID","PROJ_NAME","PROJ_LOC","PROJ_CLNT","PROJ_CONT","PROJ_ENG","PROJ_MEMO","FILE_FSET"
"UNIT","","","","","","","",""
"TYPE","X","X","X","X","X","X","X","X"
"DATA","XXXX","Example File","","","","","","

"GROUP","TRAN"
"HEADING","TRAN_ISNO","TRAN_DATE","TRAN_PROD","TRAN_STAT","TRAN_DESC","TRAN_AGS","TRAN_RECV","TRAN_DLIM","TRAN_RCON","TRAN_REM","FILE_FSET"
"UNIT","","yyyy-mm-dd","","","","","","","","",""
"TYPE","X","DT","X","X","X","X","X","X","X","X","X"
"DATA","1","2025-07-08","ACME","Preliminary","Undefined","4.0.4","AGS Data Format WG","|","+","Last file on line 5 not enclosed in double quotes",""

"GROUP","TYPE"
"HEADING","TYPE_TYPE","TYPE_DESC","FILE_FSET"
"UNIT","","",""
"TYPE","X","X","X"
"DATA","X","Text",""
"DATA","DT","Date Time (ISO 8601:2004)",""
"DATA","ID","Unique identifier",""

"GROUP","UNIT"
"HEADING","UNIT_UNIT","UNIT_DESC","UNIT_REM","FILE_FSET"
"UNIT","","","",""
"TYPE","X","X","X","X"
"DATA","yyyy-mm-dd","Date (ISO8601)","",""

"GROUP","LOCA"
"HEADING","LOCA_ID"
"UNIT",""
"TYPE","ID"
"DATA","BH1"
"DATA","BH2"