22// The .NET Foundation licenses this file to you under the MIT license.
33// See the LICENSE file in the project root for more information.
44
5+ using System ;
56using System . Linq ;
67using System . Threading . Tasks ;
78using Windows . UI . Text ;
@@ -34,7 +35,7 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
3435
3536 var token1 = rsb . Tokens . Last ( ) ;
3637
37- AssertToken ( rsb , token1 , tokenText1 ) ;
38+ AssertToken ( rsb , token1 ) ;
3839 var expectedStory = $ "{ token1 } \r ";
3940 document . GetText ( TextGetOptions . None , out var actualStory ) ;
4041 Assert . AreEqual ( expectedStory , actualStory ) ;
@@ -46,7 +47,7 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
4647
4748 var token2 = rsb . Tokens . Last ( ) ;
4849
49- AssertToken ( rsb , token2 , tokenText2 ) ;
50+ AssertToken ( rsb , token2 ) ;
5051 expectedStory = $ "{ token1 } { token2 } \r ";
5152 document . GetText ( TextGetOptions . None , out actualStory ) ;
5253 Assert . AreEqual ( expectedStory , actualStory ) ;
@@ -59,7 +60,7 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
5960
6061 var token3 = rsb . Tokens . Last ( ) ;
6162
62- AssertToken ( rsb , token3 , tokenText3 ) ;
63+ AssertToken ( rsb , token3 ) ;
6364 expectedStory = $ "{ token1 } { token2 } { token3 } \r ";
6465 document . GetText ( TextGetOptions . None , out actualStory ) ;
6566 Assert . AreEqual ( expectedStory , actualStory ) ;
@@ -168,14 +169,14 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
168169
169170 await AddTokenAsync ( rsb , "@Before" ) ;
170171 var tokenBefore = rsb . Tokens [ 0 ] ;
171- AssertToken ( rsb , tokenBefore , "@Before" ) ;
172+ AssertToken ( rsb , tokenBefore ) ;
172173
173174 selection . Delete ( TextRangeUnit . Character , - 2 ) ;
174175 await Task . Delay ( 10 ) ;
175176
176177 await AddTokenAsync ( rsb , "@After" ) ;
177178 var tokenAfter = rsb . Tokens [ 0 ] ;
178- AssertToken ( rsb , tokenAfter , "@After" ) ;
179+ AssertToken ( rsb , tokenAfter ) ;
179180
180181 Assert . AreNotSame ( tokenBefore , tokenAfter , "Token before and token after are the same." ) ;
181182 Assert . AreNotEqual ( tokenBefore . Id , tokenAfter . Id , "Token ID before and token ID after are the same." ) ;
@@ -217,11 +218,102 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
217218 } ) ;
218219 }
219220
220- private static void AssertToken ( RichSuggestBox rsb , RichSuggestToken token , string displayText )
221+ [ TestCategory ( nameof ( RichSuggestBox ) ) ]
222+ [ TestMethod ]
223+ public async Task Test_RichSuggestBox_Clear ( )
224+ {
225+ await App . DispatcherQueue . EnqueueAsync ( async ( ) =>
226+ {
227+ var rsb = new RichSuggestBox ( ) ;
228+ await SetTestContentAsync ( rsb ) ;
229+
230+ var document = rsb . TextDocument ;
231+ var selection = document . Selection ;
232+ selection . TypeText ( "before " ) ;
233+ await AddTokenAsync ( rsb , "@Token" ) ;
234+ selection . TypeText ( "after" ) ;
235+ document . GetText ( TextGetOptions . NoHidden , out var text ) ;
236+
237+ Assert . AreEqual ( 1 , rsb . Tokens . Count , "Unexpected tokens count before clear." ) ;
238+ Assert . IsTrue ( document . CanUndo ( ) , "Document cannot undo before clear." ) ;
239+ Assert . AreEqual ( "before \u200B @Token\u200B after" , text ) ;
240+
241+ rsb . Clear ( ) ;
242+ document . GetText ( TextGetOptions . NoHidden , out text ) ;
243+
244+ Assert . AreEqual ( 0 , rsb . Tokens . Count , "Unexpected tokens count after clear." ) ;
245+ Assert . IsFalse ( document . CanUndo ( ) , "Document can undo after clear." ) ;
246+ Assert . AreEqual ( string . Empty , text ) ;
247+ } ) ;
248+ }
249+
250+ [ TestCategory ( nameof ( RichSuggestBox ) ) ]
251+ [ TestMethod ]
252+ public async Task Test_RichSuggestBox_ClearUndoRedoHistory ( )
253+ {
254+ await App . DispatcherQueue . EnqueueAsync ( async ( ) =>
255+ {
256+ var rsb = new RichSuggestBox ( ) ;
257+ await SetTestContentAsync ( rsb ) ;
258+
259+ var document = rsb . TextDocument ;
260+ var selection = document . Selection ;
261+ selection . TypeText ( "before " ) ;
262+ await AddTokenAsync ( rsb , "@Token" ) ;
263+ selection . TypeText ( "after" ) ;
264+ document . GetText ( TextGetOptions . NoHidden , out var text ) ;
265+
266+ Assert . AreEqual ( 1 , rsb . Tokens . Count , "Unexpected tokens count before clear." ) ;
267+ Assert . IsTrue ( document . CanUndo ( ) , "Document cannot undo before clear." ) ;
268+ Assert . AreEqual ( "before \u200B @Token\u200B after" , text ) ;
269+
270+ rsb . ClearUndoRedoSuggestionHistory ( ) ;
271+ document . GetText ( TextGetOptions . NoHidden , out text ) ;
272+
273+ Assert . AreEqual ( 1 , rsb . Tokens . Count , "Unexpected tokens count after clear." ) ;
274+ Assert . IsFalse ( document . CanUndo ( ) , "Document can undo after clear." ) ;
275+ Assert . AreEqual ( "before \u200B @Token\u200B after" , text ) ;
276+ } ) ;
277+ }
278+
279+ [ TestCategory ( nameof ( RichSuggestBox ) ) ]
280+ [ TestMethod ]
281+ public async Task Test_RichSuggestBox_Load ( )
282+ {
283+ const string rtf = @"{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil Segoe UI;}}
284+ {\colortbl ;\red255\green255\blue255;\red0\green0\blue255;\red41\green150\blue204;}
285+ {\*\generator Riched20 10.0.19041}\viewkind4\uc1
286+ \pard\tx720\cf1\f0\fs21\lang4105 Hello {{\field{\*\fldinst{HYPERLINK ""c3b58ee9-df54-4686-b295-f203a5d8809a""}}{\fldrslt{\ul\cf2\u8203?\cf3\highlight1 @Michael Hawker\cf1\highlight0\u8203?}}}}\f1\fs21 \f0 from {{\field{\*\fldinst{HYPERLINK ""1c6a71c3-f81f-4a27-8f17-50d64acd5b61""}}{\fldrslt{\ul\cf2\u8203?\cf3\highlight1 @Tung Huynh\cf1\highlight0\u8203?}}}}\f1\fs21\par
287+ }
288+ " ;
289+ var token1 = new RichSuggestToken ( Guid . Parse ( "c3b58ee9-df54-4686-b295-f203a5d8809a" ) , "@Michael Hawker" ) ;
290+ var token2 = new RichSuggestToken ( Guid . Parse ( "1c6a71c3-f81f-4a27-8f17-50d64acd5b61" ) , "@Tung Huynh" ) ;
291+
292+ await App . DispatcherQueue . EnqueueAsync ( async ( ) =>
293+ {
294+ var rsb = new RichSuggestBox ( ) ;
295+ await SetTestContentAsync ( rsb ) ;
296+
297+ var document = rsb . TextDocument ;
298+ var selection = document . Selection ;
299+ selection . TypeText ( "before " ) ;
300+ await AddTokenAsync ( rsb , "@Token" ) ;
301+ selection . TypeText ( "after" ) ;
302+
303+ rsb . Load ( rtf , new [ ] { token1 , token2 } ) ;
304+ await Task . Delay ( 10 ) ;
305+ document . GetText ( TextGetOptions . NoHidden , out var text ) ;
306+
307+ Assert . AreEqual ( "Hello \u200b @Michael Hawker\u200b from \u200b @Tung Huynh\u200b \r " , text , "Unexpected document text." ) ;
308+ AssertToken ( rsb , token1 ) ;
309+ AssertToken ( rsb , token2 ) ;
310+ } ) ;
311+ }
312+
313+ private static void AssertToken ( RichSuggestBox rsb , RichSuggestToken token )
221314 {
222315 var document = rsb . TextDocument ;
223316 var tokenRange = document . GetRange ( token . RangeStart , token . RangeEnd ) ;
224- Assert . AreSame ( displayText , token . Item , $ "Token item has unknown object { token . Item } .") ;
225317 Assert . AreEqual ( token . ToString ( ) , tokenRange . Text ) ;
226318 Assert . AreEqual ( $ "\" { token . Id } \" ", tokenRange . Link , "Unexpected link value." ) ;
227319 Assert . AreEqual ( LinkType . FriendlyLinkAddress , tokenRange . CharacterFormat . LinkType , "Unexpected link type." ) ;
0 commit comments