void TestQgsProject::testPathResolver() { // Test resolver with a non existing file path QgsPathResolver resolverLegacy( QStringLiteral( "/home/qgis/test.qgs" ) ); QCOMPARE( resolverLegacy.readPath( QString() ), QString() ); QCOMPARE( resolverLegacy.writePath( QString() ), QString() ); QCOMPARE( resolverLegacy.writePath( "/home/qgis/file1.txt" ), QString( "./file1.txt" ) ); QCOMPARE( resolverLegacy.writePath( "/home/qgis/subdir/file1.txt" ), QString( "./subdir/file1.txt" ) ); QCOMPARE( resolverLegacy.writePath( "/home/file1.txt" ), QString( "../file1.txt" ) ); QCOMPARE( resolverLegacy.readPath( "./file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QCOMPARE( resolverLegacy.readPath( "./subdir/file1.txt" ), QString( "/home/qgis/subdir/file1.txt" ) ); QCOMPARE( resolverLegacy.readPath( "../file1.txt" ), QString( "/home/file1.txt" ) ); QCOMPARE( resolverLegacy.readPath( "/home/qgis/file1.txt" ), QString( "/home/qgis/file1.txt" ) ); // Test resolver with existing file path QTemporaryDir tmpDir; QString tmpDirName = tmpDir.path(); QDir dir( tmpDirName ); dir.mkpath( tmpDirName + "/home/qgis/" ); QgsPathResolver resolverRel( QString( tmpDirName + "/home/qgis/test.qgs" ) ); QCOMPARE( resolverRel.readPath( QString() ), QString() ); QCOMPARE( resolverRel.writePath( QString() ), QString() ); QCOMPARE( resolverRel.writePath( tmpDirName + "/home/qgis/file1.txt" ), QString( "./file1.txt" ) ); QCOMPARE( resolverRel.writePath( tmpDirName + "/home/qgis/subdir/file1.txt" ), QString( "./subdir/file1.txt" ) ); QCOMPARE( resolverRel.writePath( tmpDirName + "/home/file1.txt" ), QString( "../file1.txt" ) ); QCOMPARE( resolverRel.readPath( "./file1.txt" ), QString( tmpDirName + "/home/qgis/file1.txt" ) ); QCOMPARE( resolverRel.readPath( "./subdir/file1.txt" ), QString( tmpDirName + "/home/qgis/subdir/file1.txt" ) ); QCOMPARE( resolverRel.readPath( "../file1.txt" ), QString( tmpDirName + "/home/file1.txt" ) ); QCOMPARE( resolverRel.readPath( tmpDirName + "/home/qgis/file1.txt" ), QString( tmpDirName + "/home/qgis/file1.txt" ) ); // test older style relative path - file must exist for this to work QTemporaryFile tmpFile; tmpFile.open(); // fileName is not available until we open the file QString tmpName = tmpFile.fileName(); tmpFile.close(); QgsPathResolver tempRel( tmpName ); QFileInfo fi( tmpName ); QFile testFile( fi.path() + QStringLiteral( "/file1.txt" ) ); QVERIFY( testFile.open( QIODevice::WriteOnly | QIODevice::Text ) ); testFile.close(); QVERIFY( QFile::exists( fi.path() + QStringLiteral( "/file1.txt" ) ) ); QCOMPARE( tempRel.readPath( "file1.txt" ), fi.path() + QStringLiteral( "/file1.txt" ) ); QgsPathResolver resolverAbs; QCOMPARE( resolverAbs.writePath( "/home/qgis/file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QCOMPARE( resolverAbs.readPath( "/home/qgis/file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QCOMPARE( resolverAbs.readPath( "./file1.txt" ), QString( "./file1.txt" ) ); // TODO: test non-canonical paths - there are inconsistencies in the implementation // e.g. base filename "/home/qgis/../test.qgs" resolving "/home/qgis/../file1.txt" back and forth }
void TestQgsProject::testPathResolver() { QgsPathResolver resolverRel( QStringLiteral( "/home/qgis/test.qgs" ) ); QCOMPARE( resolverRel.writePath( "/home/qgis/file1.txt" ), QString( "./file1.txt" ) ); QCOMPARE( resolverRel.writePath( "/home/qgis/subdir/file1.txt" ), QString( "./subdir/file1.txt" ) ); QCOMPARE( resolverRel.writePath( "/home/file1.txt" ), QString( "../file1.txt" ) ); QCOMPARE( resolverRel.readPath( "./file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QCOMPARE( resolverRel.readPath( "./subdir/file1.txt" ), QString( "/home/qgis/subdir/file1.txt" ) ); QCOMPARE( resolverRel.readPath( "../file1.txt" ), QString( "/home/file1.txt" ) ); QCOMPARE( resolverRel.readPath( "/home/qgis/file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QgsPathResolver resolverAbs; QCOMPARE( resolverAbs.writePath( "/home/qgis/file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QCOMPARE( resolverAbs.readPath( "/home/qgis/file1.txt" ), QString( "/home/qgis/file1.txt" ) ); QCOMPARE( resolverAbs.readPath( "./file1.txt" ), QString( "./file1.txt" ) ); // TODO: test non-canonical paths - there are inconsistencies in the implementation // e.g. base filename "/home/qgis/../test.qgs" resolving "/home/qgis/../file1.txt" back and forth }