eslint-plugin-mocha
Version: 
Eslint rules for mocha.
101 lines • 3.77 kB
JavaScript
import { isConstantPath } from '../ast/member-expression.js';
import { filterWithArgs, flatMapWithArgs, mapWithArgs } from '../list.js';
import { configCallNames } from './descriptors.js';
function hasMatchingType(item, typesToMatch) {
    return typesToMatch.includes(item.type);
}
const testCaseAndSuite = ['testCase', 'suite'];
function filterTestCasesAndSuites(nameDetailsList) {
    return filterWithArgs(nameDetailsList, hasMatchingType, testCaseAndSuite);
}
function hasMatchingInterface(item, interfaceToMatch) {
    return interfaceToMatch === item.interface;
}
function filterByInterface(nameDetailsList, interfaceToMatch) {
    return filterWithArgs(nameDetailsList, hasMatchingInterface, interfaceToMatch);
}
function formatXVariant(nameDetails) {
    const [firstPathSegment, ...remainingPath] = nameDetails.path;
    return {
        ...nameDetails,
        path: [`x${firstPathSegment}`, ...remainingPath],
        modifier: 'pending'
    };
}
function buildXVariants(nameDetailsList) {
    const testCasesAndSuites = filterTestCasesAndSuites(nameDetailsList);
    return filterByInterface(testCasesAndSuites, 'BDD').map(formatXVariant);
}
function formatSkipVariant(nameDetails) {
    return {
        ...nameDetails,
        path: [...nameDetails.path, 'skip'],
        modifier: 'pending'
    };
}
function buildSkipVariants(nameDetailsList) {
    const testCasesAndSuites = filterTestCasesAndSuites(nameDetailsList);
    return testCasesAndSuites.map(formatSkipVariant);
}
function formatExclusiveVariants(nameDetails) {
    return {
        ...nameDetails,
        path: [...nameDetails.path, 'only'],
        modifier: 'exclusive'
    };
}
function buildExclusiveVariants(nameDetailsList) {
    const testCasesAndSuites = filterTestCasesAndSuites(nameDetailsList);
    return testCasesAndSuites.map(formatExclusiveVariants);
}
function formatConfigVariant(nameDetails, config) {
    return {
        ...nameDetails,
        config,
        type: 'config',
        path: [...nameDetails.path, config],
        normalizedPath: [...nameDetails.normalizedPath, `${config}()`]
    };
}
function buildConfigVariantsForConfig(config, nameDetailsList) {
    return mapWithArgs(nameDetailsList, formatConfigVariant, config);
}
function buildConfigVariants(nameDetailsList) {
    return flatMapWithArgs(configCallNames, buildConfigVariantsForConfig, nameDetailsList);
}
const callExpressionSuffix = '()';
export function reformatLastPathSegmentWithCallExpressions(path, amountOfCallExpressions) {
    if (!isConstantPath(path)) {
        return path;
    }
    const mutablePath = Array.from(path);
    const segment = mutablePath.pop();
    const suffix = callExpressionSuffix.repeat(amountOfCallExpressions);
    return [...mutablePath, `${segment}${suffix}`];
}
export function stripCallExpressions(path) {
    return path.map((segment) => {
        if (segment.endsWith(callExpressionSuffix)) {
            return segment.slice(0, -callExpressionSuffix.length);
        }
        return segment;
    });
}
function normalizePathForNameDetails(nameDetails) {
    return {
        ...nameDetails,
        normalizedPath: reformatLastPathSegmentWithCallExpressions(nameDetails.path, 1),
        path: stripCallExpressions(nameDetails.path)
    };
}
export function buildAllNameDetailsWithVariants(baseNameDetailsList) {
    const allNameDetails = [
        ...baseNameDetailsList,
        ...buildSkipVariants(baseNameDetailsList),
        ...buildXVariants(baseNameDetailsList),
        ...buildExclusiveVariants(baseNameDetailsList)
    ];
    const allNormalizedNameDetails = allNameDetails.map(normalizePathForNameDetails);
    return [...allNormalizedNameDetails, ...buildConfigVariants(allNormalizedNameDetails)];
}
//# sourceMappingURL=name-details.js.map