Dmitry Timoshkov : kernel32/tests: Add tests for GetThreadSelectorEntry.
Alexandre Julliard
julliard at winehq.org
Fri Jul 15 09:07:04 CDT 2016
Module: wine
Branch: master
Commit: 6870f3c0494876d2845d17ae164df82090a3d392
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6870f3c0494876d2845d17ae164df82090a3d392
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Thu Jul 14 00:18:18 2016 +0200
kernel32/tests: Add tests for GetThreadSelectorEntry.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/thread.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 034bdaa..b5ad1da 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -1100,6 +1100,46 @@ static void test_SetThreadContext(void)
CloseHandle( thread );
}
+static void test_GetThreadSelectorEntry(void)
+{
+ LDT_ENTRY entry;
+ CONTEXT ctx;
+ DWORD limit;
+ void *base;
+ BOOL ret;
+
+ memset(&ctx, 0x11, sizeof(ctx));
+ ctx.ContextFlags = CONTEXT_SEGMENTS | CONTEXT_CONTROL;
+ ret = GetThreadContext(GetCurrentThread(), &ctx);
+ ok(ret, "GetThreadContext error %u\n", GetLastError());
+ ok(!HIWORD(ctx.SegCs), "expected HIWORD(SegCs) == 0, got %u\n", ctx.SegCs);
+ ok(!HIWORD(ctx.SegDs), "expected HIWORD(SegDs) == 0, got %u\n", ctx.SegDs);
+ ok(!HIWORD(ctx.SegFs), "expected HIWORD(SegFs) == 0, got %u\n", ctx.SegFs);
+
+ ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegCs, &entry);
+ ok(ret, "GetThreadSelectorEntry(SegCs) error %u\n", GetLastError());
+ ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegDs, &entry);
+ ok(ret, "GetThreadSelectorEntry(SegDs) error %u\n", GetLastError());
+
+ memset(&entry, 0x11, sizeof(entry));
+ ret = GetThreadSelectorEntry(GetCurrentThread(), ctx.SegFs, &entry);
+ ok(ret, "GetThreadSelectorEntry(SegFs) error %u\n", GetLastError());
+ entry.HighWord.Bits.Type &= ~1; /* ignore accessed bit */
+
+ base = (void *)((entry.HighWord.Bits.BaseHi << 24) | (entry.HighWord.Bits.BaseMid << 16) | entry.BaseLow);
+ limit = (entry.HighWord.Bits.LimitHi << 16) | entry.LimitLow;
+
+ ok(base == NtCurrentTeb(), "expected %p, got %p\n", NtCurrentTeb(), base);
+ ok(limit == 0x0fff || limit == 0x4000, "expected 0x0fff or 0x4000, got %#x\n", limit);
+ ok(entry.HighWord.Bits.Type == 0x12, "expected 0x12, got %#x\n", entry.HighWord.Bits.Type);
+ ok(entry.HighWord.Bits.Dpl == 3, "expected 3, got %u\n", entry.HighWord.Bits.Dpl);
+ ok(entry.HighWord.Bits.Pres == 1, "expected 1, got %u\n", entry.HighWord.Bits.Pres);
+ ok(entry.HighWord.Bits.Sys == 0, "expected 0, got %u\n", entry.HighWord.Bits.Sys);
+ ok(entry.HighWord.Bits.Reserved_0 == 0, "expected 0, got %u\n", entry.HighWord.Bits.Reserved_0);
+ ok(entry.HighWord.Bits.Default_Big == 1, "expected 1, got %u\n", entry.HighWord.Bits.Default_Big);
+ ok(entry.HighWord.Bits.Granularity == 0, "expected 0, got %u\n", entry.HighWord.Bits.Granularity);
+}
+
#endif /* __i386__ */
static HANDLE finish_event;
@@ -1965,6 +2005,7 @@ START_TEST(thread)
test_GetThreadExitCode();
#ifdef __i386__
test_SetThreadContext();
+ test_GetThreadSelectorEntry();
#endif
test_QueueUserWorkItem();
test_RegisterWaitForSingleObject();
More information about the wine-cvs
mailing list