[PATCH 3/7] Use a single calendar for hittesting tests, make point calculation at runtime
Nikolay Sivov
bunglehead at gmail.com
Mon Sep 28 13:50:21 CDT 2009
---
dlls/comctl32/tests/monthcal.c | 181 ++++++++++++++++++++++------------------
1 files changed, 99 insertions(+), 82 deletions(-)
diff --git a/dlls/comctl32/tests/monthcal.c b/dlls/comctl32/tests/monthcal.c
index 8561b8c..880ff69 100644
--- a/dlls/comctl32/tests/monthcal.c
+++ b/dlls/comctl32/tests/monthcal.c
@@ -33,6 +33,7 @@
#include "msg.h"
#define expect(expected, got) ok(expected == got, "Expected %d, got %d\n", expected, got);
+#define expect_hex(expected, got) ok(expected == got, "Expected %x, got %x\n", expected, got);
#define NUM_MSG_SEQUENCES 2
#define PARENT_SEQ_INDEX 0
@@ -858,6 +859,7 @@ static void test_monthcal_hittest(void)
LONG x;
UINT title_index;
HWND hwnd;
+ RECT r;
static const UINT title_hits[] =
{ MCHT_NOWHERE, MCHT_TITLEBK, MCHT_TITLEBTNPREV, MCHT_TITLEBK,
MCHT_TITLEMONTH, MCHT_TITLEBK, MCHT_TITLEYEAR, MCHT_TITLEBK,
@@ -880,6 +882,16 @@ static void test_monthcal_hittest(void)
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM)NULL);
expect(-1, res);
+ /* resize control to display single Calendar */
+ res = SendMessage(hwnd, MCM_GETMINREQRECT, 0, (LPARAM)&r);
+ if (res == 0)
+ {
+ win_skip("Message MCM_GETMINREQRECT unsupported. Skipping.\n");
+ DestroyWindow(hwnd);
+ return;
+ }
+ MoveWindow(hwnd, 0, 0, r.right, r.bottom, FALSE);
+
flush_sequences(sequences, NUM_MSG_SEQUENCES);
st.wYear = 2007;
@@ -894,60 +906,60 @@ static void test_monthcal_hittest(void)
res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st);
expect(1,res);
- /* (0, 0) is the top left of the control and should not be active */
+ /* (0, 0) is the top left of the control - title */
mchit.cbSize = MCHITTESTINFO_V1_SIZE;
mchit.pt.x = 0;
mchit.pt.y = 0;
- res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
+ res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM)&mchit);
expect(0, mchit.pt.x);
expect(0, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_NOWHERE, res);}
+ todo_wine expect_hex(MCHT_TITLE, res);
- /* (300, 400) is the bottom right of the control and should not be active */
- mchit.pt.x = 300;
- mchit.pt.y = 400;
- res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(300, mchit.pt.x);
- expect(400, mchit.pt.y);
+ /* bottom right of the control and should not be active */
+ mchit.pt.x = r.right;
+ mchit.pt.y = r.bottom;
+ res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM)&mchit);
+ expect(r.right, mchit.pt.x);
+ expect(r.bottom, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_NOWHERE, res);}
+ todo_wine expect_hex(MCHT_NOWHERE, res);
- /* (500, 500) is completely out of the control and should not be active */
- mchit.pt.x = 500;
- mchit.pt.y = 500;
+ /* completely out of the control, should not be active */
+ mchit.pt.x = 2 * r.right;
+ mchit.pt.y = 2 * r.bottom;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(500, mchit.pt.x);
- expect(500, mchit.pt.y);
+ expect(2 * r.right, mchit.pt.x);
+ expect(2 * r.bottom, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_NOWHERE, res);}
+ todo_wine expect_hex(MCHT_NOWHERE, res);
- /* (120, 180) is in active area - calendar background */
- mchit.pt.x = 120;
- mchit.pt.y = 180;
+ /* in active area - day of the week */
+ mchit.pt.x = r.right / 2;
+ mchit.pt.y = r.bottom / 2;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(120, mchit.pt.x);
- expect(180, mchit.pt.y);
+ expect(r.right / 2, mchit.pt.x);
+ expect(r.bottom / 2, mchit.pt.y);
expect(mchit.uHit, res);
- expect(MCHT_CALENDARBK, res);
+ expect_hex(MCHT_CALENDARDATE, res);
- /* (70, 70) is in active area - day of the week */
- mchit.pt.x = 70;
- mchit.pt.y = 70;
+ /* in active area - day of the week #2 */
+ mchit.pt.x = r.right / 14; /* half of first day rect */
+ mchit.pt.y = r.bottom / 2;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(70, mchit.pt.x);
- expect(70, mchit.pt.y);
+ expect(r.right / 14, mchit.pt.x);
+ expect(r.bottom / 2, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_CALENDARDAY, res);}
+ todo_wine expect_hex(MCHT_CALENDARDATE, res);
- /* (70, 90) is in active area - date from prev month */
- mchit.pt.x = 70;
- mchit.pt.y = 90;
+ /* in active area - date from prev month */
+ mchit.pt.x = r.right / 14; /* half of first day rect */
+ mchit.pt.y = 6 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(70, mchit.pt.x);
- expect(90, mchit.pt.y);
+ expect(r.right / 14, mchit.pt.x);
+ expect(6 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_CALENDARDATEPREV, res);}
+ todo_wine expect_hex(MCHT_CALENDARDATEPREV, res);
#if 0
/* (125, 115) is in active area - date from this month */
@@ -960,91 +972,96 @@ static void test_monthcal_hittest(void)
expect(MCHT_CALENDARDATE, res);
#endif
- /* (80, 220) is in active area - background section of the title */
- mchit.pt.x = 80;
- mchit.pt.y = 220;
+ /* in active area - background section of the title */
+ mchit.pt.x = 2 * r.right / 7;
+ mchit.pt.y = 2 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(80, mchit.pt.x);
- expect(220, mchit.pt.y);
+ expect(2 * r.right / 7, mchit.pt.x);
+ expect(2 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_TITLEBK, res);}
+ expect_hex(MCHT_TITLEBK, res);
- /* (140, 215) is in active area - month section of the title */
- mchit.pt.x = 140;
- mchit.pt.y = 215;
+ /* in active area - month section of the title */
+ mchit.pt.x = r.right / 2;
+ mchit.pt.y = 2 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(140, mchit.pt.x);
- expect(215, mchit.pt.y);
+ expect(r.right / 2, mchit.pt.x);
+ expect(2 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_TITLEMONTH, res);}
+ expect_hex(MCHT_TITLE, res);
- /* (170, 215) is in active area - year section of the title */
- mchit.pt.x = 170;
- mchit.pt.y = 215;
+ /* in active area - year section of the title */
+ mchit.pt.x = 3 * r.right / 4;
+ mchit.pt.y = 2 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(170, mchit.pt.x);
- expect(215, mchit.pt.y);
+ expect(3 * r.right / 4, mchit.pt.x);
+ expect(2 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_TITLEYEAR, res);}
+ expect_hex(MCHT_TITLE, res);
- /* (150, 260) is in active area - date from this month */
- mchit.pt.x = 150;
- mchit.pt.y = 260;
+ /* in active area - date from next month */
+ mchit.pt.x = 11 * r.right / 14;
+ mchit.pt.y = 16 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(150, mchit.pt.x);
- expect(260, mchit.pt.y);
+ expect(11 * r.right / 14, mchit.pt.x);
+ expect(16 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_CALENDARDATE, res);}
+ expect_hex(MCHT_CALENDARDATENEXT, res);
- /* (150, 350) is in active area - date from next month */
- mchit.pt.x = 150;
- mchit.pt.y = 350;
+ /* in active area - today link */
+ mchit.pt.x = r.right / 14;
+ mchit.pt.y = 18 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(150, mchit.pt.x);
- expect(350, mchit.pt.y);
+ expect(r.right / 14, mchit.pt.x);
+ expect(18 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_CALENDARDATENEXT, res);}
+ expect_hex(MCHT_TODAYLINK, res);
- /* (150, 370) is in active area - today link */
- mchit.pt.x = 150;
- mchit.pt.y = 370;
+ /* in active area - today link */
+ mchit.pt.x = r.right / 2;
+ mchit.pt.y = 18 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(150, mchit.pt.x);
- expect(370, mchit.pt.y);
+ expect(r.right / 2, mchit.pt.x);
+ expect(18 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_TODAYLINK, res);}
+ expect_hex(MCHT_TODAYLINK, res);
- /* (70, 370) is in active area - today link */
- mchit.pt.x = 70;
- mchit.pt.y = 370;
+ /* in active area - today link */
+ mchit.pt.x = r.right / 10;
+ mchit.pt.y = 18 * r.bottom / 19;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
- expect(70, mchit.pt.x);
- expect(370, mchit.pt.y);
+ expect(r.right / 10, mchit.pt.x);
+ expect(18 * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
- todo_wine {expect(MCHT_TODAYLINK, res);}
+ expect_hex(MCHT_TODAYLINK, res);
ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_hit_test_seq, "monthcal hit test", TRUE);
/* The horizontal position of title bar elements depends on locale (y pos
is constant), so we sample across a horizontal line and make sure we
find all elements. */
- mchit.pt.y = 40;
+ mchit.pt.y = (5/2) * r.bottom / 19;
title_index = 0;
- for (x = 0; x < 300; x++){
+
+ for (x = 0; x < r.right; x++){
mchit.pt.x = x;
res = SendMessage(hwnd, MCM_HITTEST, 0, (LPARAM) & mchit);
expect(x, mchit.pt.x);
- expect(40, mchit.pt.y);
+ expect((5/2) * r.bottom / 19, mchit.pt.y);
expect(mchit.uHit, res);
if (res != title_hits[title_index]){
title_index++;
if (sizeof(title_hits) / sizeof(title_hits[0]) <= title_index)
break;
- todo_wine {expect(title_hits[title_index], res);}
+
+ todo_wine
+ expect_hex(title_hits[title_index], res);
}
}
- todo_wine {ok(300 <= x && title_index + 1 == sizeof(title_hits) / sizeof(title_hits[0]),
- "Wrong title layout\n");}
+
+ todo_wine
+ ok(r.right <= x && title_index + 1 == sizeof(title_hits) / sizeof(title_hits[0]),
+ "Wrong title layout\n");
DestroyWindow(hwnd);
}
--
1.5.6.5
--=-47kCNNA4V96G6qwSKIGP--
More information about the wine-patches
mailing list