From 7d42a4b0e925745efd7036482ab7b8c58991d71a Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 11 Oct 2016 12:54:12 +0200 Subject: [PATCH] Add test for #15188 (this branch is unaffected by the bug) --- tests/src/python/test_provider_postgres.py | 43 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/tests/src/python/test_provider_postgres.py b/tests/src/python/test_provider_postgres.py index 6c549cee9924..8b3d1ab45706 100644 --- a/tests/src/python/test_provider_postgres.py +++ b/tests/src/python/test_provider_postgres.py @@ -13,10 +13,19 @@ __revision__ = '$Format:%H$' import qgis +import psycopg2 + import os from qgis.core import NULL -from qgis.core import QgsVectorLayer, QgsFeatureRequest, QgsFeature, QgsProviderRegistry +from qgis.core import ( + QgsVectorLayer, + QgsFeatureRequest, + QgsVectorLayerImport, + QgsFeature, + QgsProviderRegistry, + NULL +) from PyQt4.QtCore import QSettings, QDate, QTime, QDateTime, QVariant from qgis.testing import (start_app, unittest @@ -43,11 +52,20 @@ def setUpClass(cls): cls.poly_vl = QgsVectorLayer(cls.dbconn + ' sslmode=disable key=\'pk\' srid=4326 type=POLYGON table="qgis_test"."some_poly_data" (geom) sql=', 'test', 'postgres') assert(cls.poly_vl.isValid()) cls.poly_provider = cls.poly_vl.dataProvider() + cls.con = psycopg2.connect(cls.dbconn) @classmethod def tearDownClass(cls): """Run after all tests""" + def execSQLCommand(self, sql): + self.assertTrue(self.con) + cur = self.con.cursor() + self.assertTrue(cur) + cur.execute(sql) + cur.close() + self.con.commit() + def enableCompiler(self): QSettings().setValue(u'/qgis/compileExpressions', True) @@ -166,6 +184,29 @@ def test_query_attribute(dbconn, query, att, val, fidval): test_query_attribute(self.dbconn, '(SELECT -1::int8 i, NULL::geometry(Point) g)', 'i', -1, 1) test_query_attribute(self.dbconn, '(SELECT -65535::int8 i, NULL::geometry(Point) g)', 'i', -65535, 1) + # See http://hub.qgis.org/issues/18155 + def testNumericPrecision(self): + uri = 'point?field=f1:int' + uri += '&field=f2:double(6,4)' + uri += '&field=f3:string(20)' + lyr = QgsVectorLayer(uri, "x", "memory") + self.assertTrue(lyr.isValid()) + f = QgsFeature(lyr.fields()) + f['f1'] = 1 + f['f2'] = 123.456 + f['f3'] = '12345678.90123456789' + lyr.dataProvider().addFeatures([f]) + uri = '%s table="qgis_test"."b18155" (g) key=\'f1\'' % (self.dbconn) + self.execSQLCommand('DROP TABLE IF EXISTS qgis_test.b18155') + err = QgsVectorLayerImport.importLayer(lyr, uri, "postgres", lyr.crs()) + self.assertEqual(err[0], QgsVectorLayerImport.NoError, + 'unexpected import error {0}'.format(err)) + lyr = QgsVectorLayer(uri, "y", "postgres") + self.assertTrue(lyr.isValid()) + f = next(lyr.getFeatures()) + self.assertEqual(f['f1'], 1) + self.assertEqual(f['f2'], 123.456) + self.assertEqual(f['f3'], '12345678.90123456789') if __name__ == '__main__': unittest.main()