@@ -15,7 +15,7 @@ limitations under the License.
15
15
*/
16
16
17
17
import EditorModel from "../../src/editor/model" ;
18
- import { createPartCreator , createRenderer } from "./mock" ;
18
+ import { createPartCreator , createRenderer , MockAutoComplete } from "./mock" ;
19
19
import DocumentOffset from "../../src/editor/offset" ;
20
20
import { PillPart } from "../../src/editor/parts" ;
21
21
import DocumentPosition from "../../src/editor/position" ;
@@ -186,8 +186,7 @@ describe("editor/model", function () {
186
186
expect ( model . parts [ 1 ] . text ) . toBe ( "@a" ) ;
187
187
188
188
// this is a hacky mock function
189
- // @ts -ignore
190
- model . autoComplete . tryComplete ( ) ; // see MockAutoComplete
189
+ ( model . autoComplete as unknown as MockAutoComplete ) . tryComplete ( ) ;
191
190
192
191
expect ( renderer . count ) . toBe ( 2 ) ;
193
192
expect ( ( renderer . caret as DocumentPosition ) . index ) . toBe ( 1 ) ;
@@ -216,8 +215,7 @@ describe("editor/model", function () {
216
215
expect ( model . parts [ 1 ] . text ) . toBe ( "#r" ) ;
217
216
218
217
// this is a hacky mock function
219
- // @ts -ignore
220
- model . autoComplete . tryComplete ( ) ; // see MockAutoComplete
218
+ ( model . autoComplete as unknown as MockAutoComplete ) . tryComplete ( ) ;
221
219
222
220
expect ( renderer . count ) . toBe ( 2 ) ;
223
221
expect ( ( renderer . caret as DocumentPosition ) . index ) . toBe ( 1 ) ;
@@ -236,8 +234,7 @@ describe("editor/model", function () {
236
234
237
235
model . update ( "hello #r" , "insertText" , new DocumentOffset ( 8 , true ) ) ;
238
236
// this is a hacky mock function
239
- // @ts -ignore
240
- model . autoComplete . tryComplete ( ) ; // see MockAutoComplete
237
+ ( model . autoComplete as unknown as MockAutoComplete ) . tryComplete ( ) ;
241
238
model . update ( "hello #riot-dev!!" , "insertText" , new DocumentOffset ( 17 , true ) ) ;
242
239
243
240
expect ( renderer . count ) . toBe ( 3 ) ;
@@ -314,6 +311,45 @@ describe("editor/model", function () {
314
311
expect ( model . parts [ 0 ] . type ) . toBe ( "plain" ) ;
315
312
expect ( model . parts [ 0 ] . text ) . toBe ( "foo@a" ) ;
316
313
} ) ;
314
+
315
+ it ( "should allow auto-completing multiple times with resets between them" , ( ) => {
316
+ const renderer = createRenderer ( ) ;
317
+ const pc = createPartCreator ( [ { resourceId : "#riot-dev" } as PillPart ] ) ;
318
+ const model = new EditorModel ( [ pc . plain ( "" ) ] , pc , renderer ) ;
319
+
320
+ model . update ( "#r" , "insertText" , new DocumentOffset ( 8 , true ) ) ;
321
+
322
+ expect ( renderer . count ) . toBe ( 1 ) ;
323
+ expect ( ( renderer . caret as DocumentPosition ) . index ) . toBe ( 0 ) ;
324
+ expect ( ( renderer . caret as DocumentPosition ) . offset ) . toBe ( 2 ) ;
325
+ expect ( model . parts . length ) . toBe ( 1 ) ;
326
+ expect ( model . parts [ 0 ] . type ) . toBe ( "pill-candidate" ) ;
327
+ expect ( model . parts [ 0 ] . text ) . toBe ( "#r" ) ;
328
+
329
+ // this is a hacky mock function
330
+ ( model . autoComplete as unknown as MockAutoComplete ) . tryComplete ( ) ;
331
+
332
+ expect ( renderer . count ) . toBe ( 2 ) ;
333
+ expect ( ( renderer . caret as DocumentPosition ) . index ) . toBe ( 0 ) ;
334
+ expect ( ( renderer . caret as DocumentPosition ) . offset ) . toBe ( 9 ) ;
335
+ expect ( model . parts . length ) . toBe ( 1 ) ;
336
+ expect ( model . parts [ 0 ] . type ) . toBe ( "room-pill" ) ;
337
+ expect ( model . parts [ 0 ] . text ) . toBe ( "#riot-dev" ) ;
338
+
339
+ model . reset ( [ ] ) ;
340
+ model . update ( "#r" , "insertText" , new DocumentOffset ( 8 , true ) ) ;
341
+
342
+ expect ( model . parts . length ) . toBe ( 1 ) ;
343
+ expect ( model . parts [ 0 ] . type ) . toBe ( "pill-candidate" ) ;
344
+ expect ( model . parts [ 0 ] . text ) . toBe ( "#r" ) ;
345
+
346
+ // this is a hacky mock function
347
+ ( model . autoComplete as unknown as MockAutoComplete ) . tryComplete ( ) ;
348
+
349
+ expect ( model . parts . length ) . toBe ( 1 ) ;
350
+ expect ( model . parts [ 0 ] . type ) . toBe ( "room-pill" ) ;
351
+ expect ( model . parts [ 0 ] . text ) . toBe ( "#riot-dev" ) ;
352
+ } ) ;
317
353
} ) ;
318
354
describe ( "emojis" , function ( ) {
319
355
it ( "regional emojis should be separated to prevent them to be converted to flag" , ( ) => {
0 commit comments