mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
Adding tests for opening markdown document links
This commit is contained in:
Vendored
+1
-1
@@ -319,7 +319,7 @@
|
|||||||
"name": "Markdown Extension Tests",
|
"name": "Markdown Extension Tests",
|
||||||
"runtimeExecutable": "${execPath}",
|
"runtimeExecutable": "${execPath}",
|
||||||
"args": [
|
"args": [
|
||||||
"${workspaceFolder}/extensions/markdown-language-features/test-fixtures",
|
"${workspaceFolder}/extensions/markdown-language-features/test-workspace",
|
||||||
"--extensionDevelopmentPath=${workspaceFolder}/extensions/markdown-language-features",
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/markdown-language-features",
|
||||||
"--extensionTestsPath=${workspaceFolder}/extensions/markdown-language-features/out/test"
|
"--extensionTestsPath=${workspaceFolder}/extensions/markdown-language-features/out/test"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import * as assert from 'assert';
|
||||||
|
import 'mocha';
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
|
const testFileA = workspaceFile('a.md');
|
||||||
|
|
||||||
|
function workspaceFile(...segments: string[]) {
|
||||||
|
return vscode.Uri.joinPath(vscode.workspace.workspaceFolders![0].uri, ...segments);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getLinksForFile(file: vscode.Uri): Promise<vscode.DocumentLink[]> {
|
||||||
|
return (await vscode.commands.executeCommand<vscode.DocumentLink[]>('vscode.executeLinkProvider', file))!;
|
||||||
|
}
|
||||||
|
|
||||||
|
suite('Markdown Document links', () => {
|
||||||
|
|
||||||
|
teardown(async () => {
|
||||||
|
await vscode.commands.executeCommand('workbench.action.closeAllEditors');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to markdown file', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](b.md)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('b.md'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to markdown file with leading ./', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](./b.md)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('b.md'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to markdown file with leading /', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](./b.md)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('b.md'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to markdown file without file extension', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](b)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('b.md'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to markdown file in directory', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](sub/c)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('sub', 'c.md'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to fragment by title in file', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](sub/c#second)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('sub', 'c.md'));
|
||||||
|
assert.strictEqual( vscode.window.activeTextEditor!.selection.start.line, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Should navigate to fragment by line', async () => {
|
||||||
|
await withFileContents(testFileA, '[b](sub/c#L2)');
|
||||||
|
|
||||||
|
const [link] = await getLinksForFile(testFileA);
|
||||||
|
await executeLink(link);
|
||||||
|
|
||||||
|
assertActiveDocumentUri(workspaceFile('sub', 'c.md'));
|
||||||
|
assert.strictEqual( vscode.window.activeTextEditor!.selection.start.line, 1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function assertActiveDocumentUri(expectedUri: vscode.Uri) {
|
||||||
|
assert.strictEqual(
|
||||||
|
vscode.window.activeTextEditor!.document.uri.fsPath,
|
||||||
|
expectedUri.fsPath
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function withFileContents(file: vscode.Uri, contents: string): Promise<void> {
|
||||||
|
const document = await vscode.workspace.openTextDocument(file);
|
||||||
|
const editor = await vscode.window.showTextDocument(document);
|
||||||
|
await editor.edit(edit => {
|
||||||
|
edit.replace(new vscode.Range(0, 0, 1000, 0), contents);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function executeLink(link: vscode.DocumentLink) {
|
||||||
|
const args = JSON.parse(decodeURIComponent(link.target!.query));
|
||||||
|
await vscode.commands.executeCommand(link.target!.path, args);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ import LinkProvider from '../features/documentLinkProvider';
|
|||||||
import { InMemoryDocument } from './inMemoryDocument';
|
import { InMemoryDocument } from './inMemoryDocument';
|
||||||
|
|
||||||
|
|
||||||
const testFileName = vscode.Uri.file('test.md');
|
const testFile = vscode.Uri.joinPath(vscode.workspace.workspaceFolders![0].uri, 'x.md');
|
||||||
|
|
||||||
const noopToken = new class implements vscode.CancellationToken {
|
const noopToken = new class implements vscode.CancellationToken {
|
||||||
private _onCancellationRequestedEmitter = new vscode.EventEmitter<void>();
|
private _onCancellationRequestedEmitter = new vscode.EventEmitter<void>();
|
||||||
@@ -20,7 +20,7 @@ const noopToken = new class implements vscode.CancellationToken {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function getLinksForFile(fileContents: string) {
|
function getLinksForFile(fileContents: string) {
|
||||||
const doc = new InMemoryDocument(testFileName, fileContents);
|
const doc = new InMemoryDocument(testFile, fileContents);
|
||||||
const provider = new LinkProvider();
|
const provider = new LinkProvider();
|
||||||
return provider.provideDocumentLinks(doc, noopToken);
|
return provider.provideDocumentLinks(doc, noopToken);
|
||||||
}
|
}
|
||||||
@@ -118,24 +118,24 @@ suite('markdown.DocumentLinkProvider', () => {
|
|||||||
const links = getLinksForFile('[](https://example.com)');
|
const links = getLinksForFile('[](https://example.com)');
|
||||||
assert.strictEqual(links.length, 2);
|
assert.strictEqual(links.length, 2);
|
||||||
const [link1, link2] = links;
|
const [link1, link2] = links;
|
||||||
assertRangeEqual(link1.range, new vscode.Range(0,13,0,22));
|
assertRangeEqual(link1.range, new vscode.Range(0, 13, 0, 22));
|
||||||
assertRangeEqual(link2.range, new vscode.Range(0,25,0,44));
|
assertRangeEqual(link2.range, new vscode.Range(0, 25, 0, 44));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const links = getLinksForFile('[]( https://whitespace.com )');
|
const links = getLinksForFile('[]( https://whitespace.com )');
|
||||||
assert.strictEqual(links.length, 2);
|
assert.strictEqual(links.length, 2);
|
||||||
const [link1, link2] = links;
|
const [link1, link2] = links;
|
||||||
assertRangeEqual(link1.range, new vscode.Range(0,7,0,21));
|
assertRangeEqual(link1.range, new vscode.Range(0, 7, 0, 21));
|
||||||
assertRangeEqual(link2.range, new vscode.Range(0,26,0,48));
|
assertRangeEqual(link2.range, new vscode.Range(0, 26, 0, 48));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const links = getLinksForFile('[](file1.txt) text [](file2.txt)');
|
const links = getLinksForFile('[](file1.txt) text [](file2.txt)');
|
||||||
assert.strictEqual(links.length, 4);
|
assert.strictEqual(links.length, 4);
|
||||||
const [link1, link2, link3, link4] = links;
|
const [link1, link2, link3, link4] = links;
|
||||||
assertRangeEqual(link1.range, new vscode.Range(0,6,0,14));
|
assertRangeEqual(link1.range, new vscode.Range(0, 6, 0, 14));
|
||||||
assertRangeEqual(link2.range, new vscode.Range(0,17,0,26));
|
assertRangeEqual(link2.range, new vscode.Range(0, 17, 0, 26));
|
||||||
assertRangeEqual(link3.range, new vscode.Range(0,39,0,47));
|
assertRangeEqual(link3.range, new vscode.Range(0, 39, 0, 47));
|
||||||
assertRangeEqual(link4.range, new vscode.Range(0,50,0,59));
|
assertRangeEqual(link4.range, new vscode.Range(0, 50, 0, 59));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
DO NOT DELETE, USED BY INTEGRATION TESTS
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|

|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# First
|
||||||
|
# Second
|
||||||
@@ -282,7 +282,7 @@ Or discuss debug adapters on Gitter:
|
|||||||
|
|
||||||
You can now 'step through' the 'readme.md' file, set and hit breakpoints, and run into exceptions (if the word exception appears in a line).
|
You can now 'step through' the 'readme.md' file, set and hit breakpoints, and run into exceptions (if the word exception appears in a line).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Build and Run
|
## Build and Run
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ if %errorlevel% neq 0 exit /b %errorlevel%
|
|||||||
REM call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\typescript-language-features\test-workspace --extensionDevelopmentPath=%~dp0\..\extensions\typescript-language-features --extensionTestsPath=%~dp0\..\extensions\typescript-language-features\out\test --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
|
REM call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\typescript-language-features\test-workspace --extensionDevelopmentPath=%~dp0\..\extensions\typescript-language-features --extensionTestsPath=%~dp0\..\extensions\typescript-language-features\out\test --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
|
||||||
REM if %errorlevel% neq 0 exit /b %errorlevel%
|
REM if %errorlevel% neq 0 exit /b %errorlevel%
|
||||||
|
|
||||||
call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\markdown-language-features\out\test\test-fixtures --extensionDevelopmentPath=%~dp0\..\extensions\markdown-language-features --extensionTestsPath=%~dp0\..\extensions\markdown-language-features\out\test --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
|
call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\markdown-language-features\test-workspace --extensionDevelopmentPath=%~dp0\..\extensions\markdown-language-features --extensionTestsPath=%~dp0\..\extensions\markdown-language-features\out\test --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
|
||||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||||
|
|
||||||
call "%INTEGRATION_TEST_ELECTRON_PATH%" $%~dp0\..\extensions\emmet\out\test\test-fixtures --extensionDevelopmentPath=%~dp0\..\extensions\emmet --extensionTestsPath=%~dp0\..\extensions\emmet\out\test --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR% .
|
call "%INTEGRATION_TEST_ELECTRON_PATH%" $%~dp0\..\extensions\emmet\out\test\test-fixtures --extensionDevelopmentPath=%~dp0\..\extensions\emmet --extensionTestsPath=%~dp0\..\extensions\emmet\out\test --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR% .
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ fi
|
|||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/vscode-api-tests/testWorkspace --enable-proposed-api=vscode.vscode-api-tests --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/singlefolder-tests --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/vscode-api-tests/testWorkspace --enable-proposed-api=vscode.vscode-api-tests --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/singlefolder-tests --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/vscode-api-tests/testworkspace.code-workspace --enable-proposed-api=vscode.vscode-api-tests --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/workspace-tests --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/vscode-api-tests/testworkspace.code-workspace --enable-proposed-api=vscode.vscode-api-tests --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/workspace-tests --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/vscode-colorize-tests/test --extensionDevelopmentPath=$ROOT/extensions/vscode-colorize-tests --extensionTestsPath=$ROOT/extensions/vscode-colorize-tests/out --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/vscode-colorize-tests/test --extensionDevelopmentPath=$ROOT/extensions/vscode-colorize-tests --extensionTestsPath=$ROOT/extensions/vscode-colorize-tests/out --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/markdown-language-features/out/test/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/markdown-language-features --extensionTestsPath=$ROOT/extensions/markdown-language-features/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/markdown-language-features/test-workspace --extensionDevelopmentPath=$ROOT/extensions/markdown-language-features --extensionTestsPath=$ROOT/extensions/markdown-language-features/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
# "$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/typescript-language-features/test-workspace --extensionDevelopmentPath=$ROOT/extensions/typescript-language-features --extensionTestsPath=$ROOT/extensions/typescript-language-features/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
#"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/typescript-language-features/test-workspace --extensionDevelopmentPath=$ROOT/extensions/typescript-language-features --extensionTestsPath=$ROOT/extensions/typescript-language-features/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/emmet/out/test/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/emmet --extensionTestsPath=$ROOT/extensions/emmet/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $ROOT/extensions/emmet/out/test/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/emmet --extensionTestsPath=$ROOT/extensions/emmet/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $(mktemp -d 2>/dev/null) --enable-proposed-api=vscode.git --extensionDevelopmentPath=$ROOT/extensions/git --extensionTestsPath=$ROOT/extensions/git/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX $(mktemp -d 2>/dev/null) --enable-proposed-api=vscode.git --extensionDevelopmentPath=$ROOT/extensions/git --extensionTestsPath=$ROOT/extensions/git/out/test --disable-telemetry --crash-reporter-directory=$VSCODECRASHDIR --no-cached-data --disable-updates --disable-extensions --user-data-dir=$VSCODEUSERDATADIR
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user