blob: edcb33f85e3caefa49a4d655dc0e214fca2327ea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 EclipseSource 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:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.equinox.p2.tests.core;
import java.util.*;
import junit.framework.TestCase;
import org.eclipse.equinox.p2.query.*;
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
/**
* This tests both Compound and Composite queries
*
*/
public class AggregateQueryTest extends TestCase {
public List<String> getABCDE() {
return Arrays.asList("A", "B", "C", "D", "E");
}
public List<String> get123() {
return Arrays.asList("1", "2", "3");
}
public void testEmptyCompositeQuery() {
IQuery<String> query = QueryUtil.createPipeQuery(Collections.<IQuery<String>> emptySet());
query.perform(getABCDE().iterator());
// We should not throw an exception. No guarantee on what perform
// will return in this case
}
public void testSymmetry() {
IQuery getLatest = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
List list = new ArrayList();
while (iterator.hasNext()) {
list.add(iterator.next());
}
Collections.sort(list);
result.accept(list.get(list.size() - 1));
return result;
}
};
IQuery getAllBut3 = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
while (iterator.hasNext()) {
Object o = iterator.next();
if (!o.equals("3"))
result.accept(o);
}
return result;
}
};
IQuery compoundQuery = QueryUtil.createCompoundQuery(getLatest, getAllBut3, true);
IQueryResult<String> result = compoundQuery.perform(get123().iterator());
assertEquals(0, AbstractProvisioningTest.queryResultSize(result));
compoundQuery = QueryUtil.createCompoundQuery(getAllBut3, getLatest, true);
result = compoundQuery.perform(get123().iterator());
assertEquals(0, AbstractProvisioningTest.queryResultSize(result));
compoundQuery = QueryUtil.createCompoundQuery(getLatest, getAllBut3, false);
result = compoundQuery.perform(get123().iterator());
assertEquals(3, AbstractProvisioningTest.queryResultSize(result));
compoundQuery = QueryUtil.createCompoundQuery(getAllBut3, getLatest, false);
result = compoundQuery.perform(get123().iterator());
assertEquals(3, AbstractProvisioningTest.queryResultSize(result));
}
/**
* The CompositeQuery should not support symmetry.
* This method tests that
*/
public void testNonSymmetry() {
IQuery getLatest = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
List list = new ArrayList();
while (iterator.hasNext()) {
list.add(iterator.next());
}
Collections.sort(list);
result.accept(list.get(list.size() - 1));
return result;
}
};
IQuery getAllBut3 = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
while (iterator.hasNext()) {
Object o = iterator.next();
if (!o.equals("3"))
result.accept(o);
}
return result;
}
};
IQuery compoundQuery = QueryUtil.createPipeQuery(getLatest, getAllBut3);
IQueryResult result = compoundQuery.perform(get123().iterator());
assertEquals(0, AbstractProvisioningTest.queryResultSize(result));
compoundQuery = QueryUtil.createPipeQuery(getAllBut3, getLatest);
result = compoundQuery.perform(get123().iterator());
assertEquals(1, AbstractProvisioningTest.queryResultSize(result));
assertEquals("2", result.iterator().next());
}
public void testIntersection() {
IQuery<String> ABC = new MatchQuery<String>() {
@Override
public boolean isMatch(String candidate) {
if (candidate.equals("A") || candidate.equals("B") || candidate.equals("C"))
return true;
return false;
}
};
IQuery<String> BCDE = new MatchQuery<String>() {
@Override
public boolean isMatch(String candidate) {
if (candidate.equals("B") || candidate.equals("C") || candidate.equals("D") || candidate.equals("E"))
return true;
return false;
}
};
IQuery<String> compoundQuery = QueryUtil.createCompoundQuery(ABC, BCDE, true);
IQueryResult<String> result = compoundQuery.perform(getABCDE().iterator());
assertEquals("1.0", AbstractProvisioningTest.queryResultSize(result), 2);
AbstractProvisioningTest.assertContains("1.1", result, "B");
AbstractProvisioningTest.assertContains("1.2", result, "C");
}
public void testIntersection2() {
IQuery ABC = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
while (iterator.hasNext()) {
Object o = iterator.next();
if (o.equals("A") || o.equals("B") || o.equals("C"))
result.accept(o);
}
return result;
}
};
IQuery BCDE = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
while (iterator.hasNext()) {
Object o = iterator.next();
if (o.equals("B") || o.equals("C") || o.equals("D") || o.equals("E"))
result.accept(o);
}
return result;
}
};
IQuery compoundQuery = QueryUtil.createCompoundQuery(ABC, BCDE, true);
IQueryResult result = compoundQuery.perform(getABCDE().iterator());
assertEquals("1.0", AbstractProvisioningTest.queryResultSize(result), 2);
AbstractProvisioningTest.assertContains("1.1", result, "B");
AbstractProvisioningTest.assertContains("1.2", result, "C");
}
public void testUnion() {
IQuery<String> ABC = new MatchQuery<String>() {
@Override
public boolean isMatch(String candidate) {
if (candidate.equals("A") || candidate.equals("B") || candidate.equals("C"))
return true;
return false;
}
};
IQuery<String> BCDE = new MatchQuery<String>() {
@Override
public boolean isMatch(String candidate) {
if (candidate.equals("B") || candidate.equals("C") || candidate.equals("D") || candidate.equals("E"))
return true;
return false;
}
};
IQuery<String> compoundQuery = QueryUtil.createCompoundQuery(ABC, BCDE, false);
IQueryResult<String> result = compoundQuery.perform(getABCDE().iterator());
assertEquals("1.0", AbstractProvisioningTest.queryResultSize(result), 5);
AbstractProvisioningTest.assertContains("1.1", result, "A");
AbstractProvisioningTest.assertContains("1.2", result, "B");
AbstractProvisioningTest.assertContains("1.3", result, "C");
AbstractProvisioningTest.assertContains("1.4", result, "D");
AbstractProvisioningTest.assertContains("1.5", result, "E");
}
public void testUnion2() {
IQuery ABC = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
while (iterator.hasNext()) {
Object o = iterator.next();
if (o.equals("A") || o.equals("B") || o.equals("C"))
result.accept(o);
}
return result;
}
};
IQuery BCDE = new ContextQuery() {
@Override
public Collector perform(Iterator iterator) {
Collector result = new Collector();
while (iterator.hasNext()) {
Object o = iterator.next();
if (o.equals("B") || o.equals("C") || o.equals("D") || o.equals("E"))
result.accept(o);
}
return result;
}
};
IQuery<String> compoundQuery = QueryUtil.createCompoundQuery(ABC, BCDE, false);
IQueryResult<String> result = compoundQuery.perform(getABCDE().iterator());
assertEquals("1.0", AbstractProvisioningTest.queryResultSize(result), 5);
AbstractProvisioningTest.assertContains("1.1", result, "A");
AbstractProvisioningTest.assertContains("1.2", result, "B");
AbstractProvisioningTest.assertContains("1.3", result, "C");
AbstractProvisioningTest.assertContains("1.4", result, "D");
AbstractProvisioningTest.assertContains("1.5", result, "E");
}
}