mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	test: fix fit, do not rely upon mocha suite (#3520)
This commit is contained in:
		
							parent
							
								
									e54195ccfb
								
							
						
					
					
						commit
						b0667e8bc5
					
				| @ -80,7 +80,7 @@ function fixturesUI(wrappers, suite) { | ||||
|       if (specs.slow && specs.slow[0]) | ||||
|         test.timeout(90000); | ||||
|       if (only) | ||||
|         test.markOnly(); | ||||
|         test.__only = true; | ||||
|       if (!only && specs.skip && specs.skip[0]) | ||||
|         test.pending = true; | ||||
|       if (!only && specs.fail && specs.fail[0]) | ||||
| @ -96,7 +96,7 @@ function fixturesUI(wrappers, suite) { | ||||
|       }); | ||||
|       const only = wrappers.ignoreOnly ? false : specs.only && specs.only[0]; | ||||
|       if (only) | ||||
|         suite.markOnly(); | ||||
|         suite.__only = true; | ||||
|       if (!only && specs.skip && specs.skip[0]) | ||||
|         suite.pending = true; | ||||
|       if (!only && specs.fail && specs.fail[0]) | ||||
|  | ||||
| @ -37,26 +37,26 @@ program | ||||
|     const testDir = path.join(process.cwd(), command.args[0]); | ||||
|     const files = collectFiles(testDir, '', command.args.slice(1)); | ||||
| 
 | ||||
|     const testCollector = new TestCollector({ | ||||
|     const testCollector = new TestCollector(files, { | ||||
|       forbidOnly: command.forbidOnly || undefined, | ||||
|       grep: command.grep, | ||||
|       timeout: command.timeout, | ||||
|     }); | ||||
|     for (const file of files) | ||||
|       testCollector.addFile(file); | ||||
| 
 | ||||
|     const rootSuite = testCollector.suite; | ||||
|     const total = rootSuite.total(); | ||||
|     if (!total) { | ||||
|       console.error('================='); | ||||
|       console.error(' No tests found.'); | ||||
|       console.error('================='); | ||||
|     if (command.forbidOnly && testCollector.hasOnly()) { | ||||
|       console.error('====================================='); | ||||
|       console.error(' --forbid-only found a focused test.'); | ||||
|       console.error('====================================='); | ||||
|       process.exit(1); | ||||
|     } | ||||
| 
 | ||||
|     // Filter tests.
 | ||||
|     if (rootSuite.hasOnly()) | ||||
|       rootSuite.filterOnly(); | ||||
|     const total = rootSuite.total(); | ||||
|     if (!total) { | ||||
|       console.error('================='); | ||||
|       console.error(' no tests found.'); | ||||
|       console.error('================='); | ||||
|       process.exit(1); | ||||
|     } | ||||
| 
 | ||||
|     // Trial run does not need many workers, use one.
 | ||||
|     const jobs = (command.trialRun || command.debug) ? 1 : command.jobs; | ||||
|  | ||||
| @ -24,7 +24,7 @@ global.testOptions = require('./testOptions'); | ||||
| class NullReporter {} | ||||
| 
 | ||||
| class TestCollector { | ||||
|   constructor(options) { | ||||
|   constructor(files, options) { | ||||
|     this._options = options; | ||||
|     this.suite = new Mocha.Suite('', new Mocha.Context(), true); | ||||
|     this._total = 0; | ||||
| @ -32,9 +32,18 @@ class TestCollector { | ||||
|       const match = options.grep.match(/^\/(.*)\/(g|i|)$|.*/); | ||||
|       this._grep = new RegExp(match[1] || match[0], match[2]); | ||||
|     } | ||||
| 
 | ||||
|     for (const file of files) | ||||
|       this._addFile(file); | ||||
| 
 | ||||
|     this._hasOnly = this._filterOnly(this.suite); | ||||
|   } | ||||
| 
 | ||||
|   addFile(file) { | ||||
|   hasOnly() { | ||||
|     return this._hasOnly; | ||||
|   } | ||||
| 
 | ||||
|   _addFile(file) { | ||||
|     const mocha = new Mocha({ | ||||
|       forbidOnly: this._options.forbidOnly, | ||||
|       reporter: NullReporter, | ||||
| @ -90,9 +99,6 @@ class TestCollector { | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     if (mocha.suite.hasOnly()) | ||||
|       mocha.suite.filterOnly(); | ||||
| 
 | ||||
|     // Clone the suite as many times as there are worker hashes.
 | ||||
|     // Only include the tests that requested these generations.
 | ||||
|     for (const [hash, {configurationObject, configurationString, tests}] of workerGeneratorConfigurations.entries()) { | ||||
| @ -104,7 +110,7 @@ class TestCollector { | ||||
| 
 | ||||
|   _cloneSuite(suite, configurationObject, configurationString, tests) { | ||||
|     const copy = suite.clone(); | ||||
|     copy.__configurationObject = configurationObject; | ||||
|     copy.__only = suite.__only; | ||||
|     for (const child of suite.suites) | ||||
|       copy.addSuite(this._cloneSuite(child, configurationObject, configurationString, tests)); | ||||
|     for (const test of suite.tests) { | ||||
| @ -113,6 +119,7 @@ class TestCollector { | ||||
|       if (this._grep && !this._grep.test(test.fullTitle())) | ||||
|         continue; | ||||
|       const testCopy = test.clone(); | ||||
|       testCopy.__only = test.__only; | ||||
|       testCopy.__ordinal = test.__ordinal; | ||||
|       testCopy.__configurationObject = configurationObject; | ||||
|       testCopy.__configurationString = configurationString; | ||||
| @ -120,16 +127,17 @@ class TestCollector { | ||||
|     } | ||||
|     return copy; | ||||
|   } | ||||
| 
 | ||||
|   _filterOnly(suite) { | ||||
|     const onlySuites = suite.suites.filter(child => this._filterOnly(child) || child.__only); | ||||
|     const onlyTests = suite.tests.filter(test => test.__only); | ||||
|     if (onlySuites.length || onlyTests.length) { | ||||
|       suite.suites = onlySuites; | ||||
|       suite.tests = onlyTests; | ||||
|       return true; | ||||
|     } | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
| function grepTotal(mocha, suite) { | ||||
|   let total = 0; | ||||
|   suite.eachTest(test => { | ||||
|     if (mocha.options.grep.test(test.fullTitle())) | ||||
|       total++; | ||||
|   }); | ||||
|   return total; | ||||
| } | ||||
| 
 | ||||
| module.exports = { TestCollector }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Pavel Feldman
						Pavel Feldman