Jeff Latimer : usp10: Add tests for ScriptStringAnalyse and ScriptStringFree.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Oct 24 13:39:53 CDT 2006


Module: wine
Branch: master
Commit: 37e7de1208eb6003d56c32f8e55259f03f28d91d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=37e7de1208eb6003d56c32f8e55259f03f28d91d

Author: Jeff Latimer <lats at yless4u.com.au>
Date:   Tue Oct 24 19:02:17 2006 +1000

usp10: Add tests for ScriptStringAnalyse and ScriptStringFree.

---

 dlls/usp10/tests/usp10.c |   92 ++++++++++++++++++++++++++-------------------
 1 files changed, 53 insertions(+), 39 deletions(-)

diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index 31df9c7..4fde627 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -614,30 +614,38 @@ static void test_ScriptXtoX(void)
 
 static void test_ScriptString(void)
 {
+/*******************************************************************************************
+ *
+ * This set of tests are for the string functions of uniscribe.  The ScriptStringAnalyse
+ * function allocates memory pointed to by the SCRIPT_STRING_ANALYSIS ssa pointer.  This 
+ * memory if freed by ScriptStringFree.  There needs to be a valid hdc for this this as 
+ * ScriptStrinAnalyse calls ScriptSItemize, ScriptShape and ScriptPlace which require it.
+ *
+ */
+
     HRESULT         hr;
     HWND            hwnd;
     HDC             hdc = 0;
-    WCHAR           teststr[] = {'T', 'e', 's', 't', 'a', '\0'};
-    void            *pString = (WCHAR *) &teststr;
-    int             cString = 5;
-    int             cGlyphs = cString * 2 + 16;
-    int             iCharset = -1;
-    DWORD           dwFlags = SSA_GLYPHS;
-    int             iReqWidth = 100;
-    SCRIPT_CONTROL  psControl;
-    SCRIPT_STATE    psState;
-    const int       piDx[5] = {10, 10, 10, 10, 10};
-    SCRIPT_TABDEF   pTabdef;
-    const BYTE      pbInClass = 0;
-    SCRIPT_STRING_ANALYSIS pssa = NULL;
-
-    int             iX = 10; 
-    int             iY = 100;
-    UINT            uOptions = 0; 
-    const RECT      prc = {0, 50, 100, 100}; 
-    int             iMinSel = 0; 
-    int             iMaxSel = 0;
-    BOOL            fDisabled = FALSE;
+    WCHAR           teststr[] = {'T','e','s','t','1',' ','a','2','b','3', '\0'};
+    int             String = (sizeof(teststr)/sizeof(WCHAR))-1;
+    int             Glyphs = String * 2 + 16;
+    int             Charset;
+    DWORD           Flags = SSA_GLYPHS;
+    int             ReqWidth = 100;
+    SCRIPT_CONTROL  Control;
+    SCRIPT_STATE    State;
+    const int       Dx[5] = {10, 10, 10, 10, 10};
+    SCRIPT_TABDEF   Tabdef;
+    const BYTE      InClass = 0;
+    SCRIPT_STRING_ANALYSIS ssa = NULL;
+
+    int             X = 10; 
+    int             Y = 100;
+    UINT            Options = 0; 
+    const RECT      rc = {0, 50, 100, 100}; 
+    int             MinSel = 0; 
+    int             MaxSel = 0;
+    BOOL            Disabled = FALSE;
 
     LOGFONTA        lf;
     HFONT           zfont;
@@ -658,31 +666,37 @@ static void test_ScriptString(void)
     lf.lfOrientation = 0;
     lf.lfUnderline = 0;
     lf.lfStrikeOut = 0;
-    lf.lfWeight = 3;
+    lf.lfWeight = 300;
     lf.lfWidth = 10;
 
     zfont = (HFONT) SelectObject(hdc, CreateFontIndirectA(&lf));
  
+    Charset = -1;     /* this flag indicates unicode input */
     /* Test without hdc to get E_INVALIDARG */
-    hr = ScriptStringAnalyse( NULL, pString, cString, cGlyphs, iCharset, dwFlags,
-                             iReqWidth, &psControl, &psState, piDx, &pTabdef,
-                             &pbInClass, &pssa);
+    hr = ScriptStringAnalyse( NULL, teststr, String, Glyphs, Charset, Flags,
+                             ReqWidth, &Control, &State, Dx, &Tabdef,
+                             &InClass, &ssa);
     ok(hr == E_PENDING, "ScriptStringAnalyse Stub should return E_PENDING not %08x\n", hr);
 
     /* test with hdc, this should be a valid test  */
-    hr = ScriptStringAnalyse( hdc, pString, cString, cGlyphs, iCharset, dwFlags,
-                              iReqWidth, &psControl, &psState, piDx, &pTabdef,
-                              &pbInClass, &pssa);
-    ok(hr == E_NOTIMPL, "ScriptStringAnalyse Stub should return E_NOTIMPL not %08x\n", hr);
-/*    Commented code it pending new code in ScriptStringAnalysis */
-/*    ok(hr == S_OK, "ScriptStringAnalyse Stub should return S_OK not %08x\n", (unsigned int) hr);*/
-/*    ok(pssa != NULL, "ScriptStringAnalyse pssa should not be NULL\n");*/
+    hr = ScriptStringAnalyse( hdc, teststr, String, Glyphs, Charset, Flags,
+                              ReqWidth, &Control, &State, Dx, &Tabdef,
+                              &InClass, &ssa);
+    todo_wine ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr);
+
+    /* test makes sure that a call with a valid pssa still works */
+    hr = ScriptStringAnalyse( hdc, teststr, String, Glyphs, Charset, Flags,
+                              ReqWidth, &Control, &State, Dx, &Tabdef,
+                              &InClass, &ssa);
+    todo_wine ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr);
+    todo_wine ok(ssa != NULL, "ScriptStringAnalyse pssa should not be NULL\n");
+
     if  (hr == 0)
     {
-        hr = ScriptStringOut(pssa, iX, iY, uOptions, &prc, iMinSel, iMaxSel,fDisabled);
-        ok(hr == E_NOTIMPL, "ScriptStringOut Stub should return E_NOTIMPL not %08x\n", hr);
-        hr = ScriptStringFree(&pssa);
-        ok(hr == S_OK, "ScriptStringFree Stub should return S_OK not %08x\n", hr);
+        hr = ScriptStringOut(ssa, X, Y, Options, &rc, MinSel, MaxSel, Disabled);
+        todo_wine ok(hr == S_OK, "ScriptStringOut should return S_OK not %08x\n", hr);
+        hr = ScriptStringFree(&ssa);
+        todo_wine ok(hr == S_OK, "ScriptStringFree should return S_OK not %08x\n", hr);
     }
 }
 
@@ -1060,9 +1074,6 @@ START_TEST(usp10)
     test_ScriptCacheGetHeight(hdc);
     test_ScriptGetGlyphABCWidth(hdc);
 
-    ReleaseDC(hwnd, hdc);
-    DestroyWindow(hwnd);
-
     test_ScriptGetFontProperties();
     test_ScriptTextOut();
     test_ScriptXtoX();
@@ -1070,4 +1081,7 @@ START_TEST(usp10)
     test_ScriptLayout();
 
     test_digit_substitution();
+
+    ReleaseDC(hwnd, hdc);
+    DestroyWindow(hwnd);
 }




More information about the wine-cvs mailing list