function expectSymbols(provider, query, expectedSymbols) {
            var requestStatus = null;
            var request,
                matcher;

            runs(function () {
                matcher = new StringMatch.StringMatcher();
                request = new provider(phpToolingExtension.getClient()).search(query, matcher);
                request.done(function (status) {
                    requestStatus = status;
                });

                waitsForDone(request, "Expected Symbols did not resolve", 3000);
            });

            if (expectedSymbols === []) {
                expect(requestStatus).toBe([]);
                return;
            }

            function matchSymbols(symbols) {
                var n = symbols.length > 4 ? 4 : symbols.length,
                    i;

                for (i = 0; i < n; i++) {
                    var symbolInfo = symbols[i].symbolInfo;
                    expect(symbolInfo.label).toBe(expectedSymbols[i].label);
                    expect(symbolInfo.type).toBe(expectedSymbols[i].type);
                    expect(symbolInfo.scope).toBe(expectedSymbols[i].scope);

                    if (expectedSymbols[i].fullPath === null) {
                        expect(symbolInfo.fullPath).toBe(null);
                    } else {
                        expect(symbolInfo.fullPath.includes(expectedSymbols[i].fullPath)).toBe(true);
                    }
                }

            }
            runs(function() {
                matchSymbols(requestStatus);
            });
        }
Show the document/project symbols for a language type.

@param   {SymbolProvider} provider        The symbol provider to use for the request.
@param   {string}         query           The query string for the request.
@param   {Array}          expectedSymbols Expected results for the request.