mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	 81bcf2a53b
			
		
	
	
		81bcf2a53b
		
			
		
	
	
	
	
		
			
			* FullConfig split into FullConfig and ConfigInWorker
* FullProject split into FullProject and ProjectInWorker
* Tests can only access {Config, Project}InWorker, while reporters can
only access Full{Config,Project}. This will allow in the future to
change the reporter API independently from the tests.
* Added documentation for the 4 classes.
		
	
			
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) Microsoft Corporation.
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  * http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| // @ts-check
 | |
| 
 | |
| const path = require('path');
 | |
| const fs = require('fs');
 | |
| const PROJECT_DIR = path.join(__dirname, '..', '..');
 | |
| 
 | |
| function generateFullConfigClass(fromClassName, toClassName, allowList) {
 | |
|   const allowedNames = new Set(allowList);
 | |
| 
 | |
|   const content = fs.readFileSync(path.join(PROJECT_DIR, `docs/src/test-api/class-${fromClassName.toLowerCase()}.md`)).toString();
 | |
|   let sections = content.split('\n## ');
 | |
|   sections = filterAllowedSections(sections, allowedNames);
 | |
|   if (allowedNames.size)
 | |
|     console.log(`Undocumented properties for ${fromClassName}:\n  ${[...allowedNames].join('\n  ')}`);
 | |
|   sections = changeClassName(sections, fromClassName, toClassName);
 | |
|   sections = replacePropertyDescriptions(sections, fromClassName);
 | |
|   const fullconfig = sections.join('\n## ');
 | |
|   fs.writeFileSync(path.join(PROJECT_DIR, `docs/src/test-api/class-${toClassName.toLowerCase()}.md`), fullconfig);
 | |
| }
 | |
| 
 | |
| function propertyNameFromSection(section) {
 | |
|   section = section.split('\n')[0];
 | |
|   const match = /\.(\w+)/.exec(section);
 | |
|   if (!match)
 | |
|     return null;
 | |
|   return match[1];
 | |
| }
 | |
| 
 | |
| function filterAllowedSections(sections, allowedNames) {
 | |
|   return sections.filter(section => {
 | |
|     section = section.split('\n')[0];
 | |
|     const name = propertyNameFromSection(section);
 | |
|     if (!name)
 | |
|       return true;
 | |
|     return allowedNames.delete(name);
 | |
|   });
 | |
| }
 | |
| 
 | |
| function changeClassName(sections, from, to) {
 | |
|   return sections.map(section => {
 | |
|     const lines = section.split('\n');
 | |
|     lines[0] = lines[0].replace(from, to);
 | |
|     return lines.join('\n');
 | |
|   });
 | |
| }
 | |
| 
 | |
| function replacePropertyDescriptions(sections, configClassName) {
 | |
|   return sections.map(section => {
 | |
|     const parts = section.split('\n\n');
 | |
|     section = parts[0];
 | |
|     const name = propertyNameFromSection(section);
 | |
|     if (!name)
 | |
|       return `${section}\n`;
 | |
|     return `${section}\n\nSee [\`property: ${configClassName}.${name}\`].\n`;
 | |
|   });
 | |
| }
 | |
| 
 | |
| function generateFullConfig() {
 | |
|   generateFullConfigClass('TestConfig', 'FullConfig', [
 | |
|     'forbidOnly',
 | |
|     'fullyParallel',
 | |
|     'globalSetup',
 | |
|     'globalTeardown',
 | |
|     'globalTimeout',
 | |
|     'grep',
 | |
|     'grepInvert',
 | |
|     'maxFailures',
 | |
|     'metadata',
 | |
|     'version',
 | |
|     'preserveOutput',
 | |
|     'projects',
 | |
|     'reporter',
 | |
|     'reportSlowTests',
 | |
|     'rootDir',
 | |
|     'quiet',
 | |
|     'shard',
 | |
|     'updateSnapshots',
 | |
|     'workers',
 | |
|     'webServer',
 | |
|     'configFile',
 | |
|   ]);
 | |
| }
 | |
| 
 | |
| function generateFullProject() {
 | |
|   generateFullConfigClass('TestProject', 'FullProject', [
 | |
|     'grep',
 | |
|     'grepInvert',
 | |
|     'metadata',
 | |
|     'name',
 | |
|     'dependencies',
 | |
|     'snapshotDir',
 | |
|     'outputDir',
 | |
|     'repeatEach',
 | |
|     'retries',
 | |
|     'teardown',
 | |
|     'testDir',
 | |
|     'testIgnore',
 | |
|     'testMatch',
 | |
|     'timeout',
 | |
|     'use',
 | |
|   ]);
 | |
| }
 | |
| 
 | |
| generateFullConfig();
 | |
| generateFullProject();
 |