1 /******************************************************************************* 2 * Copyright (c) 2007, 2013 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.debug.tests.viewer.model; 15 16 import static org.junit.Assert.assertArrayEquals; 17 import static org.junit.Assert.assertEquals; 18 import static org.junit.Assert.assertFalse; 19 import static org.junit.Assert.assertTrue; 20 import static org.junit.Assert.fail; 21 22 import org.eclipse.debug.internal.ui.viewers.model.FilterTransform; 23 import org.eclipse.debug.tests.AbstractDebugTest; 24 import org.eclipse.jface.viewers.TreePath; 25 import org.junit.Before; 26 import org.junit.Test; 27 28 /** 29 * Tests the virtual viewer's filter transform 30 * @since 3.3 31 */ 32 public class FilterTransformTests extends AbstractDebugTest { 33 34 public Object root; 35 public Object element0; 36 public Object element1; 37 public Object element2; 38 public Object element3; 39 public Object element4; 40 public Object element5; 41 public Object element6; 42 public Object element7; 43 44 public FilterTransform transform; 45 46 /** 47 * Builds a filter transform. Model has 8 elements, 48 * and elements 0, 2, 3, 6, 7 are filtered. Elements 49 * 1, 4, 5 are visible. 50 */ 51 @Override 52 @Before setUp()53 public void setUp() throws Exception { 54 super.setUp(); 55 transform = new FilterTransform(); 56 root = new Object(); 57 element0 = new Object(); 58 element1 = new Object(); 59 element2 = new Object(); 60 element3 = new Object(); 61 element4 = new Object(); 62 element5 = new Object(); 63 element6 = new Object(); 64 element7 = new Object(); 65 assertTrue(transform.addFilteredIndex(TreePath.EMPTY, 0, element0)); 66 assertTrue(transform.addFilteredIndex(TreePath.EMPTY, 2, element2)); 67 assertTrue(transform.addFilteredIndex(TreePath.EMPTY, 3, element3)); 68 assertTrue(transform.addFilteredIndex(TreePath.EMPTY, 6, element6)); 69 assertTrue(transform.addFilteredIndex(TreePath.EMPTY, 7, element7)); 70 } 71 72 @Test testRemoveMiddleElementFromFilters()73 public void testRemoveMiddleElementFromFilters() { 74 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 3)); //$NON-NLS-1$ 75 transform.removeElementFromFilters(TreePath.EMPTY, element3); 76 assertFalse("Element should be unfiltered", transform.isFiltered(TreePath.EMPTY, 3)); //$NON-NLS-1$ 77 assertArrayEquals("Wrong filter state", transform.getFilteredChildren(TreePath.EMPTY), new int[] { //$NON-NLS-1$ 78 0, 2, 5, 6 }); 79 } 80 81 @Test testRemoveFirstElementFromFilters()82 public void testRemoveFirstElementFromFilters() { 83 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 0)); //$NON-NLS-1$ 84 transform.removeElementFromFilters(TreePath.EMPTY, element0); 85 assertFalse("Element should be unfiltered", transform.isFiltered(TreePath.EMPTY, 0)); //$NON-NLS-1$ 86 assertArrayEquals("Wrong filter state", transform.getFilteredChildren(TreePath.EMPTY), new int[] { //$NON-NLS-1$ 87 1, 2, 5, 6 }); 88 } 89 90 @Test testRemoveLastFromFilters()91 public void testRemoveLastFromFilters() { 92 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 7)); //$NON-NLS-1$ 93 transform.removeElementFromFilters(TreePath.EMPTY, element7); 94 assertFalse("Element should be unfiltered", transform.isFiltered(TreePath.EMPTY, 7)); //$NON-NLS-1$ 95 assertArrayEquals("Wrong filter state", transform.getFilteredChildren(TreePath.EMPTY), new int[] { //$NON-NLS-1$ 96 0, 2, 3, 6 }); 97 } 98 99 @Test testClearMiddleElementFromFilters()100 public void testClearMiddleElementFromFilters() { 101 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 3)); //$NON-NLS-1$ 102 transform.clear(TreePath.EMPTY, 3); 103 assertFalse("Element should be unfiltered", transform.isFiltered(TreePath.EMPTY, 3)); //$NON-NLS-1$ 104 assertArrayEquals("Wrong filter state", transform.getFilteredChildren(TreePath.EMPTY), new int[] { //$NON-NLS-1$ 105 0, 2, 6, 7 }); 106 } 107 108 @Test testClearFirstElementFromFilters()109 public void testClearFirstElementFromFilters() { 110 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 0)); //$NON-NLS-1$ 111 transform.clear(TreePath.EMPTY, 0); 112 assertFalse("Element should be unfiltered", transform.isFiltered(TreePath.EMPTY, 0)); //$NON-NLS-1$ 113 assertArrayEquals("Wrong filter state", transform.getFilteredChildren(TreePath.EMPTY), new int[] { //$NON-NLS-1$ 114 2, 3, 6, 7 }); 115 } 116 117 @Test testClearLastFromFilters()118 public void testClearLastFromFilters() { 119 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 7)); //$NON-NLS-1$ 120 transform.clear(TreePath.EMPTY, 7); 121 assertFalse("Element should be unfiltered", transform.isFiltered(TreePath.EMPTY, 7)); //$NON-NLS-1$ 122 assertArrayEquals("Wrong filter state", transform.getFilteredChildren(TreePath.EMPTY), new int[] { //$NON-NLS-1$ 123 0, 2, 3, 6 }); 124 } 125 126 @Test testViewToModelCount()127 public void testViewToModelCount() { 128 assertEquals("Wrong model count", 8, transform.viewToModelCount(TreePath.EMPTY, 3)); //$NON-NLS-1$ 129 } 130 131 @Test testViewToModelIndex()132 public void testViewToModelIndex() { 133 assertEquals("Wrong model index", 1, transform.viewToModelIndex(TreePath.EMPTY, 0)); //$NON-NLS-1$ 134 assertEquals("Wrong model index", 4, transform.viewToModelIndex(TreePath.EMPTY, 1)); //$NON-NLS-1$ 135 assertEquals("Wrong model index", 5, transform.viewToModelIndex(TreePath.EMPTY, 2)); //$NON-NLS-1$ 136 } 137 138 @Test testAddAlreadyFiltered()139 public void testAddAlreadyFiltered() { 140 assertTrue("Element should be filtered", transform.isFiltered(TreePath.EMPTY, 0)); //$NON-NLS-1$ 141 boolean added = transform.addFilteredIndex(TreePath.EMPTY, 0, element0); 142 assertFalse("Filter should not be added - should already have been there", added); //$NON-NLS-1$ 143 } 144 145 146 /** 147 * Test to make sure that setModelChildCount() updates internal arrays 148 * appropriately. See bug 200325. 149 */ 150 @Test testRegression200325()151 public void testRegression200325() { 152 transform.setModelChildCount(TreePath.EMPTY, 2); 153 try { 154 transform.addFilteredIndex(TreePath.EMPTY, 3, new Object()); 155 } catch (ArrayIndexOutOfBoundsException e) { 156 fail("AIOOBE Exception should not be thrown here, " + //$NON-NLS-1$ 157 "setModelChildCount should leave " + //$NON-NLS-1$ 158 "FilterTransform$Node in a consistent state"); //$NON-NLS-1$ 159 } 160 } 161 } 162