Best JavaScript code snippet using fast-check-monorepo
RunDetailsFormatter.ts
Source:RunDetailsFormatter.ts  
1import { Error, safePush } from '../../../utils/globals';2import { stringify, possiblyAsyncStringify } from '../../../utils/stringify';3import { VerbosityLevel } from '../configuration/VerbosityLevel';4import { ExecutionStatus } from '../reporter/ExecutionStatus';5import { ExecutionTree } from '../reporter/ExecutionTree';6import {7  RunDetails,8  RunDetailsFailureInterrupted,9  RunDetailsFailureProperty,10  RunDetailsFailureTooManySkips,11} from '../reporter/RunDetails';12const safeObjectAssign = Object.assign;13/** @internal */14function formatHints(hints: string[]): string {15  if (hints.length === 1) {16    return `Hint: ${hints[0]}`;17  }18  return hints.map((h, idx) => `Hint (${idx + 1}): ${h}`).join('\n');19}20/** @internal */21function formatFailures<Ts>(failures: Ts[], stringifyOne: (value: Ts) => string): string {22  return `Encountered failures were:\n- ${failures.map(stringifyOne).join('\n- ')}`;23}24/** @internal */25function formatExecutionSummary<Ts>(executionTrees: ExecutionTree<Ts>[], stringifyOne: (value: Ts) => string): string {26  const summaryLines: string[] = [];27  const remainingTreesAndDepth: { depth: number; tree: ExecutionTree<Ts> }[] = [];28  for (const tree of executionTrees.slice().reverse()) {29    remainingTreesAndDepth.push({ depth: 1, tree });30  }31  while (remainingTreesAndDepth.length !== 0) {32    // There is at least one item to pop (remainingTreesAndDepth.length !== 0)33    // And this item is of type: { depth: number; tree: ExecutionTree<Ts> } (not nullable so `!` is safe)34    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion35    const currentTreeAndDepth = remainingTreesAndDepth.pop()!;36    // format current tree according to its depth37    const currentTree = currentTreeAndDepth.tree;38    const currentDepth = currentTreeAndDepth.depth;39    const statusIcon =40      currentTree.status === ExecutionStatus.Success41        ? '\x1b[32m\u221A\x1b[0m'42        : currentTree.status === ExecutionStatus.Failure43        ? '\x1b[31m\xD7\x1b[0m'44        : '\x1b[33m!\x1b[0m';45    const leftPadding = Array(currentDepth).join('. ');46    summaryLines.push(`${leftPadding}${statusIcon} ${stringifyOne(currentTree.value)}`);47    // push its children to the queue48    for (const tree of currentTree.children.slice().reverse()) {49      remainingTreesAndDepth.push({ depth: currentDepth + 1, tree });50    }51  }52  return `Execution summary:\n${summaryLines.join('\n')}`;53}54/** @internal */55function preFormatTooManySkipped<Ts>(out: RunDetailsFailureTooManySkips<Ts>, stringifyOne: (value: Ts) => string) {56  const message = `Failed to run property, too many pre-condition failures encountered\n{ seed: ${out.seed} }\n\nRan ${out.numRuns} time(s)\nSkipped ${out.numSkips} time(s)`;57  let details: string | null = null;58  const hints = [59    'Try to reduce the number of rejected values by combining map, flatMap and built-in arbitraries',60    'Increase failure tolerance by setting maxSkipsPerRun to an higher value',61  ];62  if (out.verbose >= VerbosityLevel.VeryVerbose) {63    details = formatExecutionSummary(out.executionSummary, stringifyOne);64  } else {65    safePush(66      hints,67      'Enable verbose mode at level VeryVerbose in order to check all generated values and their associated status'68    );69  }70  return { message, details, hints };71}72/** @internal */73function preFormatFailure<Ts>(out: RunDetailsFailureProperty<Ts>, stringifyOne: (value: Ts) => string) {74  const noErrorInMessage = out.runConfiguration.errorWithCause;75  const messageErrorPart = noErrorInMessage ? '' : `\nGot error: ${out.error}`;76  const message = `Property failed after ${out.numRuns} tests\n{ seed: ${out.seed}, path: "${77    out.counterexamplePath78  }", endOnFailure: true }\nCounterexample: ${stringifyOne(out.counterexample)}\nShrunk ${79    out.numShrinks80  } time(s)${messageErrorPart}`;81  let details: string | null = null;82  const hints: string[] = [];83  if (out.verbose >= VerbosityLevel.VeryVerbose) {84    details = formatExecutionSummary(out.executionSummary, stringifyOne);85  } else if (out.verbose === VerbosityLevel.Verbose) {86    details = formatFailures(out.failures, stringifyOne);87  } else {88    safePush(hints, 'Enable verbose mode in order to have the list of all failing values encountered during the run');89  }90  return { message, details, hints };91}92/** @internal */93function preFormatEarlyInterrupted<Ts>(out: RunDetailsFailureInterrupted<Ts>, stringifyOne: (value: Ts) => string) {94  const message = `Property interrupted after ${out.numRuns} tests\n{ seed: ${out.seed} }`;95  let details: string | null = null;96  const hints: string[] = [];97  if (out.verbose >= VerbosityLevel.VeryVerbose) {98    details = formatExecutionSummary(out.executionSummary, stringifyOne);99  } else {100    safePush(101      hints,102      'Enable verbose mode at level VeryVerbose in order to check all generated values and their associated status'103    );104  }105  return { message, details, hints };106}107/** @internal */108function defaultReportMessageInternal<Ts>(109  out: RunDetails<Ts>,110  stringifyOne: (value: Ts) => string111): string | undefined {112  if (!out.failed) return;113  const { message, details, hints } =114    out.counterexamplePath === null115      ? out.interrupted116        ? preFormatEarlyInterrupted(out, stringifyOne)117        : preFormatTooManySkipped(out, stringifyOne)118      : preFormatFailure(out, stringifyOne);119  let errorMessage = message;120  if (details != null) errorMessage += `\n\n${details}`;121  if (hints.length > 0) errorMessage += `\n\n${formatHints(hints)}`;122  return errorMessage;123}124/**125 * Format output of {@link check} using the default error reporting of {@link assert}126 *127 * Produce a string containing the formated error in case of failed run,128 * undefined otherwise.129 *130 * @remarks Since 1.25.0131 * @public132 */133function defaultReportMessage<Ts>(out: RunDetails<Ts> & { failed: false }): undefined;134/**135 * Format output of {@link check} using the default error reporting of {@link assert}136 *137 * Produce a string containing the formated error in case of failed run,138 * undefined otherwise.139 *140 * @remarks Since 1.25.0141 * @public142 */143function defaultReportMessage<Ts>(out: RunDetails<Ts> & { failed: true }): string;144/**145 * Format output of {@link check} using the default error reporting of {@link assert}146 *147 * Produce a string containing the formated error in case of failed run,148 * undefined otherwise.149 *150 * @remarks Since 1.25.0151 * @public152 */153function defaultReportMessage<Ts>(out: RunDetails<Ts>): string | undefined;154function defaultReportMessage<Ts>(out: RunDetails<Ts>): string | undefined {155  return defaultReportMessageInternal(out, stringify);156}157/**158 * Format output of {@link check} using the default error reporting of {@link assert}159 *160 * Produce a string containing the formated error in case of failed run,161 * undefined otherwise.162 *163 * @remarks Since 2.17.0164 * @public165 */166function asyncDefaultReportMessage<Ts>(out: RunDetails<Ts> & { failed: false }): Promise<undefined>;167/**168 * Format output of {@link check} using the default error reporting of {@link assert}169 *170 * Produce a string containing the formated error in case of failed run,171 * undefined otherwise.172 *173 * @remarks Since 2.17.0174 * @public175 */176function asyncDefaultReportMessage<Ts>(out: RunDetails<Ts> & { failed: true }): Promise<string>;177/**178 * Format output of {@link check} using the default error reporting of {@link assert}179 *180 * Produce a string containing the formated error in case of failed run,181 * undefined otherwise.182 *183 * @remarks Since 2.17.0184 * @public185 */186function asyncDefaultReportMessage<Ts>(out: RunDetails<Ts>): Promise<string | undefined>;187async function asyncDefaultReportMessage<Ts>(out: RunDetails<Ts>): Promise<string | undefined> {188  // The asynchronous version might require two passes:189  // - the first one will register the asynchronous values that will need to be stringified190  // - the second one will take the computed values191  const pendingStringifieds: Promise<[unknown, string]>[] = [];192  function stringifyOne(value: unknown): string {193    const stringified = possiblyAsyncStringify(value);194    if (typeof stringified === 'string') {195      return stringified;196    }197    pendingStringifieds.push(Promise.all([value, stringified]));198    return '\u2026'; // ellipsis199  }200  const firstTryMessage = defaultReportMessageInternal(out, stringifyOne);201  // Checks if async mode would have changed the message202  if (pendingStringifieds.length === 0) {203    // No asynchronous stringify have been queued: the computation was synchronous204    return firstTryMessage;205  }206  // Retry with async stringified versions in mind207  const registeredValues = new Map(await Promise.all(pendingStringifieds));208  function stringifySecond(value: unknown): string {209    const asyncStringifiedIfRegistered = registeredValues.get(value);210    if (asyncStringifiedIfRegistered !== undefined) {211      return asyncStringifiedIfRegistered;212    }213    // Here we ALWAYS recompute sync versions to avoid putting a cost penalty214    // on usual paths, the ones not having any async generated values215    return stringify(value);216  }217  return defaultReportMessageInternal(out, stringifySecond);218}219/** @internal */220function buildError<Ts>(errorMessage: string | undefined, out: RunDetails<Ts> & { failed: true }) {221  if (!out.runConfiguration.errorWithCause) {222    throw new Error(errorMessage);223  }224  const ErrorWithCause: new (message: string | undefined, options: { cause: unknown }) => Error = Error;225  const error = new ErrorWithCause(errorMessage, { cause: out.errorInstance });226  if (!('cause' in error)) {227    safeObjectAssign(error, { cause: out.errorInstance });228  }229  return error;230}231/** @internal */232function throwIfFailed<Ts>(out: RunDetails<Ts>): void {233  if (!out.failed) return;234  throw buildError<Ts>(defaultReportMessage(out), out);235}236/** @internal */237async function asyncThrowIfFailed<Ts>(out: RunDetails<Ts>): Promise<void> {238  if (!out.failed) return;239  throw buildError<Ts>(await asyncDefaultReportMessage(out), out);240}241/**242 * In case this code has to be executed synchronously the caller243 * has to make sure that no asyncReporter has been defined244 * otherwise it might trigger an unchecked promise245 * @internal246 */247export function reportRunDetails<Ts>(out: RunDetails<Ts>): Promise<void> | void {248  if (out.runConfiguration.asyncReporter) return out.runConfiguration.asyncReporter(out);249  else if (out.runConfiguration.reporter) return out.runConfiguration.reporter(out);250  else return throwIfFailed(out);251}252/**253 * In case this code has to be executed synchronously the caller254 * has to make sure that no asyncReporter has been defined255 * otherwise it might trigger an unchecked promise256 * @internal257 */258export async function asyncReportRunDetails<Ts>(out: RunDetails<Ts>): Promise<void> {259  if (out.runConfiguration.asyncReporter) return out.runConfiguration.asyncReporter(out);260  else if (out.runConfiguration.reporter) return out.runConfiguration.reporter(out);261  else return asyncThrowIfFailed(out);262}...Using AI Code Generation
1const { currentTreeAndDepth } = require('fast-check-monorepo')2console.log(currentTreeAndDepth())3const { currentTreeAndDepth } = require('fast-check-monorepo')4console.log(currentTreeAndDepth())5const { currentTreeAndDepth } = require('fast-check-monorepo')6console.log(currentTreeAndDepth())7const { currentTreeAndDepth } = require('fast-check-monorepo')8console.log(currentTreeAndDepth())9const { currentTreeAndDepth } = require('fast-check-monorepo')10console.log(currentTreeAndDepth())11const { currentTreeAndDepth } = require('fast-check-monorepo')12console.log(currentTreeAndDepth())13const { currentTreeAndDepth } = require('fast-check-monorepo')14console.log(currentTreeAndDepth())15const { currentTreeAndDepth } = require('fast-check-monorepo')16console.log(currentTreeAndDepth())17const { currentTreeAndDepth } = require('fast-check-monorepo')18console.log(currentTreeAndDepth())19const { currentTreeAndDepth } = require('fast-check-monorepo')20console.log(currentTreeAndDepth())21const { currentTreeAndDepth } = require('fast-check-monorepo')22console.log(currentTreeAndDepth())Using AI Code Generation
1const { currentTreeAndDepth } = require('fast-check-monorepo');2const { currentTree } = currentTreeAndDepth();3console.log(currentTree);4const { currentTreeAndDepth } = require('fast-check-monorepo');5const { currentTree, depth } = currentTreeAndDepth();6console.log(currentTree);7console.log(depth);8const { currentTreeAndDepth } = require('fast-check-monorepo');9const { currentTree, depth } = currentTreeAndDepth();10console.log(currentTree);11console.log(depth);12const { currentTreeAndDepth } = require('fast-check-monorepo');13const { currentTree, depth } = currentTreeAndDepth();14console.log(currentTree);15console.log(depth);16const { currentTreeAndDepth } = require('fast-check-monorepo');17const { currentTree, depth } = currentTreeAndDepth();18console.log(currentTree);19console.log(depth);20const { currentTreeAndDepth } = require('fast-check-monorepo');21const { currentTree, depth } = currentTreeAndDepth();22console.log(currentTree);23console.log(depth);24const { currentTreeAndDepth } = require('fast-check-monorepo');25const { currentTree, depth } = currentTreeAndDepth();26console.log(currentTree);27console.log(depth);28const { currentTreeAndDepth } = require('fast-check-monorepo');29const { currentTree, depth } = currentTreeAndDepth();30console.log(currentTree);31console.log(depth);32const { currentTreeAndDepth } = require('fast-check-monorepo');Using AI Code Generation
1const { currentTreeAndDepth } = require('fast-check-monorepo');2const { tree, depth } = currentTreeAndDepth();3console.log(tree);4console.log(depth);5const { currentTreeAndDepth } = require('fast-check-monorepo');6const { tree, depth } = currentTreeAndDepth();7console.log(tree);8console.log(depth);9const { currentTreeAndDepth } = require('fast-check-monorepo');10const { tree, depth } = currentTreeAndDepth();11console.log(tree);12console.log(depth);13const { currentTreeAndDepth } = require('fast-check-monorepo');14const { tree, depth } = currentTreeAndDepth();15console.log(tree);16console.log(depth);17const { currentTreeAndDepth } = require('fast-check-monorepo');18const { tree, depth } = currentTreeAndDepth();19console.log(tree);20console.log(depth);21const { currentTreeAndDepth } = require('fast-check-monorepo');22const { tree, depth } = currentTreeAndDepth();23console.log(tree);24console.log(depth);25const { currentTreeAndDepth } = require('fast-check-monorepo');26const { tree, depth } = currentTreeAndDepth();27console.log(tree);28console.log(depth);29const { currentTreeAndDepth } = require('fast-check-monorepo');30const { tree, depth } = currentTreeAndDepth();31console.log(tree);32console.log(depth);33const { currentTreeAndDepth } = require('fast-check-monorepo');34const { tree, depth } = currentTreeAndUsing AI Code Generation
1import { currentTreeAndDepth } from 'fast-check-monorepo';2const [currentTree, depth] = currentTreeAndDepth();3console.log(currentTree);4console.log(depth);5import { currentTreeAndDepth } from 'fast-check-monorepo';6const [currentTree, depth] = currentTreeAndDepth();7console.log(currentTree);8console.log(depth);9import { currentTreeAndDepth } from 'fast-check-monorepo';10const [currentTree, depth] = currentTreeAndDepth();11console.log(currentTree);12console.log(depth);13import { currentTreeAndDepth } from 'fast-check-monorepo';14const [currentTree, depth] = currentTreeAndDepth();15console.log(currentTree);16console.log(depth);17import { currentTreeAndDepth } from 'fast-check-monorepo';18const [currentTree, depth] = currentTreeAndDepth();19console.log(currentTree);20console.log(depth);21import { currentTreeAndDepth } from 'fast-check-monorepo';22const [currentTree, depth] = currentTreeAndDepth();23console.log(currentTree);24console.log(depth);25import { currentTreeAndDepth } from 'fast-check-monorepo';26const [currentTree, depth] = currentTreeAndDepth();27console.log(currentTree);28console.log(depth);29import { currentTreeAndDepth } from 'fast-check-monorepo';30const [currentTree, depth] = currentTreeAndDepth();31console.log(currentTree);32console.log(depth);33import { currentTreeAndDepth } from 'fast-check-monorepo';Using AI Code Generation
1const { currentTreeAndDepth } = require('fast-check-monorepo')2const treeAndDepth = currentTreeAndDepth()3console.log(treeAndDepth)4const { currentTreeAndDepth } = require('fast-check-monorepo')5const treeAndDepth = currentTreeAndDepth()6console.log(treeAndDepth)7const { currentTreeAndDepth } = require('fast-check-monorepo')8const treeAndDepth = currentTreeAndDepth()9console.log(treeAndDepth)10const { currentTreeAndDepth } = require('fast-check-monorepo')11const treeAndDepth = currentTreeAndDepth()12console.log(treeAndDepth)13const { currentTreeAndDepth } = require('fast-check-monorepo')14const treeAndDepth = currentTreeAndDepth()15console.log(treeAndDepth)16const { currentTreeAndDepth } = require('fast-check-monorepo')17const treeAndDepth = currentTreeAndDepth()18console.log(treeAndDepth)19const { currentTreeAndDepth } = require('fast-check-monorepo')20const treeAndDepth = currentTreeAndDepth()21console.log(treeAndDepth)22const { currentTreeAndDepth } = require('fast-check-monorepo')23const treeAndDepth = currentTreeAndDepth()24console.log(treeAndDepth)25const { currentTreeAndDepth } = require('fast-check-monorepo')26const treeAndDepth = currentTreeAndDepth()27console.log(treeAndDepth)28const { currentUsing AI Code Generation
1const { currentTreeAndDepth } = require("fast-check-monorepo");2const maxDepth = 3;3const tree = currentTreeAndDepth(maxDepth);4console.log(tree);5console.log(tree.depth);6console.log(tree.size);7console.log(tree.leafSize);8console.log(tree.nonLeafSize);9console.log(tree.hasChildrenSize);10console.log(tree.noChildrenSize);11console.log(tree.hasParentSize);12console.log(tree.noParentSize);13console.log(tree.hasLeftSiblingSize);14console.log(tree.noLeftSiblingSize);15console.log(tree.hasRightSiblingSize);16console.log(tree.noRightSiblingSize);17console.log(tree.hasBothSiblingsSize);18console.log(tree.noSiblingsSize);19console.log(tree.hasLeftSiblingOnlySize);20console.log(tree.hasRightSiblingOnlySize);Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
