2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
// See the LICENSE file in the project root for more information.
4
4
5
+ using System ;
5
6
using System . Linq ;
6
7
using System . Threading . Tasks ;
7
8
using Windows . UI . Text ;
@@ -34,7 +35,7 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
34
35
35
36
var token1 = rsb . Tokens . Last ( ) ;
36
37
37
- AssertToken ( rsb , token1 , tokenText1 ) ;
38
+ AssertToken ( rsb , token1 ) ;
38
39
var expectedStory = $ "{ token1 } \r ";
39
40
document . GetText ( TextGetOptions . None , out var actualStory ) ;
40
41
Assert . AreEqual ( expectedStory , actualStory ) ;
@@ -46,7 +47,7 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
46
47
47
48
var token2 = rsb . Tokens . Last ( ) ;
48
49
49
- AssertToken ( rsb , token2 , tokenText2 ) ;
50
+ AssertToken ( rsb , token2 ) ;
50
51
expectedStory = $ "{ token1 } { token2 } \r ";
51
52
document . GetText ( TextGetOptions . None , out actualStory ) ;
52
53
Assert . AreEqual ( expectedStory , actualStory ) ;
@@ -59,7 +60,7 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
59
60
60
61
var token3 = rsb . Tokens . Last ( ) ;
61
62
62
- AssertToken ( rsb , token3 , tokenText3 ) ;
63
+ AssertToken ( rsb , token3 ) ;
63
64
expectedStory = $ "{ token1 } { token2 } { token3 } \r ";
64
65
document . GetText ( TextGetOptions . None , out actualStory ) ;
65
66
Assert . AreEqual ( expectedStory , actualStory ) ;
@@ -168,14 +169,14 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
168
169
169
170
await AddTokenAsync ( rsb , "@Before" ) ;
170
171
var tokenBefore = rsb . Tokens [ 0 ] ;
171
- AssertToken ( rsb , tokenBefore , "@Before" ) ;
172
+ AssertToken ( rsb , tokenBefore ) ;
172
173
173
174
selection . Delete ( TextRangeUnit . Character , - 2 ) ;
174
175
await Task . Delay ( 10 ) ;
175
176
176
177
await AddTokenAsync ( rsb , "@After" ) ;
177
178
var tokenAfter = rsb . Tokens [ 0 ] ;
178
- AssertToken ( rsb , tokenAfter , "@After" ) ;
179
+ AssertToken ( rsb , tokenAfter ) ;
179
180
180
181
Assert . AreNotSame ( tokenBefore , tokenAfter , "Token before and token after are the same." ) ;
181
182
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 () =>
217
218
} ) ;
218
219
}
219
220
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 )
221
314
{
222
315
var document = rsb . TextDocument ;
223
316
var tokenRange = document . GetRange ( token . RangeStart , token . RangeEnd ) ;
224
- Assert . AreSame ( displayText , token . Item , $ "Token item has unknown object { token . Item } .") ;
225
317
Assert . AreEqual ( token . ToString ( ) , tokenRange . Text ) ;
226
318
Assert . AreEqual ( $ "\" { token . Id } \" ", tokenRange . Link , "Unexpected link value." ) ;
227
319
Assert . AreEqual ( LinkType . FriendlyLinkAddress , tokenRange . CharacterFormat . LinkType , "Unexpected link type." ) ;
0 commit comments