mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-01 00:46:20 -05:00
Avoid crashes on debug builds when trying to write xml for more value types
This commit is contained in:
parent
4db0f5bf6c
commit
279139b4ac
@ -209,6 +209,7 @@ void QgsApplication::init( QString profileFolder )
|
||||
qRegisterMetaType<QgsAuthManager::MessageLevel>( "QgsAuthManager::MessageLevel" );
|
||||
qRegisterMetaType<QgsNetworkRequestParameters>( "QgsNetworkRequestParameters" );
|
||||
qRegisterMetaType<QgsNetworkReplyContent>( "QgsNetworkReplyContent" );
|
||||
qRegisterMetaType<QgsGeometry>( "QgsGeometry" );
|
||||
|
||||
( void ) resolvePkgPath();
|
||||
|
||||
|
@ -154,8 +154,11 @@ QDomElement QgsXmlUtils::writeVariant( const QVariant &value, QDomDocument &doc
|
||||
}
|
||||
|
||||
case QVariant::Int:
|
||||
case QVariant::UInt:
|
||||
case QVariant::Bool:
|
||||
case QVariant::Double:
|
||||
case QVariant::LongLong:
|
||||
case QVariant::ULongLong:
|
||||
case QVariant::String:
|
||||
element.setAttribute( QStringLiteral( "type" ), QVariant::typeToName( value.type() ) );
|
||||
element.setAttribute( QStringLiteral( "value" ), value.toString() );
|
||||
@ -177,6 +180,13 @@ QDomElement QgsXmlUtils::writeVariant( const QVariant &value, QDomDocument &doc
|
||||
crs.writeXml( element, doc );
|
||||
break;
|
||||
}
|
||||
else if ( value.canConvert< QgsGeometry >() )
|
||||
{
|
||||
element.setAttribute( QStringLiteral( "type" ), QStringLiteral( "QgsGeometry" ) );
|
||||
const QgsGeometry geom = value.value< QgsGeometry >();
|
||||
element.setAttribute( QStringLiteral( "value" ), geom.asWkt() );
|
||||
break;
|
||||
}
|
||||
FALLTHROUGH
|
||||
}
|
||||
|
||||
@ -200,6 +210,18 @@ QVariant QgsXmlUtils::readVariant( const QDomElement &element )
|
||||
{
|
||||
return element.attribute( QStringLiteral( "value" ) ).toInt();
|
||||
}
|
||||
else if ( type == QLatin1String( "uint" ) )
|
||||
{
|
||||
return element.attribute( QStringLiteral( "value" ) ).toUInt();
|
||||
}
|
||||
else if ( type == QLatin1String( "qlonglong" ) )
|
||||
{
|
||||
return element.attribute( QStringLiteral( "value" ) ).toLongLong();
|
||||
}
|
||||
else if ( type == QLatin1String( "qulonglong" ) )
|
||||
{
|
||||
return element.attribute( QStringLiteral( "value" ) ).toULongLong();
|
||||
}
|
||||
else if ( type == QLatin1String( "double" ) )
|
||||
{
|
||||
return element.attribute( QStringLiteral( "value" ) ).toDouble();
|
||||
@ -265,6 +287,10 @@ QVariant QgsXmlUtils::readVariant( const QDomElement &element )
|
||||
crs.readXml( element );
|
||||
return crs;
|
||||
}
|
||||
else if ( type == QLatin1String( "QgsGeometry" ) )
|
||||
{
|
||||
return QgsGeometry::fromWkt( element.attribute( "value" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
return QVariant();
|
||||
|
@ -13,9 +13,9 @@ __copyright__ = 'Copyright 2016, The QGIS Project'
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
import qgis # NOQA switch sip api
|
||||
|
||||
from qgis.core import (QgsXmlUtils,
|
||||
QgsProperty,
|
||||
QgsGeometry,
|
||||
QgsCoordinateReferenceSystem)
|
||||
|
||||
from qgis.PyQt.QtXml import QDomDocument
|
||||
@ -50,6 +50,19 @@ class TestQgsXmlUtils(unittest.TestCase):
|
||||
prop2 = QgsXmlUtils.readVariant(elem)
|
||||
self.assertEqual(my_properties, prop2)
|
||||
|
||||
def test_long(self):
|
||||
"""
|
||||
Test that maps are correctly loaded and written
|
||||
"""
|
||||
doc = QDomDocument("properties")
|
||||
|
||||
# not sure if this actually does map to a long?
|
||||
my_properties = {'a': 9223372036854775808}
|
||||
elem = QgsXmlUtils.writeVariant(my_properties, doc)
|
||||
|
||||
prop2 = QgsXmlUtils.readVariant(elem)
|
||||
self.assertEqual(my_properties, prop2)
|
||||
|
||||
def test_string(self):
|
||||
"""
|
||||
Test that maps are correctly loaded and written
|
||||
@ -160,6 +173,18 @@ class TestQgsXmlUtils(unittest.TestCase):
|
||||
crs2 = QgsXmlUtils.readVariant(elem)
|
||||
self.assertFalse(crs2.isValid())
|
||||
|
||||
def test_geom(self):
|
||||
"""
|
||||
Test that QgsGeometry values are correctly loaded and written
|
||||
"""
|
||||
doc = QDomDocument("properties")
|
||||
|
||||
g = QgsGeometry.fromWkt('Point(3 4)')
|
||||
elem = QgsXmlUtils.writeVariant(g, doc)
|
||||
|
||||
g2 = QgsXmlUtils.readVariant(elem)
|
||||
self.assertEqual(g2.asWkt(), 'Point (3 4)')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user