/******************************************************************************* * Copyright (c) 2007, 2015 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.debug.tests.viewer.model; import junit.framework.TestCase; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.viewers.model.ChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer; import org.eclipse.debug.internal.ui.viewers.model.ILabelUpdateListener; import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IStateUpdateListener; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener; import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerLabel; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Display; /** * Tests coalescing of children update requests. * * @since 3.3 */ public class ChildrenUpdateTests extends TestCase { class BogusModelContentProvider extends TreeModelContentProvider { /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getViewer() */ @Override protected IInternalTreeModelViewer getViewer() { return new IInternalTreeModelViewer(){ @Override public void setSelection(ISelection selection) {} @Override public void removeSelectionChangedListener(ISelectionChangedListener listener) {} @Override public void addSelectionChangedListener(ISelectionChangedListener listener) {} @Override public void updateViewer(IModelDelta delta) {} @Override public void setSelection(ISelection selection, boolean reveal, boolean force) {} @Override public void clearSelectionQuiet() {} @Override public boolean trySelection(ISelection selection, boolean reveal, boolean force) { return true; } @Override public void setInput(Object object) {} @Override public void setAutoExpandLevel(int level) {} @Override public boolean saveElementState(TreePath path, ModelDelta delta, int flags) { return true; } @Override public void removeStateUpdateListener(IStateUpdateListener listener) {} @Override public void removeViewerUpdateListener(IViewerUpdateListener listener) {} @Override public void removeModelChangedListener(IModelChangedListener listener) {} @Override public void removeLabelUpdateListener(ILabelUpdateListener listener) {} @Override public void addViewerUpdateListener(IViewerUpdateListener listener) {} @Override public void addStateUpdateListener(IStateUpdateListener listener) {} @Override public void addModelChangedListener(IModelChangedListener listener) {} @Override public void addLabelUpdateListener(ILabelUpdateListener listener) {} @Override public void update(Object element) {} @Override public void setHasChildren(Object elementOrTreePath, boolean hasChildren) {} @Override public void setExpandedState(Object elementOrTreePath, boolean expanded) {} @Override public void setChildCount(Object elementOrTreePath, int count) {} @Override public void reveal(TreePath path, int index) {} @Override public void replace(Object parentOrTreePath, int index, Object element) {} @Override public void remove(Object parentOrTreePath, int index) {} @Override public void remove(Object elementOrTreePath) {} @Override public void refresh() {} @Override public void refresh(Object element) {} @Override public ISelection getSelection() { return null; } @Override public IPresentationContext getPresentationContext() { return null; } @Override public Object getInput() { return null; } @Override public ViewerLabel getElementLabel(TreePath path, String columnId) { return null; } @Override public Display getDisplay() { return DebugUIPlugin.getStandardDisplay(); } @Override public int getAutoExpandLevel() { return 0; } @Override public boolean overrideSelection(ISelection current, ISelection candidate) { return false; } @Override public void insert(Object parentOrTreePath, Object element, int position) { } @Override public TreePath getTopElementPath() { return null; } @Override public ViewerFilter[] getFilters() { return null; } @Override public void addFilter(ViewerFilter filter) {} @Override public void setFilters(ViewerFilter... filters) { } @Override public boolean getExpandedState(Object elementOrTreePath) { return false; } @Override public Object getChildElement(TreePath path, int index) { return null; } @Override public boolean getHasChildren(Object elementOrTreePath) { return false; } @Override public int getChildCount(TreePath path) { return 0; } @Override public int findElementIndex(TreePath parentPath, Object element) { return 0; } @Override public void expandToLevel(Object elementOrTreePath, int level) { } @Override public void autoExpand(TreePath elementPath) { } @Override public boolean getElementChildrenRealized(TreePath parentPath) { return false; } @Override public boolean getElementChecked(TreePath path) { return false; } @Override public boolean getElementGrayed(TreePath path) { return false; } @Override public void setElementChecked(TreePath path, boolean checked, boolean grayed) { } @Override public TreePath[] getElementPaths(Object element) { return null; } @Override public void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images, FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds) { } @Override public String[] getVisibleColumns() { return null; } }; } } /** * @param name */ public ChildrenUpdateTests(String name) { super(name); } protected TreeModelContentProvider getContentProvider() { return new BogusModelContentProvider(); } /** * Tests coalescing of requests */ public void testCoalesce () { Object element = new Object(); TreeModelContentProvider cp = getContentProvider(); ChildrenUpdate update1 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 1, null); ChildrenUpdate update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 2, null); assertTrue("Should coalesce", update1.coalesce(update2)); //$NON-NLS-1$ assertEquals("Wrong offset", 1, update1.getOffset()); //$NON-NLS-1$ assertEquals("Wrong length", 2, update1.getLength()); //$NON-NLS-1$ update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 3, null); assertTrue("Should coalesce", update1.coalesce(update2)); //$NON-NLS-1$ assertEquals("Wrong offset", 1, update1.getOffset()); //$NON-NLS-1$ assertEquals("Wrong length", 3, update1.getLength()); //$NON-NLS-1$ update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 2, null); assertTrue("Should coalesce", update1.coalesce(update2)); //$NON-NLS-1$ assertEquals("Wrong offset", 1, update1.getOffset()); //$NON-NLS-1$ assertEquals("Wrong length", 3, update1.getLength()); //$NON-NLS-1$ update2 = new ChildrenUpdate(cp, element, TreePath.EMPTY, element, 5, null); assertFalse("Should not coalesce", update1.coalesce(update2)); //$NON-NLS-1$ assertEquals("Wrong offset", 1, update1.getOffset()); //$NON-NLS-1$ assertEquals("Wrong length", 3, update1.getLength()); //$NON-NLS-1$ } }