org.eclipse.search.tests.filesearch.SearchResultPageTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.search.tests.filesearch.SearchResultPageTest.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 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.search.tests.filesearch;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Widget;

import org.eclipse.core.runtime.jobs.IJobManager;
import org.eclipse.core.runtime.jobs.Job;

import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;

import org.eclipse.search.internal.ui.text.FileSearchPage;
import org.eclipse.search.internal.ui.text.FileSearchQuery;
import org.eclipse.search.tests.SearchTestPlugin;
import org.eclipse.search.ui.ISearchResultViewPart;
import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.search.ui.text.AbstractTextSearchResult;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.search.ui.text.FileTextSearchScope;
import org.eclipse.search.ui.text.Match;

public class SearchResultPageTest extends TestCase {
    FileSearchQuery fQuery1;

    public SearchResultPageTest(String name) {
        super(name);
    }

    public static Test allTests() {
        return setUpTest(new TestSuite(SearchResultPageTest.class));
    }

    public static Test setUpTest(Test test) {
        return new JUnitSourceSetup(test);
    }

    public static Test suite() {
        return allTests();
    }

    protected void setUp() throws Exception {
        super.setUp();
        SearchTestPlugin.ensureWelcomePageClosed();
        String[] fileNamePatterns = { "*.java" };
        FileTextSearchScope scope = FileTextSearchScope.newWorkspaceScope(fileNamePatterns, false);

        fQuery1 = new FileSearchQuery("Test", false, true, scope);
    }

    public void atestBasicDisplay() throws Exception {
        NewSearchUI.runQueryInForeground(null, fQuery1);
        ISearchResultViewPart view = NewSearchUI.getSearchResultView();
        FileSearchPage page = (FileSearchPage) view.getActivePage();
        page.setLayout(AbstractTextSearchViewPage.FLAG_LAYOUT_TREE);
        checkViewerDisplay(page);
        page.setLayout(AbstractTextSearchViewPage.FLAG_LAYOUT_FLAT);
        checkViewerDisplay(page);
    }

    private void checkViewerDisplay(FileSearchPage page) {
        StructuredViewer viewer = page.getViewer();
        AbstractTextSearchResult result = (AbstractTextSearchResult) fQuery1.getSearchResult();
        // make sure all elements have items.
        if (viewer instanceof AbstractTreeViewer)
            ((AbstractTreeViewer) viewer).expandAll();
        Object[] elements = result.getElements();
        for (int i = 0; i < elements.length; i++) {
            // make sure all elements in the test result are present in the viewer and have the proper count displayed
            checkElementDisplay(viewer, result, elements[i]);
        }
    }

    public void atestRemoveTreeMatches() throws Exception {
        NewSearchUI.runQueryInForeground(null, fQuery1);
        ISearchResultViewPart view = NewSearchUI.getSearchResultView();
        FileSearchPage page = (FileSearchPage) view.getActivePage();
        page.setLayout(AbstractTextSearchViewPage.FLAG_LAYOUT_TREE);
        AbstractTreeViewer viewer = (AbstractTreeViewer) page.getViewer();
        AbstractTextSearchResult result = (AbstractTextSearchResult) fQuery1.getSearchResult();
        // make sure all elements have items.
        viewer.expandAll();
        Object[] elements = result.getElements();
        //page.setUpdateTracing(true);
        for (int i = 0; i < elements.length; i++) {
            Match[] matches = result.getMatches(elements[i]);
            viewer.reveal(elements[i]);
            for (int j = 0; j < matches.length; j++) {
                checkElementDisplay(viewer, result, elements[i]);
                result.removeMatch(matches[j]);
                consumeEvents(page);
            }
        }
        //page.setUpdateTracing(false);
    }

    private void consumeEvents(FileSearchPage page) {
        IJobManager manager = Job.getJobManager();
        while (manager.find(page).length > 0) {
            Display.getDefault().readAndDispatch();
        }
    }

    private void consumeEvents() {
        while (Display.getDefault().readAndDispatch()) {
        }
    }

    private void checkElementDisplay(StructuredViewer viewer, AbstractTextSearchResult result, Object element) {
        Widget widget = viewer.testFindItem(element);
        assertTrue(widget instanceof Item);
        Item item = (Item) widget;
        int itemCount = result.getMatchCount(element);
        assertTrue(itemCount > 0);
        if (itemCount > 1)
            assertTrue(item.getText().indexOf(String.valueOf(itemCount)) >= 0);
    }

    public void testTableNavigation() {
        NewSearchUI.runQueryInForeground(null, fQuery1);
        ISearchResultViewPart view = NewSearchUI.getSearchResultView();
        FileSearchPage page = (FileSearchPage) view.getActivePage();
        page.setLayout(AbstractTextSearchViewPage.FLAG_LAYOUT_FLAT);
        Table table = ((TableViewer) page.getViewer()).getTable();

        consumeEvents();

        // select the first element.
        table.setSelection(0);
        table.showSelection();

        consumeEvents();
        // back from first match, goto last
        page.gotoPreviousMatch();

        consumeEvents();

        assertEquals(1, table.getSelectionCount());
        assertEquals(table.getItemCount() - 1, table.getSelectionIndex());

        // and forward again, to the first match.
        page.gotoNextMatch();

        consumeEvents();
        assertEquals(1, table.getSelectionCount());
        assertEquals(0, table.getSelectionIndex());
    }
}