add special case for ext
This commit is contained in:
parent
9f80c3c3e9
commit
106c8cef01
|
|
@ -70,7 +70,8 @@ export async function toMatchAriaSnapshot(
|
||||||
timeout = options.timeout ?? this.timeout;
|
timeout = options.timeout ?? this.timeout;
|
||||||
} else {
|
} else {
|
||||||
if (expectedParam?.name) {
|
if (expectedParam?.name) {
|
||||||
expectedPath = testInfo._resolveSnapshotPath(pathTemplate, defaultTemplate, [sanitizeFilePathBeforeExtension(expectedParam.name)]);
|
const ext = expectedParam.name!.endsWith('.snapshot.yml') ? '.snapshot.yml' : undefined;
|
||||||
|
expectedPath = testInfo._resolveSnapshotPath(pathTemplate, defaultTemplate, [sanitizeFilePathBeforeExtension(expectedParam.name, ext)]);
|
||||||
} else {
|
} else {
|
||||||
let snapshotNames = (testInfo as any)[snapshotNamesSymbol] as SnapshotNames;
|
let snapshotNames = (testInfo as any)[snapshotNamesSymbol] as SnapshotNames;
|
||||||
if (!snapshotNames) {
|
if (!snapshotNames) {
|
||||||
|
|
@ -78,11 +79,11 @@ export async function toMatchAriaSnapshot(
|
||||||
(testInfo as any)[snapshotNamesSymbol] = snapshotNames;
|
(testInfo as any)[snapshotNamesSymbol] = snapshotNames;
|
||||||
}
|
}
|
||||||
const fullTitleWithoutSpec = [...testInfo.titlePath.slice(1), ++snapshotNames.anonymousSnapshotIndex].join(' ');
|
const fullTitleWithoutSpec = [...testInfo.titlePath.slice(1), ++snapshotNames.anonymousSnapshotIndex].join(' ');
|
||||||
expectedPath = testInfo._resolveSnapshotPath(pathTemplate, defaultTemplate, [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec)) + '.snapshot.yml']);
|
expectedPath = testInfo._resolveSnapshotPath(pathTemplate, defaultTemplate, [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec))], '.snapshot.yml');
|
||||||
// in 1.51, we changed the default template to use .snapshot.yml extension
|
// in 1.51, we changed the default template to use .snapshot.yml extension
|
||||||
// for backwards compatibility, we check for the legacy .yml extension
|
// for backwards compatibility, we check for the legacy .yml extension
|
||||||
if (!(await fileExistsAsync(expectedPath))) {
|
if (!(await fileExistsAsync(expectedPath))) {
|
||||||
const legacyPath = testInfo._resolveSnapshotPath(pathTemplate, defaultTemplate, [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec)) + '.yml']);
|
const legacyPath = testInfo._resolveSnapshotPath(pathTemplate, defaultTemplate, [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec))], '.yml');
|
||||||
if (await fileExistsAsync(legacyPath))
|
if (await fileExistsAsync(legacyPath))
|
||||||
expectedPath = legacyPath;
|
expectedPath = legacyPath;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -200,39 +200,13 @@ export function trimLongString(s: string, length = 100) {
|
||||||
return s.substring(0, start) + middle + s.slice(-end);
|
return s.substring(0, start) + middle + s.slice(-end);
|
||||||
}
|
}
|
||||||
|
|
||||||
function findNthFromEnd(string: string, searchString: string, n: number) {
|
|
||||||
let i = string.length;
|
|
||||||
while (n--) {
|
|
||||||
const pos = string.lastIndexOf(searchString, i - 1);
|
|
||||||
if (pos === -1)
|
|
||||||
break;
|
|
||||||
i = pos;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
function multiExtname(filePath: string, maximum = 2): string {
|
|
||||||
const basename = path.basename(filePath);
|
|
||||||
const startOfExtension = findNthFromEnd(basename, '.', maximum);
|
|
||||||
return basename.substring(startOfExtension);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function parsePathMultiExt(filePath: string, maximum = 2) {
|
|
||||||
const startOfExtension = findNthFromEnd(filePath, '.', maximum);
|
|
||||||
const result = path.parse(filePath.substring(0, startOfExtension) + '.ext');
|
|
||||||
result.base = filePath.substring(0, startOfExtension);
|
|
||||||
result.ext = filePath.substring(startOfExtension);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function addSuffixToFilePath(filePath: string, suffix: string): string {
|
export function addSuffixToFilePath(filePath: string, suffix: string): string {
|
||||||
const ext = multiExtname(filePath);
|
const ext = path.extname(filePath);
|
||||||
const base = filePath.substring(0, filePath.length - ext.length);
|
const base = filePath.substring(0, filePath.length - ext.length);
|
||||||
return base + suffix + ext;
|
return base + suffix + ext;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function sanitizeFilePathBeforeExtension(filePath: string): string {
|
export function sanitizeFilePathBeforeExtension(filePath: string, ext = path.extname(filePath)): string {
|
||||||
const ext = multiExtname(filePath);
|
|
||||||
const base = filePath.substring(0, filePath.length - ext.length);
|
const base = filePath.substring(0, filePath.length - ext.length);
|
||||||
return sanitizeForFilePath(base) + ext;
|
return sanitizeForFilePath(base) + ext;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import path from 'path';
|
||||||
import { captureRawStack, monotonicTime, sanitizeForFilePath, stringifyStackFrames, currentZone } from 'playwright-core/lib/utils';
|
import { captureRawStack, monotonicTime, sanitizeForFilePath, stringifyStackFrames, currentZone } from 'playwright-core/lib/utils';
|
||||||
|
|
||||||
import { TimeoutManager, TimeoutManagerError, kMaxDeadline } from './timeoutManager';
|
import { TimeoutManager, TimeoutManagerError, kMaxDeadline } from './timeoutManager';
|
||||||
import { debugTest, filteredStackTrace, formatLocation, getContainedPath, normalizeAndSaveAttachment, trimLongString, windowsFilesystemFriendlyLength, parsePathMultiExt } from '../util';
|
import { debugTest, filteredStackTrace, formatLocation, getContainedPath, normalizeAndSaveAttachment, trimLongString, windowsFilesystemFriendlyLength } from '../util';
|
||||||
import { TestTracing } from './testTracing';
|
import { TestTracing } from './testTracing';
|
||||||
import { testInfoError } from './util';
|
import { testInfoError } from './util';
|
||||||
import { FloatingPromiseScope } from './floatingPromiseScope';
|
import { FloatingPromiseScope } from './floatingPromiseScope';
|
||||||
|
|
@ -463,9 +463,11 @@ export class TestInfoImpl implements TestInfo {
|
||||||
return sanitizeForFilePath(trimLongString(fullTitleWithoutSpec));
|
return sanitizeForFilePath(trimLongString(fullTitleWithoutSpec));
|
||||||
}
|
}
|
||||||
|
|
||||||
_resolveSnapshotPath(template: string | undefined, defaultTemplate: string, pathSegments: string[]) {
|
_resolveSnapshotPath(template: string | undefined, defaultTemplate: string, pathSegments: string[], extension?: string) {
|
||||||
const subPath = path.join(...pathSegments);
|
const subPath = path.join(...pathSegments);
|
||||||
const parsedSubPath = parsePathMultiExt(subPath);
|
const dir = path.dirname(subPath);
|
||||||
|
const ext = extension ?? path.extname(subPath);
|
||||||
|
const name = path.basename(subPath, ext);
|
||||||
const relativeTestFilePath = path.relative(this.project.testDir, this._requireFile);
|
const relativeTestFilePath = path.relative(this.project.testDir, this._requireFile);
|
||||||
const parsedRelativeTestFilePath = path.parse(relativeTestFilePath);
|
const parsedRelativeTestFilePath = path.parse(relativeTestFilePath);
|
||||||
const projectNamePathSegment = sanitizeForFilePath(this.project.name);
|
const projectNamePathSegment = sanitizeForFilePath(this.project.name);
|
||||||
|
|
@ -481,8 +483,8 @@ export class TestInfoImpl implements TestInfo {
|
||||||
.replace(/\{(.)?testName\}/g, '$1' + this._fsSanitizedTestName())
|
.replace(/\{(.)?testName\}/g, '$1' + this._fsSanitizedTestName())
|
||||||
.replace(/\{(.)?testFileName\}/g, '$1' + parsedRelativeTestFilePath.base)
|
.replace(/\{(.)?testFileName\}/g, '$1' + parsedRelativeTestFilePath.base)
|
||||||
.replace(/\{(.)?testFilePath\}/g, '$1' + relativeTestFilePath)
|
.replace(/\{(.)?testFilePath\}/g, '$1' + relativeTestFilePath)
|
||||||
.replace(/\{(.)?arg\}/g, '$1' + path.join(parsedSubPath.dir, parsedSubPath.name))
|
.replace(/\{(.)?arg\}/g, '$1' + path.join(dir, name))
|
||||||
.replace(/\{(.)?ext\}/g, parsedSubPath.ext ? '$1' + parsedSubPath.ext : '');
|
.replace(/\{(.)?ext\}/g, ext ? '$1' + ext : '');
|
||||||
|
|
||||||
return path.normalize(path.resolve(this._configInternal.configDir, snapshotPath));
|
return path.normalize(path.resolve(this._configInternal.configDir, snapshotPath));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue