| /******************************************************************************* |
| * Copyright (c) 2005, 2008 IBM Corporation and others. |
| * 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 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.tests.performance; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.net.URL; |
| import java.util.zip.ZipEntry; |
| import java.util.zip.ZipInputStream; |
| import junit.framework.Assert; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.test.performance.PerformanceTestCase; |
| import org.eclipse.ui.IViewPart; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.views.navigator.ResourceNavigator; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * This class/test was originally written for WTP bug 106158, and adapted to a |
| * generic "platform" test case, since some of the problem was due to bug |
| * 107121 |
| * |
| * Thanks for Jeffrey Liu (jeffliu@ca.ibm.com) who wrote the test for WTP. |
| * |
| * And, thanks to Eric Glass <ericglass@maximus.com> for opening bug 106158 |
| * (100% CPU for over 3 minutes opening a directory in the Navigator view with |
| * over 2000 HTML files) https://bugs.eclipse.org/bugs/show_bug.cgi?id=106158 |
| * and for providing 2500 "generic" HTML files for the original test case in |
| * WTP. |
| * |
| * modified by David Williams for platform level test that does not depend on |
| * WTP or, for that matter, any meaningful content type. The content type |
| * assumed there is designed simply to "take a while" to complete, if asked |
| * for its properties. |
| * |
| * Note, since this test companion "ContentDescriberForTestsOnly", simply uses |
| * "sleep" to simulate computations, it only effects Elapsed Time (not CPU |
| * Time). |
| * |
| */ |
| public class OpenNavigatorFolderTest extends PerformanceTestCase { |
| /* |
| * performance testcase for bug 106158 |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=106158 |
| */ |
| public void testOpenNavigatorFolder() { |
| IProject project = createProject("testViewAndContentTypeProject"); |
| Bundle bundle = Platform.getBundle("org.eclipse.ui.tests.performance"); |
| URL url = bundle.getEntry("data/testContentType.zip"); |
| ZipInputStream zis = null; |
| try { |
| zis = new ZipInputStream(url.openStream()); |
| ZipEntry entry = zis.getNextEntry(); |
| while (entry != null) { |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| try { |
| byte[] b = new byte[2048]; |
| int read = zis.read(b); |
| while (read != -1) { |
| baos.write(b, 0, read); |
| read = zis.read(b); |
| } |
| } |
| catch (IOException e) { |
| Assert.fail(e.getMessage()); |
| } |
| finally { |
| try { |
| baos.close(); |
| } |
| catch (IOException e) { |
| Assert.fail(e.getMessage()); |
| } |
| } |
| IFile file = project.getFile(entry.getName()); |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| try { |
| if (!file.exists()) |
| file.create(bais, true, new NullProgressMonitor()); |
| else |
| file.setContents(bais, true, false, new NullProgressMonitor()); |
| } |
| catch (CoreException e) { |
| Assert.fail(e.getMessage()); |
| } |
| finally { |
| try { |
| bais.close(); |
| } |
| catch (IOException e) { |
| Assert.fail(e.getMessage()); |
| } |
| } |
| entry = zis.getNextEntry(); |
| } |
| } |
| catch (IOException e) { |
| Assert.fail(e.getMessage()); |
| } |
| finally { |
| try { |
| if (zis != null) { |
| zis.close(); |
| } |
| } |
| catch (IOException e) { |
| Assert.fail(e.getMessage()); |
| } |
| } |
| startMeasuring(); |
| IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); |
| IViewPart view = null; |
| try { |
| view = activePage.showView("org.eclipse.ui.views.ResourceNavigator"); |
| } |
| catch (PartInitException e) { |
| Assert.fail(e.getMessage()); |
| } |
| ResourceNavigator navigatorView = null; |
| try { |
| navigatorView = (ResourceNavigator) view; |
| } |
| catch (ClassCastException e) { |
| Assert.fail(e.getMessage()); |
| } |
| navigatorView.getTreeViewer().expandAll(); |
| stopMeasuring(); |
| commitMeasurements(); |
| assertPerformance(); |
| } |
| |
| private IProject createProject(String name) { |
| IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name); |
| if (!project.exists()) { |
| try { |
| project.create(new NullProgressMonitor()); |
| project.open(new NullProgressMonitor()); |
| } |
| catch (CoreException e) { |
| Assert.fail(e.getMessage()); |
| } |
| } |
| return project; |
| } |
| } |