<div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi Vijay,</div><div><br></div><div>Thanks for your upstreaming work!</div><div>I think we don't need it for current Wine, since we already had test_ITextSelection_GetStart_GetEnd() and test_ITextRange_GetStart_GetEnd() doing something similar for it. </div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 8, 2019 at 10:06 AM Vijay Kiran Kamuju <<a href="mailto:infyquest@gmail.com" target="_blank">infyquest@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Jactry Zeng <<a href="mailto:wine@jactry.com" target="_blank">wine@jactry.com</a>><br>
<br>
V2: convert macros to static functions (Vijay Kiran Kamuju)<br>
<br>
Signed-off-by: Vijay Kiran Kamuju <<a href="mailto:infyquest@gmail.com" target="_blank">infyquest@gmail.com</a>><br>
---<br>
 dlls/riched20/tests/richole.c | 163 ++++++++++++++++++++++++++++++++++<br>
 1 file changed, 163 insertions(+)<br>
<br>
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c<br>
index 40feb76f2b..38d28fb0e2 100644<br>
--- a/dlls/riched20/tests/richole.c<br>
+++ b/dlls/riched20/tests/richole.c<br>
@@ -3763,6 +3763,165 @@ static void test_MoveEnd(void)<br>
   ITextRange_Release(range);<br>
 }<br>
<br>
+#define CHECK_RANGE_START(txtrange, pos, expected_start, expected_end) \<br>
+  _check_range_start(txtrange, pos, expected_start, expected_end, __LINE__)<br>
+static void _check_range_start(ITextRange *txtrange, LONG pos, LONG expected_start, LONG expected_end, int line)<br>
+{<br>
+  HRESULT hres;<br>
+  LONG start, end;<br>
+<br>
+  hres = ITextRange_SetStart(txtrange, pos);<br>
+  ok_(__FILE__,line)(hres == S_OK, "ITextRange_SetStart\n");<br>
+  ITextRange_GetStart(txtrange, &start);<br>
+  ITextRange_GetEnd(txtrange, &end);<br>
+  ok_(__FILE__,line)(start == expected_start, "got wrong start value: %d\n", start);<br>
+  ok_(__FILE__,line)(end == expected_end, "got wrong end value: %d\n", end);<br>
+}<br>
+<br>
+static void test_ITextRange_SetStart(void)<br>
+{<br>
+  HWND w;<br>
+  IRichEditOle *reOle = NULL;<br>
+  ITextDocument *txtDoc = NULL;<br>
+  ITextRange *txtRge = NULL;<br>
+  HRESULT hr;<br>
+  LONG first, lim;<br>
+  static const CHAR test_text1[] = "TestSomeText";<br>
+<br>
+  create_interfaces(&w, &reOle, &txtDoc, NULL);<br>
+  SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);<br>
+<br>
+  first = 4, lim = 8;<br>
+  ITextDocument_Range(txtDoc, first, lim, &txtRge);<br>
+  hr = ITextRange_SetStart(txtRge, first);<br>
+  ok(hr == S_FALSE, "ITextRange_SetStart\n");<br>
+<br>
+  CHECK_RANGE_START(txtRge, 2, 2, 8);<br>
+  CHECK_RANGE_START(txtRge, -1, 0, 8);<br>
+  CHECK_RANGE_START(txtRge, 13, 12, 12);<br>
+<br>
+  release_interfaces(&w, &reOle, &txtDoc, NULL);<br>
+}<br>
+<br>
+#define CHECK_RANGE_END(txtrange, pos, expected_start, expected_end) \<br>
+  _check_range_end(txtrange, pos, expected_start, expected_end, __LINE__)<br>
+static void _check_range_end(ITextRange *txtrange, LONG pos, LONG expected_start, LONG expected_end, int line)<br>
+{<br>
+  HRESULT hres;<br>
+  LONG start, end;<br>
+<br>
+  hres = ITextRange_SetEnd(txtrange, pos);<br>
+  ok_(__FILE__,line)(hres == S_OK, "ITextRange_SetEnd\n");<br>
+  ITextRange_GetStart(txtrange, &start);<br>
+  ITextRange_GetEnd(txtrange, &end);<br>
+  ok_(__FILE__,line)(start == expected_start, "got wrong start value: %d\n", start);<br>
+  ok_(__FILE__,line)(end == expected_end, "got wrong end value: %d\n", end);<br>
+}<br>
+<br>
+static void test_ITextRange_SetEnd(void)<br>
+{<br>
+  HWND w;<br>
+  IRichEditOle *reOle = NULL;<br>
+  ITextDocument *txtDoc = NULL;<br>
+  ITextRange *txtRge = NULL;<br>
+  HRESULT hr;<br>
+  LONG first, lim;<br>
+  static const CHAR test_text1[] = "TestSomeText";<br>
+<br>
+  create_interfaces(&w, &reOle, &txtDoc, NULL);<br>
+  SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);<br>
+<br>
+  first = 4, lim = 8;<br>
+  ITextDocument_Range(txtDoc, first, lim, &txtRge);<br>
+  hr = ITextRange_SetEnd(txtRge, lim);<br>
+  ok(hr == S_FALSE, "ITextRange_SetEnd\n");<br>
+<br>
+  CHECK_RANGE_END(txtRge, 6, 4, 6);<br>
+  CHECK_RANGE_END(txtRge, 14, 4, 13);<br>
+  CHECK_RANGE_END(txtRge, -1, 0, 0);<br>
+<br>
+  ITextRange_Release(txtRge);<br>
+  release_interfaces(&w, &reOle, &txtDoc, NULL);<br>
+}<br>
+<br>
+#define CHECK_SELECTION_START(hwnd, txtselect, pos, expected_start, expected_end) \<br>
+  _check_selection_start(hwnd, txtselect, pos, expected_start, expected_end, __LINE__)<br>
+static void _check_selection_start(HWND hwnd, ITextSelection *txtselect, LONG pos, LONG expected_start, LONG expected_end, int line)<br>
+{<br>
+  HRESULT hres;<br>
+  LONG start, end;<br>
+<br>
+  hres = ITextSelection_SetStart(txtselect, pos);<br>
+  ok_(__FILE__,line)(hres == S_OK, "ITextSelection_SetStart\n");<br>
+  SendMessageA(hwnd, EM_GETSEL, (LPARAM)&start, (WPARAM)&end);           \<br>
+  ok_(__FILE__,line)(start == expected_start, "got wrong start value: %d\n", start);<br>
+  ok_(__FILE__,line)(end == expected_end, "got wrong end value: %d\n", end);<br>
+}<br>
+<br>
+static void test_ITextSelection_SetStart(void)<br>
+{<br>
+  HWND w;<br>
+  IRichEditOle *reOle = NULL;<br>
+  ITextDocument *txtDoc = NULL;<br>
+  ITextSelection *txtSel = NULL;<br>
+  HRESULT hr;<br>
+  LONG first, lim;<br>
+  static const CHAR test_text1[] = "TestSomeText";<br>
+<br>
+  create_interfaces(&w, &reOle, &txtDoc, &txtSel);<br>
+  SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);<br>
+<br>
+  first = 4, lim = 8;<br>
+  SendMessageA(w, EM_SETSEL, first, lim);<br>
+  hr = ITextSelection_SetStart(txtSel, first);<br>
+  ok(hr == S_FALSE, "ITextSelection_SetStart\n");<br>
+<br>
+  CHECK_SELECTION_START(w, txtSel, 2, 2, 8);<br>
+  CHECK_SELECTION_START(w, txtSel, -1, 0, 8);<br>
+  CHECK_SELECTION_START(w, txtSel, 13, 12, 12);<br>
+<br>
+  release_interfaces(&w, &reOle, &txtDoc, &txtSel);<br>
+}<br>
+<br>
+#define CHECK_SELECTION_END(hwnd, txtselect, pos, expected_start, expected_end) \<br>
+  _check_selection_end(hwnd, txtselect, pos, expected_start, expected_end, __LINE__)<br>
+static void _check_selection_end(HWND hwnd, ITextSelection *txtselect, LONG pos, LONG expected_start, LONG expected_end, int line)<br>
+{<br>
+  HRESULT hres;<br>
+  LONG start, end;<br>
+<br>
+  hres = ITextSelection_SetEnd(txtselect, pos);<br>
+  ok_(__FILE__,line)(hres == S_OK, "ITextSelection_SetEnd\n");<br>
+  SendMessageA(hwnd, EM_GETSEL, (LPARAM)&start, (WPARAM)&end);           \<br>
+  ok_(__FILE__,line)(start == expected_start, "got wrong start value: %d\n", start);<br>
+  ok_(__FILE__,line)(end == expected_end, "got wrong end value: %d\n", end);<br>
+}<br>
+<br>
+static void test_ITextSelection_SetEnd(void)<br>
+{<br>
+  HWND w;<br>
+  IRichEditOle *reOle = NULL;<br>
+  ITextDocument *txtDoc = NULL;<br>
+  ITextSelection *txtSel = NULL;<br>
+  HRESULT hr;<br>
+  LONG first, lim;<br>
+  static const CHAR test_text1[] = "TestSomeText";<br>
+<br>
+  create_interfaces(&w, &reOle, &txtDoc, &txtSel);<br>
+  SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);<br>
+<br>
+  first = 4, lim = 8;<br>
+  SendMessageA(w, EM_SETSEL, first, lim);<br>
+  hr = ITextSelection_SetEnd(txtSel, lim);<br>
+  ok(hr == S_FALSE, "ITextSelection_SetEnd\n");<br>
+<br>
+  CHECK_SELECTION_END(w, txtSel, 6, 4, 6);<br>
+  CHECK_SELECTION_END(w, txtSel, 14, 4, 13);<br>
+  CHECK_SELECTION_END(w, txtSel, -1, 0, 0);<br>
+<br>
+  release_interfaces(&w, &reOle, &txtDoc, &txtSel);<br>
+}<br>
+<br>
 START_TEST(richole)<br>
 {<br>
   /* Must explicitly LoadLibrary(). The test has no references to functions in<br>
@@ -3775,12 +3934,16 @@ START_TEST(richole)<br>
   test_GetText();<br>
   test_ITextSelection_GetChar();<br>
   test_ITextSelection_GetStart_GetEnd();<br>
+  test_ITextSelection_SetStart();<br>
+  test_ITextSelection_SetEnd();<br>
   test_ITextSelection_Collapse();<br>
   test_ITextDocument_Range();<br>
   test_ITextRange_GetChar();<br>
   test_ITextRange_ScrollIntoView();<br>
   test_ITextRange_GetStart_GetEnd();<br>
   test_ITextRange_GetDuplicate();<br>
+  test_ITextRange_SetStart();<br>
+  test_ITextRange_SetEnd();<br>
   test_ITextRange_Collapse();<br>
   test_GetClientSite();<br>
   test_IOleWindow_GetWindow();<br>
-- <br>
2.21.0<br>
<br>
<br>
<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail-m_-3238945945500430086gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Jactry Zeng</div><div><br></div></div></div>