| /** | |
| * @license | |
| * Copyright 2026 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import '../../../test/common-test-setup'; | |
| import './gr-diff-markdown-viewer'; | |
| import {GrDiffMarkdownViewer} from './gr-diff-markdown-viewer'; | |
| import {fixture, html} from '@open-wc/testing'; | |
| // Until https://github.com/modernweb-dev/web/issues/2804 is fixed | |
| // @ts-expect-error | |
| import {visualDiff} from '@web/test-runner-visual-regression'; | |
| import {visualDiffDarkTheme} from '../../../test/test-utils'; | |
| import {createDiff, createPatchRange} from '../../../test/test-data-generators'; | |
| import {DiffInfo, DiffViewMode} from '../../../api/diff'; | |
| suite('gr-diff-markdown-viewer screenshot tests', () => { | |
| let element: GrDiffMarkdownViewer; | |
| setup(async () => { | |
| const diff: DiffInfo = { | |
| ...createDiff(), | |
| meta_a: { | |
| name: 'SKILL.md', | |
| content_type: 'text/markdown', | |
| lines: 25, | |
| }, | |
| meta_b: { | |
| name: 'SKILL.md', | |
| content_type: 'text/markdown', | |
| lines: 25, | |
| }, | |
| content: [ | |
| { | |
| ab: ['## Running the Experiment', ''], | |
| }, | |
| { | |
| a: [ | |
| 'The generalized runner script is located at [run_experiment.py](file:///path/to/workspace/tools/build_experimentation/scripts/run_experiment.py).', | |
| ], | |
| b: [ | |
| 'The generalized runner script is located at [`scripts/run_experiment.py`](scripts/run_experiment.py) (relative to this `SKILL.md` directory, `<SKILL_DIR>`). It automatically resolves the workspace root from `--workspace-root`, `workspace_root` in the JSON config, `$ANDROID_BUILD_TOP`, or the nearest ancestor directory containing `.repo/`.', | |
| ], | |
| }, | |
| { | |
| ab: [ | |
| '', | |
| '### Execution', | |
| '', | |
| 'Run the script from the build top directory, passing the path to your config file:', | |
| '', | |
| '```bash', | |
| ], | |
| }, | |
| { | |
| a: [ | |
| 'python3 tools/build_experimentation/scripts/run_experiment.py --config path/to/config.json', | |
| ], | |
| b: [ | |
| 'python3 <SKILL_DIR>/scripts/run_experiment.py --config path/to/config.json', | |
| ], | |
| }, | |
| { | |
| ab: [ | |
| '```', | |
| '', | |
| 'By default, running this command will clear any existing results in `out/experiment_results.json`.', | |
| '', | |
| '#### Appending Results (Opt-in)', | |
| 'To append results to a prior run (e.g., to add more iterations to an existing experiment), use the `--append` flag:', | |
| '', | |
| '```bash', | |
| ], | |
| }, | |
| { | |
| a: [ | |
| 'python3 tools/build_experimentation/scripts/run_experiment.py --config path/to/config.json --append', | |
| ], | |
| b: [ | |
| 'python3 <SKILL_DIR>/scripts/run_experiment.py --config path/to/config.json --append', | |
| ], | |
| }, | |
| { | |
| ab: [ | |
| '```', | |
| '', | |
| 'This will preserve existing results, start iteration numbering from where the last run left off, and avoid clearing preserved artifacts.', | |
| ], | |
| }, | |
| ], | |
| }; | |
| element = await fixture<GrDiffMarkdownViewer>( | |
| html`<gr-diff-markdown-viewer | |
| style="display: block; width: 1200px;" | |
| .diff=${diff} | |
| .path=${'SKILL.md'} | |
| .patchRange=${createPatchRange()} | |
| ></gr-diff-markdown-viewer>` | |
| ); | |
| await element.updateComplete; | |
| await document.fonts?.ready; | |
| }); | |
| test('side-by-side rich diff with inline code spans', async () => { | |
| await visualDiff(element, 'gr-diff-markdown-viewer-inline-code'); | |
| await visualDiffDarkTheme(element, 'gr-diff-markdown-viewer-inline-code'); | |
| }); | |
| test('unified rich diff with inline code spans', async () => { | |
| element.viewMode = DiffViewMode.UNIFIED; | |
| await element.updateComplete; | |
| await visualDiff(element, 'gr-diff-markdown-viewer-inline-code-unified'); | |
| await visualDiffDarkTheme( | |
| element, | |
| 'gr-diff-markdown-viewer-inline-code-unified' | |
| ); | |
| }); | |
| test('rich diff showcase with lists, tables, blockquotes, and code blocks', async () => { | |
| element.diff = { | |
| ...createDiff(), | |
| meta_a: {name: 'README.md', content_type: 'text/markdown', lines: 30}, | |
| meta_b: {name: 'README.md', content_type: 'text/markdown', lines: 32}, | |
| content: [ | |
| { | |
| a: [ | |
| '# Service Configuration Guide', | |
| '', | |
| '> Note: Legacy v1 endpoints are deprecated and will be removed in Q3.', | |
| '', | |
| '- Enable `--legacy-auth` when starting the local worker.', | |
| '- Configure timeout in `config/default.yaml` (default: `30s`).', | |
| '- Upload logs to [metrics-v1](https://example.com/metrics/v1).', | |
| '', | |
| '| Flag | Default | Description |', | |
| '| --- | --- | --- |', | |
| '| `--threads` | `4` | Worker thread pool size |', | |
| '| `--timeout` | `30s` | Request deadline per RPC |', | |
| ], | |
| b: [ | |
| '# Service Configuration Guide', | |
| '', | |
| '> Note: Legacy v1 endpoints are deprecated and will be removed in Q4.', | |
| '', | |
| '- Enable `--oauth2-auth` when starting the local worker.', | |
| '- Configure timeout in `config/production.yaml` (default: `60s`).', | |
| '- Upload logs to [metrics-v2](https://example.com/metrics/v2).', | |
| '- Verify health check at `/healthz` before traffic cutover.', | |
| '', | |
| '| Flag | Default | Description |', | |
| '| --- | --- | --- |', | |
| '| `--threads` | `8` | Worker thread pool size |', | |
| '| `--timeout` | `60s` | Request deadline per streaming RPC |', | |
| ], | |
| }, | |
| ], | |
| }; | |
| await element.updateComplete; | |
| await document.fonts?.ready; | |
| await visualDiff(element, 'gr-diff-markdown-viewer-delta-showcase'); | |
| await visualDiffDarkTheme( | |
| element, | |
| 'gr-diff-markdown-viewer-delta-showcase' | |
| ); | |
| }); | |
| }); |