How to use formatTestTitle method in Playwright Internal

Best JavaScript code snippet using playwright-internal

format-test.js

Source:format-test.js Github

copy

Full Screen

1"use strict";2const { TEST_STANDALONE } = process.env;3const fs = require("fs");4const path = require("path");5const prettier = !TEST_STANDALONE6 ? require("prettier-local")7 : require("prettier-standalone");8const checkParsers = require("./utils/check-parsers.js");9const createSnapshot = require("./utils/create-snapshot.js");10const visualizeEndOfLine = require("./utils/visualize-end-of-line.js");11const consistentEndOfLine = require("./utils/consistent-end-of-line.js");12const stringifyOptionsForTitle = require("./utils/stringify-options-for-title.js");13const { FULL_TEST } = process.env;14const BOM = "\uFEFF";15const CURSOR_PLACEHOLDER = "<|>";16const RANGE_START_PLACEHOLDER = "<<<PRETTIER_RANGE_START>>>";17const RANGE_END_PLACEHOLDER = "<<<PRETTIER_RANGE_END>>>";18// TODO: these test files need fix19const unstableTests = new Map(20 [21 "js/class-comment/misc.js",22 ["js/comments/dangling_array.js", (options) => options.semi === false],23 ["js/comments/jsx.js", (options) => options.semi === false],24 "js/comments/return-statement.js",25 "js/comments/tagged-template-literal.js",26 "markdown/spec/example-234.md",27 "markdown/spec/example-235.md",28 "html/multiparser/js/script-tag-escaping.html",29 [30 "js/multiparser-markdown/codeblock.js",31 (options) => options.proseWrap === "always",32 ],33 ["js/no-semi/comments.js", (options) => options.semi === false],34 ["flow/no-semi/comments.js", (options) => options.semi === false],35 "typescript/prettier-ignore/mapped-types.ts",36 "js/comments/html-like/comment.js",37 ].map((fixture) => {38 const [file, isUnstable = () => true] = Array.isArray(fixture)39 ? fixture40 : [fixture];41 return [path.join(__dirname, "../format/", file), isUnstable];42 })43);44const unstableAstTests = new Map();45const espreeDisabledTests = new Set(46 [47 // These tests only work for `babel`48 "comments-closure-typecast",49 ].map((directory) => path.join(__dirname, "../format/js", directory))50);51const meriyahDisabledTests = espreeDisabledTests;52const isUnstable = (filename, options) => {53 const testFunction = unstableTests.get(filename);54 if (!testFunction) {55 return false;56 }57 return testFunction(options);58};59const isAstUnstable = (filename, options) => {60 const testFunction = unstableAstTests.get(filename);61 if (!testFunction) {62 return false;63 }64 return testFunction(options);65};66const shouldThrowOnFormat = (filename, options) => {67 const { errors = {} } = options;68 if (errors === true) {69 return true;70 }71 const files = errors[options.parser];72 if (files === true || (Array.isArray(files) && files.includes(filename))) {73 return true;74 }75 return false;76};77const isTestDirectory = (dirname, name) =>78 (dirname + path.sep).startsWith(79 path.join(__dirname, "../format", name) + path.sep80 );81function runSpec(fixtures, parsers, options) {82 let { dirname, snippets = [] } =83 typeof fixtures === "string" ? { dirname: fixtures } : fixtures;84 // `IS_PARSER_INFERENCE_TESTS` mean to test `inferParser` on `standalone`85 const IS_PARSER_INFERENCE_TESTS = isTestDirectory(86 dirname,87 "misc/parser-inference"88 );89 // `IS_ERROR_TESTS` mean to watch errors like:90 // - syntax parser hasn't supported yet91 // - syntax errors that should throws92 const IS_ERROR_TESTS = isTestDirectory(dirname, "misc/errors");93 if (IS_ERROR_TESTS) {94 options = { errors: true, ...options };95 }96 const IS_TYPESCRIPT_ONLY_TEST = isTestDirectory(97 dirname,98 "misc/typescript-only"99 );100 if (IS_PARSER_INFERENCE_TESTS) {101 parsers = [undefined];102 }103 snippets = snippets.map((test, index) => {104 test = typeof test === "string" ? { code: test } : test;105 return {106 ...test,107 name: `snippet: ${test.name || `#${index}`}`,108 };109 });110 const files = fs111 .readdirSync(dirname, { withFileTypes: true })112 .map((file) => {113 const basename = file.name;114 const filename = path.join(dirname, basename);115 if (116 path.extname(basename) === ".snap" ||117 !file.isFile() ||118 basename[0] === "." ||119 basename === "jsfmt.spec.js" ||120 // VSCode creates this file sometime https://github.com/microsoft/vscode/issues/105191121 basename === "debug.log"122 ) {123 return;124 }125 const text = fs.readFileSync(filename, "utf8");126 return {127 name: basename,128 filename,129 code: text,130 };131 })132 .filter(Boolean);133 // Make sure tests are in correct location134 if (process.env.CHECK_TEST_PARSERS) {135 if (!Array.isArray(parsers) || parsers.length === 0) {136 throw new Error(`No parsers were specified for ${dirname}`);137 }138 checkParsers({ dirname, files }, parsers);139 }140 const [parser] = parsers;141 const allParsers = [...parsers];142 if (!IS_ERROR_TESTS) {143 if (144 parsers.includes("typescript") &&145 !parsers.includes("babel-ts") &&146 !IS_TYPESCRIPT_ONLY_TEST147 ) {148 allParsers.push("babel-ts");149 }150 if (parsers.includes("babel") && isTestDirectory(dirname, "js")) {151 if (!parsers.includes("espree") && !espreeDisabledTests.has(dirname)) {152 allParsers.push("espree");153 }154 if (!parsers.includes("meriyah") && !meriyahDisabledTests.has(dirname)) {155 allParsers.push("meriyah");156 }157 }158 if (parsers.includes("babel") && !parsers.includes("__babel_estree")) {159 allParsers.push("__babel_estree");160 }161 }162 const stringifiedOptions = stringifyOptionsForTitle(options);163 for (const { name, filename, code, output } of [...files, ...snippets]) {164 const title = `${name}${165 stringifiedOptions ? ` - ${stringifiedOptions}` : ""166 }`;167 describe(title, () => {168 const formatOptions = {169 printWidth: 80,170 ...options,171 filepath: filename,172 parser,173 };174 const mainParserFormatResult = shouldThrowOnFormat(name, formatOptions)175 ? { options: formatOptions, error: true }176 : format(code, formatOptions);177 for (const currentParser of allParsers) {178 runTest({179 parsers,180 name,181 filename,182 code,183 output,184 parser: currentParser,185 mainParserFormatResult,186 mainParserFormatOptions: formatOptions,187 });188 }189 });190 }191}192function runTest({193 parsers,194 name,195 filename,196 code,197 output,198 parser,199 mainParserFormatResult,200 mainParserFormatOptions,201}) {202 let formatOptions = mainParserFormatOptions;203 let formatResult = mainParserFormatResult;204 let formatTestTitle = "format";205 // Verify parsers or error tests206 if (207 mainParserFormatResult.error ||208 mainParserFormatOptions.parser !== parser209 ) {210 formatTestTitle = `[${parser}] format`;211 formatOptions = { ...mainParserFormatResult.options, parser };212 const runFormat = () => format(code, formatOptions);213 if (shouldThrowOnFormat(name, formatOptions)) {214 test(formatTestTitle, () => {215 expect(runFormat).toThrowErrorMatchingSnapshot();216 });217 return;218 }219 // Verify parsers format result should be the same as main parser220 output = mainParserFormatResult.outputWithCursor;221 formatResult = runFormat();222 }223 test(formatTestTitle, () => {224 // Make sure output has consistent EOL225 expect(formatResult.eolVisualizedOutput).toEqual(226 visualizeEndOfLine(consistentEndOfLine(formatResult.outputWithCursor))227 );228 // The result is assert to equals to `output`229 if (typeof output === "string") {230 expect(formatResult.eolVisualizedOutput).toEqual(231 visualizeEndOfLine(output)232 );233 return;234 }235 // All parsers have the same result, only snapshot the result from main parser236 expect(237 createSnapshot(formatResult, {238 parsers,239 formatOptions,240 CURSOR_PLACEHOLDER,241 })242 ).toMatchSnapshot();243 });244 if (!FULL_TEST) {245 return;246 }247 const isUnstableTest = isUnstable(filename, formatOptions);248 if (249 (formatResult.changed || isUnstableTest) &&250 // No range and cursor251 formatResult.input === code252 ) {253 test(`[${parser}] second format`, () => {254 const { eolVisualizedOutput: firstOutput, output } = formatResult;255 const { eolVisualizedOutput: secondOutput } = format(256 output,257 formatOptions258 );259 if (isUnstableTest) {260 // To keep eye on failed tests, this assert never supposed to pass,261 // if it fails, just remove the file from `unstableTests`262 expect(secondOutput).not.toEqual(firstOutput);263 } else {264 expect(secondOutput).toEqual(firstOutput);265 }266 });267 }268 const isAstUnstableTest = isAstUnstable(filename, formatOptions);269 // Some parsers skip parsing empty files270 if (formatResult.changed && code.trim()) {271 test(`[${parser}] compare AST`, () => {272 const { input, output } = formatResult;273 const originalAst = parse(input, formatOptions);274 const formattedAst = parse(output, formatOptions);275 if (isAstUnstableTest) {276 expect(formattedAst).not.toEqual(originalAst);277 } else {278 expect(formattedAst).toEqual(originalAst);279 }280 });281 }282 if (!shouldSkipEolTest(code, formatResult.options)) {283 for (const eol of ["\r\n", "\r"]) {284 test(`[${parser}] EOL ${JSON.stringify(eol)}`, () => {285 const output = format(286 code.replace(/\n/g, eol),287 formatOptions288 ).eolVisualizedOutput;289 // Only if `endOfLine: "auto"` the result will be different290 const expected =291 formatOptions.endOfLine === "auto"292 ? visualizeEndOfLine(293 // All `code` use `LF`, so the `eol` of result is always `LF`294 formatResult.outputWithCursor.replace(/\n/g, eol)295 )296 : formatResult.eolVisualizedOutput;297 expect(output).toEqual(expected);298 });299 }300 }301 if (code.charAt(0) !== BOM) {302 test(`[${parser}] BOM`, () => {303 const output = format(BOM + code, formatOptions).eolVisualizedOutput;304 const expected = BOM + formatResult.eolVisualizedOutput;305 expect(output).toEqual(expected);306 });307 }308}309function shouldSkipEolTest(code, options) {310 if (code.includes("\r")) {311 return true;312 }313 const { requirePragma, rangeStart, rangeEnd } = options;314 if (requirePragma) {315 return true;316 }317 if (318 typeof rangeStart === "number" &&319 typeof rangeEnd === "number" &&320 rangeStart >= rangeEnd321 ) {322 return true;323 }324 return false;325}326function parse(source, options) {327 return prettier.__debug.parse(source, options, /* massage */ true).ast;328}329const indexProperties = [330 {331 property: "cursorOffset",332 placeholder: CURSOR_PLACEHOLDER,333 },334 {335 property: "rangeStart",336 placeholder: RANGE_START_PLACEHOLDER,337 },338 {339 property: "rangeEnd",340 placeholder: RANGE_END_PLACEHOLDER,341 },342];343function replacePlaceholders(originalText, originalOptions) {344 const indexes = indexProperties345 .map(({ property, placeholder }) => {346 const value = originalText.indexOf(placeholder);347 return value === -1 ? undefined : { property, value, placeholder };348 })349 .filter(Boolean)350 .sort((a, b) => a.value - b.value);351 const options = { ...originalOptions };352 let text = originalText;353 let offset = 0;354 for (const { property, value, placeholder } of indexes) {355 text = text.replace(placeholder, "");356 options[property] = value + offset;357 offset -= placeholder.length;358 }359 return { text, options };360}361const insertCursor = (text, cursorOffset) =>362 cursorOffset >= 0363 ? text.slice(0, cursorOffset) +364 CURSOR_PLACEHOLDER +365 text.slice(cursorOffset)366 : text;367function format(originalText, originalOptions) {368 const { text: input, options } = replacePlaceholders(369 originalText,370 originalOptions371 );372 const inputWithCursor = insertCursor(input, options.cursorOffset);373 const { formatted: output, cursorOffset } = prettier.formatWithCursor(374 input,375 options376 );377 const outputWithCursor = insertCursor(output, cursorOffset);378 const eolVisualizedOutput = visualizeEndOfLine(outputWithCursor);379 const changed = outputWithCursor !== inputWithCursor;380 return {381 changed,382 options,383 input,384 inputWithCursor,385 output,386 outputWithCursor,387 eolVisualizedOutput,388 };389}...

Full Screen

Full Screen

run_spec.js

Source:run_spec.js Github

copy

Full Screen

1"use strict";2const { TEST_STANDALONE } = process.env;3const fs = require("fs");4const path = require("path");5const prettier = !TEST_STANDALONE6 ? require("prettier-local")7 : require("prettier-standalone");8const checkParsers = require("./utils/check-parsers");9const createSnapshot = require("./utils/create-snapshot");10const visualizeEndOfLine = require("./utils/visualize-end-of-line");11const consistentEndOfLine = require("./utils/consistent-end-of-line");12const stringifyOptionsForTitle = require("./utils/stringify-options-for-title");13const { FULL_TEST } = process.env;14const BOM = "\uFEFF";15const CURSOR_PLACEHOLDER = "<|>";16const RANGE_START_PLACEHOLDER = "<<<PRETTIER_RANGE_START>>>";17const RANGE_END_PLACEHOLDER = "<<<PRETTIER_RANGE_END>>>";18// TODO: these test files need fix19const unstableTests = new Map(20 [21 "js/class-comment/misc.js",22 ["js/comments/dangling_array.js", (options) => options.semi === false],23 ["js/comments/jsx.js", (options) => options.semi === false],24 "js/comments/return-statement.js",25 "js/comments/tagged-template-literal.js",26 "markdown/spec/example-234.md",27 "markdown/spec/example-235.md",28 "html/multiparser/js/script-tag-escaping.html",29 [30 "js/multiparser-markdown/codeblock.js",31 (options) => options.proseWrap === "always",32 ],33 ["js/no-semi/comments.js", (options) => options.semi === false],34 ["flow/no-semi/comments.js", (options) => options.semi === false],35 "typescript/prettier-ignore/mapped-types.ts",36 "js/comments/html-like/comment.js",37 ].map((fixture) => {38 const [file, isUnstable = () => true] = Array.isArray(fixture)39 ? fixture40 : [fixture];41 return [path.join(__dirname, "../tests/", file), isUnstable];42 })43);44const unstableAstTests = new Map();45const espreeDisabledTests = new Set(46 [47 // These tests only work for `babel`48 "comments-closure-typecast",49 ].map((directory) => path.join(__dirname, "../tests/js", directory))50);51const meriyahDisabledTests = espreeDisabledTests;52const isUnstable = (filename, options) => {53 const testFunction = unstableTests.get(filename);54 if (!testFunction) {55 return false;56 }57 return testFunction(options);58};59const isAstUnstable = (filename, options) => {60 const testFunction = unstableAstTests.get(filename);61 if (!testFunction) {62 return false;63 }64 return testFunction(options);65};66const shouldThrowOnFormat = (filename, options) => {67 const { errors = {} } = options;68 if (errors === true) {69 return true;70 }71 const files = errors[options.parser];72 if (files === true || (Array.isArray(files) && files.includes(filename))) {73 return true;74 }75 return false;76};77const isTestDirectory = (dirname, name) =>78 (dirname + path.sep).startsWith(79 path.join(__dirname, "../tests", name) + path.sep80 );81function runSpec(fixtures, parsers, options) {82 let { dirname, snippets = [] } =83 typeof fixtures === "string" ? { dirname: fixtures } : fixtures;84 // `IS_PARSER_INFERENCE_TESTS` mean to test `inferParser` on `standalone`85 const IS_PARSER_INFERENCE_TESTS = isTestDirectory(86 dirname,87 "misc/parser-inference"88 );89 // `IS_ERROR_TESTS` mean to watch errors like:90 // - syntax parser hasn't supported yet91 // - syntax errors that should throws92 const IS_ERROR_TESTS = isTestDirectory(dirname, "misc/errors");93 if (IS_ERROR_TESTS) {94 options = { errors: true, ...options };95 }96 const IS_TYPESCRIPT_ONLY_TEST = isTestDirectory(97 dirname,98 "misc/typescript-only"99 );100 if (IS_PARSER_INFERENCE_TESTS) {101 parsers = [undefined];102 }103 snippets = snippets.map((test, index) => {104 test = typeof test === "string" ? { code: test } : test;105 return {106 ...test,107 name: `snippet: ${test.name || `#${index}`}`,108 };109 });110 const files = fs111 .readdirSync(dirname, { withFileTypes: true })112 .map((file) => {113 const basename = file.name;114 const filename = path.join(dirname, basename);115 if (116 path.extname(basename) === ".snap" ||117 !file.isFile() ||118 basename[0] === "." ||119 basename === "jsfmt.spec.js" ||120 // VSCode creates this file sometime https://github.com/microsoft/vscode/issues/105191121 basename === "debug.log"122 ) {123 return;124 }125 const text = fs.readFileSync(filename, "utf8");126 return {127 name: basename,128 filename,129 code: text,130 };131 })132 .filter(Boolean);133 // Make sure tests are in correct location134 if (process.env.CHECK_TEST_PARSERS) {135 if (!Array.isArray(parsers) || parsers.length === 0) {136 throw new Error(`No parsers were specified for ${dirname}`);137 }138 checkParsers({ dirname, files }, parsers);139 }140 const [parser] = parsers;141 const allParsers = [...parsers];142 if (!IS_ERROR_TESTS) {143 if (144 parsers.includes("typescript") &&145 !parsers.includes("babel-ts") &&146 !IS_TYPESCRIPT_ONLY_TEST147 ) {148 allParsers.push("babel-ts");149 }150 if (parsers.includes("babel") && isTestDirectory(dirname, "js")) {151 if (!parsers.includes("espree") && !espreeDisabledTests.has(dirname)) {152 allParsers.push("espree");153 }154 if (!parsers.includes("meriyah") && !meriyahDisabledTests.has(dirname)) {155 allParsers.push("meriyah");156 }157 }158 }159 const stringifiedOptions = stringifyOptionsForTitle(options);160 for (const { name, filename, code, output } of [...files, ...snippets]) {161 const title = `${name}${162 stringifiedOptions ? ` - ${stringifiedOptions}` : ""163 }`;164 describe(title, () => {165 const formatOptions = {166 printWidth: 80,167 ...options,168 filepath: filename,169 parser,170 };171 const mainParserFormatResult = shouldThrowOnFormat(name, formatOptions)172 ? { options: formatOptions, error: true }173 : format(code, formatOptions);174 for (const currentParser of allParsers) {175 runTest({176 parsers,177 name,178 filename,179 code,180 output,181 parser: currentParser,182 mainParserFormatResult,183 mainParserFormatOptions: formatOptions,184 });185 }186 });187 }188}189function runTest({190 parsers,191 name,192 filename,193 code,194 output,195 parser,196 mainParserFormatResult,197 mainParserFormatOptions,198}) {199 let formatOptions = mainParserFormatOptions;200 let formatResult = mainParserFormatResult;201 let formatTestTitle = "format";202 // Verify parsers or error tests203 if (204 mainParserFormatResult.error ||205 mainParserFormatOptions.parser !== parser206 ) {207 formatTestTitle = `[${parser}] format`;208 formatOptions = { ...mainParserFormatResult.options, parser };209 const runFormat = () => format(code, formatOptions);210 if (shouldThrowOnFormat(name, formatOptions)) {211 test(formatTestTitle, () => {212 expect(runFormat).toThrowErrorMatchingSnapshot();213 });214 return;215 }216 // Verify parsers format result should be the same as main parser217 output = mainParserFormatResult.outputWithCursor;218 formatResult = runFormat();219 }220 test(formatTestTitle, () => {221 // Make sure output has consistent EOL222 expect(formatResult.eolVisualizedOutput).toEqual(223 visualizeEndOfLine(consistentEndOfLine(formatResult.outputWithCursor))224 );225 // The result is assert to equals to `output`226 if (typeof output === "string") {227 expect(formatResult.eolVisualizedOutput).toEqual(228 visualizeEndOfLine(output)229 );230 return;231 }232 // All parsers have the same result, only snapshot the result from main parser233 expect(234 createSnapshot(formatResult, {235 parsers,236 formatOptions,237 CURSOR_PLACEHOLDER,238 })239 ).toMatchSnapshot();240 });241 if (!FULL_TEST) {242 return;243 }244 const isUnstableTest = isUnstable(filename, formatOptions);245 if (246 (formatResult.changed || isUnstableTest) &&247 // No range and cursor248 formatResult.input === code249 ) {250 test(`[${parser}] second format`, () => {251 const { eolVisualizedOutput: firstOutput, output } = formatResult;252 const { eolVisualizedOutput: secondOutput } = format(253 output,254 formatOptions255 );256 if (isUnstableTest) {257 // To keep eye on failed tests, this assert never supposed to pass,258 // if it fails, just remove the file from `unstableTests`259 expect(secondOutput).not.toEqual(firstOutput);260 } else {261 expect(secondOutput).toEqual(firstOutput);262 }263 });264 }265 const isAstUnstableTest = isAstUnstable(filename, formatOptions);266 // Some parsers skip parsing empty files267 if (formatResult.changed && code.trim()) {268 test(`[${parser}] compare AST`, () => {269 const { input, output } = formatResult;270 const originalAst = parse(input, formatOptions);271 const formattedAst = parse(output, formatOptions);272 if (isAstUnstableTest) {273 expect(formattedAst).not.toEqual(originalAst);274 } else {275 expect(formattedAst).toEqual(originalAst);276 }277 });278 }279 if (!shouldSkipEolTest(code, formatResult.options)) {280 for (const eol of ["\r\n", "\r"]) {281 test(`[${parser}] EOL ${JSON.stringify(eol)}`, () => {282 const output = format(code.replace(/\n/g, eol), formatOptions)283 .eolVisualizedOutput;284 // Only if `endOfLine: "auto"` the result will be different285 const expected =286 formatOptions.endOfLine === "auto"287 ? visualizeEndOfLine(288 // All `code` use `LF`, so the `eol` of result is always `LF`289 formatResult.outputWithCursor.replace(/\n/g, eol)290 )291 : formatResult.eolVisualizedOutput;292 expect(output).toEqual(expected);293 });294 }295 }296 if (code.charAt(0) !== BOM) {297 test(`[${parser}] BOM`, () => {298 const output = format(BOM + code, formatOptions).eolVisualizedOutput;299 const expected = BOM + formatResult.eolVisualizedOutput;300 expect(output).toEqual(expected);301 });302 }303}304function shouldSkipEolTest(code, options) {305 if (code.includes("\r")) {306 return true;307 }308 const { requirePragma, rangeStart, rangeEnd } = options;309 if (requirePragma) {310 return true;311 }312 if (313 typeof rangeStart === "number" &&314 typeof rangeEnd === "number" &&315 rangeStart >= rangeEnd316 ) {317 return true;318 }319 return false;320}321function parse(source, options) {322 return prettier.__debug.parse(source, options, /* massage */ true).ast;323}324const indexProperties = [325 {326 property: "cursorOffset",327 placeholder: CURSOR_PLACEHOLDER,328 },329 {330 property: "rangeStart",331 placeholder: RANGE_START_PLACEHOLDER,332 },333 {334 property: "rangeEnd",335 placeholder: RANGE_END_PLACEHOLDER,336 },337];338function replacePlaceholders(originalText, originalOptions) {339 const indexes = indexProperties340 .map(({ property, placeholder }) => {341 const value = originalText.indexOf(placeholder);342 return value === -1 ? undefined : { property, value, placeholder };343 })344 .filter(Boolean)345 .sort((a, b) => a.value - b.value);346 const options = { ...originalOptions };347 let text = originalText;348 let offset = 0;349 for (const { property, value, placeholder } of indexes) {350 text = text.replace(placeholder, "");351 options[property] = value + offset;352 offset -= placeholder.length;353 }354 return { text, options };355}356const insertCursor = (text, cursorOffset) =>357 cursorOffset >= 0358 ? text.slice(0, cursorOffset) +359 CURSOR_PLACEHOLDER +360 text.slice(cursorOffset)361 : text;362function format(originalText, originalOptions) {363 const { text: input, options } = replacePlaceholders(364 originalText,365 originalOptions366 );367 const inputWithCursor = insertCursor(input, options.cursorOffset);368 const { formatted: output, cursorOffset } = prettier.formatWithCursor(369 input,370 options371 );372 const outputWithCursor = insertCursor(output, cursorOffset);373 const eolVisualizedOutput = visualizeEndOfLine(outputWithCursor);374 const changed = outputWithCursor !== inputWithCursor;375 return {376 changed,377 options,378 input,379 inputWithCursor,380 output,381 outputWithCursor,382 eolVisualizedOutput,383 };384}...

Full Screen

Full Screen

ReporterUtils.spec.js

Source:ReporterUtils.spec.js Github

copy

Full Screen

...14 formatSuiteTitle,15 writeFile16} = require('../../src/ReporterUtils');17describe('Testing ReporterUtils.js', () => {18 describe('formatTestTitle()', () => {19 it('simple test', () => {20 const result = formatTestTitle({21 title: 'My title'22 }, {23 useFullTitle: true24 });25 expect(result).toBe('My title');26 });27 it('within a suite', () => {28 const result = formatTestTitle({29 title: 'My title',30 parent: {31 title: 'My suite'32 }33 }, {34 useFullTitle: true,35 titleSeparator: ' | '36 });37 expect(result).toBe('My suite | My title');38 });39 });40 describe('formatSuiteTitle()', () => {41 it('simple suite', () => {42 const result = formatSuiteTitle({...

Full Screen

Full Screen

playwright-formatters.js

Source:playwright-formatters.js Github

copy

Full Screen

...98 if (line) line += " ";99 return line + gray(char.repeat(Math.max(0, 100 - line.length)));100}101function formatTestHeader(config, test, indent, index) {102 const title = formatTestTitle(config, test);103 const header = `${indent}${index ? index + ") " : ""}${title}`;104 return pad(header, "=");105}106function stepSuffix(step) {107 const stepTitles = step ? step.titlePath() : [];108 return stepTitles.map((t) => " › " + t).join("");109}110function relativeTestPath(config, test) {111 return relative(config.rootDir, test.location.file) || _path.default.basename(test.location.file);112}113function formatResultFailure(test, result, initialIndent, highlightCode) {114 var _error;115 const resultTokens = [];116 if (result.status === "timedOut") {117 resultTokens.push("");118 resultTokens.push(indent(red(`Timeout of ${test.timeout}ms exceeded.`), initialIndent));119 }120 if (result.status === "passed" && test.expectedStatus === "failed") {121 resultTokens.push("");122 resultTokens.push(indent(red(`Expected to fail, but passed.`), initialIndent));123 }124 let error = undefined;125 if (result.error !== undefined) {126 error = formatError(result.error, highlightCode, test.location.file);127 resultTokens.push(indent(error.message, initialIndent));128 }129 return {130 tokens: resultTokens,131 position: (_error = error) === null || _error === void 0 ? void 0 : _error.position,132 };133}134function formatTestTitle(config, test, step) {135 // root, project, file, ...describes, test136 const [, projectName, , ...titles] = test.titlePath();137 const location = `${relativeTestPath(config, test)}:${test.location.line}:${test.location.column}`;138 const projectTitle = projectName ? `[${projectName}] › ` : "";139 return `${projectTitle}${location} › ${titles.join(" › ")}${stepSuffix(step)}`;140}141function formatFailure(config, test, options = {}) {142 const { index, includeStdio, includeAttachments = true, filePath } = options;143 const lines = [];144 const title = formatTestTitle(config, test);145 const annotations = [];146 const header = formatTestHeader(config, test, " ", index);147 lines.push(red(header));148 for (const result of test.results) {149 const resultLines = [];150 const { tokens: resultTokens, position } = formatResultFailure(test, result, " ", enabled);151 if (!resultTokens.length) continue;152 if (result.retry) {153 resultLines.push("");154 resultLines.push(gray(pad(` Retry #${result.retry}`, "-")));155 }156 resultLines.push(...resultTokens);157 if (includeAttachments) {158 for (let i = 0; i < result.attachments.length; ++i) {...

Full Screen

Full Screen

list.js

Source:list.js Github

copy

Full Screen

1"use strict";2Object.defineProperty(exports, "__esModule", {3 value: true4});5exports.default = void 0;6var _safe = _interopRequireDefault(require("colors/safe"));7var _ms = _interopRequireDefault(require("ms"));8var _base = require("./base");9function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }10/**11 * Copyright (c) Microsoft Corporation.12 *13 * Licensed under the Apache License, Version 2.0 (the "License");14 * you may not use this file except in compliance with the License.15 * You may obtain a copy of the License at16 *17 * http://www.apache.org/licenses/LICENSE-2.018 *19 * Unless required by applicable law or agreed to in writing, software20 * distributed under the License is distributed on an "AS IS" BASIS,21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.22 * See the License for the specific language governing permissions and23 * limitations under the License.24 */25/* eslint-disable no-console */26// @ts-ignore27// Allow it in the Visual Studio Code Terminal and the new Windows Terminal28const DOES_NOT_SUPPORT_UTF8_IN_TERMINAL = process.platform === 'win32' && process.env.TERM_PROGRAM !== 'vscode' && !process.env.WT_SESSION;29const POSITIVE_STATUS_MARK = DOES_NOT_SUPPORT_UTF8_IN_TERMINAL ? 'ok' : '✓';30const NEGATIVE_STATUS_MARK = DOES_NOT_SUPPORT_UTF8_IN_TERMINAL ? 'x' : '✘';31class ListReporter extends _base.BaseReporter {32 constructor() {33 super();34 this._lastRow = 0;35 this._testRows = new Map();36 this._needNewLine = false;37 this._liveTerminal = void 0;38 this._liveTerminal = process.stdout.isTTY || process.env.PWTEST_SKIP_TEST_OUTPUT;39 }40 onBegin(config, suite) {41 super.onBegin(config, suite);42 console.log();43 }44 onTestBegin(test) {45 if (this._liveTerminal) {46 if (this._needNewLine) {47 this._needNewLine = false;48 process.stdout.write('\n');49 this._lastRow++;50 }51 process.stdout.write(' ' + _safe.default.gray((0, _base.formatTestTitle)(this.config, test)) + '\n');52 }53 this._testRows.set(test, this._lastRow++);54 }55 onStdOut(chunk, test, result) {56 super.onStdOut(chunk, test, result);57 this._dumpToStdio(test, chunk, process.stdout);58 }59 onStdErr(chunk, test, result) {60 super.onStdErr(chunk, test, result);61 this._dumpToStdio(test, chunk, process.stdout);62 }63 onStepBegin(test, result, step) {64 if (!this._liveTerminal) return;65 if (step.category !== 'test.step') return;66 this._updateTestLine(test, ' ' + _safe.default.gray((0, _base.formatTestTitle)(this.config, test, step)));67 }68 onStepEnd(test, result, step) {69 if (!this._liveTerminal) return;70 if (step.category !== 'test.step') return;71 this._updateTestLine(test, ' ' + _safe.default.gray((0, _base.formatTestTitle)(this.config, test, step.parent)));72 }73 _dumpToStdio(test, chunk, stream) {74 if (this.config.quiet) return;75 const text = chunk.toString('utf-8');76 this._needNewLine = text[text.length - 1] !== '\n';77 if (this._liveTerminal) {78 const newLineCount = text.split('\n').length - 1;79 this._lastRow += newLineCount;80 }81 stream.write(chunk);82 }83 onTestEnd(test, result) {84 super.onTestEnd(test, result);85 const duration = _safe.default.dim(` (${(0, _ms.default)(result.duration)})`);86 const title = (0, _base.formatTestTitle)(this.config, test);87 let text = '';88 if (result.status === 'skipped') {89 text = _safe.default.green(' - ') + _safe.default.cyan(title);90 } else {91 const statusMark = (' ' + (result.status === 'passed' ? POSITIVE_STATUS_MARK : NEGATIVE_STATUS_MARK)).padEnd(5);92 if (result.status === test.expectedStatus) text = '\u001b[2K\u001b[0G' + _safe.default.green(statusMark) + _safe.default.gray(title) + duration;else text = '\u001b[2K\u001b[0G' + _safe.default.red(statusMark + title) + duration;93 }94 if (this._liveTerminal) {95 this._updateTestLine(test, text);96 } else {97 if (this._needNewLine) {98 this._needNewLine = false;99 process.stdout.write('\n');100 }101 process.stdout.write(text);102 process.stdout.write('\n');103 }104 }105 _updateTestLine(test, line) {106 if (process.env.PWTEST_SKIP_TEST_OUTPUT) this._updateTestLineForTest(test, line);else this._updateTestLineForTTY(test, line);107 }108 _updateTestLineForTTY(test, line) {109 const testRow = this._testRows.get(test); // Go up if needed110 if (testRow !== this._lastRow) process.stdout.write(`\u001B[${this._lastRow - testRow}A`); // Erase line111 process.stdout.write('\u001B[2K');112 process.stdout.write(line); // Go down if needed.113 if (testRow !== this._lastRow) process.stdout.write(`\u001B[${this._lastRow - testRow}E`);114 }115 _updateTestLineForTest(test, line) {116 const testRow = this._testRows.get(test);117 process.stdout.write(testRow + ' : ' + line + '\n');118 }119 async onEnd(result) {120 await super.onEnd(result);121 process.stdout.write('\n');122 this.epilogue(true);123 }124}125var _default = ListReporter;...

Full Screen

Full Screen

WalletE2eLogsReporter.js

Source:WalletE2eLogsReporter.js Github

copy

Full Screen

...22 this.collectWorkerExpenseLogs(chunk);23 }24 formatTestResult(test, result) {25 const duration = ` (${milliseconds(result.duration)})`;26 const title = formatTestTitle(this.config, test);27 let text = "";28 if (result.status === "skipped") {29 text = " - " + title;30 } else {31 const statusMark = (" " + (result.status === "passed" ? "✓" : "✘")).padEnd(5);32 text = statusMark + title + duration;33 }34 return text;35 }36 onTestEnd(test, result) {37 const text = this.formatTestResult(test, result);38 result.status === "passed" ? this.logger.info(text) : this.logger.error(text);39 }40 collectWorkerExpenseLogs(chunk) {...

Full Screen

Full Screen

ReporterUtils.js

Source:ReporterUtils.js Github

copy

Full Screen

...89 * @param {object} test the Mocha test90 */91const formatTest = (node, test, options) => {92 const testNode = node.element('testCase')93 .attribute('name', formatTestTitle(test, options))94 .attribute('duration', test.duration || 0);95 switch (test.state) {96 case 'failed':97 if (test.err.name === 'AssertionError') {98 testNode.element('failure')99 .attribute('message', `${test.err.name}: ${test.err.message}`)100 .cdata(test.err.stack);101 } else {102 testNode.element('error')103 .attribute('message', `${test.err.name}: ${test.err.message}`)104 .cdata(test.err.stack);105 }106 break;107 case 'pending':...

Full Screen

Full Screen

line.js

Source:line.js Github

copy

Full Screen

1"use strict";2Object.defineProperty(exports, "__esModule", {3 value: true4});5exports.default = void 0;6var _safe = _interopRequireDefault(require("colors/safe"));7var _base = require("./base");8function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }9/**10 * Copyright (c) Microsoft Corporation.11 *12 * Licensed under the Apache License, Version 2.0 (the "License");13 * you may not use this file except in compliance with the License.14 * You may obtain a copy of the License at15 *16 * http://www.apache.org/licenses/LICENSE-2.017 *18 * Unless required by applicable law or agreed to in writing, software19 * distributed under the License is distributed on an "AS IS" BASIS,20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.21 * See the License for the specific language governing permissions and22 * limitations under the License.23 */24class LineReporter extends _base.BaseReporter {25 constructor(...args) {26 super(...args);27 this._total = 0;28 this._current = 0;29 this._failures = 0;30 this._lastTest = void 0;31 }32 onBegin(config, suite) {33 super.onBegin(config, suite);34 this._total = suite.allTests().length;35 console.log();36 }37 onStdOut(chunk, test, result) {38 super.onStdOut(chunk, test, result);39 this._dumpToStdio(test, chunk, process.stdout);40 }41 onStdErr(chunk, test, result) {42 super.onStdErr(chunk, test, result);43 this._dumpToStdio(test, chunk, process.stderr);44 }45 _dumpToStdio(test, chunk, stream) {46 if (this.config.quiet) return;47 stream.write(`\u001B[1A\u001B[2K`);48 if (test && this._lastTest !== test) {49 // Write new header for the output.50 stream.write(_safe.default.gray((0, _base.formatTestTitle)(this.config, test) + `\n`));51 this._lastTest = test;52 }53 stream.write(chunk);54 console.log();55 }56 onTestEnd(test, result) {57 super.onTestEnd(test, result);58 const width = process.stdout.columns - 1;59 const title = `[${++this._current}/${this._total}] ${(0, _base.formatTestTitle)(this.config, test)}`.substring(0, width);60 process.stdout.write(`\u001B[1A\u001B[2K${title}\n`);61 if (!this.willRetry(test, result) && !test.ok()) {62 process.stdout.write(`\u001B[1A\u001B[2K`);63 console.log((0, _base.formatFailure)(this.config, test, ++this._failures));64 console.log();65 }66 }67 async onEnd(result) {68 process.stdout.write(`\u001B[1A\u001B[2K`);69 await super.onEnd(result);70 this.epilogue(false);71 }72}73var _default = LineReporter;...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { formatTestTitle } = require('@playwright/test/lib/test');2const { test } = require('@playwright/test');3test.describe('formatTestTitle', () => {4 test('should return formatted title', () => {5 const title = formatTestTitle('test', 'foo', 'bar', 'baz');6 expect(title).toBe('foo bar baz');7 });8});

Full Screen

Using AI Code Generation

copy

Full Screen

1const { formatTestTitle } = require('@playwright/test');2const test = require('@playwright/test').test;3test('example test', async ({ page }) => {4 const formattedTitle = formatTestTitle('example test', 'my test suite');5 expect(formattedTitle).toBe('my test suite - example test');6});7test('example test', async ({ page }) => {8 const formattedTitle = formatTestTitle('example test', 'my test suite');9 expect(formattedTitle).toBe('my test suite - example test');10});11const { formatTestTitle } = require('@playwright/test');12const { Test, TestResult } = require('@playwright/test');13const { TestStatus } = require('@playwright/test');14const { TestResultStatus } = require('@playwright/test');15const { TestType } = require('@playwright/test');16const { TestRunner } = require('@playwright/test');17const { TestModifier } = require('@playwright/test');18const { TestStep } = require('@playwright/test');19const { TestFixtures } = require('@playwright/test');20const { FullConfig } = require('@playwright/test');21const { FullProject } = require('@playwright/test');22const { FullResult } = require('@playwright/test');23const { FullTestResult } = require('@playwright/test');24const { FullWorkerResult } = require('@playwright/test');25const { FullWorker } = require('@playwright/test');26const { PlaywrightTestArgs } = require('@playwright/test');27const { PlaywrightWorkerArgs } = require('@playwright/test');28const { PlaywrightWorker } = require('@playwright/test');29const { PlaywrightWorkerRunner } = require('@playwright/test');30const { PlaywrightWorkerRunnerArgs } = require('@playwright/test');31const { PlaywrightWorkerRunnerWorker } = require('@playwright/test');32const { PlaywrightWorkerRunnerWorkerArgs } = require('@playwright/test');33const { PlaywrightWorkerRunnerWorkerResult } = require('@playwright/test');34const { Playwright

Full Screen

Using AI Code Generation

copy

Full Screen

1const { formatTestTitle } = require('@playwright/test');2const test = require('@playwright/test').test;3test('test', async ({ page }) => {4 console.log(formatTestTitle('test'));5});6const { formatTestTitle } = require('@playwright/test');7const test = require('@playwright/test').test;8test('test', async ({ page }) => {9 console.log(formatTestTitle('test', '_'));10});11const { formatTestTitle } = require('@playwright/test');12const test = require('@playwright/test').test;13test('test', async ({ page }) => {14 console.log(formatTestTitle('test', '_'));15});16const { formatTestTitle } = require('@playwright/test');17const test = require('@playwright/test').test;18test('test', async ({ page }) => {19 console.log(formatTestTitle('test', '_'));20});

Full Screen

Using AI Code Generation

copy

Full Screen

1const { PlaywrightTest } = require('@playwright/test');2console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));3const { PlaywrightTest } = require('@playwright/test');4console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));5import { PlaywrightTest } from '@playwright/test';6console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));7import { PlaywrightTest } from '@playwright/test';8console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));9import { PlaywrightTest } from '@playwright/test';10console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));11const { PlaywrightTest } = require('@playwright/test');12console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));13const { PlaywrightTest } = require('@playwright/test');14console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));15import { PlaywrightTest } from '@playwright/test';16console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));17import { PlaywrightTest } from '@playwright/test';18console.log(PlaywrightTest.formatTestTitle('test title', 'test title'));

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Internal automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful