Author: mjansen
Date: Thu Jun 16 21:00:08 2016
New Revision: 71649

URL: http://svn.reactos.org/svn/reactos?rev=71649&view=rev
Log:
[MSGINA_APITEST] Add a test for ShellDimScreen, used to fade out the background 
of the logoff dialog. Thanks to Jared for finding the api, and Hermès for his 
help! CORE-11422

Added:
    trunk/rostests/apitests/msgina/
    trunk/rostests/apitests/msgina/CMakeLists.txt   (with props)
    trunk/rostests/apitests/msgina/ShellDimScreen.cpp   (with props)
    trunk/rostests/apitests/msgina/testlist.c   (with props)
Modified:
    trunk/rostests/apitests/CMakeLists.txt

Modified: trunk/rostests/apitests/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/CMakeLists.txt?rev=71649&r1=71648&r2=71649&view=diff
==============================================================================
--- trunk/rostests/apitests/CMakeLists.txt      [iso-8859-1] (original)
+++ trunk/rostests/apitests/CMakeLists.txt      [iso-8859-1] Thu Jun 16 
21:00:08 2016
@@ -14,6 +14,7 @@
 if(NOT ARCH STREQUAL "amd64")
     add_subdirectory(kernel32)
 endif()
+add_subdirectory(msgina)
 add_subdirectory(msvcrt)
 add_subdirectory(ntdll)
 add_subdirectory(ole32)

Added: trunk/rostests/apitests/msgina/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msgina/CMakeLists.txt?rev=71649
==============================================================================
--- trunk/rostests/apitests/msgina/CMakeLists.txt       (added)
+++ trunk/rostests/apitests/msgina/CMakeLists.txt       [iso-8859-1] Thu Jun 16 
21:00:08 2016
@@ -0,0 +1,13 @@
+
+set_cpp(WITH_RUNTIME)
+
+include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/atl)
+
+add_executable(msgina_apitest
+    ShellDimScreen.cpp
+    testlist.c)
+
+target_link_libraries(msgina_apitest wine uuid)
+set_module_type(msgina_apitest win32cui)
+add_importlibs(msgina_apitest msvcrt user32 kernel32)
+add_cd_file(TARGET msgina_apitest DESTINATION reactos/bin FOR all)

Propchange: trunk/rostests/apitests/msgina/CMakeLists.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/rostests/apitests/msgina/ShellDimScreen.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msgina/ShellDimScreen.cpp?rev=71649
==============================================================================
--- trunk/rostests/apitests/msgina/ShellDimScreen.cpp   (added)
+++ trunk/rostests/apitests/msgina/ShellDimScreen.cpp   [iso-8859-1] Thu Jun 16 
21:00:08 2016
@@ -0,0 +1,114 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         LGPLv2.1+ - See COPYING.LIB in the top level directory
+ * PURPOSE:         Test for ShellDimScreen
+ * PROGRAMMER:      Mark Jansen
+ */
+
+#include <apitest.h>
+#include <atlbase.h>
+#include <atlcom.h>
+
+#define INITGUID
+#include <guiddef.h>
+// stolen from com_apitest.h
+DEFINE_GUID(CLSID_FadeTask,                0x7EB5FBE4, 0x2100, 0x49E6, 0x85, 
0x93, 0x17, 0xE1, 0x30, 0x12, 0x2F, 0x91);
+
+
+typedef HRESULT (__stdcall *tShellDimScreen) (IUnknown** Unknown, HWND* 
hWindow);
+
+tShellDimScreen ShellDimScreen;
+
+static void Test_Dim()
+{
+    IUnknown* unk = (IUnknown*)0xdeadbeef;
+    HWND wnd = (HWND)0xdeadbeef;
+    ULONG count;
+
+    HRESULT hr = ShellDimScreen(NULL, NULL);
+    ok_hex(hr, E_INVALIDARG);
+
+    hr = ShellDimScreen(&unk, &wnd);
+    ok_hex(hr, S_OK);
+    ok(unk != ((IUnknown*)0xdeadbeef), "Expected a valid object\n");
+    ok(wnd != ((HWND)0xdeadbeef), "Expected a valid window ptr\n");
+    ok(IsWindow(wnd), "Expected a valid window\n");
+    ok(IsWindowVisible(wnd), "Expected the window to be visible\n");
+
+    if (unk != ((IUnknown*)0xdeadbeef) && unk)
+    {
+        count = unk->Release();
+        ok(count == 0, "Expected count to be 0, was: %lu\n", count);
+        ok(!IsWindow(wnd), "Expected the window to be destroyed\n");
+    }
+
+    unk = (IUnknown*)0xdeadbeef;
+    wnd = (HWND)0xdeadbeef;
+    hr = ShellDimScreen(&unk, &wnd);
+    ok_hex(hr, S_OK);
+    ok(unk != ((IUnknown*)0xdeadbeef), "Expected a valid object\n");
+    ok(wnd != ((HWND)0xdeadbeef), "Expected a valid window ptr\n");
+    ok(IsWindow(wnd), "Expected a valid window\n");
+    ok(IsWindowVisible(wnd), "Expected the window to be visible\n");
+    char classname[100] = {0};;
+    int nRet = GetClassNameA(wnd, classname, 100);
+    ok(nRet == 17, "Expected GetClassName to return 3 was %i\n", nRet);
+    ok(!strcmp(classname, "DimmedWindowClass"), "Expected classname to be 
DimmedWindowClass, was %s\n", classname);
+    LONG style = GetWindowLong(wnd, GWL_STYLE);
+    LONG expectedstyle = WS_POPUP | WS_VISIBLE | WS_DISABLED | WS_CLIPSIBLINGS;
+    ok(style == expectedstyle, "Expected style to be %lx, was %lx\n", 
expectedstyle, style);
+    style = GetWindowLong(wnd, GWL_EXSTYLE);
+    ok(style == WS_EX_TOPMOST, "Expected exstyle to be %x, was %lx\n", 
WS_EX_TOPMOST, style);
+
+    if (unk != ((IUnknown*)0xdeadbeef) && unk)
+    {
+        count = unk->AddRef();
+        ok(count == 2, "Expected count to be 2, was: %lu\n", count);
+        count = unk->Release();
+        ok(count == 1, "Expected count to be 1, was: %lu\n", count);
+
+        IUnknown* unk2;
+        hr = unk->QueryInterface(IID_IUnknown, (void**)&unk2);
+        ok_hex(hr, S_OK);
+        if (SUCCEEDED(hr))
+        {
+            ok(unk2 == unk, "Expected the object to be the same, was: %p, 
%p\n", unk, unk2);
+            unk2->Release();
+        }
+        hr = unk->QueryInterface(CLSID_FadeTask, (void**)&unk2);
+        ok_hex(hr, E_NOINTERFACE);
+        if (SUCCEEDED(hr))
+        {
+            ok(unk2 == unk, "Expected the object to be the same, was: %p, 
%p\n", unk, unk2);
+            unk2->Release();
+        }
+    }
+
+    RECT rc;
+    GetWindowRect(wnd, &rc);
+
+    ok(rc.left == GetSystemMetrics(SM_XVIRTUALSCREEN), "Expected rc.left to be 
%u, was %lu\n", GetSystemMetrics(SM_XVIRTUALSCREEN), rc.left);
+    ok(rc.top == GetSystemMetrics(SM_YVIRTUALSCREEN), "Expected rc.top to be 
%u, was %lu\n", GetSystemMetrics(SM_YVIRTUALSCREEN), rc.top);
+    ok((rc.right - rc.left) == GetSystemMetrics(SM_CXVIRTUALSCREEN), "Expected 
rc.left to be %u, was %lu\n", GetSystemMetrics(SM_CXVIRTUALSCREEN), (rc.right - 
rc.left));
+    ok((rc.bottom - rc.top) == GetSystemMetrics(SM_CYVIRTUALSCREEN), "Expected 
rc.top to be %u, was %lu\n", GetSystemMetrics(SM_CYVIRTUALSCREEN), (rc.bottom - 
rc.top));
+
+    if (unk != ((IUnknown*)0xdeadbeef) && unk)
+    {
+        count = unk->Release();
+        ok(count == 0, "Expected count to be 0, was: %lu\n", count);
+        ok(!IsWindow(wnd), "Expected the window to be destroyed\n");
+    }
+}
+
+
+START_TEST(ShellDimScreen)
+{
+    HMODULE dll = LoadLibraryA("msgina.dll");
+    ShellDimScreen = (tShellDimScreen)GetProcAddress(dll, 
MAKEINTRESOURCEA(16));
+    if (!dll || !ShellDimScreen)
+    {
+        skip("msgina!#16 not found, skipping tests\n");
+        return;
+    }
+    Test_Dim();
+}

Propchange: trunk/rostests/apitests/msgina/ShellDimScreen.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/rostests/apitests/msgina/testlist.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/msgina/testlist.c?rev=71649
==============================================================================
--- trunk/rostests/apitests/msgina/testlist.c   (added)
+++ trunk/rostests/apitests/msgina/testlist.c   [iso-8859-1] Thu Jun 16 
21:00:08 2016
@@ -0,0 +1,10 @@
+#define STANDALONE
+#include <apitest.h>
+
+extern void func_ShellDimScreen(void);
+
+const struct test winetest_testlist[] =
+{
+    { "ShellDimScreen", func_ShellDimScreen },
+    { 0, 0 }
+};

Propchange: trunk/rostests/apitests/msgina/testlist.c
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to