diff options
-rw-r--r-- | vcl/CppunitTest_vcl_blocklistparser_test.mk | 49 | ||||
-rw-r--r-- | vcl/Module_vcl.mk | 1 | ||||
-rw-r--r-- | vcl/inc/opengl/win/WinDeviceInfo.hxx | 14 | ||||
-rw-r--r-- | vcl/inc/opengl/win/blocklist_parser.hxx (renamed from vcl/opengl/win/blocklist_parser.hxx) | 8 | ||||
-rw-r--r-- | vcl/opengl/win/WinDeviceInfo.cxx | 57 | ||||
-rw-r--r-- | vcl/opengl/win/blocklist_parser.cxx | 2 | ||||
-rw-r--r-- | vcl/qa/cppunit/blocklistparsertest.cxx | 161 | ||||
-rwxr-xr-x | vcl/qa/cppunit/test_blocklist_evaluate.xml | 47 | ||||
-rwxr-xr-x | vcl/qa/cppunit/test_blocklist_parse.xml | 75 |
9 files changed, 379 insertions, 35 deletions
diff --git a/vcl/CppunitTest_vcl_blocklistparser_test.mk b/vcl/CppunitTest_vcl_blocklistparser_test.mk new file mode 100644 index 000000000000..95b75076b32b --- /dev/null +++ b/vcl/CppunitTest_vcl_blocklistparser_test.mk @@ -0,0 +1,49 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,vcl_blocklistparser_test)) + +$(eval $(call gb_CppunitTest_set_include,vcl_blocklistparser_test,\ + $$(INCLUDE) \ + -I$(SRCDIR)/vcl/inc \ +)) + +$(eval $(call gb_CppunitTest_add_exception_objects,vcl_blocklistparser_test, \ + vcl/qa/cppunit/blocklistparsertest \ +)) + +$(eval $(call gb_CppunitTest_use_externals,vcl_blocklistparser_test,\ + boost_headers \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,vcl_blocklistparser_test, \ + sal \ + test \ + unotest \ + vcl \ + $(gb_UWINAPI) \ +)) + +$(eval $(call gb_CppunitTest_use_api,vcl_blocklistparser_test,\ + udkapi \ + offapi \ +)) + +$(eval $(call gb_CppunitTest_use_ure,vcl_blocklistparser_test)) +$(eval $(call gb_CppunitTest_use_vcl,vcl_blocklistparser_test)) + +$(eval $(call gb_CppunitTest_use_components,vcl_blocklistparser_test,\ + configmgr/source/configmgr \ + i18npool/util/i18npool \ + ucb/source/core/ucb1 \ +)) + +$(eval $(call gb_CppunitTest_use_configuration,vcl_blocklistparser_test)) + +# vim: set noet sw=4 ts=4: diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk index 6a41a0b69c05..81a7276b1133 100644 --- a/vcl/Module_vcl.mk +++ b/vcl/Module_vcl.mk @@ -125,6 +125,7 @@ endif ifeq ($(OS),WNT) $(eval $(call gb_Module_add_check_targets,vcl,\ CppunitTest_vcl_timer \ + CppunitTest_vcl_blocklistparser_test \ )) endif # vim: set noet sw=4 ts=4: diff --git a/vcl/inc/opengl/win/WinDeviceInfo.hxx b/vcl/inc/opengl/win/WinDeviceInfo.hxx index 974d6b312f7d..8dcbd553dfe9 100644 --- a/vcl/inc/opengl/win/WinDeviceInfo.hxx +++ b/vcl/inc/opengl/win/WinDeviceInfo.hxx @@ -10,7 +10,10 @@ #ifndef INCLUDED_VCL_OPENGL_WIN_WINDEVICEINFO_HXX #define INCLUDED_VCL_OPENGL_WIN_WINDEVICEINFO_HXX +#include <vcl/dllapi.h> + #include "opengl/DeviceInfo.hxx" + #include <rtl/ustring.hxx> #include <vector> #include <cstdint> @@ -60,14 +63,14 @@ enum DeviceVendor { bool ParseDriverVersion(const OUString& rString, uint64_t& rVersion); -struct DriverInfo +struct VCL_DLLPUBLIC DriverInfo { DriverInfo(OperatingSystem os, const OUString& vendor, VersionComparisonOp op, uint64_t driverVersion, bool bWhiteListed = false, const char *suggestedVersion = nullptr); DriverInfo(); - ~DriverInfo(); + virtual ~DriverInfo(); OperatingSystem meOperatingSystem; uint32_t mnOperatingSystemVersion; @@ -96,7 +99,7 @@ struct DriverInfo #define GFX_DRIVER_VERSION(a,b,c,d) \ ((uint64_t(a)<<48) | (uint64_t(b)<<32) | (uint64_t(c)<<16) | uint64_t(d)) -inline uint64_t V(uint32_t a, uint32_t b, uint32_t c, uint32_t d) +inline VCL_DLLPUBLIC uint64_t V(uint32_t a, uint32_t b, uint32_t c, uint32_t d) { // We make sure every driver number is padded by 0s, this will allow us the // easiest 'compare as if decimals' approach. See ParseDriverVersion for a @@ -115,7 +118,7 @@ inline uint64_t V(uint32_t a, uint32_t b, uint32_t c, uint32_t d) } -class WinOpenGLDeviceInfo : public OpenGLDeviceInfo +class VCL_DLLPUBLIC WinOpenGLDeviceInfo : public OpenGLDeviceInfo { private: OUString maDriverVersion; @@ -204,6 +207,9 @@ public: return mnWindowsVersion; } + static bool FindBlocklistedDeviceInList(std::vector<wgl::DriverInfo>& aDeviceInfos, + OUString sDriverVersion, OUString sAdapterVendorID, + OUString sAdapterDeviceID, uint32_t nWindowsVersion); }; #endif diff --git a/vcl/opengl/win/blocklist_parser.hxx b/vcl/inc/opengl/win/blocklist_parser.hxx index bc2e2a14baa7..f30734436f22 100644 --- a/vcl/opengl/win/blocklist_parser.hxx +++ b/vcl/inc/opengl/win/blocklist_parser.hxx @@ -7,17 +7,16 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "opengl/win/WinDeviceInfo.hxx" - +#include <vcl/dllapi.h> #include <xmlreader/xmlreader.hxx> - #include <vector> +#include "opengl/win/WinDeviceInfo.hxx" class InvalidFileException { }; -class WinBlocklistParser +class VCL_DLLPUBLIC WinBlocklistParser { public: WinBlocklistParser(const OUString& rURL, std::vector<wgl::DriverInfo>& rDriverList); @@ -29,7 +28,6 @@ private: void handleList(xmlreader::XmlReader& rReader); void handleContent(xmlreader::XmlReader& rReader); - enum class BlockType { WHITELIST, diff --git a/vcl/opengl/win/WinDeviceInfo.cxx b/vcl/opengl/win/WinDeviceInfo.cxx index 798dc5862138..729368a4b05e 100644 --- a/vcl/opengl/win/WinDeviceInfo.cxx +++ b/vcl/opengl/win/WinDeviceInfo.cxx @@ -9,7 +9,7 @@ #include "opengl/win/WinDeviceInfo.hxx" -#include "blocklist_parser.hxx" +#include "opengl/win/blocklist_parser.hxx" #include <config_folders.h> #include <windows.h> @@ -441,67 +441,69 @@ private: } -bool WinOpenGLDeviceInfo::FindBlocklistedDeviceInList() +bool WinOpenGLDeviceInfo::FindBlocklistedDeviceInList(std::vector<wgl::DriverInfo>& aDeviceInfos, + OUString sDriverVersion, OUString sAdapterVendorID, + OUString sAdapterDeviceID, uint32_t nWindowsVersion) { uint64_t driverVersion; - wgl::ParseDriverVersion(maDriverVersion, driverVersion); + wgl::ParseDriverVersion(sDriverVersion, driverVersion); - wgl::OperatingSystem eOS = WindowsVersionToOperatingSystem(mnWindowsVersion); + wgl::OperatingSystem eOS = WindowsVersionToOperatingSystem(nWindowsVersion); bool match = false; uint32_t i = 0; - for (; i < maDriverInfo.size(); i++) + for (; i < aDeviceInfos.size(); i++) { - if (maDriverInfo[i].meOperatingSystem != wgl::DRIVER_OS_ALL && - maDriverInfo[i].meOperatingSystem != eOS) + if (aDeviceInfos[i].meOperatingSystem != wgl::DRIVER_OS_ALL && + aDeviceInfos[i].meOperatingSystem != eOS) { continue; } - if (maDriverInfo[i].mnOperatingSystemVersion && maDriverInfo[i].mnOperatingSystemVersion != mnWindowsVersion) + if (aDeviceInfos[i].mnOperatingSystemVersion && aDeviceInfos[i].mnOperatingSystemVersion != nWindowsVersion) { continue; } - if (!maDriverInfo[i].maAdapterVendor.equalsIgnoreAsciiCase(GetDeviceVendor(wgl::VendorAll)) && - !maDriverInfo[i].maAdapterVendor.equalsIgnoreAsciiCase(maAdapterVendorID)) + if (!aDeviceInfos[i].maAdapterVendor.equalsIgnoreAsciiCase(GetDeviceVendor(wgl::VendorAll)) && + !aDeviceInfos[i].maAdapterVendor.equalsIgnoreAsciiCase(sAdapterVendorID)) { continue; } - if (std::none_of(maDriverInfo[i].maDevices.begin(), maDriverInfo[i].maDevices.end(), compareIgnoreAsciiCase("all")) && - std::none_of(maDriverInfo[i].maDevices.begin(), maDriverInfo[i].maDevices.end(), compareIgnoreAsciiCase(maAdapterDeviceID))) + if (std::none_of(aDeviceInfos[i].maDevices.begin(), aDeviceInfos[i].maDevices.end(), compareIgnoreAsciiCase("all")) && + std::none_of(aDeviceInfos[i].maDevices.begin(), aDeviceInfos[i].maDevices.end(), compareIgnoreAsciiCase(sAdapterDeviceID))) { continue; } - switch (maDriverInfo[i].meComparisonOp) + switch (aDeviceInfos[i].meComparisonOp) { case wgl::DRIVER_LESS_THAN: - match = driverVersion < maDriverInfo[i].mnDriverVersion; + match = driverVersion < aDeviceInfos[i].mnDriverVersion; break; case wgl::DRIVER_LESS_THAN_OR_EQUAL: - match = driverVersion <= maDriverInfo[i].mnDriverVersion; + match = driverVersion <= aDeviceInfos[i].mnDriverVersion; break; case wgl::DRIVER_GREATER_THAN: - match = driverVersion > maDriverInfo[i].mnDriverVersion; + match = driverVersion > aDeviceInfos[i].mnDriverVersion; break; case wgl::DRIVER_GREATER_THAN_OR_EQUAL: - match = driverVersion >= maDriverInfo[i].mnDriverVersion; + match = driverVersion >= aDeviceInfos[i].mnDriverVersion; break; case wgl::DRIVER_EQUAL: - match = driverVersion == maDriverInfo[i].mnDriverVersion; + match = driverVersion == aDeviceInfos[i].mnDriverVersion; break; case wgl::DRIVER_NOT_EQUAL: - match = driverVersion != maDriverInfo[i].mnDriverVersion; + match = driverVersion != aDeviceInfos[i].mnDriverVersion; break; case wgl::DRIVER_BETWEEN_EXCLUSIVE: - match = driverVersion > maDriverInfo[i].mnDriverVersion && driverVersion < maDriverInfo[i].mnDriverVersionMax; + match = driverVersion > aDeviceInfos[i].mnDriverVersion && driverVersion < aDeviceInfos[i].mnDriverVersionMax; break; case wgl::DRIVER_BETWEEN_INCLUSIVE: - match = driverVersion >= maDriverInfo[i].mnDriverVersion && driverVersion <= maDriverInfo[i].mnDriverVersionMax; + match = driverVersion >= aDeviceInfos[i].mnDriverVersion && driverVersion <= aDeviceInfos[i].mnDriverVersionMax; break; case wgl::DRIVER_BETWEEN_INCLUSIVE_START: - match = driverVersion >= maDriverInfo[i].mnDriverVersion && driverVersion < maDriverInfo[i].mnDriverVersionMax; + match = driverVersion >= aDeviceInfos[i].mnDriverVersion && driverVersion < aDeviceInfos[i].mnDriverVersionMax; break; case wgl::DRIVER_COMPARISON_IGNORED: // We don't have a comparison op, so we match everything. @@ -512,17 +514,17 @@ bool WinOpenGLDeviceInfo::FindBlocklistedDeviceInList() break; } - if (match || maDriverInfo[i].mnDriverVersion == wgl::DriverInfo::allDriverVersions) + if (match || aDeviceInfos[i].mnDriverVersion == wgl::DriverInfo::allDriverVersions) { // white listed drivers - if (maDriverInfo[i].mbWhitelisted) + if (aDeviceInfos[i].mbWhitelisted) { SAL_WARN("vcl.opengl", "whitelisted driver"); return false; } match = true; - SAL_WARN("vcl.opengl", "use : " << maDriverInfo[i].maSuggestedVersion); + SAL_WARN("vcl.opengl", "use : " << aDeviceInfos[i].maSuggestedVersion); break; } } @@ -531,6 +533,11 @@ bool WinOpenGLDeviceInfo::FindBlocklistedDeviceInList() return match; } +bool WinOpenGLDeviceInfo::FindBlocklistedDeviceInList() +{ + return FindBlocklistedDeviceInList(maDriverInfo, maDriverVersion, maAdapterVendorID, maAdapterDeviceID, mnWindowsVersion); +} + namespace { OUString getCacheFolder() diff --git a/vcl/opengl/win/blocklist_parser.cxx b/vcl/opengl/win/blocklist_parser.cxx index bb9e6fb81d40..c728bd407a9c 100644 --- a/vcl/opengl/win/blocklist_parser.cxx +++ b/vcl/opengl/win/blocklist_parser.cxx @@ -7,7 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "blocklist_parser.hxx" +#include "opengl/win/blocklist_parser.hxx" WinBlocklistParser::WinBlocklistParser(const OUString& rURL, std::vector<wgl::DriverInfo>& rDriverList) diff --git a/vcl/qa/cppunit/blocklistparsertest.cxx b/vcl/qa/cppunit/blocklistparsertest.cxx new file mode 100644 index 000000000000..66a4f7051651 --- /dev/null +++ b/vcl/qa/cppunit/blocklistparsertest.cxx @@ -0,0 +1,161 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/types.h> + +#include <cppunit/TestAssert.h> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/plugin/TestPlugIn.h> + +#include <unotest/bootstrapfixturebase.hxx> + +#include "opengl/win/blocklist_parser.hxx" + +namespace +{ + +class BlocklistParserTest : public test::BootstrapFixtureBase +{ + void testParse(); + void testEvaluate(); + + CPPUNIT_TEST_SUITE(BlocklistParserTest); + CPPUNIT_TEST(testParse); + CPPUNIT_TEST(testEvaluate); + CPPUNIT_TEST_SUITE_END(); +}; + +void BlocklistParserTest::testParse() +{ + std::vector<wgl::DriverInfo> aDriveInfos; + + WinBlocklistParser aBlocklistParser(getURLFromSrc("vcl/qa/cppunit/") + "test_blocklist_parse.xml", aDriveInfos); + aBlocklistParser.parse(); + + CPPUNIT_ASSERT_EQUAL(20U, aDriveInfos.size()); + + size_t i = 0; + + for (bool bIsWhitelisted : {true, false}) + { + wgl::DriverInfo& aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); // "all" + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_LESS_THAN, aDriveInfo.meComparisonOp); + CPPUNIT_ASSERT_EQUAL(wgl::V(10,20,30,40), aDriveInfo.mnDriverVersion); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorIntel), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_LESS_THAN_OR_EQUAL, aDriveInfo.meComparisonOp); + CPPUNIT_ASSERT_EQUAL(wgl::V(11,21,31,41), aDriveInfo.mnDriverVersion); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorATI), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_GREATER_THAN, aDriveInfo.meComparisonOp); + CPPUNIT_ASSERT_EQUAL(wgl::V(12,22,32,42), aDriveInfo.mnDriverVersion); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAMD), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_GREATER_THAN_OR_EQUAL, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorNVIDIA), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_EQUAL, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorMicrosoft), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_NOT_EQUAL, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_BETWEEN_EXCLUSIVE, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_BETWEEN_INCLUSIVE, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_BETWEEN_INCLUSIVE_START, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_COMPARISON_IGNORED, aDriveInfo.meComparisonOp); + } +} + +void BlocklistParserTest::testEvaluate() +{ + std::vector<wgl::DriverInfo> aDriveInfos; + + WinBlocklistParser aBlocklistParser(getURLFromSrc("vcl/qa/cppunit/") + "test_blocklist_evaluate.xml", aDriveInfos); + aBlocklistParser.parse(); + + OUString vendorAMD = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAMD); + OUString vendorNVIDIA = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorNVIDIA); + OUString vendorIntel = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorIntel); + OUString vendorMicrosoft = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorMicrosoft); + + uint32_t osWindowsXP = 0x00050001; + uint32_t osWindowsVista = 0x00060000; + uint32_t osWindows7 = 0x00060001; + uint32_t osWindows8 = 0x00060002; + uint32_t osWindows10 = 0x000A0000; + + // Check OS + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindowsXP)); + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindowsVista)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindows8)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindows10)); + + + // Check Vendors + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorMicrosoft, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorMicrosoft, "all", osWindows10)); + + // Check Versions + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.39", vendorAMD, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorAMD, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.41", vendorAMD, "all", osWindows7)); + + // Check + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "9.17.10.4229", vendorIntel, "all", osWindows7)); + + +} + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(BlocklistParserTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qa/cppunit/test_blocklist_evaluate.xml b/vcl/qa/cppunit/test_blocklist_evaluate.xml new file mode 100755 index 000000000000..7ffbe3a1b588 --- /dev/null +++ b/vcl/qa/cppunit/test_blocklist_evaluate.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +* This file is part of the LibreOffice project. +* +* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. +--> + +<!-- + entry attributes: + os - "all", "xp", "server2003", "vista", "7", "8", "8_1", "10" + vendor - "all", "intel", "ati", "amd", "nvidia", "microsoft" + compare - "less", "less_equal", "greater", "greater_equal", "equal", "not_equal", "between_exclusive", "between_inclusive", "between_inclusive_start" + version + minVersion + maxVersion +--> + +<root> + <whitelist> + </whitelist> + <blacklist> + <entry os="xp" vendor="all"> + <device id="all"/> + </entry> + <entry os="server2003" vendor="all"> + <device id="all"/> + </entry> + <entry os="vista" vendor="all"> + <device id="all"/> + </entry> + + <entry os="all" vendor="amd" compare="less" version="10.20.30.40"> + <device id="all"/> + </entry> + + <entry os="all" vendor="microsoft"> + <device id="all"/> + </entry> + + <entry os="all" vendor="intel" compare="less" version="10.18.14.4264"> + <device id="all"/> + </entry> + + </blacklist> +</root> diff --git a/vcl/qa/cppunit/test_blocklist_parse.xml b/vcl/qa/cppunit/test_blocklist_parse.xml new file mode 100755 index 000000000000..65646685aa7d --- /dev/null +++ b/vcl/qa/cppunit/test_blocklist_parse.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +* This file is part of the LibreOffice project. +* +* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. +--> + +<root> + <whitelist> + <entry os="all" vendor="all" compare="less" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="xp" vendor="intel" compare="less_equal" version="11.21.31.41"> + <device id="all"/> + </entry> + <entry os="server2003" vendor="ati" compare="greater" version="12.22.32.42"> + <device id="all"/> + </entry> + <entry os="vista" vendor="amd" compare="greater_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="7" vendor="nvidia" compare="equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8" vendor="microsoft" compare="not_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8_1" compare="between_exclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="10" compare="between_inclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all" compare="between_inclusive_start" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all"> + <device id="all"/> + </entry> + </whitelist> + <blacklist> + <entry os="all" vendor="all" compare="less" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="xp" vendor="intel" compare="less_equal" version="11.21.31.41"> + <device id="all"/> + </entry> + <entry os="server2003" vendor="ati" compare="greater" version="12.22.32.42"> + <device id="all"/> + </entry> + <entry os="vista" vendor="amd" compare="greater_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="7" vendor="nvidia" compare="equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8" vendor="microsoft" compare="not_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8_1" compare="between_exclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="10" compare="between_inclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all" compare="between_inclusive_start" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all"> + <device id="all"/> + </entry> + </blacklist> +</root> |