import { TextDocument } from 'vscode-languageserver-textdocument';
import type { LanguageService, LanguageSettings } from '../../src';
import type { LanguageHandlers } from '../../src/languageserver/handlers/languageHandlers';
import type { ValidationHandler } from '../../src/languageserver/handlers/validationHandlers';
import type { JSONSchema } from '../../src/languageservice/jsonSchema';
import type { FileSystem } from '../../src/languageservice/services/schemaRequestHandler';
import { SettingsState } from '../../src/yamlSettings';
import { TestTelemetry } from './testsTypes';
export declare function toFsPath(str: unknown): string;
export declare const TEST_URI = "file://~/Desktop/vscode-k8s/test.yaml";
export declare const SCHEMA_ID = "default_schema_id.yaml";
export declare function setupTextDocument(content: string): TextDocument;
export declare function setupSchemaIDTextDocument(content: string, customSchemaID?: string): TextDocument;
export declare const testFileSystem: FileSystem;
export interface TestLanguageServerSetup {
    languageService: LanguageService;
    validationHandler: ValidationHandler;
    languageHandler: LanguageHandlers;
    yamlSettings: SettingsState;
    telemetry: TestTelemetry;
    schemaProvider: TestCustomSchemaProvider;
}
export declare function setupLanguageService(languageSettings: LanguageSettings): TestLanguageServerSetup;
/**
 * Derives the absolute `position` of the caret given `content` containing a virtual caret.
 * @param content The content of the document.
 * The caret is located in the content using `|` bookends.
 * For example, `content = 'ab|c|d'` places the caret over the `'c'`, at `position = 2`
 * @returns The absolute position of the caret.
 */
export declare function caretPosition(content: string): {
    position: number;
    content: string;
};
export declare class TestCustomSchemaProvider {
    private schemas;
    private static self;
    private constructor();
    static instance(): TestCustomSchemaProvider;
    /**
     * Adds a schema to the list of custom schemas.
     * @param doc The uri of the document
     * @param schema The JSON schema object.
     */
    addSchema(doc: string, schema: JSONSchema): void;
    /**
     * Adds a schema to the list of custom schemas.
     * @param doc The uri of the document
     * @param uri The uri of the schema
     * @param schema The JSON schema object.
     */
    addSchemaWithUri(doc: string, uri: string, schema: JSONSchema): void;
    /**
     * Deletes a schema from the list of custom schemas.
     * @param doc The uri of the document
     */
    deleteSchema(doc: string): void;
    /**
     * Checks if a schema exists for a given document.
     * @param doc The uri of the document
     * @returns True if a schema exists for the document, false otherwise.
     */
    has(doc: string): boolean;
    /**
     * Returns the schemas for a given document
     * @param doc The uri of the document.
     * @returns The uris of the schemas
     * @throws Error if no schema found
     */
    getSchemas(doc: string): string | string[];
    /**
     * Returns the content of a schema for a given uri.
     * @param uri The uri of the schema.
     * @returns The content of the schema as a string, or null if the schema is not found.
     */
    getContentForSchema(uri: string): string | null;
}
export declare function schemaItSelfCustomSchemaProvider(uri: string): Promise<string | string[]>;
