74 changes: 73 additions & 1 deletion tests/src/python/test_qgsdelimitedtextprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@


geomkey = "#geometry"
fidkey = "#fid"
tolerance = 0.000001 # Tolerance for coordinate comparisons in checkWktEqual

# Thought we could connect to messageReceived signal but doesn't seem to be available
Expand Down Expand Up @@ -99,13 +100,15 @@ def layerData( layer ):
else:
fielddata[geomkey] = "None";

fielddata[fidkey] = f.id()
id = fielddata[fields[0]]
description = fielddata[fields[1]]
fielddata['id']=id
fielddata['description']=description
if 'id' not in fields: fields.insert(0,'id')
if 'description' not in fields: fields.insert(1,'description')
data[id]=fielddata
fields.append(fidkey)
fields.append(geomkey)
return fields, data

Expand Down Expand Up @@ -259,7 +262,6 @@ def test_001_provider_defined( self ):

#START


def test_002_load_csv_file(self):
description='CSV file parsing'
filename='test.csv'
Expand All @@ -273,41 +275,47 @@ def test_002_load_csv_file(self):
'description': u'Basic unquoted record',
'data': u'Some data',
'info': u'Some info',
'#fid': 2L,
'#geometry': 'None',
},
u'2': {
'id': u'2',
'description': u'Quoted field',
'data': u'Quoted data',
'info': u'Unquoted',
'#fid': 3L,
'#geometry': 'None',
},
u'3': {
'id': u'3',
'description': u'Escaped quotes',
'data': u'Quoted "citation" data',
'info': u'Unquoted',
'#fid': 4L,
'#geometry': 'None',
},
u'4': {
'id': u'4',
'description': u'Quoted newlines',
'data': u'Line 1\nLine 2\n\nLine 4',
'info': u'No data',
'#fid': 5L,
'#geometry': 'None',
},
u'5': {
'id': u'5',
'description': u'Extra fields',
'data': u'data',
'info': u'info',
'#fid': 9L,
'#geometry': 'None',
},
u'6': {
'id': u'6',
'description': u'Missing fields',
'data': u'',
'info': u'',
'#fid': 10L,
'#geometry': 'None',
},
}
Expand All @@ -329,41 +337,47 @@ def test_003_load_whitespace(self):
'description': u'Simple_whitespace_file',
'data': u'data1',
'info': u'info1',
'#fid': 2L,
'#geometry': 'None',
},
u'2': {
'id': u'2',
'description': u'Whitespace_at_start_of_line',
'data': u'data2',
'info': u'info2',
'#fid': 3L,
'#geometry': 'None',
},
u'3': {
'id': u'3',
'description': u'Tab_whitespace',
'data': u'data3',
'info': u'info3',
'#fid': 4L,
'#geometry': 'None',
},
u'4': {
'id': u'4',
'description': u'Multiple_whitespace_characters',
'data': u'data4',
'info': u'info4',
'#fid': 5L,
'#geometry': 'None',
},
u'5': {
'id': u'5',
'description': u'Extra_fields',
'data': u'data5',
'info': u'info5',
'#fid': 6L,
'#geometry': 'None',
},
u'6': {
'id': u'6',
'description': u'Missing_fields',
'data': u'',
'info': u'',
'#fid': 7L,
'#geometry': 'None',
},
}
Expand All @@ -385,55 +399,63 @@ def test_004_quote_escape(self):
'description': u'Using pipe delimiter',
'data': u'data 1',
'info': u'info 1',
'#fid': 2L,
'#geometry': 'None',
},
u'2': {
'id': u'2',
'description': u'Using backslash escape on pipe',
'data': u'data 2 | piped',
'info': u'info2',
'#fid': 3L,
'#geometry': 'None',
},
u'3': {
'id': u'3',
'description': u'Backslash escaped newline',
'data': u'data3 \nline2 \nline3',
'info': u'info3',
'#fid': 4L,
'#geometry': 'None',
},
u'4': {
'id': u'4',
'description': u'Empty field',
'data': u'',
'info': u'info4',
'#fid': 7L,
'#geometry': 'None',
},
u'5': {
'id': u'5',
'description': u'Quoted field',
'data': u'More | piped data',
'info': u'info5',
'#fid': 8L,
'#geometry': 'None',
},
u'6': {
'id': u'6',
'description': u'Escaped quote',
'data': u'Field "citation" ',
'info': u'info6',
'#fid': 9L,
'#geometry': 'None',
},
u'7': {
'id': u'7',
'description': u'Missing fields',
'data': u'',
'info': u'',
'#fid': 10L,
'#geometry': 'None',
},
u'8': {
'id': u'8',
'description': u'Extra fields',
'data': u'data8',
'info': u'info8',
'#fid': 11L,
'#geometry': 'None',
},
}
Expand All @@ -455,41 +477,47 @@ def test_005_multiple_quote(self):
'description': u'Multiple quotes 1',
'data': u'Quoted,data1',
'info': u'info1',
'#fid': 2L,
'#geometry': 'None',
},
u'2': {
'id': u'2',
'description': u'Multiple quotes 2',
'data': u'Quoted,data2',
'info': u'info2',
'#fid': 3L,
'#geometry': 'None',
},
u'3': {
'id': u'3',
'description': u'Leading and following whitespace',
'data': u'Quoted, data3',
'info': u'info3',
'#fid': 4L,
'#geometry': 'None',
},
u'4': {
'id': u'4',
'description': u'Embedded quotes 1',
'data': u'Quoted \'\'"\'\' data4',
'info': u'info4',
'#fid': 5L,
'#geometry': 'None',
},
u'5': {
'id': u'5',
'description': u'Embedded quotes 2',
'data': u'Quoted \'""\' data5',
'info': u'info5',
'#fid': 6L,
'#geometry': 'None',
},
u'9': {
'id': u'9',
'description': u'Final record',
'data': u'date9',
'info': u'info9',
'#fid': 10L,
'#geometry': 'None',
},
}
Expand Down Expand Up @@ -517,6 +545,7 @@ def test_007_skip_lines(self):
'Col01': u'3',
'Col02': u'Less data',
'Col03': u'data3',
'#fid': 3L,
'#geometry': 'None',
},
}
Expand All @@ -538,20 +567,23 @@ def test_008_read_coordinates(self):
'description': u'Basic point',
'geom_x': u'10.0',
'geom_y': u'20',
'#fid': 2L,
'#geometry': 'POINT(10.0 20.0)',
},
u'2': {
'id': u'2',
'description': u'Integer point',
'geom_x': u'11',
'geom_y': u'22',
'#fid': 3L,
'#geometry': 'POINT(11.0 22.0)',
},
u'4': {
'id': u'4',
'description': u'Final point',
'geom_x': u'13.0',
'geom_y': u'23',
'#fid': 5L,
'#geometry': 'POINT(13.0 23.0)',
},
}
Expand All @@ -574,26 +606,31 @@ def test_009_read_wkt(self):
u'1': {
'id': u'1',
'description': u'Point wkt',
'#fid': 2L,
'#geometry': 'POINT(10.0 20.0)',
},
u'2': {
'id': u'2',
'description': u'Multipoint wkt',
'#fid': 3L,
'#geometry': 'MULTIPOINT(10.0 20.0, 11.0 21.0)',
},
u'8': {
'id': u'8',
'description': u'EWKT prefix',
'#fid': 9L,
'#geometry': 'POINT(10.0 10.0)',
},
u'9': {
'id': u'9',
'description': u'Informix prefix',
'#fid': 10L,
'#geometry': 'POINT(10.0 10.0)',
},
u'10': {
'id': u'10',
'description': u'Measure in point',
'#fid': 11L,
'#geometry': 'POINT(10.0 20.0)',
},
}
Expand All @@ -616,26 +653,31 @@ def test_010_read_wkt_point(self):
u'1': {
'id': u'1',
'description': u'Point wkt',
'#fid': 2L,
'#geometry': 'POINT(10.0 20.0)',
},
u'2': {
'id': u'2',
'description': u'Multipoint wkt',
'#fid': 3L,
'#geometry': 'MULTIPOINT(10.0 20.0, 11.0 21.0)',
},
u'8': {
'id': u'8',
'description': u'EWKT prefix',
'#fid': 9L,
'#geometry': 'POINT(10.0 10.0)',
},
u'9': {
'id': u'9',
'description': u'Informix prefix',
'#fid': 10L,
'#geometry': 'POINT(10.0 10.0)',
},
u'10': {
'id': u'10',
'description': u'Measure in point',
'#fid': 11L,
'#geometry': 'POINT(10.0 20.0)',
},
}
Expand All @@ -658,26 +700,31 @@ def test_011_read_wkt_line(self):
u'3': {
'id': u'3',
'description': u'Linestring wkt',
'#fid': 4L,
'#geometry': 'LINESTRING(10.0 20.0, 11.0 21.0)',
},
u'4': {
'id': u'4',
'description': u'Multiline string wkt',
'#fid': 5L,
'#geometry': 'MULTILINESTRING((10.0 20.0, 11.0 21.0), (20.0 30.0, 21.0 31.0))',
},
u'11': {
'id': u'11',
'description': u'Measure in line',
'#fid': 12L,
'#geometry': 'LINESTRING(10.0 20.0, 11.0 21.0)',
},
u'12': {
'id': u'12',
'description': u'Z in line',
'#fid': 13L,
'#geometry': 'LINESTRING(10.0 20.0, 11.0 21.0)',
},
u'13': {
'id': u'13',
'description': u'Measure and Z in line',
'#fid': 14L,
'#geometry': 'LINESTRING(10.0 20.0, 11.0 21.0)',
},
}
Expand All @@ -700,11 +747,13 @@ def test_012_read_wkt_polygon(self):
u'5': {
'id': u'5',
'description': u'Polygon wkt',
'#fid': 6L,
'#geometry': 'POLYGON((10.0 10.0,10.0 20.0,20.0 20.0,20.0 10.0,10.0 10.0),(14.0 14.0,14.0 16.0,16.0 16.0,14.0 14.0))',
},
u'6': {
'id': u'6',
'description': u'MultiPolygon wkt',
'#fid': 7L,
'#geometry': 'MULTIPOLYGON(((10.0 10.0,10.0 20.0,20.0 20.0,20.0 10.0,10.0 10.0),(14.0 14.0,14.0 16.0,16.0 16.0,14.0 14.0)),((30.0 30.0,30.0 35.0,35.0 35.0,30.0 30.0)))',
},
}
Expand All @@ -715,6 +764,7 @@ def test_012_read_wkt_polygon(self):
]
runTest(description,wanted,log_wanted,filename,**params)


def test_013_read_dms_xy(self):
description='Reading degrees/minutes/seconds angles'
filename='testdms.csv'
Expand All @@ -728,132 +778,151 @@ def test_013_read_dms_xy(self):
'description': u'Basic DMS string',
'lon': u'1 5 30.6',
'lat': u'35 51 20',
'#fid': 3L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'2': {
'id': u'2',
'description': u'Basic DMS string 2',
'lon': u'1 05 30.6005',
'lat': u'035 51 20',
'#fid': 4L,
'#geometry': 'POINT(1.09183347 35.85555556)',
},
u'3': {
'id': u'3',
'description': u'Basic DMS string 3',
'lon': u'1 05 30.6',
'lat': u'35 59 9.99',
'#fid': 5L,
'#geometry': 'POINT(1.09183333 35.98610833)',
},
u'4': {
'id': u'4',
'description': u'Prefix sign 1',
'lon': u'n1 05 30.6',
'lat': u'e035 51 20',
'#fid': 7L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'5': {
'id': u'5',
'description': u'Prefix sign 2',
'lon': u'N1 05 30.6',
'lat': u'E035 51 20',
'#fid': 8L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'6': {
'id': u'6',
'description': u'Prefix sign 3',
'lon': u'N 1 05 30.6',
'lat': u'E 035 51 20',
'#fid': 9L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'7': {
'id': u'7',
'description': u'Prefix sign 4',
'lon': u'S1 05 30.6',
'lat': u'W035 51 20',
'#fid': 10L,
'#geometry': 'POINT(-1.09183333 -35.85555556)',
},
u'8': {
'id': u'8',
'description': u'Prefix sign 5',
'lon': u'+1 05 30.6',
'lat': u'+035 51 20',
'#fid': 11L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'9': {
'id': u'9',
'description': u'Prefix sign 6',
'lon': u'-1 05 30.6',
'lat': u'-035 51 20',
'#fid': 12L,
'#geometry': 'POINT(-1.09183333 -35.85555556)',
},
u'10': {
'id': u'10',
'description': u'Postfix sign 1',
'lon': u'1 05 30.6n',
'lat': u'035 51 20e',
'#fid': 14L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'11': {
'id': u'11',
'description': u'Postfix sign 2',
'lon': u'1 05 30.6N',
'lat': u'035 51 20E',
'#fid': 15L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'12': {
'id': u'12',
'description': u'Postfix sign 3',
'lon': u'1 05 30.6 N',
'lat': u'035 51 20 E',
'#fid': 16L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'13': {
'id': u'13',
'description': u'Postfix sign 4',
'lon': u'1 05 30.6S',
'lat': u'035 51 20W',
'#fid': 17L,
'#geometry': 'POINT(-1.09183333 -35.85555556)',
},
u'14': {
'id': u'14',
'description': u'Postfix sign 5',
'lon': u'1 05 30.6+',
'lat': u'035 51 20+',
'#fid': 18L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'15': {
'id': u'15',
'description': u'Postfix sign 6',
'lon': u'1 05 30.6-',
'lat': u'035 51 20-',
'#fid': 19L,
'#geometry': 'POINT(-1.09183333 -35.85555556)',
},
u'16': {
'id': u'16',
'description': u'Leading and trailing blanks 1',
'lon': u' 1 05 30.6',
'lat': u'035 51 20 ',
'#fid': 21L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'17': {
'id': u'17',
'description': u'Leading and trailing blanks 2',
'lon': u' N 1 05 30.6',
'lat': u'035 51 20 E ',
'#fid': 22L,
'#geometry': 'POINT(1.09183333 35.85555556)',
},
u'18': {
'id': u'18',
'description': u'Alternative characters for D,M,S',
'lon': u'1d05m30.6s S',
'lat': u"35d51'20",
'#fid': 24L,
'#geometry': 'POINT(-1.09183333 35.85555556)',
},
u'19': {
'id': u'19',
'description': u'Degrees/minutes format',
'lon': u'1 05.23',
'lat': u'4 55.03',
'#fid': 25L,
'#geometry': 'POINT(1.08716667 4.91716667)',
},
}
Expand Down Expand Up @@ -884,6 +953,7 @@ def test_014_decimal_point(self):
'geom_y': u'20',
'other': u'30',
'text field': u'Field with , in it',
'#fid': 2L,
'#geometry': 'POINT(10.0 20.0)',
},
u'2': {
Expand All @@ -893,13 +963,15 @@ def test_014_decimal_point(self):
'geom_y': u'25.003',
'other': u'-38.55',
'text field': u'Plain text field',
'#fid': 3L,
'#geometry': 'POINT(12.0 25.003)',
},
}
log_wanted=[
]
runTest(description,wanted,log_wanted,filename,**params)


#END

if __name__ == '__main__':
Expand Down