From ec9c722ce1942e0516ff17e666f0ced4e98ed8d4 Mon Sep 17 00:00:00 2001 From: SuparnaSuresh Date: Mon, 4 Nov 2024 16:06:10 +0530 Subject: [PATCH] Added test cases for gradle project name with space --- package.json | 6 +- ...adleTestDevModeActionsWSProjectNameInit.ts | 25 ++ ...dleTestDevModeActionsWSProjectNameTasks.ts | 280 ++++++++++++++++++ src/test/definitions/constants.ts | 1 + src/test/utils/testUtils.ts | 65 +++- 5 files changed, 375 insertions(+), 2 deletions(-) create mode 100644 src/test/GradleTestDevModeActionsWSProjectNameInit.ts create mode 100644 src/test/GradleTestDevModeActionsWSProjectNameTasks.ts diff --git a/package.json b/package.json index 71c69e79..538d35b5 100644 --- a/package.json +++ b/package.json @@ -240,7 +240,11 @@ "buildJakarta": "gulp buildJakartaJdt buildJakartaLs", "test": "npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/*.js'", "test-mac-maven":"npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/M*.js'", - "test-mac-gradle": "npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/G*.js'" + "test-mac-gradle": "npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/G*.js'", + "test-mac-project-path-maven-WSPath": "npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/MavenTestDevModeActionsWSPath*.js'", + "test-mac-project-path-gradle-WSPath": "npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/GradleTestPathDevModeActionsWS*.js'", + "test-mac-project-path-gradle-WSProject": "npm run test-compile && extest setup-and-run -o .vscode/settings.json 'out/test/GradleTestDevModeActionsWSProjectName*.js'" + }, "devDependencies": { "@types/chai": "^4.3.4", diff --git a/src/test/GradleTestDevModeActionsWSProjectNameInit.ts b/src/test/GradleTestDevModeActionsWSProjectNameInit.ts new file mode 100644 index 00000000..a740da1a --- /dev/null +++ b/src/test/GradleTestDevModeActionsWSProjectNameInit.ts @@ -0,0 +1,25 @@ +import { WebDriver, VSBrowser } from 'vscode-extension-tester'; +import * as utils from './utils/testUtils'; + + + +describe('Open Gradle Project - Project name with space', () => { + + let driver: WebDriver; + + before(() => { + utils.renameProject(); + driver = VSBrowser.instance.driver; + + }); + + it('Open Sample Gradle Project - Project name with space', async () => { + + await VSBrowser.instance.openResources(utils.getNewGradleProjectNameWithSpace()); + + }).timeout(25000); + + +}); + + diff --git a/src/test/GradleTestDevModeActionsWSProjectNameTasks.ts b/src/test/GradleTestDevModeActionsWSProjectNameTasks.ts new file mode 100644 index 00000000..43fe7898 --- /dev/null +++ b/src/test/GradleTestDevModeActionsWSProjectNameTasks.ts @@ -0,0 +1,280 @@ +import { expect } from 'chai'; +import { InputBox, Workbench,SideBarView, ViewItem, ViewSection,EditorView,DefaultTreeItem, DebugView } from 'vscode-extension-tester'; +import * as utils from './utils/testUtils'; +import * as constants from './definitions/constants'; +import path = require('path'); + +describe('Devmode action tests for Gradle Project- Project name with space', () => { + let sidebar: SideBarView; + let debugView: DebugView; + let section: ViewSection; + let item: DefaultTreeItem; + let tabs: string[]; + + before(() => { + sidebar = new SideBarView(); + debugView = new DebugView(); + }); + +it('getViewControl works with the correct label', async() => { + + const contentPart = sidebar.getContent(); + section = await contentPart.getSection('Liberty Dashboard'); + console.log("Found Liberty Dashboard...."); + expect(section).not.undefined; + +}).timeout(25000); + + +it('Open dasboard shows items - Gradle', async () => { + + + await utils.delay(85000); + await section.expand(); + await utils.delay(6000); + const menu = await section.getVisibleItems(); + expect(menu).not.empty; + item = await section.findItem(constants.GRADLE_PROJECT_WSP) as DefaultTreeItem; + expect(item).not.undefined; + + +}).timeout(300000); + + +it('Start gradle project from liberty dashboard', async () => { + + + await utils.launchDashboardAction(item,constants.START_DASHBOARD_ACTION,constants.START_DASHBOARD_MAC_ACTION); + await utils.delay(30000); + const serverStartStatus = await utils.checkTerminalforServerState(constants.SERVER_START_STRING); + if(!serverStartStatus) + console.log("Server started message not found in the terminal"); + else + { + console.log("Server succuessfully started"); + await utils.launchDashboardAction(item, constants.STOP_DASHBOARD_ACTION, constants.STOP_DASHBOARD_MAC_ACTION); + const serverStopStatus= await utils.checkTerminalforServerState(constants.SERVER_STOP_STRING); + if(!serverStopStatus){ + console.error("Server stopped message not found in the terminal"); + } + else + console.log("Server stopped successfully"); + expect (serverStopStatus).to.be.true; +} + expect (serverStartStatus).to.be.true; + + +}).timeout(350000); + +it('Run tests for gradle project', async () => { + + await utils.launchDashboardAction(item, constants.START_DASHBOARD_ACTION, constants.START_DASHBOARD_MAC_ACTION); + await utils.delay(30000); + const serverStartStatus = await utils.checkTerminalforServerState(constants.SERVER_START_STRING); + console.log("after checkTerminalforServerState"); + if(!serverStartStatus) + console.log("Server started message not found in the terminal"); + else + { + console.log("Server succuessfully started"); + await utils.launchDashboardAction(item,constants.RUNTEST_DASHBOARD_ACTION,constants.RUNTEST_DASHBOARD_MAC_ACTION); + const testStatus = await utils.checkTestStatus(constants.GRADLE_TEST_RUN_STRING); + await utils.launchDashboardAction(item, constants.STOP_DASHBOARD_ACTION, constants.STOP_DASHBOARD_MAC_ACTION); + const serverStopStatus= await utils.checkTerminalforServerState(constants.SERVER_STOP_STRING); + if(!serverStopStatus) + console.error("Server stopped message not found in the terminal"); + else + console.log("Server stopped successfully"); + expect (serverStopStatus).to.be.true; + expect (testStatus).to.be.true; +} + expect (serverStartStatus).to.be.true; + + +}).timeout(350000); + + +it('start gradle with options from liberty dashboard', async () => { + + const reportPath = path.join(utils.getNewGradleProjectNameWithSpace(),"build", "reports", "tests", "test", "index.html"); + const deleteReport = await utils.deleteReports(reportPath); + expect (deleteReport).to.be.true; + await utils.launchDashboardAction(item, constants.START_DASHBOARD_ACTION_WITH_PARAM, constants.START_DASHBOARD_MAC_ACTION_WITH_PARAM); + await utils.setCustomParameter("--hotTests"); + await utils.delay(30000); + const serverStartStatus = await utils.checkTerminalforServerState(constants.SERVER_START_STRING); + if(!serverStartStatus) + console.log("Server started with params message not found in terminal "); + else + { + console.log("Server succuessfully started"); + let checkFile = await utils.checkIfTestReportExists(reportPath); + await utils.launchDashboardAction(item, constants.STOP_DASHBOARD_ACTION, constants.STOP_DASHBOARD_MAC_ACTION); + console.log("after dashboard action"); + const serverStopStatus= await utils.checkTerminalforServerState(constants.SERVER_STOP_STRING); + if(!serverStopStatus) + console.error("Server stopped message not found in ther terminal"); + else + console.log("Server stopped successfully"); + expect (serverStopStatus).to.be.true; + expect (checkFile).to.be.true; +} + expect (serverStartStatus).to.be.true; + +}).timeout(550000); + +it('start gradle with history from liberty dashboard', async () => { + + const reportPath = path.join(utils.getNewGradleProjectNameWithSpace(),"build", "reports", "tests", "test", "index.html"); + const deleteReport = await utils.deleteReports(reportPath); + expect (deleteReport).to.be.true; + await utils.launchDashboardAction(item, constants.START_DASHBOARD_ACTION_WITH_PARAM, constants.START_DASHBOARD_MAC_ACTION_WITH_PARAM); + const foundCommand = await utils.chooseCmdFromHistory("--hotTests"); + console.log("foundcmd:" + foundCommand); + expect (foundCommand).to.be.true; + await utils.delay(30000); + const serverStartStatus = await utils.checkTerminalforServerState(constants.SERVER_START_STRING); + if(!serverStartStatus) + console.log("Server started with params message not found in the terminal "); + else + { + console.log("Server succuessfully started"); + let checkFile = await utils.checkIfTestReportExists(reportPath); + await utils.launchDashboardAction(item, constants.STOP_DASHBOARD_ACTION, constants.STOP_DASHBOARD_MAC_ACTION); + const serverStopStatus= await utils.checkTerminalforServerState(constants.SERVER_STOP_STRING); + if(!serverStopStatus) + console.error("Server stopped message not found in terminal"); + else + console.log("Server stopped successfully"); + expect (serverStopStatus).to.be.true; + expect (checkFile).to.be.true; +} + expect (serverStartStatus).to.be.true; + +}).timeout(350000); + + + + + + + + + + + + + + + + +it('attach debugger for gradle with custom parameter event', async () => { + console.log("start attach debugger"); + let isServerRunning: Boolean = true; + let attachStatus: Boolean = false; + try { + await utils.launchDashboardAction(item,constants.START_DASHBOARD_ACTION_WITH_PARAM, constants.START_DASHBOARD_MAC_ACTION_WITH_PARAM); + await utils.setCustomParameter("-DdebugPort=7777"); + await utils.delay(30000); + + isServerRunning = await utils.checkTerminalforServerState(constants.SERVER_START_STRING); + if (!isServerRunning) + console.log("Server started with params message not found in terminal"); + else { + console.log("Server succuessfully started"); + await utils.launchDashboardAction(item,constants.ATTACH_DEBUGGER_DASHBOARD_ACTION, constants.ATTACH_DEBUGGER_DASHBOARD_MAC_ACTION); + console.log("Attach Debugger action done"); + await utils.delay(8000); + const contentPart = debugView.getContent(); + //console.log("Get Content"); + + let mysecarry: Promise = contentPart.getSections(); + let mysecmap: IterableIterator<[number, ViewSection]> = (await mysecarry).entries(); + for (const [key, value] of (mysecmap)) { + if ((await value.getEnclosingElement().getText()).includes("BREAKPOINTS")) { + //console.log("******** mysecmap getEnclosingElement " + (await value.getEnclosingElement().getText()).valueOf()); + console.log("Found Breakpoints"); + attachStatus = true; + break; + } + } + + await utils.stopLibertyserver(); + isServerRunning = !await utils.checkTerminalforServerState(constants.SERVER_STOP_STRING); //negate isServerRunning + if (!isServerRunning) + console.log("Server stopped successfully "); + } + } catch (e) { + console.error("error - ", e) + } finally { + console.log("finally block: is server running - ", isServerRunning); + if (isServerRunning) { + utils.stopLibertyserver(); + } + else + console.log("good to close test - Attach Debugger for start with custom parameter(-DdebugPort=7777) event"); + } + expect(attachStatus).to.be.true; +}).timeout(550000); + +it('start gradle with docker from liberty dashboard', async () => { + + if((process.platform === 'darwin' ) || (process.platform === 'win32') || (process.platform == 'linux')) + { + //skip running for platforms , enable them for linux after resolving docker setup in GHA + return true; + } + + + await utils.launchDashboardAction(item, constants.START_DASHBOARD_ACTION_WITHDOCKER, constants.START_DASHBOARD_MAC_ACTION_WITHDOCKER); + await utils.delay(60000); + const serverStartStatus = await utils.checkTerminalforServerState(constants.SERVER_START_STRING); + if(!serverStartStatus) + console.log("Server started message not found in the terminal"); + else + { + console.log("Server succuessfully started"); + await utils.launchDashboardAction(item, constants.STOP_DASHBOARD_ACTION, constants.STOP_DASHBOARD_MAC_ACTION); + const serverStopStatus= await utils.checkTerminalforServerState(constants.SERVER_STOP_STRING); + if(!serverStopStatus){ + console.error("Server stopped message not found in the terminal"); + } + else + console.log("Server stopped successfully"); + expect (serverStopStatus).to.be.true; +} + expect (serverStartStatus).to.be.true; + + +}).timeout(350000); + +it('View test report for gradle project', async () => { + + if((process.platform === 'darwin' ) || (process.platform === 'win32') || (process.platform == 'linux')) + { + //skip running for platforms , enable once https://github.com/OpenLiberty/liberty-tools-vscode/issues/266 is resolved + return true; + } + + await utils.launchDashboardAction(item,constants.GRADLE_TR_DASHABOARD_ACTION, constants.GRADLE_TR_DASHABOARD_MAC_ACTION); + tabs = await new EditorView().getOpenEditorTitles(); + // expect (tabs[1]], "Gradle test report not found").to.equal(constants.GRADLE_TEST_REPORT_TITLE); + expect (tabs.indexOf(constants.GRADLE_TEST_REPORT_TITLE)>-1, "Gradle test report not found").to.equal(true); + +}).timeout(30000); + + + // Now, clear the command history of the "command palette" to avoid receiving "recently used" suggestions. This action should be performed at the end of Gradle Project tests. +it('Clear Command Palatte', async () => { + await utils.clearCommandPalette(); +}).timeout(100000); + +after(() => { + const gradleProjectPath = path.join(__dirname,"..","..","src", "test","resources","gradleproject"); + console.log("Current path __dirname: "+ __dirname); + console.log("Removing project from the path: "+ gradleProjectPath); + utils.removeProjectFolder(gradleProjectPath); +}); + +}); + diff --git a/src/test/definitions/constants.ts b/src/test/definitions/constants.ts index d421e824..5488ee36 100755 --- a/src/test/definitions/constants.ts +++ b/src/test/definitions/constants.ts @@ -40,3 +40,4 @@ export const ATTACH_DEBUGGER_DASHBOARD_MAC_ACTION = "Liberty: Attach debugger"; export const MAVEN_DEVMODE_DEBUG_PORT_PARM = "-DdebugPort"; /** Gradle: Dev mode debug port argument key. */ export const GRADLE_DEVMODE_DEBUG_PORT_PARM = "--libertyDebugPort"; +export const GRADLE_PROJECT_WSP= "liberty.gradle.te st.wrapper.app"; diff --git a/src/test/utils/testUtils.ts b/src/test/utils/testUtils.ts index a2a0135b..afa4a3a0 100755 --- a/src/test/utils/testUtils.ts +++ b/src/test/utils/testUtils.ts @@ -5,6 +5,7 @@ import { MAVEN_PROJECT, STOP_DASHBOARD_MAC_ACTION } from '../definitions/consta import { MapContextMenuforMac } from './macUtils'; import clipboard = require('clipboardy'); import { expect } from 'chai'; +import * as fsextra from 'fs-extra'; export function delay(millisec: number) { return new Promise( resolve => setTimeout(resolve, millisec) ); @@ -192,4 +193,66 @@ export async function clearCommandPalette() { expect(buttons.length).equals(2); await dialog.pushButton('Clear'); } - \ No newline at end of file + +/** + * Function return project name with space + */ +export function getNewGradleProjectNameWithSpace(): any { + + const gradleProjectPath = path.join(__dirname, "..","..","..","src", "test","resources","gradleproject", "liberty.gradle.te st.wrapper.app"); + + console.log("Gradle project path is: "+gradleProjectPath); + return gradleProjectPath; +} + +/** + * Create new gradle project name with space in the directory + */ + +export async function renameProject(): Promise{ + + const currentDir =path.join(__dirname, "..","..","..",'/src/test/resources/gradleproject'); + const sourcurrentDir = path.join(__dirname, "..","..","..",'src/test/resources/gradle'); + + const sourceFilePath = path.join(sourcurrentDir, 'liberty.gradle.test.wrapper.app'); + const newFilePath = path.join(currentDir,'liberty.gradle.te st.wrapper.app'); + + console.log('Source Path:', sourceFilePath); + console.log('Destination Path:', newFilePath); + + fsextra.copy(sourceFilePath,newFilePath) + .then(()=> console.log("coppied")) + .catch(err => console.log("Error renaming the project")); + } +/** + * Remove newly created Project folder with content + */ + +export async function removeProjectFolder(projectPath: string): Promise { + try { + /* Read all files and subdirectories in the folder */ + const projectFiles = await fs.readdirSync(projectPath); + + /* Remove each file and subdirectory */ + await Promise.all( + projectFiles.map(async (projectFile) => { + const projectFilePath = path.join(projectPath, projectFile); + const stats = await fs.lstatSync(projectFilePath); // Use lstat from fs/promises + + if (stats.isDirectory()) { + /* Recursively remove subdirectory */ + await removeProjectFolder(projectFilePath); + } else { + /* Remove file */ + await fs.unlinkSync(projectFilePath); + } + }) + ); + + /* Remove the now-empty directory */ + await fs.rmdirSync(projectPath); + // console.log(`Successfully removed Project folder: ${projectPath}`); + } catch (error) { + console.error(`Error removing project folder: ${error}`); + } +}