Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 103 additions & 67 deletions src/test/extension.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,33 @@ async function setPreviewByDefault(enabled: boolean) {
);
}

async function waitForActiveTextEditor(message = "No active editor") {
let activeEditor: vscode.TextEditor | undefined;
await waitFor(() => {
activeEditor = vscode.window.activeTextEditor;
assert.ok(activeEditor, message);
});
return activeEditor!;
}

async function insertIntoDocument(
document: vscode.TextDocument,
inserts: { position: vscode.Position; text: string }[]
) {
const workspaceEdit = new vscode.WorkspaceEdit();
for (const { position, text } of inserts) {
workspaceEdit.insert(document.uri, position, text);
}
const applied = await vscode.workspace.applyEdit(workspaceEdit);
assert.ok(applied, "Workspace edit was not applied");
}

async function saveDocument(document: vscode.TextDocument) {
await sleep(200);
await document.save();
await sleep(400);
}

suite("oil.code", () => {
// Setup and teardown for Sinon stubs
let showWarningMessageStub: sinon.SinonStub;
Expand Down Expand Up @@ -303,10 +330,9 @@ suite("oil.code", () => {
editor.selection = new vscode.Selection(position, position);
await vscode.commands.executeCommand("oil-code.select");

await sleep(300);

const fileEditor = await waitForActiveTextEditor();
const mockFileContent = `mock file content`;
await vscode.window.activeTextEditor?.edit((editBuilder) => {
await fileEditor.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(0, 0), mockFileContent);
});

Expand All @@ -316,7 +342,8 @@ suite("oil.code", () => {

await waitForDocumentText(["/000 ../", "/001 oil-file.md"]);

vscode.window.activeTextEditor?.edit((editBuilder) => {
const editor2 = await waitForActiveTextEditor("No active editor2");
await editor2.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(1, 5), `new-`);
});

Expand Down Expand Up @@ -354,17 +381,21 @@ suite("oil.code", () => {
const filePosition = new vscode.Position(2, 0);
editor.selection = new vscode.Selection(filePosition, filePosition);
await vscode.commands.executeCommand("oil-code.select");
await sleep(200);

const fileEditor = await waitForActiveTextEditor();
const mockFileContent = `mock file content`;
await vscode.window.activeTextEditor?.edit((editBuilder) => {
await fileEditor.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(0, 0), mockFileContent);
});

await saveFile();

await vscode.commands.executeCommand("oil-code.open");
await sleep(100);
await waitForDocumentText([
"/000 ../",
"/001 sub-dir/",
"/002 oil-file.md",
]);

// Move cursor to the file name
const position = new vscode.Position(2, 0);
Expand All @@ -374,23 +405,23 @@ suite("oil.code", () => {

// Cut selection
await vscode.commands.executeCommand("editor.action.deleteLines");
await waitForDocumentText(["/000 ../", "/001 sub-dir/"]);

// Move cursor to the new directory
const position3 = new vscode.Position(1, 0);
editor.selection = new vscode.Selection(position3, position3);
editor2.selection = new vscode.Selection(position3, position3);

await vscode.commands.executeCommand("oil-code.select");
await sleep(300);
await waitForDocumentText("/000 ../");

const editor3 = vscode.window.activeTextEditor;
assert.ok(editor3, "No active editor3");
editor3.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(0, 8), newline);
editBuilder.insert(new vscode.Position(1, 0), `/002 oil-file.md`);
});
const editor3 = await waitForActiveTextEditor("No active editor3");
await insertIntoDocument(editor3.document, [
{ position: new vscode.Position(0, 8), text: newline },
{ position: new vscode.Position(1, 0), text: `/002 oil-file.md` },
]);
await waitForDocumentText(["/000 ../", "/002 oil-file.md"]);

await saveFile();
await saveDocument(editor3.document);

await sleep(200);

Expand Down Expand Up @@ -425,40 +456,43 @@ suite("oil.code", () => {
const filePosition = new vscode.Position(2, 0);
editor.selection = new vscode.Selection(filePosition, filePosition);
await vscode.commands.executeCommand("oil-code.select");
await sleep(200);

const fileEditor = await waitForActiveTextEditor();
const mockFileContent = `mock file content`;
await vscode.window.activeTextEditor?.edit((editBuilder) => {
await fileEditor.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(0, 0), mockFileContent);
});

await saveFile();

await vscode.commands.executeCommand("oil-code.open");
await sleep(100);
await waitForDocumentText([
"/000 ../",
"/001 sub-dir/",
"/002 oil-file.md",
]);

const editor2 = vscode.window.activeTextEditor;
assert.ok(editor2, "No active editor2");
// Move cursor to the file name
editor2.selection = new vscode.Selection(2, 5, 2, 5);

await vscode.commands.executeCommand("editor.action.deleteLines");
await sleep(200);
await waitForDocumentText(["/000 ../", "/001 sub-dir/"]);

// Move cursor to the new directory
editor2.selection = new vscode.Selection(1, 5, 1, 5);

await vscode.commands.executeCommand("oil-code.select");
await sleep(300);
await waitForDocumentText("/000 ../");

const editor3 = vscode.window.activeTextEditor;
assert.ok(editor3, "No active editor3");
editor3.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(0, 8), newline);
editBuilder.insert(new vscode.Position(1, 0), `/002 oil-file-rename.md`);
});
const editor3 = await waitForActiveTextEditor("No active editor3");
await insertIntoDocument(editor3.document, [
{ position: new vscode.Position(0, 8), text: newline },
{ position: new vscode.Position(1, 0), text: `/002 oil-file-rename.md` },
]);

await saveFile();
await saveDocument(editor3.document);

await waitForDocumentText(["/000 ../", "/003 oil-file-rename.md"]);

Expand Down Expand Up @@ -489,21 +523,20 @@ suite("oil.code", () => {

editor.selection = new vscode.Selection(1, 5, 1, 5);
await vscode.commands.executeCommand("editor.action.deleteLines");
await sleep(100);
await waitForDocumentText(["/000 ../", "/002 oil-dir-parent/"]);
editor.selection = new vscode.Selection(1, 5, 1, 5);
await vscode.commands.executeCommand("oil-code.select");
await sleep(500);
await waitForDocumentText("/000 ../");

const editor2 = vscode.window.activeTextEditor;
assert.ok(editor2, "No active editor");
editor2.edit((editBuilder) => {
editBuilder.insert(
new vscode.Position(1, 0),
["", "/001 oil-dir-child/"].join(newline)
);
});
const editor2 = await waitForActiveTextEditor();
await insertIntoDocument(editor2.document, [
{
position: new vscode.Position(1, 0),
text: ["", "/001 oil-dir-child/"].join(newline),
},
]);

await saveFile();
await saveDocument(editor2.document);

await waitForDocumentText(["/000 ../", "/003 oil-dir-child/"]);
await assertProjectFileStructure([
Expand Down Expand Up @@ -537,21 +570,20 @@ suite("oil.code", () => {

editor.selection = new vscode.Selection(1, 5, 1, 5);
await vscode.commands.executeCommand("editor.action.deleteLines");
await sleep(200);
await waitForDocumentText(["/000 ../", "/002 oil-dir-parent/"]);
editor.selection = new vscode.Selection(1, 5, 1, 5);
await vscode.commands.executeCommand("oil-code.select");
await sleep(200);
await waitForDocumentText("/000 ../");

const editor2 = vscode.window.activeTextEditor;
assert.ok(editor2, "No active editor");
editor2.edit((editBuilder) => {
editBuilder.insert(
new vscode.Position(1, 0),
["", "/001 oil-dir-child-renamed/"].join(newline)
);
});
const editor2 = await waitForActiveTextEditor();
await insertIntoDocument(editor2.document, [
{
position: new vscode.Position(1, 0),
text: ["", "/001 oil-dir-child-renamed/"].join(newline),
},
]);

await saveFile();
await saveDocument(editor2.document);

await sleep(100);

Expand Down Expand Up @@ -992,18 +1024,22 @@ suite("oil.code", () => {
const filePosition = new vscode.Position(2, 0);
editor.selection = new vscode.Selection(filePosition, filePosition);
await vscode.commands.executeCommand("oil-code.select");
await sleep(200);

const testContent = `# Test File${newline}This is test content for copy/move operation.`;
await vscode.window.activeTextEditor?.edit((editBuilder) => {
const fileEditor = await waitForActiveTextEditor();
await fileEditor.edit((editBuilder) => {
editBuilder.insert(new vscode.Position(0, 0), testContent);
});

await saveFile();

// Return to oil view
await vscode.commands.executeCommand("oil-code.open");
await sleep(100);
await waitForDocumentText([
"/000 ../",
"/001 target-dir/",
"/002 source-file.md",
]);

const editor2 = vscode.window.activeTextEditor;
assert.ok(editor2, "No active editor2");
Expand All @@ -1015,28 +1051,28 @@ suite("oil.code", () => {
new vscode.Range(new vscode.Position(2, 0), new vscode.Position(3, 0))
);
});
await waitForDocumentText(`/000 ../${newline}/001 target-dir/${newline}`);

// Select the target directory
const targetPosition = new vscode.Position(1, 0);
editor2.selection = new vscode.Selection(targetPosition, targetPosition);
await vscode.commands.executeCommand("oil-code.select");
await sleep(300);
await waitForDocumentText("/000 ../");

const editor3 = vscode.window.activeTextEditor;
assert.ok(editor3, "No active editor3");
const editor3 = await waitForActiveTextEditor("No active editor3");
// Insert the copied file line
await editor3.edit((editBuilder) => {
editBuilder.insert(
new vscode.Position(1, 0),
`${newline}/002 source-file-rename.md`
);
editBuilder.insert(
new vscode.Position(2, 0),
`${newline}/002 source-file.md`
);
});
await insertIntoDocument(editor3.document, [
{
position: new vscode.Position(1, 0),
text: `${newline}/002 source-file-rename.md`,
},
{
position: new vscode.Position(2, 0),
text: `${newline}/002 source-file.md`,
},
]);

await saveFile();
await saveDocument(editor3.document);

await waitForDocumentText([
"/000 ../",
Expand Down
Loading