def test_precision(self): """Test different precision""" QLocale.setDefault(QLocale(QLocale.English)) assert QLocale().decimalPoint() == '.' field = self.vl.fields()[self.vl.fields().indexFromName('double_field')] field.setPrecision(4) self._fld_checker(field)
def testFormatDistance(self): """Test formatting distances""" QLocale.setDefault(QLocale.c()) self.assertEqual(QgsDistanceArea.formatDistance(45, 3, QgsUnitTypes.DistanceMeters), '45.000 m') self.assertEqual(QgsDistanceArea.formatDistance(1300, 1, QgsUnitTypes.DistanceMeters, False), '1.3 km') self.assertEqual(QgsDistanceArea.formatDistance(.005, 1, QgsUnitTypes.DistanceMeters, False), '5.0 mm') self.assertEqual(QgsDistanceArea.formatDistance(.05, 1, QgsUnitTypes.DistanceMeters, False), '5.0 cm') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceKilometers, True), '1.500 km') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceKilometers, False), '1.500 km') self.assertEqual(QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceKilometers, True), '0.500 km') self.assertEqual(QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceKilometers, False), '500.000 m') self.assertEqual(QgsDistanceArea.formatDistance(6000, 0, QgsUnitTypes.DistanceFeet, True), '6,000 ft') self.assertEqual(QgsDistanceArea.formatDistance(6000, 3, QgsUnitTypes.DistanceFeet, False), '1.136 mi') self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceFeet, True), '300 ft') self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceFeet, False), '300 ft') self.assertEqual(QgsDistanceArea.formatDistance(3000, 0, QgsUnitTypes.DistanceYards, True), '3,000 yd') self.assertEqual(QgsDistanceArea.formatDistance(3000, 3, QgsUnitTypes.DistanceYards, False), '1.705 mi') self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceYards, True), '300 yd') self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceYards, False), '300 yd') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceMiles, True), '1.500 mi') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceMiles, False), '1.500 mi') self.assertEqual(QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceMiles, True), '0.500 mi') self.assertEqual(QgsDistanceArea.formatDistance(0.5, 0, QgsUnitTypes.DistanceMiles, False), '2,640 ft') self.assertEqual(QgsDistanceArea.formatDistance(0.5, 1, QgsUnitTypes.DistanceNauticalMiles, True), '0.5 NM') self.assertEqual(QgsDistanceArea.formatDistance(0.5, 1, QgsUnitTypes.DistanceNauticalMiles, False), '0.5 NM') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceNauticalMiles, True), '1.5 NM') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceNauticalMiles, False), '1.5 NM') self.assertEqual(QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceDegrees, True), '1.5 degrees') self.assertEqual(QgsDistanceArea.formatDistance(1.0, 1, QgsUnitTypes.DistanceDegrees, False), '1.0 degree') self.assertEqual(QgsDistanceArea.formatDistance(1.0, 1, QgsUnitTypes.DistanceUnknownUnit, False), '1.0') QLocale.setDefault(QLocale.system())
def testFormatDistance(self): """Test formatting distances""" QLocale.setDefault(QLocale.c()) self.assertEqual(QgsDistanceArea.formatDistance(45, 3, QgsUnitTypes.DistanceMeters), u"45.000 m") self.assertEqual(QgsDistanceArea.formatDistance(1300, 1, QgsUnitTypes.DistanceMeters, False), u"1.3 km") self.assertEqual(QgsDistanceArea.formatDistance(0.005, 1, QgsUnitTypes.DistanceMeters, False), u"5.0 mm") self.assertEqual(QgsDistanceArea.formatDistance(0.05, 1, QgsUnitTypes.DistanceMeters, False), u"5.0 cm") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceKilometers, True), u"1.500 km") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceKilometers, False), u"1.500 km") self.assertEqual(QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceKilometers, True), u"0.500 km") self.assertEqual(QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceKilometers, False), u"500.000 m") self.assertEqual(QgsDistanceArea.formatDistance(6000, 0, QgsUnitTypes.DistanceFeet, True), u"6,000 ft") self.assertEqual(QgsDistanceArea.formatDistance(6000, 3, QgsUnitTypes.DistanceFeet, False), u"1.136 mi") self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceFeet, True), u"300 ft") self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceFeet, False), u"300 ft") self.assertEqual(QgsDistanceArea.formatDistance(3000, 0, QgsUnitTypes.DistanceYards, True), u"3,000 yd") self.assertEqual(QgsDistanceArea.formatDistance(3000, 3, QgsUnitTypes.DistanceYards, False), u"1.705 mi") self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceYards, True), u"300 yd") self.assertEqual(QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceYards, False), u"300 yd") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceMiles, True), u"1.500 mi") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceMiles, False), u"1.500 mi") self.assertEqual(QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceMiles, True), u"0.500 mi") self.assertEqual(QgsDistanceArea.formatDistance(0.5, 0, QgsUnitTypes.DistanceMiles, False), u"2,640 ft") self.assertEqual(QgsDistanceArea.formatDistance(0.5, 1, QgsUnitTypes.DistanceNauticalMiles, True), u"0.5 NM") self.assertEqual(QgsDistanceArea.formatDistance(0.5, 1, QgsUnitTypes.DistanceNauticalMiles, False), u"0.5 NM") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceNauticalMiles, True), u"1.5 NM") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceNauticalMiles, False), u"1.5 NM") self.assertEqual(QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceDegrees, True), u"1.5 degrees") self.assertEqual(QgsDistanceArea.formatDistance(1.0, 1, QgsUnitTypes.DistanceDegrees, False), u"1.0 degree") self.assertEqual(QgsDistanceArea.formatDistance(1.0, 1, QgsUnitTypes.DistanceUnknownUnit, False), u"1.0") QLocale.setDefault(QLocale.system())
def setUpClass(cls): """Run before all tests""" QCoreApplication.setOrganizationName("QGIS_Test") QCoreApplication.setOrganizationDomain("QGIS_TestPyQgsColorScheme.com") QCoreApplication.setApplicationName("QGIS_TestPyQgsColorScheme") QgsSettings().clear() QLocale.setDefault(QLocale(QLocale.English)) start_app()
def test_precision(self): """Test different precision""" QLocale.setDefault(QLocale(QLocale.English)) assert QLocale().decimalPoint() == '.' field = self.vl.fields()[self.vl.fields().indexFromName( 'double_field')] field.setPrecision(4) self._fld_checker(field)
def setUpClass(cls): """Run before all tests""" QCoreApplication.setOrganizationName("QGIS_Test") QCoreApplication.setOrganizationDomain( "QGIS_TestQgsBookmarkManager.com") QCoreApplication.setApplicationName("QGIS_TestQgsBookmarkManager") QgsSettings().clear() QLocale.setDefault(QLocale(QLocale.English)) start_app()
def testExportFeaturesWithLocale_regression20053(self): """ Test exporting feature export with range widgets and locale different than C Regression: https://issues.qgis.org/issues/20053 - decimal separator in csv files """ source = QgsVectorLayer( "Point?field=name:string&field=cost:double&field=population:int&field=date:date", "parent", "memory") self.assertTrue(source.isValid()) fields = source.fields() feature = QgsFeature(fields, 5) feature.setGeometry(QgsGeometry(QgsPoint(5, 6))) feature.setAttributes(['Valsier Peninsula', 6.8, 198000, '2018-09-10']) exporter = QgsJsonExporter() # single feature expected = """{ "features": [ { "geometry": { "coordinates": [ 5.0, 6.0 ], "type": "Point" }, "id": 5, "properties": { "cost": 6.8, "date": "2018-09-10", "name": "Valsier Peninsula", "population": 198000 }, "type": "Feature" } ], "type": "FeatureCollection" }""" self.assertEqual(exporter.exportFeatures([feature], 2), expected) setup = QgsEditorWidgetSetup( 'Range', { 'AllowNull': True, 'Max': 2147483647, 'Min': -2147483648, 'Precision': 4, 'Step': 1, 'Style': 'SpinBox' }) source.setEditorWidgetSetup(1, setup) source.setEditorWidgetSetup(2, setup) QLocale.setDefault(QLocale('it')) exporter.setVectorLayer(source) self.assertEqual(exporter.exportFeatures([feature], 2), expected)
def testExportFeaturesWithLocale_regression20053(self): """ Test exporting feature export with range widgets and locale different than C Regression: https://issues.qgis.org/issues/20053 - decimal separator in csv files """ source = QgsVectorLayer("Point?field=name:string&field=cost:double&field=population:int&field=date:date", "parent", "memory") self.assertTrue(source.isValid()) fields = source.fields() feature = QgsFeature(fields, 5) feature.setGeometry(QgsGeometry(QgsPoint(5, 6))) feature.setAttributes(['Valsier Peninsula', 6.8, 198000, '2018-09-10']) exporter = QgsJsonExporter() # single feature expected = """{ "features": [ { "geometry": { "coordinates": [ 5.0, 6.0 ], "type": "Point" }, "id": 5, "properties": { "cost": 6.8, "date": "2018-09-10", "name": "Valsier Peninsula", "population": 198000 }, "type": "Feature" } ], "type": "FeatureCollection" }""" self.assertEqual(exporter.exportFeatures([feature], 2), expected) setup = QgsEditorWidgetSetup('Range', { 'AllowNull': True, 'Max': 2147483647, 'Min': -2147483648, 'Precision': 4, 'Step': 1, 'Style': 'SpinBox' } ) source.setEditorWidgetSetup(1, setup) source.setEditorWidgetSetup(2, setup) QLocale.setDefault(QLocale('it')) exporter.setVectorLayer(source) self.assertEqual(exporter.exportFeatures([feature], 2), expected)
def testFormatLocale(self): """Test formatting with locales that use comma as decimal separator""" QLocale.setDefault(QLocale(QLocale.Italian)) self.assertEqual( QgsCoordinateFormatter.formatY( 20, QgsCoordinateFormatter.FormatDecimalDegrees, 2), "20,00°N") self.assertEqual( QgsCoordinateFormatter.formatX( 20, QgsCoordinateFormatter.FormatDecimalDegrees, 2), "20,00°E") self.assertEqual( QgsCoordinateFormatter.formatY( 20.12345678, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 4), "20°7′24,4444″N") self.assertEqual( QgsCoordinateFormatter.formatX( 20.12345678, QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 4), "20°7′24,4444″E") # formatting x/y as pair self.assertEqual(QgsCoordinateFormatter.asPair(20, 30, 0), '20 30') self.assertEqual(QgsCoordinateFormatter.asPair(20, -30, 0), '20 -30') self.assertEqual(QgsCoordinateFormatter.asPair(20.111, 10.999, 0), '20 11') self.assertEqual(QgsCoordinateFormatter.asPair(20.111, 10.999, 2), '20,11 11,00') self.assertEqual(QgsCoordinateFormatter.asPair(20, 10, 2), '20,00 10,00') self.assertEqual(QgsCoordinateFormatter.asPair(20, -10, 2), '20,00 -10,00') self.assertEqual( QgsCoordinateFormatter.format(QgsPointXY(20.1111, 30.2111), QgsCoordinateFormatter.FormatPair, 2), '20,11 30,21') self.assertEqual( QgsCoordinateFormatter.format(QgsPointXY(20.111, 30.211), QgsCoordinateFormatter.FormatPair, 2), '20,11 30,21') self.assertEqual( QgsCoordinateFormatter.format( QgsPointXY(20.111, 30.211), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2), '20°6′39,60″E 30°12′39,60″N') self.assertEqual( QgsCoordinateFormatter.format( QgsPointXY(20.1111, 30.2111), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 2, QgsCoordinateFormatter.FlagDegreesUseStringSuffix | QgsCoordinateFormatter.FlagDegreesPadMinutesSeconds), '20°06′39,96″E 30°12′39,96″N')
def test_doubleValidatorCommaLocale(self): """Test the double with german locale On newer Qt versions QDoubleValidator with comma as decimal locales now reports the Intermediate state for values like 0.1234, but we require it to report Acceptable as we always allow dot as decimal separator even for these locales. The underling fix will likely require a refactor of QgsFieldValidator to remove the use of the QDoubleValidator class entirely. When fixed these tests should be merged back into test_qgsfieldvalidator.py """ QLocale.setDefault(QLocale(QLocale.German, QLocale.Germany)) self.assertEqual(QLocale().decimalPoint(), ',') field = self.vl.fields()[self.vl.fields().indexFromName( 'double_field')] self._fld_checker(field)
def test_representValueWithDefault(self): """ Check representValue behaves correctly when used on a layer which define default values """ dbname = os.path.join(tempfile.mkdtemp(), 'test.sqlite') con = spatialite_connect(dbname, isolation_level=None) cur = con.cursor() cur.execute("BEGIN") sql = """ CREATE TABLE test_table_default_values ( id integer primary key autoincrement, anumber INTEGER DEFAULT 123 ) """ cur.execute(sql) cur.execute("COMMIT") con.close() vl = QgsVectorLayer(dbname + '|layername=test_table_default_values', 'test_table_default_values', 'ogr') self.assertTrue(vl.isValid()) fieldFormatter = QgsFallbackFieldFormatter() QLocale.setDefault(QLocale('en')) self.assertEqual( fieldFormatter.representValue(vl, 1, {}, None, QVariant(QVariant.Int)), 'NULL') self.assertEqual(fieldFormatter.representValue(vl, 1, {}, None, 4), '4') self.assertEqual(fieldFormatter.representValue(vl, 1, {}, None, "123"), '123') # bad field index self.assertEqual(fieldFormatter.representValue(vl, 3, {}, None, 5), "")
def tearDownClass(cls): """Reset locale""" QLocale.setDefault(QLocale(QLocale.English))
def test_doubleValidatorDotLocale(self): """Test the double with english locale""" QLocale.setDefault(QLocale(QLocale.English)) assert QLocale().decimalPoint() == '.' field = self.vl.fields()[self.vl.fields().indexFromName('double_field')] self._fld_checker(field)
def test_doubleValidatorCommaLocale(self): """Test the double with german locale""" QLocale.setDefault(QLocale(QLocale.German, QLocale.Germany)) assert QLocale().decimalPoint() == ',' field = self.vl.fields()[self.vl.fields().indexFromName('double_field')] self._fld_checker(field)
""" __author__ = 'Nyall Dawson' __date__ = '03.02.2016' __copyright__ = 'Copyright 2016, The QGIS Project' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '36f115833ea6eb5d801dc458a5d3112993d25e9d' import qgis # NOQA from qgis.testing import unittest from qgis.core import QgsUnitTypes from qgis.PyQt.QtCore import QLocale # enforce C locale because the tests expect it # (decimal separators / thousand separators) QLocale.setDefault(QLocale.c()) class TestQgsUnitTypes(unittest.TestCase): def testDistanceUnitType(self): """Test QgsUnitTypes::unitType() """ expected = {QgsUnitTypes.DistanceMeters: QgsUnitTypes.Standard, QgsUnitTypes.DistanceKilometers: QgsUnitTypes.Standard, QgsUnitTypes.DistanceFeet: QgsUnitTypes.Standard, QgsUnitTypes.DistanceYards: QgsUnitTypes.Standard, QgsUnitTypes.DistanceMiles: QgsUnitTypes.Standard, QgsUnitTypes.DistanceDegrees: QgsUnitTypes.Geographic, QgsUnitTypes.DistanceCentimeters: QgsUnitTypes.Standard, QgsUnitTypes.DistanceMillimeters: QgsUnitTypes.Standard, QgsUnitTypes.DistanceUnknownUnit: QgsUnitTypes.UnknownType,
def setUp(self): super().setUp() QLocale.setDefault(QLocale(QLocale.English))
def test_representValue(self): layer = QgsVectorLayer("point?field=int:integer&field=double:double&field=long:long", "layer", "memory") self.assertTrue(layer.isValid()) QgsProject.instance().addMapLayers([layer]) fieldFormatter = QgsRangeFieldFormatter() # Precision is ignored for integers and longlongs self.assertEqual(fieldFormatter.representValue(layer, 0, {'Precision': 1}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 0, {'Precision': 1}, None, '123000'), '123,000') self.assertEqual(fieldFormatter.representValue(layer, 0, {'Precision': 1}, None, '9999999'), '9,999,999') # no scientific notation for integers! self.assertEqual(fieldFormatter.representValue(layer, 0, {'Precision': 1}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '123000'), '123,000') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '9999999'), '9,999,999') # no scientific notation for long longs! self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 1}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 1}, None, '123'), '123.0') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '123000'), '123,000.00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '0'), '0.00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '123'), '123.00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '0.123'), '0.12') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '0.127'), '0.13') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '0'), '0.000') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '0.127'), '0.127') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '1.27e-1'), '0.127') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '-123'), '-123.00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '-0.123'), '-0.12') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '-0.127'), '-0.13') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '-0.127'), '-0.127') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '-1.27e-1'), '-0.127') # Check with Italian locale QLocale.setDefault(QLocale('it')) self.assertEqual(fieldFormatter.representValue(layer, 0, {'Precision': 1}, None, '9999999'), '9.999.999') # scientific notation for integers! self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '123000'), '123.000') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '9999999'), '9.999.999') # scientific notation for long longs! self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '123000'), '123.000,00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '0'), '0,00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '123'), '123,00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '0.123'), '0,12') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '0.127'), '0,13') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '0'), '0,000') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '0.127'), '0,127') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '1.27e-1'), '0,127') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '-123'), '-123,00') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '-0.123'), '-0,12') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '-0.127'), '-0,13') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '-0.127'), '-0,127') self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 3}, None, '-1.27e-1'), '-0,127') # Check with custom locale without thousand separator custom = QLocale('en') custom.setNumberOptions(QLocale.OmitGroupSeparator) QLocale.setDefault(custom) self.assertEqual(fieldFormatter.representValue(layer, 0, {'Precision': 1}, None, '9999999'), '9999999') # scientific notation for integers! self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '123000'), '123000') self.assertEqual(fieldFormatter.representValue(layer, 2, {'Precision': 1}, None, '9999999'), '9999999') # scientific notation for long longs! self.assertEqual(fieldFormatter.representValue(layer, 1, {'Precision': 2}, None, '123000'), '123000.00') QgsProject.instance().removeAllMapLayers()
def _test(layer, is_gpkg=False): # Skip fid and precision tests offset = 1 if is_gpkg else 0 fieldFormatter = QgsFallbackFieldFormatter() QLocale.setDefault(QLocale('en')) # Precision is ignored for integers and longlongs self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, '123000'), '123,000') self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, '9999999'), '9,999,999') self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '123000'), '123,000') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '9999999'), '9,999,999') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, None), 'NULL') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123'), '123.00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, None), 'NULL') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123000'), '123,000.00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123000'), '123,000') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '0'), '0') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '0.127'), '0.127') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '1.27e-1'), '0.127') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-123'), '-123.00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-123'), '-123') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-0.127'), '-0.127') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-1.27e-1'), '-0.127') # Check with Italian locale QLocale.setDefault(QLocale('it')) self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, '9999999'), '9.999.999') # scientific notation for integers! self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '123000'), '123.000') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '9999999'), '9.999.999') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, None), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, None), 'NULL') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123000'), '123.000,00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123000'), '123.000') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '0'), '0') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123'), '123,00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '0.127'), '0,127') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '1.27e-1'), '0,127') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-123'), '-123,00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-123'), '-123') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-0.127'), '-0,127') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '-1.27e-1'), '-0,127') # Check with custom locale without thousand separator custom = QLocale('en') custom.setNumberOptions(QLocale.OmitGroupSeparator) QLocale.setDefault(custom) self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, '9999999'), '9999999') # scientific notation for integers! self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, '9999999'), '9999999') if not is_gpkg: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123000'), '123000.00000') else: self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, '123000'), '123000') # Check string self.assertEqual(fieldFormatter.representValue(layer, 3 + offset, {}, None, '123'), '123') self.assertEqual(fieldFormatter.representValue(layer, 3 + offset, {}, None, 'a string'), 'a string') self.assertEqual(fieldFormatter.representValue(layer, 3 + offset, {}, None, ''), '') self.assertEqual(fieldFormatter.representValue(layer, 3 + offset, {}, None, None), 'NULL') # Check NULLs (this is what happens in real life inside QGIS) self.assertEqual(fieldFormatter.representValue(layer, 0 + offset, {}, None, QVariant(QVariant.String)), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 1 + offset, {}, None, QVariant(QVariant.String)), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 2 + offset, {}, None, QVariant(QVariant.String)), 'NULL') self.assertEqual(fieldFormatter.representValue(layer, 3 + offset, {}, None, QVariant(QVariant.String)), 'NULL')
""" __author__ = 'Nyall Dawson' __date__ = '03.02.2016' __copyright__ = 'Copyright 2016, The QGIS Project' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '6de0160fb54baa255661a6f48c0e6facc88d3021' import qgis # NOQA from qgis.testing import unittest from qgis.core import QgsUnitTypes from qgis.PyQt.QtCore import QLocale # enforce C locale because the tests expect it # (decimal separators / thousand separators) QLocale.setDefault(QLocale.c()) class TestQgsUnitTypes(unittest.TestCase): def testDistanceUnitType(self): """Test QgsUnitTypes::unitType() """ expected = {QgsUnitTypes.DistanceMeters: QgsUnitTypes.Standard, QgsUnitTypes.DistanceKilometers: QgsUnitTypes.Standard, QgsUnitTypes.DistanceFeet: QgsUnitTypes.Standard, QgsUnitTypes.DistanceYards: QgsUnitTypes.Standard, QgsUnitTypes.DistanceMiles: QgsUnitTypes.Standard, QgsUnitTypes.DistanceDegrees: QgsUnitTypes.Geographic, QgsUnitTypes.DistanceCentimeters: QgsUnitTypes.Standard, QgsUnitTypes.DistanceMillimeters: QgsUnitTypes.Standard, QgsUnitTypes.DistanceUnknownUnit: QgsUnitTypes.UnknownType,
def testFormatDistance(self): """Test formatting distances""" QLocale.setDefault(QLocale.c()) self.assertEqual( QgsDistanceArea.formatDistance(45, 3, QgsUnitTypes.DistanceMeters), '45.000 m') self.assertEqual( QgsDistanceArea.formatDistance(1300, 1, QgsUnitTypes.DistanceMeters, False), '1.3 km') self.assertEqual( QgsDistanceArea.formatDistance(.005, 1, QgsUnitTypes.DistanceMeters, False), '5.0 mm') self.assertEqual( QgsDistanceArea.formatDistance(.05, 1, QgsUnitTypes.DistanceMeters, False), '5.0 cm') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceKilometers, True), '1.500 km') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceKilometers, False), '1.500 km') self.assertEqual( QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceKilometers, True), '0.500 km') self.assertEqual( QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceKilometers, False), '500.000 m') self.assertEqual( QgsDistanceArea.formatDistance(6000, 0, QgsUnitTypes.DistanceFeet, True), '6,000 ft') self.assertEqual( QgsDistanceArea.formatDistance(6000, 3, QgsUnitTypes.DistanceFeet, False), '1.136 mi') self.assertEqual( QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceFeet, True), '300 ft') self.assertEqual( QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceFeet, False), '300 ft') self.assertEqual( QgsDistanceArea.formatDistance(3000, 0, QgsUnitTypes.DistanceYards, True), '3,000 yd') self.assertEqual( QgsDistanceArea.formatDistance(3000, 3, QgsUnitTypes.DistanceYards, False), '1.705 mi') self.assertEqual( QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceYards, True), '300 yd') self.assertEqual( QgsDistanceArea.formatDistance(300, 0, QgsUnitTypes.DistanceYards, False), '300 yd') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceMiles, True), '1.500 mi') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 3, QgsUnitTypes.DistanceMiles, False), '1.500 mi') self.assertEqual( QgsDistanceArea.formatDistance(0.5, 3, QgsUnitTypes.DistanceMiles, True), '0.500 mi') self.assertEqual( QgsDistanceArea.formatDistance(0.5, 0, QgsUnitTypes.DistanceMiles, False), '2,640 ft') self.assertEqual( QgsDistanceArea.formatDistance(0.5, 1, QgsUnitTypes.DistanceNauticalMiles, True), '0.5 NM') self.assertEqual( QgsDistanceArea.formatDistance(0.5, 1, QgsUnitTypes.DistanceNauticalMiles, False), '0.5 NM') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceNauticalMiles, True), '1.5 NM') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceNauticalMiles, False), '1.5 NM') self.assertEqual( QgsDistanceArea.formatDistance(1.5, 1, QgsUnitTypes.DistanceDegrees, True), '1.5 degrees') self.assertEqual( QgsDistanceArea.formatDistance(1.0, 1, QgsUnitTypes.DistanceDegrees, False), '1.0 degree') self.assertEqual( QgsDistanceArea.formatDistance(1.0, 1, QgsUnitTypes.DistanceUnknownUnit, False), '1.0') QLocale.setDefault(QLocale.system())