/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
/// <reference types="mocha" />
import type { LocalReferenceCollection } from "../localReference.js";
import type { MergeTree } from "../mergeTree.js";
import type { MergeBlock } from "../mergeTreeNodes.js";
import { type Perspective } from "../perspective.js";
import type { OperationStamp } from "../stamps.js";
import { ClientTestHelper } from "./clientTestHelper.js";
export declare function loadTextFromFile(filename: string, mergeTree: MergeTree, segLimit?: number): MergeTree;
export declare function loadTextFromFileWithMarkers(filename: string, mergeTree: MergeTree, segLimit?: number): MergeTree;
export interface MockRemoteClient {
    perspectiveAt(args: {
        refSeq: number;
    }): Perspective;
    stampAt(args: {
        seq: number;
    }): OperationStamp;
    /**
     * Short client id for this client.
     */
    id: number;
}
/**
 * Creates a "mock remote client" which allows ergonomically generating {@link Perspective}s and {@link OperationStamp}s
 * for use in tests that interact directly with a {@link MergeTree}.
 *
 * Example:
 *
 * ```typescript
 * let seq = 0;
 * const remoteClient = makeRemoteClient({ clientId: 18 });
 *
 * mergeTree.insertSegments(
 * 0,
 * [TextSegment.make("some text")],
 * remoteClient.perspectiveAt({ refSeq: seq }),
 * remoteClient.stampAt({ seq: ++seq }),
 * undefined
 * );
 * ```
 */
export declare function makeRemoteClient({ clientId }: {
    clientId: number;
}): MockRemoteClient;
export declare function nodeOrdinalsHaveIntegrity(block: MergeBlock): boolean;
/**
 * Returns an object that tallies each delta and maintenance operation observed
 * for the given 'mergeTree'.
 */
export declare function countOperations(mergeTree: MergeTree): object;
export declare function validatePartialLengths(clientId: number, mergeTree: MergeTree, expectedValues?: {
    seq: number;
    len: number;
    localSeq?: number;
}[], minRefSeqForLocalSeq?: Map<number, number>, mergeBlock?: MergeBlock): void;
export declare function validateRefCount(collection?: LocalReferenceCollection): void;
/**
 * Enable stricter partial length assertions inside tests
 *
 * Note that these assertions can be expensive, and so should not be enabled in
 * production code or tests that run through thousands of ops (e.g. the SharedString
 * fuzz tests).
 */
export declare function useStrictPartialLengthChecks(): void;
interface ObliterateTestArgs {
    title: string;
    action: (helper: ClientTestHelper) => void;
    expectedText: string;
}
export declare function itCorrectlyObliterates(args: ObliterateTestArgs): Mocha.Test;
export declare namespace itCorrectlyObliterates {
    var skip: (args: ObliterateTestArgs) => Mocha.Test;
    var only: (args: ObliterateTestArgs) => Mocha.Test;
}
export {};
//# sourceMappingURL=testUtils.d.ts.map