From 25f4ec9b4b22f6699862b07841037261f36c021c Mon Sep 17 00:00:00 2001 From: Piotr Figiela <77412592+Draggu@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:15:14 +0100 Subject: [PATCH] Status bar tests commit-id:d18dba8f --- test-support/scarb.ts | 3 ++ ui-test/fixtures/empty/Scarb.lock | 6 +++ ui-test/fixtures/empty/Scarb.toml | 3 ++ ui-test/fixtures/empty/src/lib.cairo | 0 ui-test/statusBar.ts | 68 ++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 test-support/scarb.ts create mode 100644 ui-test/fixtures/empty/Scarb.lock create mode 100644 ui-test/fixtures/empty/Scarb.toml create mode 100644 ui-test/fixtures/empty/src/lib.cairo create mode 100644 ui-test/statusBar.ts diff --git a/test-support/scarb.ts b/test-support/scarb.ts new file mode 100644 index 0000000..bb8c807 --- /dev/null +++ b/test-support/scarb.ts @@ -0,0 +1,3 @@ +import { sync as commandExists } from "command-exists"; + +export const isScarbAvailable = commandExists("scarb"); diff --git a/ui-test/fixtures/empty/Scarb.lock b/ui-test/fixtures/empty/Scarb.lock new file mode 100644 index 0000000..080628e --- /dev/null +++ b/ui-test/fixtures/empty/Scarb.lock @@ -0,0 +1,6 @@ +# Code generated by scarb DO NOT EDIT. +version = 1 + +[[package]] +name = "empty" +version = "0.1.0" diff --git a/ui-test/fixtures/empty/Scarb.toml b/ui-test/fixtures/empty/Scarb.toml new file mode 100644 index 0000000..3e29fcd --- /dev/null +++ b/ui-test/fixtures/empty/Scarb.toml @@ -0,0 +1,3 @@ +[package] +name = "empty" +version = "0.1.0" diff --git a/ui-test/fixtures/empty/src/lib.cairo b/ui-test/fixtures/empty/src/lib.cairo new file mode 100644 index 0000000..e69de29 diff --git a/ui-test/statusBar.ts b/ui-test/statusBar.ts new file mode 100644 index 0000000..ec8c87f --- /dev/null +++ b/ui-test/statusBar.ts @@ -0,0 +1,68 @@ +import { EditorView, StatusBar, VSBrowser, WebElement, Workbench } from "vscode-extension-tester"; +import { expect } from "chai"; +import { isScarbAvailable } from "../test-support/scarb"; +import * as path from "path"; + +describe("Status bar", function () { + this.timeout(50000); + + before(async function () { + await VSBrowser.instance.openResources(path.join("ui-test", "fixtures", "empty")); + }); + + afterEach(async function () { + await new EditorView().closeAllEditors(); + }); + + it("Displays Cairo toolchain version", async function () { + const statusBar = await VSBrowser.instance.driver.wait( + getStatusBarItem, + 5000, + "failed to obtain Cairo status bar", + // Check every 0.5 second. + 500, + ); + + expect(statusBar).not.undefined; + + // `new StatusBar().getItem("Cairo")` is broken and searches not only in title. + const title = await statusBar!.getAttribute(StatusBar["locators"].StatusBar.itemTitle); + + if (isScarbAvailable) { + expect(title).to.match( + /Cairo, Cairo Language\nscarb .+ \(.+\)\ncairo: .+ \(.+\)\nsierra: .+/, + ); + } else { + expect(title).to.be.eq("Cairo, Cairo Language"); + } + }); + + it("checks if status bar is disabled", async function () { + const settings = await new Workbench().openSettings(); + + const setting = await settings.findSetting("Show In Status Bar", "Cairo1"); + setting.setValue(false); + + const statusBarIsUndefined = await VSBrowser.instance.driver.wait(async () => { + const statusBar = await getStatusBarItem(); + + return statusBar === undefined; + }, 2000); + + expect(statusBarIsUndefined).to.be.true; + }); +}); + +async function getStatusBarItem(): Promise<WebElement | undefined> { + const items = await new StatusBar().getItems(); + + for (const item of items) { + const text = await item.getText(); + + if (text.startsWith("Cairo")) { + return item; + } + } + + return undefined; +}