riched32: Modified tests to show paragraph break inconsistency.

Several carriage returns followed by a line break were being handled as
a single paragraph break, when actually native richedit controls may
count this as several line breaks.
This commit is contained in:
Dylan Smith 2009-01-27 03:38:43 -05:00 committed by Alexandre Julliard
parent 53d3c46bf9
commit 29ddbce288
1 changed files with 38 additions and 24 deletions

View File

@ -71,19 +71,18 @@ static void test_WM_SETTEXT()
LRESULT result; LRESULT result;
/* This test attempts to show that WM_SETTEXT on a riched32 control does not /* This test attempts to show that WM_SETTEXT on a riched32 control does not
attempt to modify the text that is pasted into the control, and should * attempt to modify the text that is pasted into the control, and should
return it as is. In particular, \r\r\n is NOT converted, unlike riched20. * return it as is. In particular, \r\r\n is NOT converted, unlike riched20.
Currently, builtin riched32 mangles solitary \r or \n when not part of *
a \r\n pair. * For riched32, the rules for breaking lines seem to be the following:
* - \r\n is one line break. This is the normal case.
For riched32, the rules for breaking lines seem to be the following: * - \r{0,2}\n is one line break. In particular, \n by itself is a line break.
- \r\n is one line break. This is the normal case. * - \r{0,N-1}\r\r\n is N line breaks.
- \r{0,N}\n is one line break. In particular, \n by itself is a line break. * - \n{1,N} are that many line breaks.
- \n{1,N} are that many line breaks. * - \r with text or other characters (except \n) past it, is a line break. That
- \r with text or other characters (except \n) past it, is a line break. That * is, a run of \r{N} without a terminating \n is considered N line breaks
is, a run of \r{N} without a terminating \n is considered N line breaks * - \r at the end of the text is NOT a line break. This differs from riched20,
- \r at the end of the text is NOT a line break. This differs from riched20, * where \r at the end of the text is a proper line break.
where \r at the end of the text is a proper line break.
*/ */
#define TEST_SETTEXT(a, b, nlines) \ #define TEST_SETTEXT(a, b, nlines) \
@ -357,9 +356,10 @@ static const struct getline_s {
const char *text; const char *text;
} gl[] = { } gl[] = {
{0, 10, "foo bar\r\n"}, {0, 10, "foo bar\r\n"},
{1, 10, "\n"}, {1, 10, "\r"},
{2, 10, "bar\n"}, {2, 10, "\r\r\n"},
{3, 10, "\r\n"}, {3, 10, "bar\n"},
{4, 10, "\r\n"},
/* Buffer smaller than line length */ /* Buffer smaller than line length */
{0, 2, "foo bar\r"}, {0, 2, "foo bar\r"},
@ -374,7 +374,8 @@ static void test_EM_GETLINE(void)
static const int nBuf = 1024; static const int nBuf = 1024;
char dest[1024], origdest[1024]; char dest[1024], origdest[1024];
const char text[] = "foo bar\r\n" const char text[] = "foo bar\r\n"
"\n" "\r"
"\r\r\n"
"bar\n"; "bar\n";
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text); SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text);
@ -391,8 +392,12 @@ static void test_EM_GETLINE(void)
/* EM_GETLINE appends a "\r\0" to the end of the line /* EM_GETLINE appends a "\r\0" to the end of the line
* nCopied counts up to and including the '\r' */ * nCopied counts up to and including the '\r' */
nCopied = SendMessage(hwndRichEdit, EM_GETLINE, gl[i].line, (LPARAM) dest); nCopied = SendMessage(hwndRichEdit, EM_GETLINE, gl[i].line, (LPARAM) dest);
ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied, if (i >= 1 && i <= 4)
expected_nCopied); todo_wine ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied,
expected_nCopied);
else
ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied,
expected_nCopied);
/* two special cases since a parameter is passed via dest */ /* two special cases since a parameter is passed via dest */
if (gl[i].buffer_len == 0) if (gl[i].buffer_len == 0)
ok(!dest[0] && !dest[1] && !strncmp(dest+2, origdest+2, nBuf-2), ok(!dest[0] && !dest[1] && !strncmp(dest+2, origdest+2, nBuf-2),
@ -402,11 +407,20 @@ static void test_EM_GETLINE(void)
!strncmp(dest+2, origdest+2, nBuf-2), "buffer_len=1\n"); !strncmp(dest+2, origdest+2, nBuf-2), "buffer_len=1\n");
else else
{ {
ok(!strncmp(dest, gl[i].text, expected_bytes_written), if (i >= 1 && i <= 4)
"%d: expected_bytes_written=%d\n", i, expected_bytes_written); todo_wine ok(!strncmp(dest, gl[i].text, expected_bytes_written),
ok(!strncmp(dest + expected_bytes_written, origdest "%d: expected_bytes_written=%d\n", i, expected_bytes_written);
+ expected_bytes_written, nBuf - expected_bytes_written), else
"%d: expected_bytes_written=%d\n", i, expected_bytes_written); ok(!strncmp(dest, gl[i].text, expected_bytes_written),
"%d: expected_bytes_written=%d\n", i, expected_bytes_written);
if (i >= 1 && i <= 2)
todo_wine ok(!strncmp(dest + expected_bytes_written, origdest
+ expected_bytes_written, nBuf - expected_bytes_written),
"%d: expected_bytes_written=%d\n", i, expected_bytes_written);
else
ok(!strncmp(dest + expected_bytes_written, origdest
+ expected_bytes_written, nBuf - expected_bytes_written),
"%d: expected_bytes_written=%d\n", i, expected_bytes_written);
} }
} }