+static void test__wcsupr_s(void)
+{
+ static const WCHAR mixedString[] = {'M', 'i', 'X', 'e', 'D', 'l', 'o', 'w',
+ 'e', 'r', 'U', 'P', 'P', 'E', 'R', 0};
+ static const WCHAR expectedString[] = {'M', 'I', 'X', 'E', 'D', 'L', 'O',
+ 'W', 'E', 'R', 'U', 'P', 'P', 'E',
+ 'R', 0};
+ WCHAR testBuffer[2*sizeof(mixedString)/sizeof(WCHAR)];
+ int ret;
+
+ if (!p_wcsupr_s)
+ {
+ win_skip("_wcsupr_s not found\n");
+ return;
+ }
+
+ /* Test NULL input string and invalid size. */
+ errno = EBADF;
+ ret = p_wcsupr_s(NULL, 0);
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+
+ /* Test NULL input string and valid size. */
+ errno = EBADF;
+ ret = p_wcsupr_s(NULL, sizeof(testBuffer)/sizeof(WCHAR));
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+
+ /* Test empty string with zero size. */
+ errno = EBADF;
+ testBuffer[0] = '\0';
+ ret = p_wcsupr_s(testBuffer, 0);
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+ ok(testBuffer[0] == '\0', "Expected the buffer to be unchanged\n");
+
+ /* Test empty string with size of one. */
+ testBuffer[0] = '\0';
+ ret = p_wcsupr_s(testBuffer, 1);
+ ok(ret == 0, "Expected _wcsupr_s to succeed, got %d\n", ret);
+ ok(testBuffer[0] == '\0', "Expected the buffer to be unchanged\n");
+
+ /* Test one-byte buffer with zero size. */
+ errno = EBADF;
+ testBuffer[0] = 'x';
+ ret = p_wcsupr_s(testBuffer, 0);
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+ ok(testBuffer[0] == '\0', "Expected the first buffer character to be null\n");
+
+ /* Test one-byte buffer with size of one. */
+ errno = EBADF;
+ testBuffer[0] = 'x';
+ ret = p_wcsupr_s(testBuffer, 1);
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+ ok(testBuffer[0] == '\0', "Expected the first buffer character to be null\n");
+
+ /* Test invalid size. */
+ wcscpy(testBuffer, mixedString);
+ errno = EBADF;
+ ret = p_wcsupr_s(testBuffer, 0);
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+ ok(testBuffer[0] == '\0', "Expected the first buffer character to be null\n");
+
+ /* Test normal string uppercasing. */
+ wcscpy(testBuffer, mixedString);
+ ret = p_wcsupr_s(testBuffer, sizeof(mixedString)/sizeof(WCHAR));
+ ok(ret == 0, "Expected _wcsupr_s to succeed, got %d\n", ret);
+ ok(!wcscmp(testBuffer, expectedString), "Expected the string to be fully upper-case\n");
+
+ /* Test uppercasing with a shorter buffer size count. */
+ wcscpy(testBuffer, mixedString);
+ errno = EBADF;
+ ret = p_wcsupr_s(testBuffer, sizeof(mixedString)/sizeof(WCHAR) - 1);
+ ok(ret == EINVAL, "Expected _wcsupr_s to fail with EINVAL, got %d\n", ret);
+ ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);
+ ok(testBuffer[0] == '\0', "Expected the first buffer character to be null\n");
+
+ /* Test uppercasing with a longer buffer size count. */
+ wcscpy(testBuffer, mixedString);
+ ret = p_wcsupr_s(testBuffer, sizeof(testBuffer)/sizeof(WCHAR));
+ ok(ret == 0, "Expected _wcsupr_s to succeed, got %d\n", ret);
+ ok(!wcscmp(testBuffer, expectedString), "Expected the string to be fully upper-case\n");
+}
+