/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { EditorStore } from '../../../../EditorStore.js';
import type { FunctionEditorState } from '../../FunctionEditorState.js';
import { type GeneratorFn } from '@finos/legend-shared';
import { type ConcreteFunctionDefinition, type EmbeddedData, type AtomicTest, type EngineRuntime, type ObserverContext, type ValueSpecification, FunctionParameterValue, VariableExpression, FunctionTest, FunctionTestData, FunctionTestSuite, type Accessor } from '@finos/legend-graph';
import { TestablePackageableElementEditorState, TestableTestEditorState, TestableTestSuiteEditorState } from '../../testable/TestableEditorState.js';
import { EmbeddedDataEditorState } from '../../data/DataEditorState.js';
export declare class FunctionStoreTestDataState {
    readonly editorStore: EditorStore;
    readonly testDataState: FunctionTestDataState;
    storeTestData: FunctionTestData;
    embeddedEditorState: EmbeddedDataEditorState;
    dataElementModal: boolean;
    constructor(editorStore: EditorStore, testDataState: FunctionTestDataState, value: FunctionTestData);
    private initAccessorOptions;
    private refreshAccessorOptions;
    setDataElementModal(val: boolean): void;
    changeEmbeddedData(val: EmbeddedData): void;
}
export declare class FunctionTestParameterState {
    readonly uuid: string;
    readonly editorStore: EditorStore;
    readonly testState: FunctionTestState;
    parameterValue: FunctionParameterValue;
    constructor(parameterValue: FunctionParameterValue, editorStore: EditorStore, testState: FunctionTestState);
}
export declare class FunctionValueSpecificationTestParameterState extends FunctionTestParameterState {
    valueSpec: ValueSpecification;
    varExpression: VariableExpression;
    constructor(parameterValue: FunctionParameterValue, editorStore: EditorStore, testState: FunctionTestState, valueSpec: ValueSpecification, varExpression: VariableExpression);
    updateValueSpecification(val: ValueSpecification): void;
    updateParameterValue(): void;
    setName(val: string): void;
    resetValueSpec(): void;
}
export declare class FunctionTestState extends TestableTestEditorState {
    readonly parentState: FunctionTestSuiteState;
    readonly functionTestableState: FunctionTestableState;
    readonly uuid: string;
    test: FunctionTest;
    parameterValueStates: FunctionTestParameterState[];
    newParameterValueName: string;
    showNewParameterModal: boolean;
    constructor(editorStore: EditorStore, parentSuiteState: FunctionTestSuiteState, test: FunctionTest);
    get queryVariableExpressions(): VariableExpression[];
    get newParamOptions(): {
        value: string;
        label: string;
    }[];
    setNewParameterValueName(val: string): void;
    setShowNewParameterModal(val: boolean): void;
    openNewParamModal(): void;
    addParameterValue(): void;
    syncWithQuery(): void;
    addExpressionParameterValue(expression: VariableExpression): void;
    generateTestParameterValues(): void;
    buildParameterStates(): FunctionTestParameterState[];
    removeParamValueState(paramState: FunctionTestParameterState): void;
}
declare class FunctionTestDataState {
    readonly editorStore: EditorStore;
    readonly functionTestableState: FunctionTestableState;
    selectedDataState: FunctionStoreTestDataState | undefined;
    dataHolder: FunctionTestSuite;
    showNewModal: boolean;
    showAddElementModal: boolean;
    constructor(editorStore: EditorStore, functionTestableState: FunctionTestableState, holder: FunctionTestSuite);
    initDefaultStore(): void;
    setShowModal(val: boolean): void;
    setShowAddElementModal(val: boolean): void;
    get existingElementPaths(): string[];
    get availableElementsToAdd(): {
        path: string;
    }[];
    addDataElement(elementPath: string): void;
    deleteStoreTestData(val: FunctionTestData): void;
    openStoreTestData(val: FunctionTestData): void;
}
export declare const createFunctionTest: (id: string, observerContext: ObserverContext, containsRuntime: boolean, functionDefinition: ConcreteFunctionDefinition, editorStore: EditorStore, suite?: FunctionTestSuite | undefined) => Promise<FunctionTest>;
export declare class FunctionTestSuiteState extends TestableTestSuiteEditorState {
    readonly functionTestableState: FunctionTestableState;
    suite: FunctionTestSuite;
    testStates: FunctionTestState[];
    selectTestState: FunctionTestState | undefined;
    dataState: FunctionTestDataState;
    showCreateModal: boolean;
    constructor(editorStore: EditorStore, functionTestableState: FunctionTestableState, suite: FunctionTestSuite);
    setShowModal(val: boolean): void;
    buildTestStates(): FunctionTestState[];
    buildTestState(val: AtomicTest): FunctionTestState | undefined;
    addNewTest(id: string): GeneratorFn<void>;
}
export declare class FunctionTestableState extends TestablePackageableElementEditorState {
    readonly functionEditorState: FunctionEditorState;
    selectedTestSuite: FunctionTestSuiteState | undefined;
    runningSuite: FunctionTestSuite | undefined;
    createSuiteModal: boolean;
    cachedAccessors: Accessor[];
    constructor(functionEditorState: FunctionEditorState);
    get function(): ConcreteFunctionDefinition;
    get associatedRuntimes(): EngineRuntime[] | undefined;
    get containsRuntime(): boolean;
    get resolvedIngestOrDataProductAccessors(): Accessor[];
    private buildRawLambdaFromFunction;
    resolveAccessors(): GeneratorFn<void>;
    init(): void;
    setCreateSuite(val: boolean): void;
    createSuite(suiteName: string, testName: string): GeneratorFn<void>;
    buildTestSuiteState(val: FunctionTestSuite): FunctionTestSuiteState;
    changeSuite(suite: FunctionTestSuite): void;
}
export {};
//# sourceMappingURL=FunctionTestableState.d.ts.map