import { Test } from './test/main';
import { Group } from './group/main';
import { FilteringOptions } from './types';
/**
 * Exposes the API to refine unwanted tests based upon applied
 * filters.
 *
 * @example
 * const refiner = new Refiner({ tags: ['@slow'] })
 * refiner.allows('tags', ['@slow']) // true
 * refiner.allows('tags', ['@regression']) // false
 *
 * const refiner = new Refiner({ tags: [] })
 * refiner.allows('tags', ['@slow']) // true
 * refiner.allows('tags', ['@regression']) // true
 */
export declare class Refiner {
    /**
     * A set of pinned tests
     */
    private pinnedTests;
    /**
     * Available filters
     */
    private filters;
    constructor(filters?: FilteringOptions);
    /**
     * Find if the group is allowed to execute its tests.
     */
    private isGroupAllowed;
    /**
     * Find if the test is allowed to be executed by checking
     * for the test title filter
     */
    private isTestTitleAllowed;
    /**
     * Find if test is allowed by the negated tags filter
     */
    private allowedByNegatedTags;
    /**
     * Test if the test is allowed by the tags filter
     */
    private allowedByTags;
    private areTestTagsAllowed;
    private isAllowedByPinnedTest;
    /**
     * Pin a test to be executed.
     */
    pinTest(test: Test<any, any>): void;
    /**
     * Find if a test is pinned
     */
    isPinned(test: Test<any, any>): boolean;
    /**
     * Add a filter
     */
    add(layer: 'tests' | 'tags' | 'groups', values: string[]): void;
    /**
     * Check if refiner allows a specific test or group to run by looking
     * at the applied filters
     */
    allows(testOrGroup: Test<any, any> | Group<any>): boolean;
}
