@@ -20,7 +20,7 @@ import {
20
20
import assert = require( 'assert' ) ;
21
21
import { expect } from 'chai' ;
22
22
import { createExpectedCompletion } from './utils/verifyError' ;
23
- import { addUniquePostfix , removeUniquePostfix } from '../src/languageservice/services/yamlCompletion' ;
23
+ import { addUniquePostfix , expressionSchemaName , removeUniquePostfix } from '../src/languageservice/services/yamlCompletion' ;
24
24
import { JSONSchema } from 'vscode-json-languageservice' ;
25
25
26
26
describe ( 'Auto Completion Tests Extended' , ( ) => {
@@ -51,8 +51,8 @@ describe('Auto Completion Tests Extended', () => {
51
51
ensureExpressionSchema ( ) ;
52
52
} ) ;
53
53
54
- function parseSetup ( content : string , position : number ) : Promise < CompletionList > {
55
- const testTextDocument = setupSchemaIDTextDocument ( content ) ;
54
+ function parseSetup ( content : string , position : number , schemaName ?: string ) : Promise < CompletionList > {
55
+ const testTextDocument = setupSchemaIDTextDocument ( content , schemaName ) ;
56
56
yamlSettings . documents = new TextDocumentTestManager ( ) ;
57
57
( yamlSettings . documents as TextDocumentTestManager ) . set ( testTextDocument ) ;
58
58
return languageHandler . completionHandler ( {
@@ -68,10 +68,10 @@ describe('Auto Completion Tests Extended', () => {
68
68
* For example, `content = 'ab|c|d'` places the caret over the `'c'`, at `position = 2`
69
69
* @returns A list of valid completions.
70
70
*/
71
- function parseCaret ( content : string ) : Promise < CompletionList > {
71
+ function parseCaret ( content : string , schemaName ?: string ) : Promise < CompletionList > {
72
72
const { position, content : content2 } = caretPosition ( content ) ;
73
73
74
- const testTextDocument = setupSchemaIDTextDocument ( content2 ) ;
74
+ const testTextDocument = setupSchemaIDTextDocument ( content2 , schemaName ) ;
75
75
yamlSettings . documents = new TextDocumentTestManager ( ) ;
76
76
( yamlSettings . documents as TextDocumentTestManager ) . set ( testTextDocument ) ;
77
77
return languageHandler . completionHandler ( {
@@ -81,7 +81,7 @@ describe('Auto Completion Tests Extended', () => {
81
81
}
82
82
83
83
function ensureExpressionSchema ( ) : void {
84
- schemaProvider . addSchema ( 'expression' , {
84
+ schemaProvider . addSchema ( 'expression-schema ' , {
85
85
properties : {
86
86
expression : {
87
87
...inlineObjectSchema . definitions . Expression ,
@@ -441,4 +441,41 @@ describe('Auto Completion Tests Extended', () => {
441
441
expect ( completion . items . map ( ( i ) => i . insertText ) ) . deep . equal ( [ 'entity1' ] ) ;
442
442
} ) ;
443
443
} ) ;
444
+ describe ( 'Chain of single properties' , ( ) => {
445
+ const schema : JSONSchema = {
446
+ type : 'object' ,
447
+ properties : {
448
+ prop1 : {
449
+ type : 'object' ,
450
+ properties : {
451
+ prop2 : {
452
+ type : 'object' ,
453
+ properties : {
454
+ prop3 : {
455
+ type : 'object' ,
456
+ properties : {
457
+ prop4 : {
458
+ type : 'object' ,
459
+ } ,
460
+ } ,
461
+ required : [ 'prop4' ] ,
462
+ } ,
463
+ } ,
464
+ required : [ 'prop3' ] ,
465
+ } ,
466
+ } ,
467
+ required : [ 'prop2' ] ,
468
+ } ,
469
+ } ,
470
+ required : [ 'prop1' ] ,
471
+ } ;
472
+ it ( 'should suggest chain of properties - without parent intellisense' , async ( ) => {
473
+ // `expression` schema is important because client will use it to get completion
474
+ schemaProvider . addSchema ( expressionSchemaName , schema ) ;
475
+ const content = 'prop1:\n | |' ;
476
+ const completion = await parseCaret ( content , expressionSchemaName ) ;
477
+ expect ( completion . items . length ) . to . be . equal ( 1 ) ;
478
+ expect ( completion . items [ 0 ] . insertText ) . equal ( 'prop2:\n prop3:\n prop4:\n ' ) ;
479
+ } ) ;
480
+ } ) ;
444
481
} ) ;
0 commit comments