/******************************************************************************* * Copyright (c) 2008, 2009 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 * EclipseSource - ongoing development *******************************************************************************/ package org.eclipse.equinox.p2.tests.core; import org.eclipse.equinox.p2.query.MatchQuery; import java.util.*; import org.eclipse.equinox.p2.query.*; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; /** * Tests for {@link Collector}. */ public class CollectorTest extends AbstractProvisioningTest { public void testAccept() { Collector collector = new Collector(); String value = "value"; collector.accept(value); Object[] result = collector.toArray(Object.class); assertEquals("1.0", 1, result.length); assertEquals("1.1", value, result[0]); //adding a second copy of the same object is rejected collector.accept(new String(value)); result = collector.toArray(Object.class); assertEquals("1.0", 1, result.length); assertEquals("1.1", value, result[0]); } public void testIsEmpty() { Collector collector = new Collector(); assertEquals("1.0", true, collector.isEmpty()); collector.accept("value"); assertEquals("1.0", false, collector.isEmpty()); } /** * This tests the query method on the collector. */ public void testCompositeCollectors() { String[] s = new String[] {"A", "B", "C", "D", "E", "F", "G", "1", "2", "3", "4", "5", "6", "7"}; List list = Arrays.asList(s); IQuery numeric = new MatchQuery() { public boolean isMatch(Object candidate) { if (((String) candidate).compareTo("0") > 0 && ((String) candidate).compareTo("8") < 0) { return true; } return false; } }; IQuery fourOrFiveOrABC = new MatchQuery() { public boolean isMatch(Object candidate) { if (((String) candidate).equals("4") || ((String) candidate).equals("5") || ((String) candidate).equals("A") || ((String) candidate).equals("B") || ((String) candidate).equals("C")) { return true; } return false; } }; IQueryResult queryResult = numeric.perform(list.iterator()); assertEquals("1.0", 7, queryResultSize(queryResult)); queryResult = queryResult.query(fourOrFiveOrABC, null); assertEquals("2.0", 2, queryResultSize(queryResult)); assertContains("2.1", queryResult, "4"); assertContains("2.2", queryResult, "5"); } public void testSameCollector() { String[] s = new String[] {"A", "B", "C", "D", "E", "F", "G", "1", "2", "3", "4", "5", "6", "7"}; List list = Arrays.asList(s); IQuery numeric = new MatchQuery() { public boolean isMatch(Object candidate) { if (((String) candidate).compareTo("0") > 0 && ((String) candidate).compareTo("8") < 0) { return true; } return false; } }; IQuery fourOrFiveOrABC = new MatchQuery() { public boolean isMatch(Object candidate) { if (((String) candidate).equals("4") || ((String) candidate).equals("5") || ((String) candidate).equals("A") || ((String) candidate).equals("B") || ((String) candidate).equals("C")) { return true; } return false; } }; Collector collector = new Collector(); collector.addAll(numeric.perform(list.iterator())); assertEquals("1.0", 7, collector.toUnmodifiableSet().size()); collector.addAll(collector.query(fourOrFiveOrABC, null)); Collection collection = collector.toUnmodifiableSet(); assertEquals("2.0", 7, collection.size()); } /** * This tests the query method on the collector. */ public void testEmptyCompositeCollectors() { String[] s = new String[] {"A", "B", "C", "D", "E", "F", "G", "1", "2", "3", "4", "5", "6", "7"}; List list = Arrays.asList(s); IQuery eightOrNine = new MatchQuery() { public boolean isMatch(Object candidate) { if (((String) candidate).compareTo("8") > 0 && ((String) candidate).compareTo("9") < 0) { return true; } return false; } }; IQuery fourOrFiveOrABC = new MatchQuery() { public boolean isMatch(Object candidate) { if (((String) candidate).equals("4") || ((String) candidate).equals("5") || ((String) candidate).equals("A") || ((String) candidate).equals("B") || ((String) candidate).equals("C")) { return true; } return false; } }; IQueryResult queryResult = eightOrNine.perform(list.iterator()); assertTrue("1.0", queryResult.isEmpty()); queryResult = queryResult.query(fourOrFiveOrABC, null); assertTrue("2.0", queryResult.isEmpty()); } public void testToCollection() { Collector collector = new Collector(); Collection result = collector.toUnmodifiableSet(); assertEquals("1.0", 0, result.size()); //collection should be immutable try { result.add("value"); fail("1.1"); } catch (RuntimeException e) { //expected } String value = "value"; collector.accept(value); result = collector.toUnmodifiableSet(); assertEquals("2.0", 1, result.size()); assertEquals("2.1", value, result.iterator().next()); //collection should be immutable try { result.clear(); fail("2.2"); } catch (RuntimeException e) { //expected } } }