comctl32: datetime: initial tests for date and time picker

Kanit Therdsteerasukdi therdste at ucla.edu
Thu Feb 8 13:50:37 CST 2007


Hi,

I'm a student at UCLA taking CS130: Software Engineering.  For CS130, we
are writing conformance tests for Common Controls (comctl32).  I will be
working on the Date and Time Picker.  Attached is an initial test,
testing the getters and setters.

Disclaimer:  I have never seen any secret Microsoft source code.

-------------- next part --------------
>From f9577ab349027fc18e8b325086cdd24fee768777 Mon Sep 17 00:00:00 2001
From: Kanit Therdsteerasukdi <therdste at ucla.edu>
Date: Wed, 7 Feb 2007 23:52:33 -0800
Subject: [PATCH] initial tests for datetime

---
 dlls/comctl32/tests/Makefile.in |    1 +
 dlls/comctl32/tests/datetime.c  |  403 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 404 insertions(+), 0 deletions(-)

diff --git a/dlls/comctl32/tests/Makefile.in b/dlls/comctl32/tests/Makefile.in
index b879575..3e71106 100644
--- a/dlls/comctl32/tests/Makefile.in
+++ b/dlls/comctl32/tests/Makefile.in
@@ -7,6 +7,7 @@ IMPORTS   = comctl32 ole32 shlwapi user32 gdi32 advapi32 kernel32
 
 CTESTS = \
 	comboex.c \
+	datetime.c \
 	dpa.c \
 	header.c \
 	imagelist.c \
diff --git a/dlls/comctl32/tests/datetime.c b/dlls/comctl32/tests/datetime.c
new file mode 100755
index 0000000..59d3170
--- /dev/null
+++ b/dlls/comctl32/tests/datetime.c
@@ -0,0 +1,403 @@
+/* Unit test suite for datetime control.
+ *
+ * Copyright 2007 Kanit Therdsteerasukdi
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <assert.h>
+#include <windows.h>
+#include <commctrl.h>
+#include <stdio.h>
+
+#include "wine/test.h"
+
+static HINSTANCE g_hinst;
+
+static HWND create_datetime_control(DWORD style, DWORD exstyle)
+{
+  HWND hWndDateTime = NULL;  
+  
+  hWndDateTime = CreateWindowEx(0,
+				DATETIMEPICK_CLASS,
+				NULL,
+				style,
+				0,50,300,120,
+				NULL,
+				NULL,
+				g_hinst,
+				NULL);
+
+  assert(hWndDateTime!=NULL);
+  return hWndDateTime;
+}
+
+static void test_dtm_setformat(HWND hWndDateTime)
+{
+  LRESULT r;
+    
+  r = SendMessage(hWndDateTime, DTM_SETFORMAT, 0, (LPARAM)NULL);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETFORMAT, 0, (LPARAM)"'Today is: 'hh':'m':'s dddd MMM dd', 'yyyy");
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+
+  return;
+}
+
+static void test_dtm_setandgetmccolor(HWND hWndDateTime)
+{
+  LRESULT r;
+
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_BACKGROUND, RGB(0,0,0));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_BACKGROUND, RGB(255,255,255));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_BACKGROUND, RGB(100,180,220));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, MCSC_BACKGROUND, 0);
+  ok(r != -1 && r==RGB(100,180,220), "Expected %d, got %ld\n", RGB(100,180,220), r);
+    
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_MONTHBK, RGB(0,0,0));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_MONTHBK, RGB(255,255,255));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_MONTHBK, RGB(100,180,220));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, MCSC_MONTHBK, 0);
+  ok(r != -1 && r==RGB(100,180,220), "Expected %d, got %ld\n", RGB(100,180,220), r);
+    
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TEXT, RGB(0,0,0));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TEXT, RGB(255,255,255));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TEXT, RGB(100,180,220));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, MCSC_TEXT, 0);
+  ok(r != -1 && r==RGB(100,180,220), "Expected %d, got %ld\n", RGB(100,180,220), r);
+    
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TITLEBK, RGB(0,0,0));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TITLEBK, RGB(255,255,255));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TITLEBK, RGB(100,180,220));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, MCSC_TITLEBK, 0);
+  ok(r != -1 && r==RGB(100,180,220), "Expected %d, got %ld\n", RGB(100,180,220), r);
+    
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TITLETEXT, RGB(0,0,0));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TITLETEXT, RGB(255,255,255));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TITLETEXT, RGB(100,180,220));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, MCSC_TITLETEXT, 0);
+  ok(r != -1 && r==RGB(100,180,220), "Expected %d, got %ld\n", RGB(100,180,220), r);
+    
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TRAILINGTEXT, RGB(0,0,0));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TRAILINGTEXT, RGB(255,255,255));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETMCCOLOR, MCSC_TRAILINGTEXT, RGB(100,180,220));
+  ok(r != -1, "Expected COLORREF of previous value, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETMCCOLOR, MCSC_TRAILINGTEXT, 0);
+  ok(r != -1 && r==RGB(100,180,220), "Expected %d, got %ld\n", RGB(100,180,220), r);
+    
+  return;
+}
+
+static void test_dtm_setandgetmcfont(HWND hWndDateTime)
+{
+  HFONT hFontOrig, hFontNew;
+
+  hFontOrig = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
+  SendMessage(hWndDateTime, DTM_SETMCFONT, (WPARAM)hFontOrig, TRUE);
+  hFontNew = (HFONT)SendMessage(hWndDateTime, DTM_GETMCFONT, 0, 0);
+  ok(hFontOrig == hFontNew, "Expected hFontOrig==hFontNew, hFontOrig=%p, hFontNew=%p\n", hFontOrig, hFontNew);
+
+  return;
+}
+
+static void test_dtm_getmonthcal(HWND hWndDateTime)
+{
+  LRESULT r;
+    
+  todo_wine {
+    r = SendMessage(hWndDateTime, DTM_GETMONTHCAL, 0, 0);
+    ok(r == (LPARAM)NULL, "Expected NULL(no child month calendar control), got %ld\n", r);
+  }
+    
+  return;
+}
+
+static void test_dtm_setandgetrange(HWND hWndDateTime)
+{
+  LRESULT r;
+  SYSTEMTIME st[2];
+  SYSTEMTIME getSt[2];
+    
+  /* initialize st[0] to lowest possible value */
+  st[0].wYear=1601;
+  st[0].wMonth=1;
+  st[0].wDayOfWeek=0;
+  st[0].wDay=1;
+  st[0].wHour=0;
+  st[0].wMinute=0;
+  st[0].wSecond=0;
+  st[0].wMilliseconds=0;
+  /* intialize st[1] to all invalid numbers */
+  st[1].wYear=0;
+  st[1].wMonth=0;
+  st[1].wDayOfWeek=7;
+  st[1].wDay=0;
+  st[1].wHour=24;
+  st[1].wMinute=60;
+  st[1].wSecond=60;
+  st[1].wMilliseconds=1000;
+    
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN, (LPARAM)st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt);
+  ok(r == GDTR_MIN, "Expected %d, not %d(GDTR_MAX) or %d(GDTR_MIN | GDTR_MAX), got %ld\n", GDTR_MIN, GDTR_MAX, GDTR_MIN | GDTR_MAX, r);
+  ok(st[0].wYear == getSt[0].wYear, "Expected %d, got %d\n", st[0].wYear, getSt[0].wYear);
+  ok(st[0].wMonth == getSt[0].wMonth, "Expected %d, got %d\n", st[0].wMonth, getSt[0].wMonth);
+  ok(st[0].wDayOfWeek == getSt[0].wDayOfWeek, "Expected %d, got %d\n", st[0].wDayOfWeek, getSt[0].wDayOfWeek);
+  ok(st[0].wDay == getSt[0].wDay, "Expected %d, got %d\n", st[0].wDay, getSt[0].wDay);
+  ok(st[0].wHour == getSt[0].wHour, "Expected %d, got %d\n", st[0].wHour, getSt[0].wHour);
+  ok(st[0].wMinute == getSt[0].wMinute, "Expected %d, got %d\n", st[0].wMinute, getSt[0].wMinute);
+  ok(st[0].wSecond == getSt[0].wSecond, "Expected %d, got %d\n", st[0].wSecond, getSt[0].wSecond);
+  ok(st[0].wMilliseconds == getSt[0].wMilliseconds, "Expected %d, got %d\n", st[0].wMilliseconds, getSt[0].wMilliseconds);
+    
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MAX, (LPARAM)st);
+  ok(r == 0, "Expected zero(unsuccessful), got %ld(successful)\n", r);
+    
+  /* set st[0] to all invalid numbers */
+  st[0].wYear=0;
+  st[0].wMonth=0;
+  st[0].wDayOfWeek=7;
+  st[0].wDay=0;
+  st[0].wHour=24;
+  st[0].wMinute=60;
+  st[0].wSecond=60;
+  st[0].wMilliseconds=1000;
+  /* set st[1] to highest possible value */
+  st[1].wYear=30827;
+  st[1].wMonth=12;
+  st[1].wDayOfWeek=6;
+  st[1].wDay=31;
+  st[1].wHour=23;
+  st[1].wMinute=59;
+  st[1].wSecond=59;
+  st[1].wMilliseconds=999;
+
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MAX, (LPARAM)st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt);
+  todo_wine {
+    ok(r == GDTR_MAX, "Expected %d, not %d(GDTR_MIN) or %d(GDTR_MIN | GDTR_MAX), got %ld\n", GDTR_MAX, GDTR_MIN, GDTR_MIN | GDTR_MAX, r);
+  }
+  ok(st[1].wYear == getSt[1].wYear, "Expected %d, got %d\n", st[1].wYear, getSt[1].wYear);
+  ok(st[1].wMonth == getSt[1].wMonth, "Expected %d, got %d\n", st[1].wMonth, getSt[1].wMonth);
+  ok(st[1].wDayOfWeek == getSt[1].wDayOfWeek, "Expected %d, got %d\n", st[1].wDayOfWeek, getSt[1].wDayOfWeek);
+  ok(st[1].wDay == getSt[1].wDay, "Expected %d, got %d\n", st[1].wDay, getSt[1].wDay);
+  ok(st[1].wHour == getSt[1].wHour, "Expected %d, got %d\n", st[1].wHour, getSt[1].wHour);
+  ok(st[1].wMinute == getSt[1].wMinute, "Expected %d, got %d\n", st[1].wMinute, getSt[1].wMinute);
+  ok(st[1].wSecond == getSt[1].wSecond, "Expected %d, got %d\n", st[1].wSecond, getSt[1].wSecond);
+  ok(st[1].wMilliseconds == getSt[1].wMilliseconds, "Expected %d, got %d\n", st[1].wMilliseconds, getSt[1].wMilliseconds);
+   
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN, (LPARAM)st);
+  ok(r == 0, "Expected zero(unsuccessful), got %ld(successful)\n", r);
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st);
+  ok(r == 0, "Expected zero(unsuccessful), got %ld(successful)\n", r);
+    
+  /* set st[0] to highest possible value */
+  st[0].wYear=30827;
+  st[0].wMonth=12;
+  st[0].wDayOfWeek=6;
+  st[0].wDay=31;
+  st[0].wHour=23;
+  st[0].wMinute=59;
+  st[0].wSecond=59;
+  st[0].wMilliseconds=999;
+
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt);
+  ok(r == (GDTR_MIN | GDTR_MAX), "Expected %d, not %d(GDTR_MIN) or %d(GDTR_MAX), got %ld\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r);
+  ok(st[0].wYear == getSt[0].wYear, "Expected %d, got %d\n", st[0].wYear, getSt[0].wYear);
+  ok(st[0].wMonth == getSt[0].wMonth, "Expected %d, got %d\n", st[0].wMonth, getSt[0].wMonth);
+  ok(st[0].wDayOfWeek == getSt[0].wDayOfWeek, "Expected %d, got %d\n", st[0].wDayOfWeek, getSt[0].wDayOfWeek);
+  ok(st[0].wDay == getSt[0].wDay, "Expected %d, got %d\n", st[0].wDay, getSt[0].wDay);
+  ok(st[0].wHour == getSt[0].wHour, "Expected %d, got %d\n", st[0].wHour, getSt[0].wHour);
+  ok(st[0].wMinute == getSt[0].wMinute, "Expected %d, got %d\n", st[0].wMinute, getSt[0].wMinute);
+  ok(st[0].wSecond == getSt[0].wSecond, "Expected %d, got %d\n", st[0].wSecond, getSt[0].wSecond);
+  ok(st[0].wMilliseconds == getSt[0].wMilliseconds, "Expected %d, got %d\n", st[0].wMilliseconds, getSt[0].wMilliseconds);
+  ok(st[1].wYear == getSt[1].wYear, "Expected %d, got %d\n", st[1].wYear, getSt[1].wYear);
+  ok(st[1].wMonth == getSt[1].wMonth, "Expected %d, got %d\n", st[1].wMonth, getSt[1].wMonth);
+  ok(st[1].wDayOfWeek == getSt[1].wDayOfWeek, "Expected %d, got %d\n", st[1].wDayOfWeek, getSt[1].wDayOfWeek);
+  ok(st[1].wDay == getSt[1].wDay, "Expected %d, got %d\n", st[1].wDay, getSt[1].wDay);
+  ok(st[1].wHour == getSt[1].wHour, "Expected %d, got %d\n", st[1].wHour, getSt[1].wHour);
+  ok(st[1].wMinute == getSt[1].wMinute, "Expected %d, got %d\n", st[1].wMinute, getSt[1].wMinute);
+  ok(st[1].wSecond == getSt[1].wSecond, "Expected %d, got %d\n", st[1].wSecond, getSt[1].wSecond);
+  ok(st[1].wMilliseconds == getSt[1].wMilliseconds, "Expected %d, got %d\n", st[1].wMilliseconds, getSt[1].wMilliseconds);
+   
+  /* set st[0] to value higher than minimum */
+  st[0].wYear=1980;
+  st[0].wMonth=1;
+  st[0].wDayOfWeek=3;
+  st[0].wDay=23;
+  st[0].wHour=14;
+  st[0].wMinute=34;
+  st[0].wSecond=37;
+  st[0].wMilliseconds=465;
+  /* set st[1] to value lower than maximum */
+  st[1].wYear=2007;
+  st[1].wMonth=3;
+  st[1].wDayOfWeek=2;
+  st[1].wDay=31;
+  st[1].wHour=23;
+  st[1].wMinute=59;
+  st[1].wSecond=59;
+  st[1].wMilliseconds=999;
+    
+  r = SendMessage(hWndDateTime, DTM_SETRANGE, GDTR_MIN | GDTR_MAX, (LPARAM)st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETRANGE, 0, (LPARAM)getSt);
+  ok(r == (GDTR_MIN | GDTR_MAX), "Expected %d, not %d(GDTR_MIN) or %d(GDTR_MAX), got %ld\n", (GDTR_MIN | GDTR_MAX), GDTR_MIN, GDTR_MAX, r);
+  ok(st[0].wYear == getSt[0].wYear, "Expected %d, got %d\n", st[0].wYear, getSt[0].wYear);
+  ok(st[0].wMonth == getSt[0].wMonth, "Expected %d, got %d\n", st[0].wMonth, getSt[0].wMonth);
+  ok(st[0].wDayOfWeek == getSt[0].wDayOfWeek, "Expected %d, got %d\n", st[0].wDayOfWeek, getSt[0].wDayOfWeek);
+  ok(st[0].wDay == getSt[0].wDay, "Expected %d, got %d\n", st[0].wDay, getSt[0].wDay);
+  ok(st[0].wHour == getSt[0].wHour, "Expected %d, got %d\n", st[0].wHour, getSt[0].wHour);
+  ok(st[0].wMinute == getSt[0].wMinute, "Expected %d, got %d\n", st[0].wMinute, getSt[0].wMinute);
+  ok(st[0].wSecond == getSt[0].wSecond, "Expected %d, got %d\n", st[0].wSecond, getSt[0].wSecond);
+  ok(st[0].wMilliseconds == getSt[0].wMilliseconds, "Expected %d, got %d\n", st[0].wMilliseconds, getSt[0].wMilliseconds);
+  ok(st[1].wYear == getSt[1].wYear, "Expected %d, got %d\n", st[1].wYear, getSt[1].wYear);
+  ok(st[1].wMonth == getSt[1].wMonth, "Expected %d, got %d\n", st[1].wMonth, getSt[1].wMonth);
+  ok(st[1].wDayOfWeek == getSt[1].wDayOfWeek, "Expected %d, got %d\n", st[1].wDayOfWeek, getSt[1].wDayOfWeek);
+  ok(st[1].wDay == getSt[1].wDay, "Expected %d, got %d\n", st[1].wDay, getSt[1].wDay);
+  ok(st[1].wHour == getSt[1].wHour, "Expected %d, got %d\n", st[1].wHour, getSt[1].wHour);
+  ok(st[1].wMinute == getSt[1].wMinute, "Expected %d, got %d\n", st[1].wMinute, getSt[1].wMinute);
+  ok(st[1].wSecond == getSt[1].wSecond, "Expected %d, got %d\n", st[1].wSecond, getSt[1].wSecond);
+  ok(st[1].wMilliseconds == getSt[1].wMilliseconds, "Expected %d, got %d\n", st[1].wMilliseconds, getSt[1].wMilliseconds);
+   
+  return;
+}
+
+static void test_dtm_setandgetsystemtime(HWND hWndDateTime)
+{
+  LRESULT r;
+  SYSTEMTIME st;
+  SYSTEMTIME getSt;
+
+  r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_NONE, (LPARAM)&st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);
+  r = SendMessage(hWndDateTime, DTM_GETSYSTEMTIME, 0, (LPARAM)&getSt);
+  ok(r == GDT_NONE, "Expected %d, not %d(GDT_VALID) or %d(GDT_ERROR), got %ld\n", GDT_NONE, GDT_VALID, GDT_ERROR, r);      
+        
+  /* set st to lowest possible value */
+  st.wYear=1601;
+  st.wMonth=1;
+  st.wDayOfWeek=0;
+  st.wDay=1;
+  st.wHour=0;
+  st.wMinute=0;
+  st.wSecond=0;
+  st.wMilliseconds=0;
+    
+  r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);      
+
+  /* set st to highest possible value */
+  st.wYear=30827;
+  st.wMonth=12;
+  st.wDayOfWeek=6;
+  st.wDay=31;
+  st.wHour=23;
+  st.wMinute=59;
+  st.wSecond=59;
+  st.wMilliseconds=999;
+    
+  r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);      
+
+  /* set st to value between min and max */
+  st.wYear=1980;
+  st.wMonth=1;
+  st.wDayOfWeek=3;
+  st.wDay=23;
+  st.wHour=14;
+  st.wMinute=34;
+  st.wSecond=37;
+  st.wMilliseconds=465;
+    
+  r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st);
+  ok(r != 0, "Expected nonzero, got %ld\n", r);      
+  r = SendMessage(hWndDateTime, DTM_GETSYSTEMTIME, 0, (LPARAM)&getSt);
+  ok(r == GDT_VALID, "Expected %d, not %d(GDT_NONE) or %d(GDT_ERROR), got %ld\n", GDT_VALID, GDT_NONE, GDT_ERROR, r);      
+  ok(st.wYear == getSt.wYear, "Expected %d, got %d\n", st.wYear, getSt.wYear);
+  ok(st.wMonth == getSt.wMonth, "Expected %d, got %d\n", st.wMonth, getSt.wMonth);
+  ok(st.wDayOfWeek == getSt.wDayOfWeek, "Expected %d, got %d\n", st.wDayOfWeek, getSt.wDayOfWeek);
+  ok(st.wDay == getSt.wDay, "Expected %d, got %d\n", st.wDay, getSt.wDay);
+  ok(st.wHour == getSt.wHour, "Expected %d, got %d\n", st.wHour, getSt.wHour);
+  ok(st.wMinute == getSt.wMinute, "Expected %d, got %d\n", st.wMinute, getSt.wMinute);
+  ok(st.wSecond == getSt.wSecond, "Expected %d, got %d\n", st.wSecond, getSt.wSecond);
+  ok(st.wMilliseconds == getSt.wMilliseconds, "Expected %d, got %d\n", st.wMilliseconds, getSt.wMilliseconds);
+    
+  /* set st to invalid value */
+  st.wYear=0;
+  st.wMonth=0;
+  st.wDayOfWeek=7;
+  st.wDay=0;
+  st.wHour=24;
+  st.wMinute=60;
+  st.wSecond=60;
+  st.wMilliseconds=1000;
+
+  todo_wine {
+    r = SendMessage(hWndDateTime, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st);
+    ok(r == 0, "Expected zero(not successful), got %ld(succesful)\n", r);     
+  }
+
+  return;
+}
+
+static void test_datetime_control(void)
+{
+  HWND hWndDateTime;
+    
+  hWndDateTime = create_datetime_control(DTS_SHOWNONE, 0);
+
+  test_dtm_setformat(hWndDateTime);
+  test_dtm_setandgetmccolor(hWndDateTime);
+  test_dtm_setandgetmcfont(hWndDateTime);
+  test_dtm_getmonthcal(hWndDateTime);
+  test_dtm_setandgetrange(hWndDateTime);
+  test_dtm_setandgetsystemtime(hWndDateTime);
+    
+  DestroyWindow(hWndDateTime);
+}
+
+START_TEST(datetime)
+{
+  INITCOMMONCONTROLSEX icex;
+
+  g_hinst = GetModuleHandleA(NULL);
+
+  icex.dwSize = sizeof(icex);
+  icex.dwICC = ICC_DATE_CLASSES;
+  InitCommonControlsEx(&icex);
+  
+  test_datetime_control();
+}
-- 
1.4.4.4



More information about the wine-patches mailing list