From e31962b7461478c6b9698f128df78de4614c928f Mon Sep 17 00:00:00 2001 From: conlacda Date: Tue, 30 Apr 2024 15:04:36 +0900 Subject: [PATCH] add test copy button --- .../playwright.config.ts | 2 + .../tests/submission_details.spec.ts | 50 +++++++++++++++++++ .../scripts/submission-details/dom.js | 4 +- .../scripts/submission-details/main.js | 1 - 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 browser-extension/chrome-extension-test/tests/submission_details.spec.ts diff --git a/browser-extension/chrome-extension-test/playwright.config.ts b/browser-extension/chrome-extension-test/playwright.config.ts index 29cc9ff..48e0f75 100644 --- a/browser-extension/chrome-extension-test/playwright.config.ts +++ b/browser-extension/chrome-extension-test/playwright.config.ts @@ -30,6 +30,8 @@ export default defineConfig({ trace: 'on-first-retry', headless: false, + + permissions: ["clipboard-read", "clipboard-write"], }, /* Configure projects for major browsers */ diff --git a/browser-extension/chrome-extension-test/tests/submission_details.spec.ts b/browser-extension/chrome-extension-test/tests/submission_details.spec.ts new file mode 100644 index 0000000..3604eb0 --- /dev/null +++ b/browser-extension/chrome-extension-test/tests/submission_details.spec.ts @@ -0,0 +1,50 @@ +import { test, expect } from '../fixtures'; +import { Page, Locator } from "@playwright/test"; + +require('dotenv').config({ path: './.env' }); + +// chromium.launch PersistentContext prevents you from using multiple pages, so do not use parallel mode. +// The parallel mode opens each tab for each test, and the context will be closed after one test. +test.describe.configure({ mode: 'serial' }); + +let page: Page; + +test.beforeAll(async ({ context }) => { + page = await context.newPage(); +}); + +test.afterAll(async () => { + await page.close(); +}); + +test.describe('Extension functions correctly on the submission details page', () => { + test.describe('Copy button', () => { + test('Copy input', async () => { + page.goto('https://atcoder.jp/contests/abc347/submissions/51807898'); + const copyButton: Locator = page.locator('#copy_in_0'); + const copiedButton: Locator = page.locator('#copied_in_0'); + await copyButton.dispatchEvent('click'); + await expect(copiedButton).toBeVisible(); + expect(await page.evaluate(() => navigator.clipboard.readText())).toContain("yay"); + }); + test('Copy output', async () => { + page.goto('https://atcoder.jp/contests/abc347/submissions/51807898'); + const copyButton: Locator = page.locator('#copy_out_0'); + const copiedButton: Locator = page.locator('#copied_out_0'); + await copyButton.dispatchEvent('click'); + await expect(copiedButton).toBeVisible(); + expect(await page.evaluate(() => navigator.clipboard.readText())).toContain("5"); + }); + }); + + + // test('Download button', async () => { + // page.goto('https://atcoder.jp/contests/abc347/submissions/51807898'); + + // }); + + // test('Debug button', async () => { + // page.goto('https://atcoder.jp/contests/abc347/submissions/51807898'); + + // }); +}); diff --git a/browser-extension/chrome-extension/scripts/submission-details/dom.js b/browser-extension/chrome-extension/scripts/submission-details/dom.js index f335fe7..f8e9628 100644 --- a/browser-extension/chrome-extension/scripts/submission-details/dom.js +++ b/browser-extension/chrome-extension/scripts/submission-details/dom.js @@ -15,7 +15,9 @@ addInOutColumnToResultTable = (resultTable, inOrOut) => { const lastTdCell = $(this).find('td:last'); const copyIcon = $(''); copyIcon.css('cursor', 'pointer'); + copyIcon.attr('id', `copy_${inOrOut}_${index}`); const copiedIcon = $(''); + copiedIcon.attr('id', `copied_${inOrOut}_${index}`); const copyFailedIcon = $(''); copyIcon.on("click", async () => { const testCase = await fetchTestCase(tcfile, inOrOut); @@ -79,7 +81,7 @@ addDebugColumnToResultTable = (resultTable) => { const lastTdCell = $(this).find('td:last'); const debugIcon = $(''); debugIcon.css('cursor', 'pointer'); - debugIcon.on("click", () => { + debugIcon.on("click", () => { window.location.href = `https://atcoder.jp/contests/${getContestName()}/custom_test?submissionId=${getSubmissionId()}&testcase=${tcfile}&problem=${getProblemName()}`; }); const cell = $(''); diff --git a/browser-extension/chrome-extension/scripts/submission-details/main.js b/browser-extension/chrome-extension/scripts/submission-details/main.js index 4b54f48..914983f 100644 --- a/browser-extension/chrome-extension/scripts/submission-details/main.js +++ b/browser-extension/chrome-extension/scripts/submission-details/main.js @@ -1,4 +1,3 @@ - (async () => { const tcpub = await isTestCasePublished(getContestName(), getProblemName()); if (!tcpub) {