Commit 20ac0613 authored by Andrew Nguyen's avatar Andrew Nguyen Committed by Alexandre Julliard

shlwapi/tests: Add tests for HashData.

parent 005eb0bd
......@@ -1082,6 +1082,93 @@ static void test_ParseURL(void)
}
}
static void test_HashData(void)
{
HRESULT res;
BYTE input[16] = {0x51, 0x33, 0x4F, 0xA7, 0x45, 0x15, 0xF0, 0x52, 0x90,
0x2B, 0xE7, 0xF5, 0xFD, 0xE1, 0xA6, 0xA7};
BYTE output[32];
static const BYTE expected[] = {0x54, 0x9C, 0x92, 0x55, 0xCD, 0x82, 0xFF,
0xA1, 0x8E, 0x0F, 0xCF, 0x93, 0x14, 0xAA,
0xE3, 0x2D};
static const BYTE expected2[] = {0x54, 0x9C, 0x92, 0x55, 0xCD, 0x82, 0xFF,
0xA1, 0x8E, 0x0F, 0xCF, 0x93, 0x14, 0xAA,
0xE3, 0x2D, 0x47, 0xFC, 0x80, 0xB8, 0xD0,
0x49, 0xE6, 0x13, 0x2A, 0x30, 0x51, 0x8D,
0xF9, 0x4B, 0x07, 0xA6};
static const BYTE expected3[] = {0x2B, 0xDC, 0x9A, 0x1B, 0xF0, 0x5A, 0xF9,
0xC6, 0xBE, 0x94, 0x6D, 0xF3, 0x33, 0xC1,
0x36, 0x07};
int i;
/* Test hashing with identically sized input/output buffers. */
res = HashData(input, 16, output, 16);
ok(res == S_OK, "Expected HashData to return S_OK, got 0x%08x\n", res);
if(res == S_OK)
ok(!memcmp(output, expected, sizeof(expected)),
"Output buffer did not match expected contents\n");
/* Test hashing with larger output buffer. */
res = HashData(input, 16, output, 32);
ok(res == S_OK, "Expected HashData to return S_OK, got 0x%08x\n", res);
if(res == S_OK)
ok(!memcmp(output, expected2, sizeof(expected2)),
"Output buffer did not match expected contents\n");
/* Test hashing with smaller input buffer. */
res = HashData(input, 8, output, 16);
ok(res == S_OK, "Expected HashData to return S_OK, got 0x%08x\n", res);
if(res == S_OK)
ok(!memcmp(output, expected3, sizeof(expected3)),
"Output buffer did not match expected contents\n");
/* Test passing NULL pointers for input/output parameters. */
res = HashData(NULL, 0, NULL, 0);
ok(res == E_INVALIDARG || broken(res == S_OK), /* Windows 2000 */
"Expected HashData to return E_INVALIDARG, got 0x%08x\n", res);
res = HashData(input, 0, NULL, 0);
ok(res == E_INVALIDARG || broken(res == S_OK), /* Windows 2000 */
"Expected HashData to return E_INVALIDARG, got 0x%08x\n", res);
res = HashData(NULL, 0, output, 0);
ok(res == E_INVALIDARG || broken(res == S_OK), /* Windows 2000 */
"Expected HashData to return E_INVALIDARG, got 0x%08x\n", res);
/* Test passing valid pointers with sizes of zero. */
for (i = 0; i < sizeof(input)/sizeof(BYTE); i++)
input[i] = 0x00;
for (i = 0; i < sizeof(output)/sizeof(BYTE); i++)
output[i] = 0xFF;
res = HashData(input, 0, output, 0);
ok(res == S_OK, "Expected HashData to return S_OK, got 0x%08x\n", res);
/* The buffers should be unchanged. */
for (i = 0; i < sizeof(input)/sizeof(BYTE); i++)
{
ok(input[i] == 0x00, "Expected the input buffer to be unchanged\n");
if(input[i] != 0x00) break;
}
for (i = 0; i < sizeof(output)/sizeof(BYTE); i++)
{
ok(output[i] == 0xFF, "Expected the output buffer to be unchanged\n");
if(output[i] != 0xFF) break;
}
/* Input/output parameters are not validated. */
res = HashData((BYTE *)0xdeadbeef, 0, (BYTE *)0xdeadbeef, 0);
ok(res == S_OK, "Expected HashData to return S_OK, got 0x%08x\n", res);
if (0)
{
res = HashData((BYTE *)0xdeadbeef, 1, (BYTE *)0xdeadbeef, 1);
trace("HashData returned 0x%08x\n", res);
}
}
/* ########################### */
START_TEST(url)
......@@ -1103,4 +1190,5 @@ START_TEST(url)
test_UrlIs();
test_UrlUnescape();
test_ParseURL();
test_HashData();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment