Skip to content

Commit

Permalink
test: some more fix to unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pengx17 committed Dec 21, 2018
1 parent ed907a9 commit 1fea33b
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 162 deletions.
119 changes: 9 additions & 110 deletions src/languageservice/yamlLanguageTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,116 +24,6 @@ export class SingleYAMLDocument extends JSONDocument {
return super.getNodeFromOffset(offset, true);
}

// getNodeFromOffsetEndInclusive(offset: number): ASTNode {
// if (!this.root) {
// return;
// }
// if (
// offset < this.root.offset ||
// offset > this.root.offset + this.root.length
// ) {
// // We somehow are completely outside the document
// // This is unexpected
// console.log('Attempting to resolve node outside of document');
// return null;
// }

// function* sliding2(nodes: ASTNode[]) {
// for (let i = 0; i < nodes.length; i ++) {
// yield [nodes[i], i === nodes.length ? null : nodes[i + 1]];
// }
// }

// const onLaterLine = (offset: number, node: ASTNode) => {
// const { line: actualLine } = getPosition(offset, this.lines);
// const { line: nodeEndLine } = getPosition(
// node.offset + node.length,
// this.lines
// );

// return actualLine > nodeEndLine;
// };

// let findNode = (nodes: ASTNode[]): ASTNode => {
// if (nodes.length === 0) {
// return null;
// }

// const gen = sliding2(nodes);

// for (let [first, second] of gen) {
// const end = second
// ? second.offset
// : first.parent.offset + first.parent.length;
// if (offset >= first.offset && offset < end) {
// const children = first.children;

// const foundChild = findNode(children);

// if (!foundChild && onLaterLine(offset, first)) {
// return this.getNodeByIndent(this.lines, offset, this.root);
// }

// return foundChild || first;
// }
// }

// return null;
// };

// return findNode(this.root.children) || this.root;
// }

// private getNodeByIndent = (
// lines: number[],
// offset: number,
// node: ASTNode
// ) => {
// const { line, column: indent } = getPosition(offset, this.lines);

// const children = node.children;

// function findNode(children: ASTNode[]) {
// if (children.length > 0) {

// }
// for (let idx = 0; idx < children.length; idx++) {
// const child = children[idx];

// const { line: childLine, column: childCol } = getPosition(
// child.offset,
// lines
// );

// if (childCol > indent) {
// return null;
// }

// const newChildren = child.children;
// const foundNode = findNode(newChildren);

// if (foundNode) {
// return foundNode;
// }

// // We have the right indentation, need to return based on line
// if (childLine == line) {
// return child;
// }
// if (childLine > line) {
// // Get previous
// idx - 1 >= 0 ? children[idx - 1] : child;
// }
// // Else continue loop to try next element
// }

// // Special case, we found the correct
// return children[children.length - 1];
// }

// return findNode(children) || node;
// };

public getNodeFromOffsetEndInclusive(offset: number): ASTNode {
const collector: ASTNode[] = [];
const findNode = (node: ASTNode): ASTNode => {
Expand Down Expand Up @@ -167,6 +57,15 @@ export class SingleYAMLDocument extends JSONDocument {
}
return currMinNode || foundNode;
}

// Returns a node at offset which will be used as a hint for completion
//
public getCompletionNodeFromOffset(offset: number): ASTNode {
if (!this.root) {
return;
}
// TODO
}
}

export class YAMLDocument {
Expand Down
33 changes: 27 additions & 6 deletions test/documentSymbols.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,28 @@ const languageService = getLanguageService(
[]
);

function traverse(
rootSymbols: DocumentSymbol[],
fn: (doc: DocumentSymbol) => void
) {
if (!rootSymbols || rootSymbols.length === 0) {
return;
}
rootSymbols.forEach(symbol => {
fn(symbol);
traverse(symbol.children, fn);
});
}

function allNodes(rootSymbols: DocumentSymbol[]): DocumentSymbol[] {
const res: DocumentSymbol[] = [];
traverse(rootSymbols, doc => res.push(doc));
return res;
}

// TODO: this suite is outdated and should be updated.
// https://github.com/Microsoft/vscode-json-languageservice/blob/master/src/test/documentSymbols.test.ts
xdescribe('Document Symbols Tests', () => {
describe('Document Symbols Tests', () => {
describe('Document Symbols Tests', function() {
function setup(content: string) {
return TextDocument.create(
Expand All @@ -31,16 +50,18 @@ xdescribe('Document Symbols Tests', () => {
function parseSetup(content: string) {
const testTextDocument = setup(content);
const jsonDocument = parseYAML(testTextDocument.getText());
return languageService.findDocumentSymbols(
const rootSymbols = languageService.findDocumentSymbols(
testTextDocument,
jsonDocument
);

return allNodes(rootSymbols);
}

it('Document is empty', done => {
const content = '';
const symbols = parseSetup(content);
assert.equal(symbols, null);
assert.equal(symbols.length, 0);
done();
});

Expand Down Expand Up @@ -82,22 +103,22 @@ xdescribe('Document Symbols Tests', () => {
it('Document Symbols with array of strings', done => {
const content = 'items:\n - test\n - test';
const symbols = parseSetup(content);
assert.equal(symbols.length, 1);
assert.equal(symbols.length, 3);
done();
});

it('Document Symbols with array', done => {
const content = 'authors:\n - name: Josh\n - email: jp';
const symbols = parseSetup(content);
assert.equal(symbols.length, 3);
assert.equal(symbols.length, 5);
done();
});

it('Document Symbols with object and array', done => {
const content =
'scripts:\n node1: test\n node2: test\nauthors:\n - name: Josh\n - email: jp';
const symbols = parseSetup(content);
assert.equal(symbols.length, 6);
assert.equal(symbols.length, 8);
done();
});

Expand Down
54 changes: 8 additions & 46 deletions test/yamlDocument.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,60 +3,22 @@ import { parse as parseYAML } from '../src/languageservice/parser/yamlParser';

describe('SingleYAMLDocument tests', () => {
function setup(content: string) {
return TextDocument.create(
'file://~/Desktop/vscode-k8s/test.yaml',
'yaml',
0,
content
);
}

describe('getNodeFromOffsetEndInclusive', () => {
const content = `a :
b:
`;
function parseSetup(offset: number) {
return (offset: number) => {
const yamlDocs = parseYAML(content);

// Should be one doc only
expect(yamlDocs.documents.length).toBe(1);
return yamlDocs.documents[0].getNodeFromOffsetEndInclusive(offset);
}

it('0', () => {
const node = parseSetup(0);
expect(node.value).toBe('a');
expect(node.type).toBe('string');
});
return yamlDocs.documents[0].getCompletionNodeFromOffset(offset);
};
}

it('1', () => {
describe('getCompletionNodeFromOffset for simple null value mapping', () => {
const content = 'a : \n ';
const parseSetup = setup(content);
it('within value of `a`', () => {
const node = parseSetup(1);
expect(node.value).toBe('a');
expect(node.type).toBe('string');
});

it('2', () => {
const node = parseSetup(2);
expect(node.type).toBe('property');
});

it('6', () => {
const node = parseSetup(6);
expect(node.value).toBe('b');
expect(node.type).toBe('string');
});

it('7', () => {
const node = parseSetup(7);
expect(node.value).toBe('b');
expect(node.type).toBe('string');
});

it('8', () => {
const node = parseSetup(8);
expect(node.value).toBe('b');
expect(node.type).toBe('string');
});
});
});

0 comments on commit 1fea33b

Please sign in to comment.