diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-12-21 08:46:05 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-12-22 09:40:41 +0000 |
commit | 7862e87dc3ed3f7e2e6c8de936d6e15e914a02a4 (patch) | |
tree | f4f7ed6fe3760a686ef37bd0fcb4ed93a0795456 | |
parent | b277571692eddad3fd67eb600ee68ca8381a72f4 (diff) |
qbs.Environment: Normalize key values on Windows
The names of environment variables are case-insensitive on Windows.
Convert them to upper case when handing out the environment, so that
users can count on the names being canonical.
Change-Id: Iba2ce768b7cd22270dd2d240d15fc1a78915e3a7
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r-- | src/lib/corelib/jsextensions/environmentextension.cpp | 7 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/env-normalization/env-normalization.qbs | 12 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 12 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 |
4 files changed, 30 insertions, 2 deletions
diff --git a/src/lib/corelib/jsextensions/environmentextension.cpp b/src/lib/corelib/jsextensions/environmentextension.cpp index 39a57a17b..d151957a4 100644 --- a/src/lib/corelib/jsextensions/environmentextension.cpp +++ b/src/lib/corelib/jsextensions/environmentextension.cpp @@ -41,6 +41,7 @@ #include <language/scriptengine.h> #include <logging/translator.h> +#include <tools/hostosinfo.h> #include <QtCore/qdir.h> @@ -145,8 +146,10 @@ QScriptValue EnvironmentExtension::js_currentEnv(QScriptContext *context, QScrip if (!procenv) procenv = &env; QScriptValue envObject = engine->newObject(); - for (const QString &key : procenv->keys()) - envObject.setProperty(key, QScriptValue(procenv->value(key))); + for (const QString &key : procenv->keys()) { + const QString keyName = HostOsInfo::isWindowsHost() ? key.toUpper() : key; + envObject.setProperty(keyName, QScriptValue(procenv->value(key))); + } return envObject; } diff --git a/tests/auto/blackbox/testdata/env-normalization/env-normalization.qbs b/tests/auto/blackbox/testdata/env-normalization/env-normalization.qbs new file mode 100644 index 000000000..a197208fb --- /dev/null +++ b/tests/auto/blackbox/testdata/env-normalization/env-normalization.qbs @@ -0,0 +1,12 @@ +import qbs +import qbs.Environment + +Product { + Probe { + id: dummy + property var env: Environment.currentEnv() + configure: { + console.info(JSON.stringify(env)); + } + } +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 21db45279..0fabf9058 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -4742,6 +4742,18 @@ void TestBlackbox::enableRtti() } } +void TestBlackbox::envNormalization() +{ + QDir::setCurrent(testDataDir + "/env-normalization"); + QbsRunParameters params; + params.environment.insert("myvar", "x"); + QCOMPARE(runQbs(params), 0); + if (HostOsInfo::isWindowsHost()) + QVERIFY2(m_qbsStdout.contains("\"MYVAR\":\"x\""), m_qbsStdout.constData()); + else + QVERIFY2(m_qbsStdout.contains("\"myvar\":\"x\""), m_qbsStdout.constData()); +} + void TestBlackbox::generatedArtifactAsInputToDynamicRule() { QDir::setCurrent(testDataDir + "/generated-artifact-as-input-to-dynamic-rule"); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 218c10a7a..cc21c2be9 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -83,6 +83,7 @@ private slots: void enableExceptions(); void enableExceptions_data(); void enableRtti(); + void envNormalization(); void erroneousFiles_data(); void erroneousFiles(); void errorInfo(); |