diff --git a/src/native/QmlNet/QmlNet/qml/QCommon.cpp b/src/native/QmlNet/QmlNet/qml/QCommon.cpp index 3f6ed15e..b3666b5f 100644 --- a/src/native/QmlNet/QmlNet/qml/QCommon.cpp +++ b/src/native/QmlNet/QmlNet/qml/QCommon.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -6,7 +7,11 @@ extern "C" { Q_DECL_EXPORT bool qt_putenv(LPCSTR name, LPCSTR value) { - return qputenv(name, value); + if(value == nullptr) { + return qunsetenv(name); + } else { + return qputenv(name, value); + } } Q_DECL_EXPORT QmlNetStringContainer* qt_getenv(LPCSTR name) @@ -19,4 +24,9 @@ Q_DECL_EXPORT QmlNetStringContainer* qt_getenv(LPCSTR name) return createString(string); } +Q_DECL_EXPORT QmlNetStringContainer* qt_version() { + QString version(qVersion()); + return createString(version); +} + } diff --git a/src/net/Qml.Net.Tests/Qml/CommonTests.cs b/src/net/Qml.Net.Tests/Qml/CommonTests.cs new file mode 100644 index 00000000..de34c1c2 --- /dev/null +++ b/src/net/Qml.Net.Tests/Qml/CommonTests.cs @@ -0,0 +1,29 @@ +using System; +using FluentAssertions; +using Xunit; + +namespace Qml.Net.Tests.Qml +{ + public class CommonTests + { + [Fact] + public void Can_put_and_get_env() + { + var envName = Guid.NewGuid().ToString().Replace("-", ""); + Qt.GetEnv(envName).Should().BeNull(); + Qt.PutEnv(envName, ""); + Qt.GetEnv(envName).Should().BeEmpty(); + Qt.PutEnv(envName, "TEST"); + Qt.GetEnv(envName).Should().Be("TEST"); + Qt.PutEnv(envName, null); + Qt.GetEnv(envName).Should().BeNull(); + } + + [Fact] + public void Can_get_qt_version() + { + var version = Qt.GetQtVersion(); + version.Major.Should().Be(5); + } + } +} \ No newline at end of file diff --git a/src/net/Qml.Net/Qt.cs b/src/net/Qml.Net/Qt.cs index 625a5c76..2acc3bca 100644 --- a/src/net/Qml.Net/Qt.cs +++ b/src/net/Qml.Net/Qt.cs @@ -17,7 +17,12 @@ namespace Qml.Net public static string GetEnv(string name) { return Utilities.ContainerToString(Interop.QtInterop.GetEnv(name)); - } + } + + public static Version GetQtVersion() + { + return Version.Parse(Utilities.ContainerToString(Interop.QtInterop.QtVersion())); + } } internal interface IQtInterop @@ -26,5 +31,7 @@ namespace Qml.Net bool PutEnv([MarshalAs(UnmanagedType.LPStr), CallerFree]string name, [MarshalAs(UnmanagedType.LPStr), CallerFree]string value); [NativeSymbol(Entrypoint = "qt_getenv")] IntPtr GetEnv(string name); + [NativeSymbol(Entrypoint = "qt_version")] + IntPtr QtVersion(); } }