| /******************************************************************************* |
| * Copyright (c) 2012 Ericsson Research Canada |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License v1.0 which |
| * accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Description: |
| * |
| * This class implements various utility method used in R4E JUnit UI tests |
| * |
| * Contributors: |
| * Sebastien Dubois - Created for Mylyn Review R4E project |
| * |
| ******************************************************************************/ |
| |
| package org.eclipse.mylyn.reviews.r4e.ui.tests.utils; |
| |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.net.URISyntaxException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import junit.framework.Assert; |
| |
| import org.eclipse.cdt.core.CCorePlugin; |
| import org.eclipse.cdt.core.CProjectNature; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IProjectDescription; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspaceRoot; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.egit.core.op.AddToIndexOperation; |
| import org.eclipse.egit.core.op.CommitOperation; |
| import org.eclipse.egit.core.op.ConnectProviderOperation; |
| import org.eclipse.egit.core.op.DisconnectProviderOperation; |
| import org.eclipse.jdt.core.IClasspathEntry; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.launching.JavaRuntime; |
| import org.eclipse.jgit.lib.Config; |
| import org.eclipse.jgit.lib.Constants; |
| import org.eclipse.jgit.lib.CoreConfig.AutoCRLF; |
| import org.eclipse.jgit.lib.Repository; |
| import org.eclipse.jgit.storage.file.FileRepository; |
| import org.eclipse.jgit.util.FileUtils; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIRootElement; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.navigator.ReviewNavigatorView; |
| import org.eclipse.mylyn.reviews.r4e.ui.tests.R4EUITestPlugin; |
| import org.eclipse.mylyn.reviews.r4e.ui.tests.proxy.R4EUITestMain; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.IViewPart; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.PlatformUI; |
| |
| @SuppressWarnings("restriction") |
| public class TestUtils { |
| |
| // ------------------------------------------------------------------------ |
| // Constants |
| // ------------------------------------------------------------------------ |
| |
| //Git |
| public final static String AUTHOR = "The Author <The.author@some.com>"; |
| |
| public final static String COMMITTER = "The Commiter <The.committer@some.com>"; |
| |
| //Java |
| private static final String UI_TEST_JAVA_PROJECT_NAME = "javaProject"; |
| |
| private static final String JAVA_FILE1_EXT_PATH = "testFiles" + File.separator + "extModCommitFile.java"; |
| |
| public static final String JAVA_FILE1_PROJ_NAME = "modCommitFile.java"; |
| |
| private static final String JAVA_FILE1_EXT_MOD_PATH = "testFiles" + File.separator + "extModCommitFile1.java"; |
| |
| private static final String JAVA_FILE2_EXT_PATH = "testFiles" + File.separator + "extRemCommitFile.java"; |
| |
| public static final String JAVA_FILE2_PROJ_NAME = "remCommitFile.java"; |
| |
| private static final String JAVA_FILE3_EXT_PATH = "testFiles" + File.separator + "extNewCommitFile.java"; |
| |
| public static final String JAVA_FILE3_PROJ_NAME = "newCommitFile.java"; |
| |
| public static final String JAVA_FILE3_EXT_MOD_PATH = "testFiles" + File.separator + "extModCommitFile3.java"; |
| |
| private static final String JAVA_FILE4_EXT_PATH = "testFiles" + File.separator + "extModNoCommitFile.java"; |
| |
| public static final String JAVA_FILE4_PROJ_NAME = "modNoCommitFile.java"; |
| |
| private static final String JAVA_FILE4_EXT_MOD_PATH = "testFiles" + File.separator + "extModNoCommitFile1.java"; |
| |
| private static final String JAVA_FILE5_EXT_PATH = "testFiles" + File.separator + "extNoVCSFile.java"; |
| |
| private static final String JAVA_FILE5_PROJ_NAME = "noVCSFile.java"; |
| |
| //C |
| private static final String UI_TEST_C_PROJECT_NAME = "cProject"; |
| |
| private static final String C_FILE1_EXT_PATH = "testFiles" + File.separator + "extModCommitFile.cc"; |
| |
| private static final String C_FILE1_PROJ_NAME = "extModCommitFile.cc"; |
| |
| private static final String C_FILE1_EXT_MOD_PATH = "testFiles" + File.separator + "extModCommitFile1.cc"; |
| |
| private static final String C_FILE2_EXT_PATH = "testFiles" + File.separator + "extRemCommitFile.cc"; |
| |
| private static final String C_FILE2_PROJ_NAME = "extRemCommitFile.cc"; |
| |
| private static final String C_FILE3_EXT_PATH = "testFiles" + File.separator + "extNewCommitFile.cc"; |
| |
| private static final String C_FILE3_PROJ_NAME = "extNewCommitFile.cc"; |
| |
| private static final String C_FILE4_EXT_PATH = "testFiles" + File.separator + "extModNoCommitFile.cc"; |
| |
| private static final String C_FILE4_PROJ_NAME = "modNoCommitFile.cc"; |
| |
| private static final String C_FILE4_EXT_MOD_PATH = "testFiles" + File.separator + "extModNoCommitFile1.cc"; |
| |
| private static final String C_FILE5_EXT_PATH = "testFiles" + File.separator + "extNoVCSFile.cc"; |
| |
| private static final String C_FILE5_PROJ_NAME = "noVCSFile.cc"; |
| |
| //Text |
| private static final String UI_TEST_TEXT_PROJECT_NAME = "textProject"; |
| |
| private static final String TEXT_FILE1_EXT_PATH = "testFiles" + File.separator + "extModCommitFile.txt"; |
| |
| private static final String TEXT_FILE1_PROJ_NAME = "extModCommitFile.txt"; |
| |
| private static final String TEXT_FILE1_EXT_MOD_PATH = "testFiles" + File.separator + "extModCommitFile1.txt"; |
| |
| private static final String TEXT_FILE2_EXT_PATH = "testFiles" + File.separator + "extRemCommitFile.txt"; |
| |
| private static final String TEXT_FILE2_PROJ_NAME = "extRemCommitFile.txt"; |
| |
| private static final String TEXT_FILE3_EXT_PATH = "testFiles" + File.separator + "extNewCommitFile.txt"; |
| |
| private static final String TEXT_FILE3_PROJ_NAME = "extNewCommitFile.txt"; |
| |
| private static final String TEXT_FILE4_EXT_PATH = "testFiles" + File.separator + "extModNoCommitFile.txt"; |
| |
| private static final String TEXT_FILE4_PROJ_NAME = "modNoCommitFile.txt"; |
| |
| private static final String TEXT_FILE4_EXT_MOD_PATH = "testFiles" + File.separator + "extModNoCommitFile1.txt"; |
| |
| private static final String TEXT_FILE5_EXT_PATH = "testFiles" + File.separator + "extNoVCSFile.txt"; |
| |
| private static final String TEXT_FILE5_PROJ_NAME = "noVCSFile.txt"; |
| |
| //Test Views |
| public static final String R4E_NAVIGATOR_VIEW_NAME = "org.eclipse.mylyn.reviews.r4e.ui.navigator.ReviewNavigatorView"; // $codepro.audit.disable constantNamingConvention |
| |
| // ------------------------------------------------------------------------ |
| // Variables |
| // ------------------------------------------------------------------------ |
| |
| public static String FSharedFolder = null; |
| |
| public static IProject FExtProject = null; |
| |
| //Java |
| public static IProject FJavaIProject = null; |
| |
| public static IJavaProject FJavaIJavaProject = null; |
| |
| public static Repository FJavaRepository = null; |
| |
| public static String FJavaWorkdirPrefix = null; |
| |
| public static IFile FJavaFile1 = null; |
| |
| public static IFile FJavaFile2 = null; |
| |
| public static IFile FJavaFile3 = null; |
| |
| public static IFile FJavaFile4 = null; |
| |
| public static IFile FJavaFile5 = null; |
| |
| //C |
| public static IProject FCIProject = null; |
| |
| public static IProject FCICProject = null; |
| |
| public static Repository FCRepository = null; |
| |
| public static String FCWorkdirPrefix = null; |
| |
| public static IFile FCFile1 = null; |
| |
| public static IFile FCFile2 = null; |
| |
| public static IFile FCFile3 = null; |
| |
| public static IFile FCFile4 = null; |
| |
| public static IFile FCFile5 = null; |
| |
| //Text |
| public static IProject FTextIProject = null; |
| |
| public static Repository FTextRepository = null; |
| |
| public static String FTextWorkdirPrefix = null; |
| |
| public static IFile FTextFile1 = null; |
| |
| public static IFile FTextFile2 = null; |
| |
| public static IFile FTextFile3 = null; |
| |
| public static IFile FTextFile4 = null; |
| |
| public static IFile FTextFile5 = null; |
| |
| //UI Model |
| public static R4EUIRootElement FRootElement; |
| |
| //Test View |
| public static ReviewNavigatorView FTestNavigatorView; |
| |
| // ------------------------------------------------------------------------ |
| // Methods |
| // ------------------------------------------------------------------------ |
| public static void setupTestEnvironment() throws CoreException, IOException, URISyntaxException { |
| FExtProject = ResourcesPlugin.getWorkspace().getRoot().getProject(R4EUITestPlugin.PLUGIN_ID); |
| setupJavaProject(); |
| setupCProject(); |
| setupTextProject(); |
| setupSharedFolder(); |
| } |
| |
| private static void setupJavaProject() throws CoreException, IOException, URISyntaxException { |
| |
| //Create project |
| FJavaIProject = createProject(UI_TEST_JAVA_PROJECT_NAME); |
| |
| //Create repository |
| FJavaRepository = createRepository(FJavaIProject); |
| FJavaWorkdirPrefix = getWorkDir(FJavaRepository); |
| |
| //Connect main project with repository |
| connectProjectWithRepo(FJavaIProject, FJavaRepository); |
| |
| //Set Project As Java Project |
| FJavaIJavaProject = setProjectAsJava(FJavaIProject); |
| |
| //Add initial files to project |
| FJavaFile1 = addFileToProject(FJavaIProject, JAVA_FILE1_PROJ_NAME, JAVA_FILE1_EXT_PATH); |
| FJavaFile2 = addFileToProject(FJavaIProject, JAVA_FILE2_PROJ_NAME, JAVA_FILE2_EXT_PATH); |
| |
| //Commit initial files to repository |
| List<IResource> resources = new ArrayList<IResource>(); |
| resources.add(FJavaFile1); |
| resources.add(FJavaFile2); |
| addFilesToRepository(resources); |
| commitFiles(FJavaIProject, FJavaRepository, "first Java Commit"); |
| |
| //Update files (Modify File1, Remove File2, Add File 3, Add File4) |
| FJavaFile1 = changeContentOfFile(FJavaFile1, JAVA_FILE1_EXT_MOD_PATH); |
| FJavaFile2.delete(true, null); |
| FJavaFile3 = addFileToProject(FJavaIProject, JAVA_FILE3_PROJ_NAME, JAVA_FILE3_EXT_PATH); |
| FJavaFile4 = addFileToProject(FJavaIProject, JAVA_FILE4_PROJ_NAME, JAVA_FILE4_EXT_PATH); |
| |
| //Commit modifications |
| resources.clear(); |
| resources.add(FJavaFile1); |
| resources.add(FJavaFile2); |
| resources.add(FJavaFile3); |
| resources.add(FJavaFile4); |
| addFilesToRepository(resources); |
| commitFiles(FJavaIProject, FJavaRepository, "second Java Commit"); |
| |
| //Update files (Modify File4, Add File5, do not commit) |
| FJavaFile4 = changeContentOfFile(FJavaFile4, JAVA_FILE4_EXT_MOD_PATH); |
| FJavaFile5 = addFileToProject(FJavaIProject, JAVA_FILE5_PROJ_NAME, JAVA_FILE5_EXT_PATH); |
| } |
| |
| private static void setupCProject() throws CoreException, IOException, URISyntaxException { |
| //Create project |
| FCIProject = createProject(UI_TEST_C_PROJECT_NAME); |
| |
| //Create repository |
| FCRepository = createRepository(FCIProject); |
| FCWorkdirPrefix = getWorkDir(FCRepository); |
| |
| //Connect main project with repository |
| connectProjectWithRepo(FCIProject, FCRepository); |
| |
| //Set Project As C/C++ Project |
| FCICProject = setProjectAsC(FCIProject); |
| |
| //Add files to project |
| FCFile1 = addFileToProject(FCIProject, C_FILE1_PROJ_NAME, C_FILE1_EXT_PATH); |
| FCFile2 = addFileToProject(FCIProject, C_FILE2_PROJ_NAME, C_FILE2_EXT_PATH); |
| |
| //Commit files to repository |
| List<IResource> resources = new ArrayList<IResource>(); |
| resources.add(FCFile1); |
| resources.add(FCFile2); |
| addFilesToRepository(resources); |
| commitFiles(FCIProject, FCRepository, "first C Commit"); |
| |
| //Update files (Modify File1, Remove File2, Add File 3, Add File4) |
| FCFile1 = changeContentOfFile(FCFile1, C_FILE1_EXT_MOD_PATH); |
| FCFile2.delete(true, null); |
| FCFile3 = addFileToProject(FCIProject, C_FILE3_PROJ_NAME, C_FILE3_EXT_PATH); |
| FCFile4 = addFileToProject(FCIProject, C_FILE4_PROJ_NAME, C_FILE4_EXT_PATH); |
| |
| //Commit modifications |
| resources.clear(); |
| resources.add(FCFile1); |
| resources.add(FCFile2); |
| resources.add(FCFile3); |
| resources.add(FCFile4); |
| addFilesToRepository(resources); |
| commitFiles(FCIProject, FCRepository, "second C Commit"); |
| |
| //Update files (Modify File4, Add File5, do not commit) |
| FCFile4 = changeContentOfFile(FCFile4, C_FILE4_EXT_MOD_PATH); |
| FCFile5 = addFileToProject(FCIProject, C_FILE5_PROJ_NAME, C_FILE5_EXT_PATH); |
| } |
| |
| private static void setupTextProject() throws CoreException, IOException, URISyntaxException { |
| //Create project |
| FTextIProject = createProject(UI_TEST_TEXT_PROJECT_NAME); |
| |
| //Create repository |
| FTextRepository = createRepository(FTextIProject); |
| FTextWorkdirPrefix = getWorkDir(FTextRepository); |
| |
| //Connect main project with repository |
| connectProjectWithRepo(FTextIProject, FTextRepository); |
| |
| //Add files to project |
| FTextFile1 = addFileToProject(FTextIProject, TEXT_FILE1_PROJ_NAME, TEXT_FILE1_EXT_PATH); |
| FTextFile2 = addFileToProject(FTextIProject, TEXT_FILE2_PROJ_NAME, TEXT_FILE2_EXT_PATH); |
| |
| //Commit files to repository |
| List<IResource> resources = new ArrayList<IResource>(); |
| resources.add(FTextFile1); |
| resources.add(FTextFile2); |
| addFilesToRepository(resources); |
| commitFiles(FTextIProject, FTextRepository, "first Text Commit"); |
| |
| //Update files (Modify File1, Remove File2, Add File 3, Add File4) |
| FTextFile1 = changeContentOfFile(FTextFile1, TEXT_FILE1_EXT_MOD_PATH); |
| FTextFile2.delete(true, null); |
| FTextFile3 = addFileToProject(FTextIProject, TEXT_FILE3_PROJ_NAME, TEXT_FILE3_EXT_PATH); |
| FTextFile4 = addFileToProject(FTextIProject, TEXT_FILE4_PROJ_NAME, TEXT_FILE4_EXT_PATH); |
| |
| //Commit modifications |
| resources.clear(); |
| resources.add(FTextFile1); |
| resources.add(FTextFile2); |
| resources.add(FTextFile3); |
| resources.add(FTextFile4); |
| addFilesToRepository(resources); |
| commitFiles(FTextIProject, FTextRepository, "second Text Commit"); |
| |
| //Update files (Modify File4, Add File5, do not commit) |
| FTextFile4 = changeContentOfFile(FTextFile4, TEXT_FILE4_EXT_MOD_PATH); |
| FTextFile5 = addFileToProject(FTextIProject, TEXT_FILE5_PROJ_NAME, TEXT_FILE5_EXT_PATH); |
| } |
| |
| private static IProject createProject(String aProjectName) throws CoreException, IOException { |
| TestUtils.waitForJobs(); |
| IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); |
| IProject project = root.getProject(aProjectName); |
| project.create(null); |
| project.open(null); |
| return project; |
| } |
| |
| private static Repository createRepository(IProject aProject) throws CoreException, IOException { |
| TestUtils.waitForJobs(); |
| File gitDir = new File(aProject.getLocation().toOSString(), Constants.DOT_GIT); |
| Repository repository = new FileRepository(gitDir); |
| try { |
| repository.create(); |
| Config storedConfig = repository.getConfig(); |
| storedConfig.setEnum("core", null, "autocrlf", AutoCRLF.FALSE); |
| |
| } catch (IllegalStateException e) { |
| //Jusy go on |
| } |
| return repository; |
| } |
| |
| private static String getWorkDir(Repository aRepository) throws CoreException, IOException { |
| String workDir; |
| try { |
| workDir = aRepository.getWorkTree().getCanonicalPath(); |
| } catch (IOException err) { |
| workDir = aRepository.getWorkTree().getAbsolutePath(); |
| } |
| workDir = workDir.replace('\\', '/'); |
| if (!workDir.endsWith("/")) { |
| workDir += "/"; //$NON-NLS-1$ |
| } |
| return workDir; |
| } |
| |
| private static void connectProjectWithRepo(IProject aProject, Repository aRepository) throws CoreException, |
| IOException { |
| ConnectProviderOperation op = new ConnectProviderOperation(aProject, aRepository.getDirectory()); |
| op.execute(null); |
| } |
| |
| private static IJavaProject setProjectAsJava(IProject aProject) throws CoreException, IOException { |
| IJavaProject javaProject = JavaCore.create(aProject); |
| |
| IFolder binFolder = aProject.getFolder("bin"); |
| binFolder.create(false, true, null); |
| |
| IProjectDescription description = aProject.getDescription(); |
| description.setNatureIds(new String[] { JavaCore.NATURE_ID }); |
| aProject.setDescription(description, null); |
| |
| javaProject.setRawClasspath(new IClasspathEntry[0], null); |
| IPath outputLocation = binFolder.getFullPath(); |
| javaProject.setOutputLocation(outputLocation, null); |
| |
| IClasspathEntry[] oldEntries = javaProject.getRawClasspath(); |
| IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1]; |
| System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length); |
| newEntries[oldEntries.length] = JavaRuntime.getDefaultJREContainerEntry(); |
| javaProject.setRawClasspath(newEntries, null); |
| return javaProject; |
| } |
| |
| private static IProject setProjectAsC(IProject aProject) throws CoreException, IOException { |
| IProjectDescription description = aProject.getDescription(); |
| description.setNatureIds(new String[] { CProjectNature.C_NATURE_ID }); |
| aProject.setDescription(description, null); |
| IProject cProject = CCorePlugin.getDefault().createCDTProject(description, aProject, null); |
| IFolder binFolder = aProject.getFolder("bin"); |
| binFolder.create(false, true, null); |
| return cProject; |
| } |
| |
| private static IFile addFileToProject(IProject aProject, String aProjFilepath, String aExtFilePath) |
| throws IOException, CoreException, URISyntaxException { |
| URL location = FileLocator.find(Platform.getBundle(R4EUITestPlugin.PLUGIN_ID), new Path(aExtFilePath), null); |
| File extFile = new File(FileLocator.toFileURL(location).toURI()); |
| FileInputStream content = new FileInputStream(extFile); |
| |
| IPath filePath = new Path(aProjFilepath); |
| IFolder folder = null; |
| for (int i = 0; i < filePath.segmentCount() - 1; i++) { |
| if (folder == null) { |
| folder = aProject.getFolder(filePath.segment(i)); |
| } else { |
| folder = folder.getFolder(filePath.segment(i)); |
| } |
| if (!folder.exists()) { |
| folder.create(false, true, null); |
| } |
| } |
| IFile file = aProject.getFile(filePath); |
| file.create(content, true, null); |
| content.close(); |
| return file; |
| } |
| |
| public static IFile changeContentOfFile(IFile file, String aNewContentsFilePath) throws CoreException, IOException, |
| URISyntaxException { |
| URL location = FileLocator.find(Platform.getBundle(R4EUITestPlugin.PLUGIN_ID), new Path(aNewContentsFilePath), |
| null); |
| File extFile = new File(FileLocator.toFileURL(location).toURI()); |
| FileInputStream newContent = new FileInputStream(extFile); |
| file.setContents(newContent, 0, null); |
| newContent.close(); |
| return file; |
| } |
| |
| public static void addFilesToRepository(List<IResource> aResources) throws CoreException { |
| new AddToIndexOperation(aResources).execute(null); |
| } |
| |
| public static void commitFiles(IProject aProject, Repository aRepository, String aCommitMsg) throws CoreException { |
| CommitOperation commitOperation = new CommitOperation(null, null, null, TestUtils.AUTHOR, TestUtils.COMMITTER, |
| aCommitMsg); |
| commitOperation.setCommitAll(true); |
| commitOperation.setRepository(aRepository); |
| commitOperation.execute(null); |
| aProject.refreshLocal(IResource.DEPTH_INFINITE, null); |
| } |
| |
| public static void commitAmendFiles(IProject aProject, Repository aRepository, String aCommitMsg, |
| Collection<String> acommitFileList) throws CoreException { |
| CommitOperation commitOperation = new CommitOperation(null, acommitFileList, null, TestUtils.AUTHOR, |
| TestUtils.COMMITTER, aCommitMsg); |
| commitOperation.setAmending(true); |
| commitOperation.setRepository(aRepository); |
| commitOperation.execute(null); |
| aProject.refreshLocal(IResource.DEPTH_INFINITE, null); |
| } |
| |
| private static void setupSharedFolder() { |
| String dir = System.getProperty("java.io.tmpdir"); |
| if (!dir.endsWith(File.separator)) { |
| dir += File.separator; |
| } |
| dir = dir + "R4ETest"; |
| FSharedFolder = dir; |
| } |
| |
| public static void startNavigatorView() { |
| waitForJobs(); |
| Display.getDefault().syncExec(new Runnable() { |
| public void run() { |
| try { |
| //First make sure the welcome view is removed |
| IViewPart welcomeView = PlatformUI.getWorkbench() |
| .getActiveWorkbenchWindow() |
| .getActivePage() |
| .findView("org.eclipse.ui.internal.introview"); //$NON-NLS-1$ |
| if (welcomeView != null) { |
| PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(welcomeView); |
| } |
| |
| FTestNavigatorView = (ReviewNavigatorView) PlatformUI.getWorkbench() |
| .getActiveWorkbenchWindow() |
| .getActivePage() |
| .showView(R4E_NAVIGATOR_VIEW_NAME); |
| } catch (PartInitException e) { |
| e.printStackTrace(); |
| } |
| } |
| }); |
| } |
| |
| public static void cleanupTestEnvironment() throws CoreException, IOException { |
| cleanupSharedFolder(FSharedFolder + File.separator); |
| cleanupProject(FTextIProject, FTextRepository); |
| cleanupProject(FCIProject, FCRepository); |
| cleanupProject(FJavaIProject, FJavaRepository); |
| } |
| |
| public static void stopNavigatorView() { |
| waitForJobs(); |
| Display.getDefault().syncExec(new Runnable() { |
| public void run() { |
| PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(FTestNavigatorView); |
| } |
| }); |
| } |
| |
| private static void cleanupProject(IProject aProject, Repository aRepository) throws CoreException, IOException { |
| //Disconnect project from repository |
| disconnectProject(aProject); |
| |
| //Delete Repository |
| deleteRepository(aRepository); |
| |
| //Delete project |
| deleteProject(aProject); |
| } |
| |
| private static void disconnectProject(IProject aProject) throws CoreException, IOException { |
| Collection<IProject> projects = Collections.singleton(aProject.getProject()); |
| DisconnectProviderOperation disconnect = new DisconnectProviderOperation(projects); |
| disconnect.execute(null); |
| } |
| |
| private static void deleteRepository(Repository aRepository) throws CoreException, IOException { |
| Repository repository = aRepository; |
| repository.close(); |
| repository = null; |
| } |
| |
| private static void deleteProject(IProject aProject) throws CoreException, IOException { |
| if (aProject.exists()) { |
| aProject.refreshLocal(IResource.DEPTH_INFINITE, null); |
| aProject.close(null); |
| aProject.delete(true, true, null); |
| } else { |
| File f = new File(aProject.getLocation().toOSString()); |
| if (f.exists()) { |
| FileUtils.delete(f, FileUtils.RECURSIVE | FileUtils.RETRY); |
| } |
| } |
| } |
| |
| private static void cleanupSharedFolder(String aFolder) throws IOException { |
| if (null != aFolder) { |
| File f = new File(aFolder); |
| if (f.exists()) { |
| FileUtils.delete(f, FileUtils.RECURSIVE | FileUtils.RETRY); |
| } |
| } |
| } |
| |
| public static void waitForJobs() { |
| //NOTE: In order to the above to work, no backgroup jobs (such as Usage Data Collector) should be running. |
| //otherwise we will be blocked forever here. An alternative solution is to join our thread to the |
| //executing job family, but that might make the tests unreliable because we cannot control |
| //scheduling of the jos which might cause livelocks |
| while (!Job.getJobManager().isIdle()) { |
| delay(1000); |
| } |
| /* |
| try { |
| Job.getJobManager().join(R4EUIConstants.R4E_UI_JOB_FAMILY, null); |
| } catch (OperationCanceledException e) { |
| R4EUITestPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" + e.getMessage() + ")"); |
| } catch (InterruptedException e) { |
| R4EUITestPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" + e.getMessage() + ")"); |
| } |
| */ |
| } |
| |
| public static void delay(long aWaitTimeMillis) { |
| Display display = Display.getCurrent(); |
| |
| //If this is the UI thread, process input |
| if (null != display) { |
| long endTimeMillis = System.currentTimeMillis() + aWaitTimeMillis; |
| while (System.currentTimeMillis() < endTimeMillis) { |
| if (!display.readAndDispatch()) { |
| display.sleep(); |
| } |
| } |
| display.update(); |
| } else { |
| //Just sleep |
| try { |
| Thread.sleep(aWaitTimeMillis); |
| } catch (InterruptedException e) { |
| //ignore |
| } |
| } |
| } |
| |
| /** |
| * Get the initial input from the R4E model and populate the UI model with it |
| * |
| * @return the root element of the UI model |
| */ |
| public static IR4EUIModelElement getInitalInput() { |
| R4EUIModelController.loadModel(); |
| final IR4EUIModelElement rootTreeNode = R4EUIModelController.getRootElement(); |
| rootTreeNode.getChildren(); |
| return rootTreeNode; |
| } |
| |
| public static R4EUIRootElement getRootElement() { |
| return FRootElement; |
| } |
| |
| /** |
| * Method setDefaultUser |
| */ |
| public static void setDefaultUser() { |
| R4EUITestMain.getInstance().getPreferencesProxy().setUser(TestConstants.DEFAULT_USER_ID); |
| R4EUITestMain.getInstance().getPreferencesProxy().setEmail(TestConstants.DEFAULT_USER_EMAIL); |
| Assert.assertEquals(TestConstants.DEFAULT_USER_ID, R4EUITestMain.getInstance().getPreferencesProxy().getUser()); |
| Assert.assertEquals(TestConstants.DEFAULT_USER_EMAIL, R4EUITestMain.getInstance() |
| .getPreferencesProxy() |
| .getEmail()); |
| } |
| } |