/*
* Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) 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:
* Nuxeo - initial API and implementation
*
* $Id: JOOoConvertPluginImpl.java 18651 2007-05-13 20:28:53Z sfermigier $
*/
package org.eclipse.ecr.core.api;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.ecr.core.api.impl.DocumentModelImpl;
import org.eclipse.ecr.core.api.impl.FacetFilter;
import org.eclipse.ecr.testlib.NXRuntimeTestCase;
public class TestFacetFilter extends NXRuntimeTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
deployBundle("org.eclipse.ecr.core.schema");
}
public void test() {
Set<String> facets = new HashSet<String>();
facets.add("A");
facets.add("B");
facets.add("C");
DocumentModel model = new DocumentModelImpl("sid", "my type", "id",
null, null, null, null, null, facets, null, null);
// One facet statements
assertTrue(new FacetFilter("A", true).accept(model));
assertTrue(new FacetFilter("B", true).accept(model));
assertFalse(new FacetFilter("D", true).accept(model));
assertFalse(new FacetFilter("A", false).accept(model));
assertFalse(new FacetFilter("B", false).accept(model));
assertTrue(new FacetFilter("D", false).accept(model));
// More complicated statements
List<String> required = Arrays.asList("A", "B");
assertTrue(new FacetFilter(required, null).accept(model));
List<String> excluded = Arrays.asList("C");
assertFalse(new FacetFilter(required, excluded).accept(model));
required = Arrays.asList("A", "D");
excluded = Arrays.asList("E");
assertFalse(new FacetFilter(required, excluded).accept(model));
required = Arrays.asList("A", "C");
assertTrue(new FacetFilter(required, excluded).accept(model));
excluded = Arrays.asList("B", "E");
assertFalse(new FacetFilter(required, excluded).accept(model));
}
public void testAnd() {
FacetFilter f1, f2;
f1 = new FacetFilter(Collections.<String> emptyList(),
Collections.<String> emptyList());
assertEquals(Boolean.TRUE, f1.shortcut);
f1 = new FacetFilter(Arrays.asList("B"), Arrays.asList("B"));
assertEquals(Boolean.FALSE, f1.shortcut);
f1 = new FacetFilter("A", true);
f2 = new FacetFilter("B", true);
checkAnd(f1, f2, set("A", "B"), set(), null);
f1 = new FacetFilter("A", true);
f2 = new FacetFilter("B", false);
checkAnd(f1, f2, set("A"), set("B"), null);
f1 = new FacetFilter("A", false);
f2 = new FacetFilter("B", true);
checkAnd(f1, f2, set("B"), set("A"), null);
f1 = new FacetFilter("A", false);
f2 = new FacetFilter("B", false);
checkAnd(f1, f2, set(), set("A", "B"), null);
f1 = new FacetFilter(Arrays.asList("A"), Arrays.asList("B"));
f2 = new FacetFilter(Arrays.asList("C"), Arrays.asList("D"));
checkAnd(f1, f2, set("A", "C"), set("B", "D"), null);
f1 = new FacetFilter(Arrays.asList("A"), Arrays.asList("B"));
f2 = new FacetFilter(Arrays.asList("C"), Arrays.asList("A"));
checkAnd(f1, f2, set("A", "C"), set("B", "A"), Boolean.FALSE);
}
protected static Set<String> set(String... strings) {
return new HashSet<String>(Arrays.asList(strings));
}
protected void checkAnd(FacetFilter f1, FacetFilter f2, Set<String> req,
Set<String> exc, Boolean sc) {
FacetFilter f = new FacetFilter(f1, f2);
assertEquals(req, f.required);
assertEquals(exc, f.excluded);
assertEquals(sc, f.shortcut);
}
}