/*******************************************************************************
 * Copyright (c) 2004, 2005 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 org.eclipse.core.resources.IFile;
import org.eclipse.test.performance.Dimension;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.ide.IDE;

/**
 * @since 3.1
 */
public class OpenMultipleEditorTest extends BasicPerformanceTest {

    private String extension;
    private boolean closeAll;

    /**
     * @param testName
     */
    public OpenMultipleEditorTest(String extension, boolean closeAll, int tagging) {
        super ("testOpenMultipleEditors:" + extension + (closeAll ? "[closeAll]" : "[closeEach]"), tagging);
        this.extension = extension;        
        this.closeAll = closeAll;
    }
    
    protected void runTest() throws Throwable {
		IWorkbenchWindow window = openTestWindow(UIPerformanceTestSetup.PERSPECTIVE1);
		IWorkbenchPage activePage = window.getActivePage();
        
        tagIfNecessary("UI - Open Multiple Editors",Dimension.ELAPSED_PROCESS);
        
        startMeasuring();      
                
        for (int i = 0; i < 100; i++) {
            IFile file = getProject().getFile(i + "." + extension);
            IEditorPart part = IDE.openEditor(activePage, file, true);
            processEvents();
        }
        if (closeAll) {
            activePage.closeAllEditors(false);
        }
        else {
            IEditorPart [] parts = activePage.getEditors();
            for (int i = 0; i < parts.length; i++) {
                activePage.closeEditor(parts[i], false);
            }
        }
        stopMeasuring();
        commitMeasurements();
        assertPerformance();        
    }

}
