diff --git a/README.md b/README.md index 99a478f7e3..7fffdbce24 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Playwright -[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Chromium version](https://img.shields.io/badge/chromium-81.0.4044-blue.svg)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-73.0b3-blue.svg)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-13.0.4-blue.svg)](https://webkit.org/) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) +[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Chromium version](https://img.shields.io/badge/chromium-81.0.4044-blue.svg?logo=google-chrome)](https://www.chromium.org/Home) [![Firefox version](https://img.shields.io/badge/firefox-73.0b3-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/) [![WebKit version](https://img.shields.io/badge/webkit-13.0.4-blue.svg?logo=safari)](https://webkit.org/) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) ###### [API](https://github.com/microsoft/playwright/blob/v0.10.0/docs/api.md) | [FAQ](#faq) | [Contributing](#contributing) @@ -8,9 +8,9 @@ Playwright is a Node library to automate the [Chromium](https://www.chromium.org | | ver | Linux | macOS | Win | | ---: | :---: | :---: | :---: | :---: | -| Chromium| 81.0.4044 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Chromium| 81.0.4044 | :white_check_mark: | :white_check_mark: | :white_check_mark: | | WebKit | 13.0.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| Firefox |73.0b3 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Firefox | 73.0b3 | :white_check_mark: | :white_check_mark: | :white_check_mark: | - Headless is supported for all the browsers on all platforms. diff --git a/utils/doclint/cli.js b/utils/doclint/cli.js index ed638a32a1..2fb195db6b 100755 --- a/utils/doclint/cli.js +++ b/utils/doclint/cli.js @@ -15,10 +15,12 @@ * limitations under the License. */ -const playwright = require('../../index.js').chromium; +const playwright = require('../../index.js'); const path = require('path'); const Source = require('./Source'); +const {spawnSync} = require('child_process'); + const PROJECT_DIR = path.join(__dirname, '..', '..'); const VERSION = require(path.join(PROJECT_DIR, 'package.json')).version; @@ -43,10 +45,15 @@ async function run() { const mdSources = [readme, api, troubleshooting]; const preprocessor = require('./preprocessor'); - messages.push(...await preprocessor.runCommands(mdSources, VERSION)); + const browserVersions = getBrowserVersions(); + messages.push(...(await preprocessor.runCommands(mdSources, { + libversion: VERSION, + chromiumVersion: browserVersions.chromium, + firefoxVersion: browserVersions.firefox, + }))); messages.push(...await preprocessor.ensureReleasedAPILinks([readme], VERSION)); - const browser = await playwright.launch(); + const browser = await playwright.chromium.launch(); const page = await browser.newPage(); const checkPublicAPI = require('./check_public_api'); const jsSources = await Source.readdir(path.join(PROJECT_DIR, 'src')); @@ -60,7 +67,7 @@ async function run() { await source.save(); changedFiles = true; } - + await readme.saveAs(path.join(PROJECT_DIR, 'packages', 'playwright', 'README.md')); } @@ -94,3 +101,12 @@ async function run() { console.log(`DocLint Finished in ${runningTime / 1000} seconds`); process.exit(clearExit ? 0 : 1); } + +function getBrowserVersions() { + const chromiumVersion = spawnSync(playwright.chromium.executablePath(), ['--version']).stdout.toString(); + const firefoxVersion = spawnSync(playwright.firefox.executablePath(), ['--version']).stdout.toString(); + return { + chromium: chromiumVersion.trim().split(' ').pop(), + firefox: firefoxVersion.trim().split(' ').pop(), + }; +} diff --git a/utils/doclint/preprocessor/index.js b/utils/doclint/preprocessor/index.js index 9d07e0ea0e..8458514e12 100644 --- a/utils/doclint/preprocessor/index.js +++ b/utils/doclint/preprocessor/index.js @@ -15,11 +15,12 @@ */ const Message = require('../Message'); +const {firefox, webkit, chromium} = require('../../../'); -module.exports.ensureReleasedAPILinks = function(sources, version) { +module.exports.ensureReleasedAPILinks = function(sources, libversion) { // Release version is everything that doesn't include "-". const apiLinkRegex = /https:\/\/github.com\/microsoft\/playwright\/blob\/v[^/]*\/docs\/api.md/ig; - const lastReleasedAPI = `https://github.com/microsoft/playwright/blob/v${version.split('-')[0]}/docs/api.md`; + const lastReleasedAPI = `https://github.com/microsoft/playwright/blob/v${libversion.split('-')[0]}/docs/api.md`; const messages = []; for (const source of sources) { @@ -31,9 +32,9 @@ module.exports.ensureReleasedAPILinks = function(sources, version) { return messages; }; -module.exports.runCommands = function(sources, version) { +module.exports.runCommands = function(sources, {libversion, chromiumVersion, firefoxVersion}) { // Release version is everything that doesn't include "-". - const isReleaseVersion = !version.includes('-'); + const isReleaseVersion = !libversion.includes('-'); const messages = []; const commands = []; @@ -65,9 +66,17 @@ module.exports.runCommands = function(sources, version) { for (const command of commands) { let newText = null; if (command.name === 'version') - newText = isReleaseVersion ? 'v' + version : 'Tip-Of-Tree'; + newText = isReleaseVersion ? 'v' + libversion : 'Tip-Of-Tree'; else if (command.name === 'empty-if-release') newText = isReleaseVersion ? '' : command.originalText; + else if (command.name === 'chromium-version-if-release') + newText = isReleaseVersion ? chromiumVersion : command.originalText; + else if (command.name === 'firefox-version-if-release') + newText = isReleaseVersion ? firefoxVersion : command.originalText; + else if (command.name === 'chromium-version-badge-if-release') + newText = isReleaseVersion ? `[![Chromium version](https://img.shields.io/badge/chromium-${chromiumVersion}-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)` : command.originalText; + else if (command.name === 'firefox-version-badge-if-release') + newText = isReleaseVersion ? `[![Firefox version](https://img.shields.io/badge/firefox-${firefoxVersion}-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/)` : command.originalText; else if (command.name === 'toc') newText = generateTableOfContents(command.source.text(), command.to, false /* topLevelOnly */); else if (command.name === 'toc-top-level') diff --git a/utils/doclint/preprocessor/test.js b/utils/doclint/preprocessor/test.js index b741abef35..b28ddfcc9b 100644 --- a/utils/doclint/preprocessor/test.js +++ b/utils/doclint/preprocessor/test.js @@ -63,11 +63,21 @@ describe('ensureReleasedAPILinks', function() { }); describe('runCommands', function() { + const OPTIONS_REL = { + libversion: '1.3.0', + chromiumVersion: '80.0.4004.0', + firefoxVersion: '73.0b3', + }; + const OPTIONS_DEV = { + libversion: '1.3.0-post', + chromiumVersion: '', + firefoxVersion: '', + }; it('should throw for unknown command', function() { const source = new Source('doc.md', ` something `); - const messages = runCommands([source], '1.1.1'); + const messages = runCommands([source], OPTIONS_REL); expect(source.hasUpdatedText()).toBe(false); expect(messages.length).toBe(1); expect(messages[0].type).toBe('error'); @@ -78,19 +88,19 @@ describe('runCommands', function() { const source = new Source('doc.md', ` Playwright XXX `); - const messages = runCommands([source], '1.2.0'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); expect(source.text()).toBe(` - Playwright v1.2.0 + Playwright v1.3.0 `); }); it('should work for *-post versions', function() { const source = new Source('doc.md', ` Playwright XXX `); - const messages = runCommands([source], '1.2.0-post'); + const messages = runCommands([source], OPTIONS_DEV); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); @@ -101,12 +111,12 @@ describe('runCommands', function() { it('should tolerate different writing', function() { const source = new Source('doc.md', `Playwright vWHAT `); - runCommands([source], '1.1.1'); - expect(source.text()).toBe(`Playwright vv1.1.1`); + runCommands([source], OPTIONS_REL); + expect(source.text()).toBe(`Playwright vv1.3.0`); }); it('should not tolerate missing gen:stop', function() { const source = new Source('doc.md', ``); - const messages = runCommands([source], '1.2.0'); + const messages = runCommands([source], OPTIONS_REL); expect(source.hasUpdatedText()).toBe(false); expect(messages.length).toBe(1); expect(messages[0].type).toBe('error'); @@ -118,7 +128,7 @@ describe('runCommands', function() { const source = new Source('doc.md', ` XXX `); - const messages = runCommands([source], '1.1.1'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); @@ -130,7 +140,7 @@ describe('runCommands', function() { const source = new Source('doc.md', ` XXX `); - const messages = runCommands([source], '1.1.1-post'); + const messages = runCommands([source], OPTIONS_DEV); expect(messages.length).toBe(0); expect(source.text()).toBe(` XXX @@ -143,7 +153,7 @@ describe('runCommands', function() { ### class: page #### page.$ #### page.$$`); - const messages = runCommands([source], '1.3.0'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); @@ -164,7 +174,7 @@ describe('runCommands', function() { # yo comment \`\`\` `); - const messages = runCommands([source], '1.3.0'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); @@ -182,7 +192,7 @@ describe('runCommands', function() { const source = new Source('doc.md', `XXX ### some [link](#foobar) here `); - const messages = runCommands([source], '1.3.0'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); @@ -201,7 +211,7 @@ describe('runCommands', function() { #### first.2.1 ## Second `); - const messages = runCommands([source], '1.3.0'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); @@ -221,20 +231,68 @@ describe('runCommands', function() { }); it('should work with multiple commands', function() { const source = new Source('doc.md', ` - XXX - YYY - ZZZ + xxx + yyy + zzz `); - const messages = runCommands([source], '1.1.1'); + const messages = runCommands([source], OPTIONS_REL); expect(messages.length).toBe(1); expect(messages[0].type).toBe('warning'); expect(messages[0].text).toContain('doc.md'); expect(source.text()).toBe(` - v1.1.1 + v1.3.0 - v1.1.1 + v1.3.0 `); }); + describe('gen:chromium-version-if-release', function() { + it('should work for release', function() { + const source = new Source('doc.md', ` + Playwright XXX + `); + const messages = runCommands([source], OPTIONS_REL); + expect(messages.length).toBe(1); + expect(messages[0].type).toBe('warning'); + expect(messages[0].text).toContain('doc.md'); + expect(source.text()).toBe(` + Playwright 80.0.4004.0 + `); + }); + it('should be noop for dev', function() { + const source = new Source('doc.md', ` + Playwright XXX + `); + const messages = runCommands([source], OPTIONS_DEV); + expect(messages.length).toBe(0); + expect(source.text()).toBe(` + Playwright XXX + `); + }); + }); + describe('gen:firefox-version', function() { + it('should work for release', function() { + const source = new Source('doc.md', ` + Playwright XXX + `); + const messages = runCommands([source], OPTIONS_REL); + expect(messages.length).toBe(1); + expect(messages[0].type).toBe('warning'); + expect(messages[0].text).toContain('doc.md'); + expect(source.text()).toBe(` + Playwright 73.0b3 + `); + }); + it('should be noop for dev', function() { + const source = new Source('doc.md', ` + Playwright XXX + `); + const messages = runCommands([source], OPTIONS_DEV); + expect(messages.length).toBe(0); + expect(source.text()).toBe(` + Playwright XXX + `); + }); + }); }); runner.run();