From 51d70440502cbf23f331de14a84df162c764cadc Mon Sep 17 00:00:00 2001 From: qgis-bot <58983587+qgis-bot@users.noreply.github.com> Date: Tue, 22 Dec 2020 06:26:29 +0100 Subject: [PATCH] [Backport release-3_10] Fix #38473, forgetting CRS in a new project (#40707) * Fix #38473, forgetting CRS in a new project --- src/core/qgsproject.cpp | 1 + tests/src/core/testqgsproject.cpp | 34 +++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/core/qgsproject.cpp b/src/core/qgsproject.cpp index 8a89430a9ce..803140c009e 100644 --- a/src/core/qgsproject.cpp +++ b/src/core/qgsproject.cpp @@ -730,6 +730,7 @@ void QgsProject::clear() mDirty = false; mTrustLayerMetadata = false; mCustomVariables.clear(); + mCrs = QgsCoordinateReferenceSystem(); mMetadata = QgsProjectMetadata(); if ( !settings.value( QStringLiteral( "projects/anonymize_new_projects" ), false, QgsSettings::Core ).toBool() ) { diff --git a/tests/src/core/testqgsproject.cpp b/tests/src/core/testqgsproject.cpp index ab090b5f5b8..104720769dd 100644 --- a/tests/src/core/testqgsproject.cpp +++ b/tests/src/core/testqgsproject.cpp @@ -48,6 +48,7 @@ class TestQgsProject : public QObject void testReadFlags(); void testSetGetCrs(); void testEmbeddedLayerGroupFromQgz(); + void testCrsValidAfterReadingProjectFile(); }; void TestQgsProject::init() @@ -568,9 +569,38 @@ void TestQgsProject::testSetGetCrs() #else QCOMPARE( p.ellipsoid(), QStringLiteral( "bessel" ) ); #endif +} - crsChangedSpy.clear(); - ellipsoidChangedSpy.clear(); +void TestQgsProject::testCrsValidAfterReadingProjectFile() +{ + QgsProject p; + QSignalSpy crsChangedSpy( &p, &QgsProject::crsChanged ); + + // - new project + // - set CRS tp 4326, the crs changes + // - save the project + // - clear() + // - load the project, the CRS should be 4326 + QTemporaryDir dir; + QVERIFY( dir.isValid() ); + // on mac the returned path was not canonical and the resolver failed to convert paths properly + QString dirPath = QFileInfo( dir.path() ).canonicalFilePath(); + QString projectFilename = dirPath + "/project.qgs"; + + p.setCrs( QgsCoordinateReferenceSystem::fromEpsgId( 4326 ) ); + + QCOMPARE( crsChangedSpy.count(), 1 ); + QCOMPARE( p.crs(), QgsCoordinateReferenceSystem::fromEpsgId( 4326 ) ); + + QVERIFY( p.write( projectFilename ) ); + p.clear(); + + QCOMPARE( p.crs(), QgsCoordinateReferenceSystem() ); + QCOMPARE( crsChangedSpy.count(), 1 ); + + QVERIFY( p.read( projectFilename ) ); + QCOMPARE( p.crs(), QgsCoordinateReferenceSystem::fromEpsgId( 4326 ) ); + QCOMPARE( crsChangedSpy.count(), 2 ); }