Best JavaScript code snippet using stryker-parent
babel-transformer.ts
Source:babel-transformer.ts
1import { NodePath, traverse, types } from '@babel/core';2/* eslint-disable @typescript-eslint/no-duplicate-imports */3// @ts-expect-error The babel types don't define "File" yet4import { File } from '@babel/core';5/* eslint-enable @typescript-eslint/no-duplicate-imports */6import { allMutators } from '../mutators';7import { instrumentationBabelHeader, isImportDeclaration, isTypeNode, locationIncluded, locationOverlaps } from '../util/syntax-helpers';8import { ScriptFormat } from '../syntax';9import { allMutantPlacers, MutantPlacer, throwPlacementError } from '../mutant-placers';10import { Mutable, Mutant } from '../mutant';11import { DirectiveBookkeeper } from './directive-bookkeeper';12import { AstTransformer } from '.';13interface MutantsPlacement<TNode extends types.Node> {14 appliedMutants: Map<Mutant, TNode>;15 placer: MutantPlacer<TNode>;16}17type PlacementMap = Map<types.Node, MutantsPlacement<types.Node>>;18export const transformBabel: AstTransformer<ScriptFormat> = (19 { root, originFileName, rawContent, offset },20 mutantCollector,21 { options },22 mutators = allMutators,23 mutantPlacers = allMutantPlacers24) => {25 // Wrap the AST in a `new File`, so `nodePath.buildCodeFrameError` works26 // https://github.com/babel/babel/issues/1188927 const file = new File({ filename: originFileName }, { code: rawContent, ast: root });28 // Range filters that are in scope for the current file29 const mutantRangesForCurrentFile = options.mutationRanges.filter((mutantRange) => mutantRange.fileName === originFileName);30 // Create a placementMap for the mutation switching bookkeeping31 const placementMap: PlacementMap = new Map();32 // Create the bookkeeper responsible for the // Stryker ... directives33 const directiveBookkeeper = new DirectiveBookkeeper();34 // Now start the actual traversing of the AST35 //36 // On the way down:37 // * Treat the tree as immutable.38 // * Identify the nodes that can be used to place mutants on in the placement map.39 // * Generate the mutants on each node.40 // * When a node generated mutants, do a short walk back up and register them in the placement map41 // * Call the `applied` method using the placement node, that way the mutant will capture the AST with mutation all the way to the placement node42 //43 // On the way up:44 // * If this node has mutants in the placementMap, place them in the AST.45 //46 // eslint-disable-next-line @typescript-eslint/no-unsafe-argument47 traverse(file.ast, {48 enter(path) {49 directiveBookkeeper.processStrykerDirectives(path.node);50 if (shouldSkip(path)) {51 path.skip();52 } else {53 addToPlacementMapIfPossible(path);54 if (!mutantRangesForCurrentFile.length || mutantRangesForCurrentFile.some((range) => locationIncluded(range, path.node.loc!))) {55 const mutantsToPlace = collectMutants(path);56 if (mutantsToPlace.length) {57 registerInPlacementMap(path, mutantsToPlace);58 }59 }60 }61 },62 exit(path) {63 placeMutantsIfNeeded(path);64 },65 });66 if (mutantCollector.hasPlacedMutants(originFileName)) {67 // Be sure to leave comments like `// @flow` in.68 let header = instrumentationBabelHeader;69 if (Array.isArray(root.program.body[0]?.leadingComments)) {70 header = [71 {72 ...instrumentationBabelHeader[0],73 leadingComments: root.program.body[0]?.leadingComments,74 },75 ...instrumentationBabelHeader.slice(1),76 ];77 }78 root.program.body.unshift(...header);79 }80 /**81 * If mutants were collected, be sure to register them in the placement map.82 */83 function registerInPlacementMap(path: NodePath, mutantsToPlace: Mutant[]) {84 const placementPath = path.find((ancestor) => placementMap.has(ancestor.node));85 if (placementPath) {86 const appliedMutants = placementMap.get(placementPath.node)!.appliedMutants;87 mutantsToPlace.forEach((mutant) => appliedMutants.set(mutant, mutant.applied(placementPath.node)));88 } else {89 throw new Error(`Mutants cannot be placed. This shouldn't happen! Unplaced mutants: ${JSON.stringify(mutantsToPlace, null, 2)}`);90 }91 }92 /**93 * If this node can be used to place mutants on, add to the placement map94 */95 function addToPlacementMapIfPossible(path: NodePath) {96 const placer = mutantPlacers.find((p) => p.canPlace(path));97 if (placer) {98 placementMap.set(path.node, { appliedMutants: new Map(), placer });99 }100 }101 /**102 * Don't traverse import declarations, decorators and nodes that don't have overlap with the selected mutation ranges103 */104 function shouldSkip(path: NodePath) {105 return (106 isTypeNode(path) ||107 isImportDeclaration(path) ||108 path.isDecorator() ||109 (mutantRangesForCurrentFile.length && mutantRangesForCurrentFile.every((range) => !locationOverlaps(range, path.node.loc!)))110 );111 }112 /**113 * Place mutants that are assigned to the current node path (on exit)114 */115 function placeMutantsIfNeeded(path: NodePath<types.Node>) {116 const mutantsPlacement = placementMap.get(path.node);117 if (mutantsPlacement?.appliedMutants.size) {118 try {119 mutantsPlacement.placer.place(path, mutantsPlacement.appliedMutants);120 path.skip();121 } catch (error) {122 throwPlacementError(error as Error, path, mutantsPlacement.placer, [...mutantsPlacement.appliedMutants.keys()], originFileName);123 }124 }125 }126 /**127 * Collect the mutants for the current node and return the non-ignored.128 */129 function collectMutants(path: NodePath) {130 return [...mutate(path)]131 .map((mutable) => mutantCollector.collect(originFileName, path.node, mutable, offset))132 .filter((mutant) => !mutant.ignoreReason);133 }134 /**135 * Generate mutants for the current node.136 */137 function* mutate(node: NodePath): Iterable<Mutable> {138 for (const mutator of mutators) {139 for (const replacement of mutator.mutate(node)) {140 yield {141 replacement,142 mutatorName: mutator.name,143 ignoreReason: directiveBookkeeper.findIgnoreReason(node.node.loc!.start.line, mutator.name) ?? formatIgnoreReason(mutator.name),144 };145 }146 }147 function formatIgnoreReason(mutatorName: string): string | undefined {148 if (options.excludedMutations.includes(mutatorName)) {149 return `Ignored because of excluded mutation "${mutatorName}"`;150 } else {151 return undefined;152 }153 }154 }...
Using AI Code Generation
1const mutantsToPlace = require('stryker-parent').mutantsToPlace;2const mutants = mutantsToPlace();3console.log(mutants);4module.exports = {5 mutantsToPlace: () => {6 return ['mutant1', 'mutant2'];7 }8};9{10}11{12 "dependencies": {13 }14}15module.exports = function(config) {16 config.set({17 commandRunner: {18 }19 });20};21[2017-02-15 12:37:45.600] [INFO] SandboxPool - Creating 1 test runners (based on CPU count)
Using AI Code Generation
1var mutantsToPlace = require('stryker-parent').mutantsToPlace;2var mutants = mutantsToPlace(4, 2);3console.log(mutants);4var mutantsToPlace = require('./lib/mutantsToPlace');5module.exports = {6};7module.exports = function mutantsToPlace(totalMutants, numberOfMutantsToPlace) {8 return totalMutants - numberOfMutantsToPlace;9};
Using AI Code Generation
1var mutants = require('stryker-api/mutant');2var Stryker = require('stryker');3var stryker = new Stryker();4var mutantsToPlace = stryker.mutantsToPlace(mutants);5console.log(mutantsToPlace);6var Mutant = require('stryker-api/mutant');7var mutant = new Mutant();8console.log(mutant);9var Mutant = require('stryker');10var mutant = new Mutant();11console.log(mutant);12var Stryker = require('stryker').default;13var stryker = new Stryker();14var mutantsToPlace = stryker.mutantsToPlace(mutants);15console.log(mutantsToPlace);
Using AI Code Generation
1var mutantsToPlace = require('stryker-parent').mutantsToPlace;2console.log(mutants);3module.exports = {4 mutantsToPlace: function (numberOfMutants) {5 return numberOfMutants;6 }7};8{9 "scripts": {10 },11}12{13 "scripts": {14 },15}16module.exports = {17 mutantsToPlace: function (numberOfMutants) {18 return numberOfMutants;19 }20};21{22 "scripts": {23 },24}25var api = require('stryker-api
Using AI Code Generation
1var mutantsToPlace = require('stryker-parent').mutantsToPlace;2var mutants = mutantsToPlace('test.js', 'var x = 1 + 1;', 1);3console.log(mutants);4var mutantsToPlace = require('stryker-parent').mutantsToPlace;5var mutants = mutantsToPlace('test.js', 'var x = 1 + 1;', 2);6console.log(mutants);7var mutantsToPlace = require('stryker-parent').mutantsToPlace;8var mutants = mutantsToPlace('test.js', 'var x = 1 + 1;', 3);9console.log(mutants);10var mutantsToPlace = require('stryker-parent').mutantsToPlace;11var mutants = mutantsToPlace('test.js', 'var x = 1 + 1;', 4);12console.log(mutants);13var mutantsToPlace = require('stryker-parent').mutantsToPlace;14var mutants = mutantsToPlace('test.js', 'var x = 1 + 1;', 5);15console.log(mutants);
Using AI Code Generation
1const mutantsToPlace = require('stryker-parent').mutantsToPlace;2mutantsToPlace(100, 1);3const mutantsToPlace = require('stryker-parent').mutantsToPlace;4mutantsToPlace(100, 1);5const mutantsToPlace = require('stryker-parent').mutantsToPlace;6mutantsToPlace(100, 1);7const mutantsToPlace = require('stryker-parent').mutantsToPlace;8mutantsToPlace(100, 1);9const mutantsToPlace = require('stryker-parent').mutantsToPlace;10mutantsToPlace(100, 1);11const mutantsToPlace = require('stryker-parent').mutantsToPlace;12mutantsToPlace(100, 1);13const mutantsToPlace = require('stryker-parent').mutantsToPlace;14mutantsToPlace(100, 1);15const mutantsToPlace = require('stryker-parent').mutantsToPlace;16mutantsToPlace(100, 1);17const TestRunner = require('stryker-test-runner');
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!!