import assert = require('assert'); import {CompletionItemProvider, CompletionItem, CompletionItemKind, CancellationToken, TextDocument, Range, Position, Uri} from 'vscode'; import PHPCompletionItemProvider from '../features/completionItemProvider'; import HoverProvider from '../features/hoverProvider'; import SignatureHelpProvider from '../features/signatureHelpProvider'; var phpCompletionProvider = new PHPCompletionItemProvider(); var testSuggestionsFor = function(value:string, stringBefore:string):Promise { var uri = new Uri(); var doc = new TextDocument(uri, value.split('\n'), '\n', 'php', 1, false); var idx = stringBefore ? value.indexOf(stringBefore) + stringBefore.length : 0; var position = new Position(0, idx); return phpCompletionProvider.provideCompletionItems(doc, position, null); }; var assertSuggestion= function(completions:CompletionItem[], label:string, kind: CompletionItemKind) { var entries = completions.filter(suggestion => { return suggestion.label === label; }); assert.equal(entries.length, 1); assert.equal(entries[0].kind, kind); }; suite("Extension Tests", () => { test("Something 1", (testDone:(err?:any) => void) => { Promise.all([ testSuggestionsFor(' { assertSuggestion(completions, '__CLASS__', CompletionItemKind.Field); assertSuggestion(completions, 'mysql_thread_id', CompletionItemKind.Function); assertSuggestion(completions, '$argc', CompletionItemKind.Variable); }), testSuggestionsFor(' { assertSuggestion(completions, 'mysql_db_name', CompletionItemKind.Function); assertSuggestion(completions, 'mysql_list_tables', CompletionItemKind.Function); }) ]).then(() => testDone(), (errors:any[]) => { testDone(errors.reduce((e1, e2) => e1 || e2)); }); }); }); // /*--------------------------------------------------------- // * Copyright (C) Microsoft Corporation. All rights reserved. // *--------------------------------------------------------*/ // 'use strict'; // import assert = require('assert'); // import {CompletionItemProvider, CompletionItem, CompletionItemKind, CancellationToken, TextDocument, Range, Position} from 'vscode'; // var mockPHPWorkerEnv = function (url:Network.URL, content: string) : { worker: phpWorker.PHPWorker; model: mm.MirrorModel } { // var resourceService = new ResourceService.ResourceService(); // var model = mm.createMirrorModelFromString(null, 0, content, modesUtil.createMockMode('mock.mode.id', /(-?\d*\.\d\w*)|(\$[\w-]*)|([\w-]+)/g), url); // resourceService.insert(url, model); // let services = servicesUtil2.createMockEditorWorkerServices({ // resourceService: resourceService, // }); // var worker = new phpWorker.PHPWorker(modesUtil.createMockMode('mock.mode.id'), [], // services.resourceService, services.markerService); // return { worker: worker, model: model }; // }; // var testComputeInfo = function(value:string, stringBefore:string):WinJS.TPromise { // var url = new Network.URL('test://1'); // var env = mockPHPWorkerEnv(url, value); // var idx = stringBefore ? value.indexOf(stringBefore) : value.length; // var position = env.model.getPositionFromOffset(idx); // return env.worker.computeInfo(url, position); // }; // var testSuggestionsFor = function(value:string, stringBefore:string):WinJS.TPromise { // var url = new Network.URL('test://1'); // var env = mockPHPWorkerEnv(url, value); // var idx = stringBefore ? value.indexOf(stringBefore) + stringBefore.length : 0; // var position = env.model.getPositionFromOffset(idx); // return env.worker.suggest(url, position).then(result => result[0]); // }; // var testParameterHintsFor = function(value:string, stringBefore:string):WinJS.TPromise { // var url = new Network.URL('test://1'); // var env = mockPHPWorkerEnv(url, value); // var idx = stringBefore ? value.indexOf(stringBefore) + stringBefore.length : value.length; // var position = env.model.getPositionFromOffset(idx); // return env.worker.getParameterHints(url, position); // }; // var assertSuggestion= function(completion:Modes.ISuggestions, label:string, type: string) { // var entries = completion.suggestions.filter(function(suggestion: Modes.ISuggestion) { // return suggestion.label === label; // }); // assert.equal(entries.length, 1); // assert.equal(entries[0].type, type); // }; // var assertParameterHints= function(hints:Modes.IParameterHints, paramNames: string[], currentParameter: number) { // assert.equal(hints.signatures.length, 1); // assert.equal(hints.signatures[0].parameters.length, paramNames.length); // var i= 0; // var label = hints.signatures[0].label; // hints.signatures[0].parameters.forEach(function(param) { // assert.equal(param.label, paramNames[i++]); // assert.equal(param.label, label.substring(param.signatureLabelOffset, param.signatureLabelEnd)); // }); // assert.equal(hints.currentParameter, currentParameter); // }; // suite('PHP - Intellisense', () => { // test('Globals', function(testDone):any { // Promise.join([ // testSuggestionsFor(' testDone(), (errors:any[]) => { // testDone(errors.reduce((e1, e2) => e1 || e2)); // }); // }); // test('Variables', function(testDone):any { // WinJS.Promise.join([ // testSuggestionsFor(' testDone(), (errors:any[]) => { // testDone(errors.reduce((e1, e2) => e1 || e2)); // }); // }); // }); // suite('PHP - Parameter hints', () => { // test('Globals', function(testDone): any { // WinJS.Promise.join([ // testParameterHintsFor(' testDone(), (errors:any[]) => { // testDone(errors.reduce((e1, e2) => e1 || e2)); // }); // }); // test('With arguments', function(testDone): any { // WinJS.Promise.join([ // testParameterHintsFor(' testDone(), (errors:any[]) => { // testDone(errors.reduce((e1, e2) => e1 || e2)); // }); // }); // test('all function', function(testDone):any { // var testFunc = function(hints:Modes.IParameterHints):void { // assert.ok(hints !== null); // assert.equal(1, hints.signatures.length, name); // var res= hints.signatures[0].parameters.map(function(param) { return param.label; } ).join(','); // assert.ok(hints.signatures[0].parameters.length > 0, 'parameters for ' + hints.signatures[0].label + ': ' + res); // }; // var promises : WinJS.Promise[] = [] // for (var name in phpGlobals.globalfunctions) { // if (phpGlobals.globalfunctions.hasOwnProperty(name)) { // var entry = phpGlobals.globalfunctions[name]; // if (entry.signature) { // promises.push(testParameterHintsFor(' testDone(), (errors) => { // testDone(errors[0]); // }); // }); // }); // suite('PHP - compute info', () => { // test('Globals', function(testDone):any { // WinJS.Promise.join([ // testComputeInfo('', 'fopen').then((hints:Modes.IComputeExtraInfoResult) => { // assert.ok(!!(hints.value || hints.htmlContent)); // }), // testComputeInfo('', 'welcome').then((hints:Modes.IComputeExtraInfoResult) => { // assert.ok(hints === null); // }) // ]).done(() => testDone(), (errors:any[]) => { // testDone(errors.reduce((e1, e2) => e1 || e2)); // }); // }); // });