jest-metadata
Version:
🦸♂️ Superhero power for your Jest reporters! 🦸♀️
222 lines (168 loc) • 5.19 kB
text/typescript
import type { MetadataChecker } from '../checker';
import type {
BaseMetadata,
DescribeBlockMetadata,
HookDefinitionMetadata,
HookInvocationMetadata,
TestFileMetadata,
TestEntryMetadata,
TestFnInvocationMetadata,
TestInvocationMetadata,
} from '../containers';
import type { MetadataSelector } from './MetadataSelector';
export class MetadataSelectorImpl implements MetadataSelector {
constructor(
readonly check: MetadataChecker,
readonly value: () => BaseMetadata | undefined,
) {}
get file(): TestFileMetadata | undefined {
const metadata = this.value();
if (this.check.isTestFileMetadata(metadata)) {
return metadata;
}
if (this.check.isDescribeBlockMetadata(metadata)) {
return metadata.file;
}
if (this.check.isTestEntryMetadata(metadata)) {
return metadata.describeBlock.file;
}
if (this.check.isHookDefinitionMetadata(metadata)) {
return metadata.describeBlock.file;
}
if (this.check.isHookInvocationMetadata(metadata)) {
return metadata.definition.describeBlock.file;
}
if (this.check.isTestInvocationMetadata(metadata)) {
return metadata.definition.describeBlock.file;
}
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata.test.definition.describeBlock.file;
}
return;
}
get describeBlock(): DescribeBlockMetadata | undefined {
const metadata = this.value();
if (this.check.isDescribeBlockMetadata(metadata)) {
return metadata;
}
if (this.check.isHookDefinitionMetadata(metadata)) {
return metadata.describeBlock;
}
if (this.check.isHookInvocationMetadata(metadata)) {
return metadata.definition.describeBlock;
}
if (this.check.isTestEntryMetadata(metadata)) {
return metadata.describeBlock;
}
if (this.check.isTestInvocationMetadata(metadata)) {
return metadata.definition.describeBlock;
}
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata.test.definition.describeBlock;
}
return;
}
get testEntry(): TestEntryMetadata | undefined {
const metadata = this.value();
if (this.check.isTestEntryMetadata(metadata)) {
return metadata;
}
if (this.check.isTestInvocationMetadata(metadata)) {
return metadata.definition;
}
if (
this.check.isHookInvocationMetadata(metadata) &&
this.check.isTestEntryMetadata(metadata.definition.describeBlock)
) {
return metadata.definition.describeBlock;
}
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata.test.definition;
}
return;
}
get hookDefinition(): HookDefinitionMetadata | undefined {
const metadata = this.value();
if (this.check.isHookDefinitionMetadata(metadata)) {
return metadata;
}
if (this.check.isHookInvocationMetadata(metadata)) {
return metadata.definition;
}
return;
}
get definition(): DescribeBlockMetadata | HookDefinitionMetadata | TestEntryMetadata | undefined {
return this.hookDefinition ?? this.testEntry ?? this.describeBlock;
}
get testFnInvocation(): TestFnInvocationMetadata | undefined {
const metadata = this.value();
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata;
}
return;
}
get hookInvocation(): HookInvocationMetadata | undefined {
const metadata = this.value();
if (this.check.isHookInvocationMetadata(metadata)) {
return metadata;
}
return;
}
get testInvocation(): TestInvocationMetadata | undefined {
const metadata = this.value();
if (this.check.isTestInvocationMetadata(metadata)) {
return metadata;
}
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata.test;
}
if (
this.check.isHookInvocationMetadata(metadata) &&
this.check.isTestInvocationMetadata(metadata.parent)
) {
return metadata.parent;
}
return;
}
get invocationParent(): TestInvocationMetadata | DescribeBlockMetadata | undefined {
const metadata = this.value();
if (this.check.isDescribeBlockMetadata(metadata)) {
return metadata;
}
if (this.check.isHookInvocationMetadata(metadata)) {
return metadata.parent;
}
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata.test;
}
if (this.check.isTestInvocationMetadata(metadata)) {
return metadata;
}
return;
}
get invocation():
| TestFileMetadata
| DescribeBlockMetadata
| HookInvocationMetadata
| TestInvocationMetadata
| TestFnInvocationMetadata
| undefined {
const metadata = this.value();
if (this.check.isTestFileMetadata(metadata)) {
return metadata;
}
if (this.check.isDescribeBlockMetadata(metadata)) {
return metadata;
}
if (this.check.isHookInvocationMetadata(metadata)) {
return metadata;
}
if (this.check.isTestInvocationMetadata(metadata)) {
return metadata;
}
if (this.check.isTestFnInvocationMetadata(metadata)) {
return metadata;
}
return;
}
}