summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/packagemanagercoredata.cpp11
-rw-r--r--tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp42
2 files changed, 51 insertions, 2 deletions
diff --git a/src/libs/installer/packagemanagercoredata.cpp b/src/libs/installer/packagemanagercoredata.cpp
index 1113908bd..3249842aa 100644
--- a/src/libs/installer/packagemanagercoredata.cpp
+++ b/src/libs/installer/packagemanagercoredata.cpp
@@ -287,7 +287,10 @@ QString PackageManagerCoreData::replaceVariables(const QString &str) const
break;
res += str.mid(pos, pos1 - pos);
const QString name = str.mid(pos1 + 1, pos2 - pos1 - 1);
- res += value(name).toString();
+ const QString &strValue = value(name).toString();
+ if (strValue.isEmpty())
+ return str;
+ res += strValue;
pos = pos2 + 1;
}
res += str.mid(pos);
@@ -308,7 +311,11 @@ QByteArray PackageManagerCoreData::replaceVariables(const QByteArray &ba) const
break;
res += ba.mid(pos, pos1 - pos);
const QString name = QString::fromLocal8Bit(ba.mid(pos1 + 1, pos2 - pos1 - 1));
- res += value(name).toString().toLocal8Bit();
+
+ const QString &baValue = value(name).toString();
+ if (baValue.isEmpty())
+ return ba;
+ res += baValue.toLocal8Bit();
pos = pos2 + 1;
}
res += ba.mid(pos);
diff --git a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
index f2f397021..b2104420c 100644
--- a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
+++ b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
@@ -346,6 +346,48 @@ private slots:
QCOMPARE(core.fromNativeSeparators(path), path);
#endif
}
+
+ void testReplaceVariablesStr_data()
+ {
+ QTest::addColumn<QString>("key");
+ QTest::addColumn<QString>("value");
+ QTest::addColumn<QString>("result");
+
+ QTest::newRow("Normal variables") << "myKey" << "myValue" << "myValue";
+ QTest::newRow("Nonreplaced variables") << "myNonreplaceKey" << "@myValue1@" << "@myValue1@";
+ }
+
+ void testReplaceVariablesStr()
+ {
+ QFETCH(QString, key);
+ QFETCH(QString, value);
+ QFETCH(QString, result);
+
+ PackageManagerCore core;
+ core.setValue(key, value);
+ QCOMPARE(core.replaceVariables(value), result);
+ }
+
+ void testReplaceVariablesBytearray_data()
+ {
+ QTest::addColumn<QString>("key");
+ QTest::addColumn<QByteArray>("value");
+ QTest::addColumn<QByteArray>("result");
+
+ QTest::newRow("Normal variables") << "myKey" << QByteArray("myValue") << QByteArray("myValue");
+ QTest::newRow("Nonreplaced variables") << "myNonreplaceKey" << QByteArray("@myValue1@") << QByteArray("@myValue1@");
+ }
+
+ void testReplaceVariablesBytearray()
+ {
+ QFETCH(QString, key);
+ QFETCH(QByteArray, value);
+ QFETCH(QByteArray, result);
+
+ PackageManagerCore core;
+ core.setValue(key, value);
+ QCOMPARE(core.replaceVariables(value), result);
+ }
};