/**
* 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.
*/
import fs from 'fs';
import path from 'path';
import { browserTest as it, expect } from '../config/browserTest';
it.skip(({ mode }) => mode !== 'default');
it.beforeEach(({}, testInfo) => {
process.env.PLAYWRIGHT_SERVER_REGISTRY = testInfo.outputPath('registry');
});
it('should start and stop pipe server', async ({ browserType, browser }) => {
const serverInfo = await browser.bind('default', {});
expect(serverInfo).toEqual(expect.objectContaining({
endpoint: expect.stringMatching(/browser@/),
}));
const browser2 = await browserType.connect(serverInfo.endpoint);
const page = await browser2.newPage();
await page.goto('data:text/html,
Hello via pipe
');
expect(await page.locator('h1').textContent()).toBe('Hello via pipe');
await page.close();
await browser2.close();
await browser.unbind();
});
it('should write descriptor on start and remove on stop', async ({ browser }) => {
const serverInfo = await browser.bind('my-title', { wsPath: 'test' } as any);
const registryDir = it.info().outputPath('registry');
const fileName = fs.readdirSync(registryDir)[0];
const file = path.join(registryDir, fileName);
const descriptor = JSON.parse(fs.readFileSync(file, 'utf-8'));
expect(descriptor.title).toBe('my-title');
expect(descriptor.playwrightVersion).toBeTruthy();
expect(descriptor.playwrightLib).toBeTruthy();
expect(descriptor.browser.browserName).toBeTruthy();
expect(descriptor.endpoint).toBe(serverInfo.endpoint);
if (process.platform !== 'win32')
expect(fs.existsSync(serverInfo.endpoint)).toBe(true);
await browser.unbind();
expect(fs.existsSync(file)).toBe(false);
if (process.platform !== 'win32')
expect(fs.existsSync(serverInfo.endpoint)).toBe(false);
});
it('should start ws server with host/port and produce well-formed endpoint', async ({ browserType, browser }) => {
const serverInfo = await browser.bind('default', { host: 'localhost', port: 0 });
expect(serverInfo.endpoint).toMatch(/^ws:\/\/(127\.0\.0\.1|\[::1\]):\d+\/[a-f0-9]+$/);
const browser2 = await browserType.connect(serverInfo.endpoint);
const page = await browser2.newPage();
await page.goto('data:text/html,Hello via ws
');
expect(await page.locator('h1').textContent()).toBe('Hello via ws');
await page.close();
await browser2.close();
await browser.unbind();
});