1+ import * as assert from 'assert' ;
2+ import * as vsc from 'vscode' ;
3+ import { paramHintTrigger } from "../../src/python" ;
4+ import { CompletionProvider , ParamHintCompletionProvider } from "../../src/completionProvider" ;
5+ import { TypeHintSettings } from '../../src/settings' ;
6+
7+ suite ( 'ParamHintCompletionProvider' , ( ) => {
8+ const provider = new ParamHintCompletionProvider ( new TypeHintSettings ( ) ) ;
9+
10+ test ( "provides items for first param" , async ( ) => {
11+ let param = "paramName: " ;
12+ let actual = providerResult ( provider , param , "\nparamName = 123" ) ;
13+ assert . notEqual ( actual , null ) ;
14+ } ) ;
15+
16+ test ( "provides items for non-first param" , async ( ) => {
17+ let param = "first: str, paramName: " ;
18+ let actual = await providerResult ( provider , param , "\nparamName = 123" ) ;
19+ assert . notEqual ( actual , null ) ;
20+ } ) ;
21+
22+ test ( "provides items for param on new line" , async ( ) => {
23+ let param = "\n paramName: " ;
24+ let actual = await providerResult ( provider , param , "\nparamName = 123" ) ;
25+ assert . notEqual ( actual , null ) ;
26+
27+ param = "\n\tparamName: " ;
28+ actual = await providerResult ( provider , param , "\nparamName = 123" ) ;
29+ assert . notEqual ( actual , null ) ;
30+ } ) ;
31+
32+
33+ test ( "does not provide items for dict keys" , async ( ) => {
34+ let expected = null ;
35+ let actual = await providerResult ( provider , "):\n d = { key:" ) ;
36+ assert . equal ( actual , expected ) ;
37+ } ) ;
38+
39+ test ( "does not provide items for ':' within strings under function def" , async ( ) => {
40+ let expected = null ;
41+ let actual = await providerResult ( provider , "):\n d = { key: 'val:'" ) ;
42+ assert . equal ( actual , expected ) ;
43+ } ) ;
44+
45+ test ( "does not provide items for end of function definition" , async ( ) => {
46+ let expected = null ;
47+ let actual = await providerResult ( provider , "):" ) ;
48+ assert . equal ( actual , expected ) ;
49+ } ) ;
50+
51+ } ) ;
52+
53+ const language = "python" ;
54+
55+ async function providerResult (
56+ provider : CompletionProvider ,
57+ functionText : string ,
58+ postFunctionText ?: string
59+ ) : Promise < vsc . CompletionList | null > {
60+ let content = `def func(${ functionText } ` ;
61+ if ( postFunctionText ) {
62+ content += postFunctionText ;
63+ }
64+
65+ const doc = await vsc . workspace . openTextDocument ( { language, content } ) ;
66+ const token = new vsc . CancellationTokenSource ( ) . token ;
67+ const ctx = { triggerCharacter : paramHintTrigger , triggerKind : vsc . CompletionTriggerKind . TriggerCharacter } ;
68+
69+ const lines : string [ ] = content . split ( "\n" ) ;
70+ const lastLineIdx = lines . length - 1 ;
71+ const lastPos = new vsc . Position ( lastLineIdx , lines [ lastLineIdx ] . length ) ;
72+
73+ return provider . provideCompletionItems ( doc , lastPos , token , ctx ) ;
74+ }
0 commit comments