blob: 9102d7633ae59990e2dcec92d45469aee7935df9 [file] [log] [blame]
/**
* @license
* Copyright 2021 The Go Authors. All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
*/
import { Page } from 'puppeteer';
import * as pg from './helpers/page';
import * as golangxtools from './helpers/golang-x-tools.page';
let page: Page;
beforeAll(async () => {
page = await pg.newPage();
await page.goto('/golang.org/x/tools@v0.1.1');
await golangxtools.prepare(page);
});
afterAll(async () => {
await page.close();
});
test('fixed header appears after scrolling', async () => {
await page.evaluate(() => window.scrollTo({ top: 250 }));
// Wait for header transition
await new Promise(r => setTimeout(r, 250));
const image = await page.screenshot();
expect(image).toMatchImageSnapshot();
await page.evaluate(() => window.scrollTo({ top: 0 }));
});
describe('readme', () => {
test('expands', async () => {
const expand = pg.select('readme-expand');
await page.$eval(expand, el => el.scrollIntoView({ block: 'center' }));
await page.click(expand);
await scrollTop(page);
const expanded = await page.screenshot({ fullPage: true });
expect(expanded).toMatchImageSnapshot();
});
test('collapses', async () => {
const collapse = pg.select('readme-collapse');
await page.$eval(collapse, el => el.scrollIntoView({ block: 'center' }));
await page.click(collapse);
await scrollTop(page);
const collapsed = await page.screenshot({ fullPage: true });
expect(collapsed).toMatchImageSnapshot();
});
});
describe('directories', () => {
test('expand', async () => {
const toggle = pg.select('directories-toggle');
await page.$eval(toggle, el => el.scrollIntoView({ block: 'center' }));
await page.click(toggle);
await scrollTop(page);
const expanded = await page.screenshot({ fullPage: true });
expect(expanded).toMatchImageSnapshot();
});
test('collapse', async () => {
const toggle = pg.select('directories-toggle');
await page.$eval(toggle, el => el.scrollIntoView({ block: 'center' }));
await page.click(toggle);
await scrollTop(page);
const collapsed = await page.screenshot({ fullPage: true });
expect(collapsed).toMatchImageSnapshot();
});
});
describe('jump to modal', () => {
test('opens', async () => {
await page.click(pg.select('jump-to-button'));
await scrollTop(page);
const expanded = await page.screenshot();
expect(expanded).toMatchImageSnapshot();
});
test('closes', async () => {
await page.click(pg.select('close-dialog'));
await scrollTop(page);
const collapsed = await page.screenshot();
expect(collapsed).toMatchImageSnapshot();
});
});
test('no page errors', () => {
expect(pageErrors).toHaveLength(0);
});
/**
* scrollTop scrolls to the top of a given page and waits
* a short amount of time for any style transitions to
* complete. Used to make sure the documentation page
* header has completed transitioning.
* @param page the page to scroll.
*/
async function scrollTop(page: Page): Promise<void> {
await page.evaluate(() => window.scrollTo({ top: 0 }));
await new Promise(r => setTimeout(r, 500));
}