[1/2] msvcirt/tests: Add more streambuf tests (try 2)
Iván Matellanes
matellanesivan at gmail.com
Fri Jun 12 04:51:48 CDT 2015
Try 2: call streambuf_dtor for sb3
---
dlls/msvcirt/tests/msvcirt.c | 51 +++++++++++++++++++++++++++++++++++---------
1 file changed, 41 insertions(+), 10 deletions(-)
diff --git a/dlls/msvcirt/tests/msvcirt.c b/dlls/msvcirt/tests/msvcirt.c
index 057c6c8..3ee987b 100644
--- a/dlls/msvcirt/tests/msvcirt.c
+++ b/dlls/msvcirt/tests/msvcirt.c
@@ -196,7 +196,7 @@ static DWORD WINAPI lock_streambuf(void *arg)
static void test_streambuf(void)
{
- streambuf sb, sb2, *psb;
+ streambuf sb, sb2, sb3, *psb;
struct streambuf_lock_arg lock_arg;
HANDLE thread;
char reserve[16];
@@ -205,6 +205,7 @@ static void test_streambuf(void)
memset(&sb, 0xab, sizeof(streambuf));
memset(&sb2, 0xab, sizeof(streambuf));
+ memset(&sb3, 0xab, sizeof(streambuf));
/* constructors */
call_func1(p_streambuf_ctor, &sb);
@@ -219,6 +220,11 @@ static void test_streambuf(void)
ok(sb2.base == reserve, "wrong base pointer, expected %p got %p\n", reserve, sb2.base);
ok(sb2.ebuf == reserve+16, "wrong ebuf pointer, expected %p got %p\n", reserve+16, sb2.ebuf);
ok(sb.lock.LockCount == -1, "wrong critical section state, expected -1 got %d\n", sb.lock.LockCount);
+ call_func1(p_streambuf_ctor, &sb3);
+ ok(sb3.allocated == 0, "wrong allocate value, expected 0 got %d\n", sb3.allocated);
+ ok(sb3.unbuffered == 0, "wrong unbuffered value, expected 0 got %d\n", sb3.unbuffered);
+ ok(sb3.base == NULL, "wrong base pointer, expected %p got %p\n", NULL, sb3.base);
+ ok(sb3.ebuf == NULL, "wrong ebuf pointer, expected %p got %p\n", NULL, sb3.ebuf);
/* setlock */
ok(sb.do_lock == -1, "expected do_lock value -1, got %d\n", sb.do_lock);
@@ -326,34 +332,58 @@ static void test_streambuf(void)
ok(ret == 1, "doallocate failed, got %d\n", ret);
ok(sb2.allocated == 1, "wrong allocate value, expected 1 got %d\n", sb2.allocated);
ok(sb2.ebuf - sb2.base == 512 , "wrong reserve area size, expected 512 got %p-%p\n", sb2.ebuf, sb2.base);
+ ret = (int) call_func1(p_streambuf_doallocate, &sb3);
+ ok(ret == 1, "doallocate failed, got %d\n", ret);
+ ok(sb3.allocated == 1, "wrong allocate value, expected 1 got %d\n", sb3.allocated);
+ ok(sb3.ebuf - sb3.base == 512 , "wrong reserve area size, expected 512 got %p-%p\n", sb3.ebuf, sb3.base);
+
+ /* sb: buffered, space available */
+ sb.eback = sb.gptr = sb.base;
+ sb.egptr = sb.base + 256;
+ sb.pbase = sb.pptr = sb.base + 256;
+ sb.epptr = sb.base + 512;
+ /* sb2: buffered, no space available */
+ sb2.eback = sb2.base;
+ sb2.gptr = sb2.egptr = sb2.base + 256;
+ sb2.pbase = sb2.base + 256;
+ sb2.pptr = sb2.epptr = sb2.base + 512;
+ /* sb3: unbuffered */
+ sb3.unbuffered = 1;
/* gbump */
- sb.eback = sb.base + 100;
- sb.gptr = sb.base + 104;
- sb.egptr = sb.base + 110;
call_func2(p_streambuf_gbump, &sb, 10);
- ok(sb.gptr == sb.eback + 14, "advance get pointer failed, expected %p got %p\n", sb.eback + 14, sb.gptr);
+ ok(sb.gptr == sb.eback + 10, "advance get pointer failed, expected %p got %p\n", sb.eback + 10, sb.gptr);
call_func2(p_streambuf_gbump, &sb, -15);
- ok(sb.gptr == sb.eback - 1, "advance get pointer failed, expected %p got %p\n", sb.eback - 1, sb.gptr);
+ ok(sb.gptr == sb.eback - 5, "advance get pointer failed, expected %p got %p\n", sb.eback - 5, sb.gptr);
+ sb.gptr = sb.eback;
/* pbump */
- sb.pbase = sb.pptr = sb.base + 200;
- sb.epptr = sb.base + 210;
call_func2(p_streambuf_pbump, &sb, -2);
ok(sb.pptr == sb.pbase - 2, "advance put pointer failed, expected %p got %p\n", sb.pbase - 2, sb.pptr);
call_func2(p_streambuf_pbump, &sb, 20);
ok(sb.pptr == sb.pbase + 18, "advance put pointer failed, expected %p got %p\n", sb.pbase + 18, sb.pptr);
+ sb.pptr = sb.pbase;
/* sync */
ret = (int) call_func1(p_streambuf_sync, &sb);
ok(ret == EOF, "sync failed, expected EOF got %d\n", ret);
sb.gptr = sb.egptr;
ret = (int) call_func1(p_streambuf_sync, &sb);
- ok(ret == EOF, "sync failed, expected EOF got %d\n", ret);
- sb.pptr = sb.pbase;
+ ok(ret == 0, "sync failed, expected 0 got %d\n", ret);
+ sb.gptr = sb.egptr + 1;
ret = (int) call_func1(p_streambuf_sync, &sb);
+ todo_wine ok(ret == 0, "sync failed, expected 0 got %d\n", ret);
+ sb.gptr = sb.eback;
+ ret = (int) call_func1(p_streambuf_sync, &sb2);
+ ok(ret == EOF, "sync failed, expected EOF got %d\n", ret);
+ sb2.pptr = sb2.pbase;
+ ret = (int) call_func1(p_streambuf_sync, &sb2);
ok(ret == 0, "sync failed, expected 0 got %d\n", ret);
+ sb2.pptr = sb2.pbase - 1;
ret = (int) call_func1(p_streambuf_sync, &sb2);
+ todo_wine ok(ret == 0, "sync failed, expected 0 got %d\n", ret);
+ sb2.pptr = sb2.epptr;
+ ret = (int) call_func1(p_streambuf_sync, &sb3);
ok(ret == 0, "sync failed, expected 0 got %d\n", ret);
SetEvent(lock_arg.test[3]);
@@ -361,6 +391,7 @@ static void test_streambuf(void)
call_func1(p_streambuf_dtor, &sb);
call_func1(p_streambuf_dtor, &sb2);
+ call_func1(p_streambuf_dtor, &sb3);
for (i = 0; i < 4; i++) {
CloseHandle(lock_arg.lock[i]);
CloseHandle(lock_arg.test[i]);
--
2.1.4
More information about the wine-patches
mailing list