it('Provides signature help with no parameters', () => {
            const filePath = 'mixins/imported-mixins-paramless-signature.st.css';

            const sig = getSignatureHelp(filePath, '');

            const exp: SignatureHelp = {
                activeSignature: 0,
                activeParameter: 0,
                signatures: [SignatureInformation.create('paramlessMixin(): object', undefined)]
            };

            expect(sig).to.not.equal(null);
            expect(sig).to.deep.equal(exp);
        }).timeout(5000);
            it('Provides signature help and identifies active parameter, with prefix ' + prefix, () => {
                const filePath = 'mixins/imported-mixins-default-paramful-signature.st.css';

                const sig = getSignatureHelp(filePath, prefix);

                const exp: SignatureHelp = {
                    activeSignature: 0,
                    activeParameter: prefix.match(/,/g) ? prefix.match(/,/g)!.length : 0,
                    signatures: [
                        SignatureInformation.create(
                            'mixin(pct: string): object',
                            undefined,
                            ParameterInformation.create('pct: string')
                        )
                    ]
                };

                expect(sig).to.not.equal(null);
                expect(sig).to.deep.equal(exp);
            }).timeout(5000);
                    () => {
                        const filePath = 'states/with-param/imported-state-param-and-validators-suggestion.st.css';

                        const sig = getSignatureHelp(filePath, prefix);

                        const exp: SignatureHelp = {
                            activeSignature: 0,
                            activeParameter: 0,
                            signatures: [
                                SignatureInformation.create(
                                    'shmover(number(min(3), max(42)))',
                                    undefined,
                                    ParameterInformation.create('number(min(3), max(42))')
                                )
                            ]
                        };

                        expect(sig).to.not.equal(null);
                        expect(sig).to.deep.equal(exp);
                    }
                    () => {
                        const filePath = 'states/with-param/local-state-param-suggestion.st.css';

                        const sig = getSignatureHelp(filePath, prefix);

                        const exp: SignatureHelp = {
                            activeSignature: 0,
                            activeParameter: 0,
                            signatures: [
                                SignatureInformation.create(
                                    'hello(string)',
                                    undefined,
                                    ParameterInformation.create('string')
                                )
                            ]
                        };

                        expect(sig).to.not.equal(null);
                        expect(sig).to.deep.equal(exp);
                    }
                it('Provides signature help and identifies state definition (including validator)', () => {
                    const filePath = 'states/with-param/state-def-with-param-middle.st.css';

                    const sig = getSignatureHelp(filePath, '');

                    const exp: SignatureHelp = {
                        activeSignature: 0,
                        activeParameter: 0,
                        signatures: [
                            SignatureInformation.create(
                                'Supported state types:\n- "string | number | enum | tag"',
                                undefined,
                                ParameterInformation.create('string | number | enum | tag')
                            )
                        ]
                    };

                    expect(sig).to.not.equal(null);
                    expect(sig).to.deep.equal(exp);
                });
                            () => {
                                const filePath = 'states/with-param/string/local-state-string-validators.st.css';

                                const sig = getSignatureHelp(filePath, prefix);

                                const exp: SignatureHelp = {
                                    activeSignature: 0,
                                    activeParameter: 0,
                                    signatures: [
                                        SignatureInformation.create(
                                            // tslint:disable-next-line: max-line-length
                                            'Supported "string" validator types:\n- "regex, contains, minLength, maxLength"',
                                            undefined,
                                            ParameterInformation.create('regex, contains, minLength, maxLength')
                                        )
                                    ]
                                };

                                expect(sig).to.not.equal(null);
                                expect(sig).to.deep.equal(exp);
                            }
            it('Provides signature help and identifies active parameter, with prefix ' + prefix, () => {
                const filePath = 'mixins/imported-mixins-paramful-js-signature.st.css';

                const sig = getSignatureHelp(filePath, prefix);

                const exp: SignatureHelp = {
                    activeSignature: 0,
                    activeParameter: prefix.match(/,/g) ? prefix.match(/,/g)!.length : 0,
                    signatures: [
                        SignatureInformation.create(
                            "aMixin(strParam: string, numParam: string, enumParam: 'a'|'b'): object",
                            'A mixin with some params',
                            ParameterInformation.create('strParam: string', 'A string param'),
                            ParameterInformation.create('numParam: string', 'A num param'),
                            ParameterInformation.create("enumParam: 'a'|'b'", 'An enum param')
                        )
                    ]
                };

                expect(sig).to.not.equal(null);
                expect(sig).to.deep.equal(exp);
            }).timeout(5000);
                () => {
                    const filePath = 'mixins/imported-mixins-third-party.st.css';

                    const sig = getSignatureHelp(filePath, prefix);

                    const exp: SignatureHelp = {
                        activeSignature: 0,
                        activeParameter: prefix.match(/,/g) ? prefix.match(/,/g)!.length : 0,
                        signatures: [
                            SignatureInformation.create(
                                "aMixin(strParam: string, numParam: string, enumParam: 'a'|'b'): object",
                                'A mixin with some params',
                                ParameterInformation.create('strParam: string', 'A string param'),
                                ParameterInformation.create('numParam: string', 'A num param'),
                                ParameterInformation.create("enumParam: 'a'|'b'", 'An enum param')
                            )
                        ]
                    };

                    expect(sig).to.not.equal(null);
                    expect(sig).to.deep.equal(exp);
                }
            it('Provides signature help and identifies active parameter, with prefix ' + prefix, () => {
                const filePath = 'mixins/imported-mixins-paramful-dts-signature.st.css';

                const sig = getSignatureHelp(filePath, prefix);

                const exp: SignatureHelp = {
                    activeSignature: 0,
                    activeParameter: prefix.match(/,/g) ? prefix.match(/,/g)!.length : 0,
                    signatures: [
                        SignatureInformation.create(
                            // tslint:disable-next-line: max-line-length
                            "paramfulMixin(numParam: string, strParam: string, aliasedParam: string, enumParam: 'a'|'b'): object",
                            undefined,
                            ParameterInformation.create('numParam: stNumber<0,200>'),
                            ParameterInformation.create('strParam: styl.stString'),
                            ParameterInformation.create('aliasedParam: lalaString'),
                            ParameterInformation.create("enumParam: 'a'|'b'")
                        )
                    ]
                };

                expect(sig).to.not.equal(null);
                expect(sig).to.deep.equal(exp);
            }).timeout(5000);