https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6289183dcd72673cac232f15c7b636a84d9afb28

commit 6289183dcd72673cac232f15c7b636a84d9afb28
Author:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
AuthorDate: Thu Jul 25 21:12:33 2024 +0200
Commit:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
CommitDate: Wed Jul 31 11:41:23 2024 +0200

    [SETUPLIB_UNITTEST] Add unit-tests for the setuplib (#7187)
---
 base/setup/lib/CMakeLists.txt                      |   6 ++
 base/setup/lib/unittests/CMakeLists.txt            |  17 ++++
 base/setup/lib/unittests/IsValidInstallDirectory.c | 110 +++++++++++++++++++++
 base/setup/lib/unittests/precomp.h                 |  29 ++++++
 base/setup/lib/unittests/testlist.c                |  10 ++
 5 files changed, 172 insertions(+)

diff --git a/base/setup/lib/CMakeLists.txt b/base/setup/lib/CMakeLists.txt
index cc79ec83ef8..acd7cd5e01a 100644
--- a/base/setup/lib/CMakeLists.txt
+++ b/base/setup/lib/CMakeLists.txt
@@ -33,3 +33,9 @@ list(APPEND SOURCE
 add_library(setuplib ${SOURCE})
 add_pch(setuplib precomp.h SOURCE)
 add_dependencies(setuplib xdk) # psdk
+
+
+## Unit-tests
+if(ENABLE_ROSTESTS)
+    add_subdirectory(unittests)
+endif()
diff --git a/base/setup/lib/unittests/CMakeLists.txt 
b/base/setup/lib/unittests/CMakeLists.txt
new file mode 100644
index 00000000000..199e31e2dd1
--- /dev/null
+++ b/base/setup/lib/unittests/CMakeLists.txt
@@ -0,0 +1,17 @@
+
+PROJECT(setuplib_unittest)
+
+include_directories(${REACTOS_SOURCE_DIR}/modules/rostests/apitests/include)
+
+list(APPEND TEST_SOURCE
+    IsValidInstallDirectory.c
+    testlist.c
+    precomp.h)
+
+add_executable(setuplib_unittest ${TEST_SOURCE})
+
+target_link_libraries(setuplib_unittest setuplib ${PSEH_LIB})
+set_module_type(setuplib_unittest win32cui)
+add_importlibs(setuplib_unittest msvcrt kernel32 ntdll)
+#add_pch(setuplib_unittest precomp.h TEST_SOURCE)
+add_rostests_file(TARGET setuplib_unittest)
diff --git a/base/setup/lib/unittests/IsValidInstallDirectory.c 
b/base/setup/lib/unittests/IsValidInstallDirectory.c
new file mode 100644
index 00000000000..c7f3a599271
--- /dev/null
+++ b/base/setup/lib/unittests/IsValidInstallDirectory.c
@@ -0,0 +1,110 @@
+/*
+ * PROJECT:     ReactOS Setup Library - Unit-tests
+ * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE:     Test for IsValidInstallDirectory
+ * COPYRIGHT:   Copyright 2024 Hermès Bélusca-Maïto 
<hermes.belusca-ma...@reactos.org>
+ */
+
+#include "precomp.h"
+
+//
+// FIXME: Temporary symbols defined to make linking work.
+// They will be defined to something once INF file testing is implemented.
+//
+pSpInfCloseInfFile  SpInfCloseInfFile  = NULL;
+pSpInfFindFirstLine SpInfFindFirstLine = NULL;
+pSpInfFindNextLine  SpInfFindNextLine  = NULL;
+pSpInfGetFieldCount SpInfGetFieldCount = NULL;
+pSpInfGetBinaryField  SpInfGetBinaryField  = NULL;
+pSpInfGetIntField     SpInfGetIntField     = NULL;
+pSpInfGetMultiSzField SpInfGetMultiSzField = NULL;
+pSpInfGetStringField  SpInfGetStringField  = NULL;
+pSpInfGetField    SpInfGetField    = NULL;
+pSpInfOpenInfFile SpInfOpenInfFile = NULL;
+
+BOOLEAN IsUnattendedSetup = FALSE;
+HANDLE ProcessHeap;
+
+
+START_TEST(IsValidInstallDirectory)
+{
+    static const struct
+    {
+        PCWSTR path;
+        BOOLEAN result;
+    } tests[] =
+    {
+        { L"",              FALSE },
+        { L" ",             FALSE },
+        { L"\\",            FALSE },
+        { L"\\\\",          FALSE },
+        { L".",             FALSE },
+        { L"..",            FALSE },
+        { L"...",           FALSE },
+        { L"....",          FALSE },
+        { L" WINNT",        FALSE },
+        { L"WINNT ",        FALSE },
+        { L".WINNT",        FALSE },
+        { L"..WINNT",       FALSE },
+        { L"W.INNT",        FALSE },
+        { L"WI.NNT",        TRUE  },
+        { L"WIN.NT",        TRUE  },
+        { L"WINNT.",        TRUE  },
+        { L"WINNT..",       FALSE },
+        { L"WINNT. ",       FALSE },
+        { L"WINNT.e e",     FALSE },
+        { L"WIN^`NT",       FALSE },
+
+        { L"WINNT",         TRUE  },
+        { L"\\WINNT",       TRUE  },
+        { L"\\WINNT\\",     TRUE  },
+        { L"\\WINNT\\.",    FALSE },
+        { L"WIN\\NT",       TRUE  },
+        { L"WIN\\NT.",      TRUE  },
+        { L"\\WIN\\NT\\",   TRUE  },
+        { L"\\WIN\\NT.\\",  TRUE  },
+        { L"\\WIN.\\NT52",  TRUE  },
+        { L"\\WIN\\.\\NT52",    FALSE },
+        { L"\\WIN\\..\\NT52",   FALSE },
+        { L"\\WIN\\...\\NT52",  FALSE },
+        { L"\\WIN\\....\\NT52", FALSE },
+
+        { L"win.nt.5",      FALSE },
+        { L"win.ntX5",      FALSE },
+        { L"winn.tX5",      TRUE  },
+        { L"winnt.X5",      TRUE  },
+        { L"winntX.5",      TRUE  },
+        { L"winntX5.",      TRUE  },
+        { L"filenamee.xte", FALSE },
+        { L"filenamee.xt",  FALSE },
+        { L"filename.ext",  TRUE  },
+        { L"file.ame.ext",  FALSE },
+        { L"filenam.eext",  FALSE },
+
+        { L"1 3 5 7 .abc",  FALSE },
+        { L"12345678.  c",  FALSE },
+        { L"123456789.a",   FALSE },
+        { L"12345.abcd",    FALSE },
+        { L"12345.ab d",    FALSE },
+        { L".abc",          FALSE },
+        { L"12.abc.d",      FALSE },
+        { L"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", FALSE },
+    };
+
+#define BOOL_TO_STR(b) ((b) ? "TRUE" : "FALSE")
+
+    ProcessHeap = GetProcessHeap();
+
+    UINT i;
+    for (i = 0; i < _countof(tests); ++i)
+    {
+        BOOLEAN ret = IsValidInstallDirectory(tests[i].path);
+        ok(ret == tests[i].result,
+           "Unexpected result for '%S', got %s, expected %s\n",
+           tests[i].path, BOOL_TO_STR(ret), BOOL_TO_STR(tests[i].result));
+    }
+
+#undef BOOL_TO_STR
+}
+
+/* EOF */
diff --git a/base/setup/lib/unittests/precomp.h 
b/base/setup/lib/unittests/precomp.h
new file mode 100644
index 00000000000..8cb8823d5ec
--- /dev/null
+++ b/base/setup/lib/unittests/precomp.h
@@ -0,0 +1,29 @@
+/*
+ * PROJECT:     ReactOS Setup Library - Unit-tests
+ * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE:     Precompiled header
+ * COPYRIGHT:   Copyright 2024 Hermès Bélusca-Maïto 
<hermes.belusca-ma...@reactos.org>
+ */
+
+#pragma once
+
+#include <apitest.h>
+
+/* C Headers */
+#include <stdio.h>
+
+/* PSDK/NDK */
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+
+#include <windef.h>
+#include <winbase.h>
+//#include <strsafe.h>
+
+#define NTOS_MODE_USER
+#include <ndk/rtlfuncs.h>
+
+#include <../setuplib.h>
+
+/* EOF */
diff --git a/base/setup/lib/unittests/testlist.c 
b/base/setup/lib/unittests/testlist.c
new file mode 100644
index 00000000000..f2600910505
--- /dev/null
+++ b/base/setup/lib/unittests/testlist.c
@@ -0,0 +1,10 @@
+#define STANDALONE
+#include <apitest.h>
+
+extern void func_IsValidInstallDirectory(void);
+
+const struct test winetest_testlist[] =
+{
+    { "IsValidInstallDirectory", func_IsValidInstallDirectory },
+    { 0, 0 }
+};

Reply via email to