1 /*
2  * PROJECT:     ReactOS Setup Library - Unit-tests
3  * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE:     Test for IsValidInstallDirectory
5  * COPYRIGHT:   Copyright 2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
6  */
7 
8 #include "precomp.h"
9 
10 //
11 // FIXME: Temporary symbols defined to make linking work.
12 // They will be defined to something once INF file testing is implemented.
13 //
14 pSpInfCloseInfFile  SpInfCloseInfFile  = NULL;
15 pSpInfFindFirstLine SpInfFindFirstLine = NULL;
16 pSpInfFindNextLine  SpInfFindNextLine  = NULL;
17 pSpInfGetFieldCount SpInfGetFieldCount = NULL;
18 pSpInfGetBinaryField  SpInfGetBinaryField  = NULL;
19 pSpInfGetIntField     SpInfGetIntField     = NULL;
20 pSpInfGetMultiSzField SpInfGetMultiSzField = NULL;
21 pSpInfGetStringField  SpInfGetStringField  = NULL;
22 pSpInfGetField    SpInfGetField    = NULL;
23 pSpInfOpenInfFile SpInfOpenInfFile = NULL;
24 
25 BOOLEAN IsUnattendedSetup = FALSE;
26 HANDLE ProcessHeap;
27 
28 
29 START_TEST(IsValidInstallDirectory)
30 {
31     static const struct
32     {
33         PCWSTR path;
34         BOOLEAN result;
35     } tests[] =
36     {
37         { L"",              FALSE },
38         { L" ",             FALSE },
39         { L"\\",            FALSE },
40         { L"\\\\",          FALSE },
41         { L".",             FALSE },
42         { L"..",            FALSE },
43         { L"...",           FALSE },
44         { L"....",          FALSE },
45         { L" WINNT",        FALSE },
46         { L"WINNT ",        FALSE },
47         { L".WINNT",        FALSE },
48         { L"..WINNT",       FALSE },
49         { L"W.INNT",        FALSE },
50         { L"WI.NNT",        TRUE  },
51         { L"WIN.NT",        TRUE  },
52         { L"WINNT.",        TRUE  },
53         { L"WINNT..",       FALSE },
54         { L"WINNT. ",       FALSE },
55         { L"WINNT.e e",     FALSE },
56         { L"WIN^`NT",       FALSE },
57 
58         { L"WINNT",         TRUE  },
59         { L"\\WINNT",       TRUE  },
60         { L"\\WINNT\\",     TRUE  },
61         { L"\\WINNT\\.",    FALSE },
62         { L"WIN\\NT",       TRUE  },
63         { L"WIN\\NT.",      TRUE  },
64         { L"\\WIN\\NT\\",   TRUE  },
65         { L"\\WIN\\NT.\\",  TRUE  },
66         { L"\\WIN.\\NT52",  TRUE  },
67         { L"\\WIN\\.\\NT52",    FALSE },
68         { L"\\WIN\\..\\NT52",   FALSE },
69         { L"\\WIN\\...\\NT52",  FALSE },
70         { L"\\WIN\\....\\NT52", FALSE },
71 
72         { L"win.nt.5",      FALSE },
73         { L"win.ntX5",      FALSE },
74         { L"winn.tX5",      TRUE  },
75         { L"winnt.X5",      TRUE  },
76         { L"winntX.5",      TRUE  },
77         { L"winntX5.",      TRUE  },
78         { L"filenamee.xte", FALSE },
79         { L"filenamee.xt",  FALSE },
80         { L"filename.ext",  TRUE  },
81         { L"file.ame.ext",  FALSE },
82         { L"filenam.eext",  FALSE },
83 
84         { L"1 3 5 7 .abc",  FALSE },
85         { L"12345678.  c",  FALSE },
86         { L"123456789.a",   FALSE },
87         { L"12345.abcd",    FALSE },
88         { L"12345.ab d",    FALSE },
89         { L".abc",          FALSE },
90         { L"12.abc.d",      FALSE },
91         { L"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", FALSE },
92     };
93 
94 #define BOOL_TO_STR(b) ((b) ? "TRUE" : "FALSE")
95 
96     ProcessHeap = GetProcessHeap();
97 
98     UINT i;
99     for (i = 0; i < _countof(tests); ++i)
100     {
101         BOOLEAN ret = IsValidInstallDirectory(tests[i].path);
102         ok(ret == tests[i].result,
103            "Unexpected result for '%S', got %s, expected %s\n",
104            tests[i].path, BOOL_TO_STR(ret), BOOL_TO_STR(tests[i].result));
105     }
106 
107 #undef BOOL_TO_STR
108 }
109 
110 /* EOF */
111