https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b1c33293b0c9a444a0a3c…
commit b1c33293b0c9a444a0a3c3e67d79a60ff1ef3661
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Wed Sep 30 20:51:49 2020 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Wed Sep 30 20:51:49 2020 +0900
[BROWSEUI_APITEST] Strengthen IACLCustomMRU testcase (#3249)
Add some tests for "TypedURLs" of a special case. The TypedURLs registry key
consists of the registry values of "url1", "url2", "url3"
etc instead of "MRUList", "a", "b" etc. CORE-9281
---
.../rostests/apitests/browseui/IACLCustomMRU.cpp | 146 ++++++++++++++++++++-
1 file changed, 145 insertions(+), 1 deletion(-)
diff --git a/modules/rostests/apitests/browseui/IACLCustomMRU.cpp
b/modules/rostests/apitests/browseui/IACLCustomMRU.cpp
index 9cf5ef765d4..cfde9d11cfc 100644
--- a/modules/rostests/apitests/browseui/IACLCustomMRU.cpp
+++ b/modules/rostests/apitests/browseui/IACLCustomMRU.cpp
@@ -29,7 +29,8 @@ ULONG DbgPrint(PCH Format,...);
#expression, (int)(result), _value, (char)key); \
} while (0)
-
+#define ok_wstri(x, y) \
+ ok(lstrcmpiW(x, y) == 0, "Wrong string. Expected '%S', got
'%S'\n", y, x)
struct CCoInit
{
@@ -401,6 +402,148 @@ test_IACLCustomMRU_Continue()
verify_mru(CustomMRU, L"ba", L"FIRST_ENTRY",
L"SECOND_ENTRY");
}
+#define TYPED_URLS_KEY L"Software\\Microsoft\\Internet Explorer\\TypedURLs"
+
+static void
+RestoreTypedURLs(const CStringW& url1, const CStringW& url2)
+{
+ CRegKey key;
+ key.Open(HKEY_CURRENT_USER, TYPED_URLS_KEY, KEY_WRITE);
+ if (url1 != L"")
+ key.SetStringValue(L"url1", url1);
+ if (url2 != L"")
+ key.SetStringValue(L"url2", url2);
+}
+
+static void
+test_IACLCustomMRU_TypedURLs() // TypedURLs is special case
+{
+ CStringW url1, url2; // Save values
+ {
+ CRegKey key;
+ key.Open(HKEY_CURRENT_USER, TYPED_URLS_KEY, KEY_READ | KEY_WRITE);
+
+ WCHAR Value[MAX_PATH];
+ ULONG cch = _countof(Value);
+ LSTATUS Status = key.QueryStringValue(L"url1", Value, &cch);
+ if (!Status)
+ url1 = Value;
+
+ cch = _countof(Value);
+ Status = key.QueryStringValue(L"url2", Value, &cch);
+ if (!Status)
+ url2 = Value;
+
+ // Set values
+ key.SetStringValue(L"url1", L"aaa");
+ key.SetStringValue(L"url2", L"bbb");
+ }
+
+ CComPtr<IACLCustomMRU> CustomMRU;
+ HRESULT hr = CoCreateInstance(CLSID_ACLCustomMRU, NULL, CLSCTX_ALL,
+ IID_PPV_ARG(IACLCustomMRU, &CustomMRU));
+ ok_hex(hr, S_OK);
+ if (FAILED(hr))
+ {
+ skip("IACLCustomMRU was NULL\n");
+ RestoreTypedURLs(url1, url2);
+ return;
+ }
+
+ CComPtr<IACList> ACList;
+ hr = CustomMRU->QueryInterface(IID_PPV_ARG(IACList, &ACList));
+ ok_hex(hr, S_OK);
+ if (SUCCEEDED(hr))
+ {
+ hr = ACList->Expand(L"C:");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"C:\\");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"C:\\Program Files");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"C:\\Program Files\\");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"http://");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"https://");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"https://google.co.jp/");
+ ok_hex(hr, E_NOTIMPL);
+ }
+
+ hr = CustomMRU->Initialize(TYPED_URLS_KEY, 64);
+ ok_hex(hr, S_OK);
+
+ if (ACList)
+ {
+ hr = ACList->Expand(L"C:");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"C:\\");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"C:\\Program Files");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"C:\\Program Files\\");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"http://");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"https://");
+ ok_hex(hr, E_NOTIMPL);
+ hr = ACList->Expand(L"https://google.co.jp/");
+ ok_hex(hr, E_NOTIMPL);
+ }
+
+ CComPtr<IEnumString> pEnum;
+ hr = CustomMRU->QueryInterface(IID_PPV_ARG(IEnumString, &pEnum));
+ ok_hex(hr, S_OK);
+ if (FAILED(hr))
+ {
+ skip("IEnumString was NULL\n");
+ RestoreTypedURLs(url1, url2);
+ return;
+ }
+
+ CComPtr<IEnumString> pEnumClone;
+ hr = pEnum->Clone(&pEnumClone);
+ ok_hex(hr, E_NOTIMPL);
+
+ hr = pEnum->Skip(1);
+ ok_hex(hr, E_NOTIMPL);
+
+#define INVALID_LPOLESTR ((LPOLESTR)(LONG_PTR)0xDEADBEEF)
+ LPOLESTR apsz[2] = { NULL, INVALID_LPOLESTR };
+ ULONG c = 0;
+ hr = pEnum->Next(2, apsz, &c);
+ ok_hex(hr, S_OK);
+ ok_wstri(apsz[0], L"aaa");
+ ok_int(c, 1);
+ ok(apsz[1] == INVALID_LPOLESTR, "apsz[1] was '%S'\n", apsz[1]);
+ CoTaskMemFree(apsz[0]);
+
+ LPOLESTR psz = INVALID_LPOLESTR;
+ c = 0;
+ hr = pEnum->Next(0, &psz, &c);
+ ok_hex(hr, S_OK);
+ ok(psz == INVALID_LPOLESTR, "psz was '%S'\n", psz);
+ ok_int(c, 0);
+
+ psz = NULL;
+ c = 0;
+ hr = pEnum->Next(1, &psz, &c);
+ ok_hex(hr, S_OK);
+ ok_wstri(psz, L"bbb");
+ ok_int(c, 1);
+ CoTaskMemFree(psz);
+
+ hr = CustomMRU->AddMRUString(L"https://google.co.jp");
+ ok_hex(hr, E_FAIL);
+ hr = CustomMRU->AddMRUString(L"C:");
+ ok_hex(hr, E_FAIL);
+ hr = CustomMRU->AddMRUString(L"C:\\");
+ ok_hex(hr, E_FAIL);
+
+ RestoreTypedURLs(url1, url2);
+}
+
START_TEST(IACLCustomMRU)
{
CCoInit init;
@@ -412,6 +555,7 @@ START_TEST(IACLCustomMRU)
test_IACLCustomMRU_UpdateOrder();
test_IACLCustomMRU_ExtraChars();
test_IACLCustomMRU_Continue();
+ test_IACLCustomMRU_TypedURLs();
Cleanup_Testdata();
}