From 69586e8381037417d106d8474d9f73638c5b9c55 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Wed, 17 Jul 2024 14:45:22 +0500 Subject: [PATCH] UI tests: use a dedicated desktop on Windows Similar to commit 1f24d35033c2f02335ce254bbcf6ba89e1b7565e (cppunittester: use a dedicated desktop on Windows, 2023-07-09), this change allows to run UI tests on Windows without them interferring with what you are doing. The code testing LIBO_TEST_DEFAULT_DESKTOP environment variable to avoid the separate desktop, and creating it, is extracted to a new function in systools. Change-Id: I6df3cb4ae581ae289e49b47d3135d01f632fbd95 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170615 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- desktop/source/app/sofficemain.cxx | 10 ++++++++ include/systools/win32/test_desktop.hxx | 31 +++++++++++++++++++++++++ sal/cppunittester/cppunittester.cxx | 8 ++----- 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 include/systools/win32/test_desktop.hxx diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx index 33881784d45c..7e38ac2b2807 100644 --- a/desktop/source/app/sofficemain.cxx +++ b/desktop/source/app/sofficemain.cxx @@ -29,6 +29,10 @@ // needed before sal/main.h to avoid redefinition of macros #include +#if defined _WIN32 +#include +#endif + #include #include #include @@ -51,6 +55,12 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main() { +#if defined _WIN32 + // If this is a UI test, we may need to switch to a dedicated desktop + if (getenv("LO_RUNNING_UI_TEST") != nullptr) + sal::systools::maybeCreateTestDesktop(); +#endif + sal_detail_initialize(sal::detail::InitializeSoffice, nullptr); #if HAVE_FEATURE_BREAKPAD diff --git a/include/systools/win32/test_desktop.hxx b/include/systools/win32/test_desktop.hxx new file mode 100644 index 000000000000..fdd8640deb28 --- /dev/null +++ b/include/systools/win32/test_desktop.hxx @@ -0,0 +1,31 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * 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/. + */ + +#pragma once + +#include +#include + +namespace sal::systools +{ +// Create a desktop, to avoid popups interferring with active user session, because we don't use svp +// vcl plugin on Windows for unit testing. Set LIBO_TEST_DEFAULT_DESKTOP environment variable to any +// value when running the unit test process, to avoid use of a separate desktop. +void maybeCreateTestDesktop() +{ + if (getenv("LIBO_TEST_DEFAULT_DESKTOP") == nullptr) + { + if (HDESK hDesktop + = CreateDesktopW(L"LIBO_TEST_DESKTOP", nullptr, nullptr, 0, GENERIC_ALL, nullptr)) + SetThreadDesktop(hDesktop); + } +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx index 854c0999c911..610f8a8155ef 100644 --- a/sal/cppunittester/cppunittester.cxx +++ b/sal/cppunittester/cppunittester.cxx @@ -22,6 +22,7 @@ # define WIN32_LEAN_AND_MEAN #endif #include +#include #endif #if defined(_WIN32) && defined(_DEBUG) #include @@ -401,12 +402,7 @@ static bool main2() #endif // Create a desktop, to avoid popups interfering with active user session, // because on Windows, we don't use svp vcl plugin for unit testing - if (getenv("CPPUNIT_DEFAULT_DESKTOP") == nullptr) - { - if (HDESK hDesktop - = CreateDesktopW(L"LO_CPPUNIT_DESKTOP", nullptr, nullptr, 0, GENERIC_ALL, nullptr)) - SetThreadDesktop(hDesktop); - } + sal::systools::maybeCreateTestDesktop(); #endif std::vector protectors;