/** * Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite * contributors * * This file is part of EvoSuite. * * EvoSuite is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3.0 of the License, or * (at your option) any later version. * * EvoSuite is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>. */ /** * */ package org.evosuite.eclipse.popup.actions; import java.io.File; import java.io.FilenameFilter; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.evosuite.Properties; /** * @author Gordon Fraser * */ public class GenerationResult extends Dialog { protected Object result; protected Shell shlEvosuiteResult; protected IPath location; protected IResource targetResource; /** * Create the dialog. * * @param parent * @param style */ public GenerationResult(Shell parent, int style, IPath location, final IResource target) { super(parent, style); this.location = location; this.targetResource = target; setText("EvoSuite Result"); } /** * Open the dialog. * * @return the result */ public Object open() { createContents(); shlEvosuiteResult.open(); shlEvosuiteResult.layout(); Display display = getParent().getDisplay(); while (!shlEvosuiteResult.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } return result; } /** * Create contents of the dialog. */ private void createContents() { shlEvosuiteResult = new Shell(getParent(), SWT.SHELL_TRIM); shlEvosuiteResult.setMinimumSize(new Point(320, 160)); shlEvosuiteResult.setSize(600, 611); shlEvosuiteResult.setText("EvoSuite Result"); Browser browser = new Browser(shlEvosuiteResult, SWT.NONE); browser.setBounds(0, 0, 600, 559); System.out.println("Directory: " + location.toOSString() + File.separator + "evosuite-report/html"); File dir = new File(location.toOSString() + File.separator + "evosuite-report" + File.separator + "html"); String target = null; int max = -1; for (File report : dir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { return filename.endsWith(".html") && filename.startsWith("report-" + Properties.TARGET_CLASS); } })) { String filename = report.getName(); String[] parts = filename.split("-"); if (parts.length == 3) { int x = Integer.parseInt(parts[2].replace(".html", "")); if (x > max) max = x; } } if (max >= 0) { target = location + "/evosuite-report/html/report-" + Properties.TARGET_CLASS + "-" + max + ".html"; } else { target = location + "/evosuite-report/report-generation.html"; } System.out.println("Opening " + target); browser.setUrl(target); browser.update(); Button btnNewButton = new Button(shlEvosuiteResult, SWT.NONE); btnNewButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { showFile(targetResource.getLocation()); shlEvosuiteResult.close(); } }); btnNewButton.setBounds(10, 561, 110, 28); btnNewButton.setText("Edit " + targetResource.getName()); Button btnNewButton_1 = new Button(shlEvosuiteResult, SWT.NONE); btnNewButton_1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // Open evosuite-tests/.../Test<Target> shlEvosuiteResult.close(); IWorkbench wb = PlatformUI.getWorkbench(); IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); IWorkbenchPage page = win.getActivePage(); try { String subPath = Properties.TARGET_CLASS.replace(".", File.separator); int pos = subPath.lastIndexOf(File.separator); if (pos >= 0) { IPath targetFile = location.append(File.separator + "evosuite-tests" + File.separator + subPath + Properties.JUNIT_SUFFIX // + subPath.substring(0, pos) + "/Test" // + subPath.substring(pos + 1) + ".java"); System.out.println("target: " + targetFile); IDE.openEditor(page, ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(targetFile)); } else { IPath targetFile = location.append(File.separator + "evosuite-tests" + File.separator + subPath + Properties.JUNIT_SUFFIX //IPath targetFile = location.append("/evosuite-tests/" + "/Test" // + subPath + ".java"); System.out.println("target: " + targetFile); IDE.openEditor(page, ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(targetFile)); } } catch (PartInitException e2) { //Put your exception handler here if you wish to. System.out.println("Error: " + e2); } } }); btnNewButton_1.setBounds(118, 561, 94, 28); btnNewButton_1.setText("Edit Tests"); Button btnNewButton2 = new Button(shlEvosuiteResult, SWT.NONE); btnNewButton2.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { shlEvosuiteResult.close(); } }); btnNewButton2.setBounds(228, 561, 110, 28); btnNewButton2.setText("Close"); } private void showFile(IPath targetFile) { IWorkbench wb = PlatformUI.getWorkbench(); IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); IWorkbenchPage page = win.getActivePage(); try { IDE.openEditor(page, ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(targetFile)); } catch (PartInitException e2) { //Put your exception handler here if you wish to. System.out.println("Error: " + e2); } } }