import { TextlintFixResult, TextlintKernelDescriptor, TextlintPluginCreator, TextlintRuleModule } from "@textlint/kernel";
import { TextlintPluginOptions, TextlintRuleOptions } from "@textlint/types";
export type TestConfigPlugin = {
    pluginId: string;
    plugin: TextlintPluginCreator;
    options?: TextlintPluginOptions | boolean;
};
export type TestConfigRule = {
    ruleId: string;
    rule: TextlintRuleModule;
    options?: TextlintRuleOptions | boolean;
};
export type TestConfig = {
    plugins?: TestConfigPlugin[];
    rules: TestConfigRule[];
};
export type TesterValid = string | {
    text?: string;
    ext?: string;
    inputPath?: string;
    options?: TextlintRuleOptions;
    description?: string;
};
export type TesterErrorDefinition = {
    ruleId?: string;
    range?: readonly [startIndex: number, endIndex: number];
    loc?: {
        start: {
            line: number;
            column: number;
        };
        end: {
            line: number;
            column: number;
        };
    };
    /**
     * @deprecated use `range` option
     */
    index?: number;
    /**
     * @deprecated use `loc` option
     */
    line?: number;
    /**
     * @deprecated use `loc` option
     */
    column?: number;
    message?: string;
    /**
     * array of suggestions for the error
     */
    suggestions?: {
        id: string;
        message?: string;
        range?: readonly [startIndex: number, endIndex: number];
        output?: string;
    }[];
};
export type TesterInvalid = {
    text?: string;
    output?: string;
    ext?: string;
    inputPath?: string;
    options?: TextlintRuleOptions;
    description?: string;
    errors: TesterErrorDefinition[];
};
export type TestRuleSet = {
    rules: {
        [index: string]: TextlintRuleModule;
    };
    rulesOptions: Record<string, TextlintRuleOptions>;
};
export type TestPluginSet = {
    plugins: {
        [index: string]: TextlintPluginCreator;
    };
    pluginOptions: Record<string, TextlintPluginOptions | boolean>;
};
interface CreateTextlintKernelDescriptorArgs {
    testName: string;
    testRuleDefinition: TextlintRuleModule | TestConfig;
    testCaseOptions?: TestConfigRule["options"];
}
export declare const createTextlintKernelDescriptor: ({ testName, testRuleDefinition, testCaseOptions }: CreateTextlintKernelDescriptorArgs) => TextlintKernelDescriptor;
export declare const createTestLinter: (textlintKernelDescriptor: TextlintKernelDescriptor) => {
    lintText(text: string, ext: string): Promise<import("@textlint/kernel").TextlintResult>;
    lintFile(filePath: string): Promise<import("@textlint/kernel").TextlintResult>;
    fixText(text: string, ext: string): Promise<TextlintFixResult>;
    fixFile(filePath: string): Promise<TextlintFixResult>;
};
export declare class TextLintTester {
    constructor();
    testValidPattern(testName: string, param: TextlintRuleModule | TestConfig, valid: TesterValid): void;
    testInvalidPattern(testName: string, param: TextlintRuleModule | TestConfig, invalid: TesterInvalid): void;
    /**
     * run test for textlint rule.
     * @param {string} name name is name of the test or rule
     * @param {TextlintRuleModule|TestConfig} testRuleDefinition param is TextlintRuleCreator or TestConfig
     * @param {string[]|object[]} [valid]
     * @param {object[]} [invalid]
     */
    run(name: string, testRuleDefinition: TextlintRuleModule | TestConfig, { valid, invalid }: {
        valid?: TesterValid[];
        invalid?: TesterInvalid[];
    }): void;
}
export {};
//# sourceMappingURL=textlint-tester.d.ts.map