blob: cdc1603fb74b6f0e96e86c7225d14b72f72991cc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2012 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.core.tests.runtime.jobs;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.MultiRule;
/**
* Tests for {@link MultiRule}.
*/
public class MultiRuleTest extends AbstractJobTest {
public static Test suite() {
return new TestSuite(MultiRuleTest.class);
}
public void testCombine() {
ISchedulingRule child1 = new PathRule("/a");
ISchedulingRule child2 = new PathRule("/b/c");
ISchedulingRule childOfChild1 = new PathRule("/a/b");
ISchedulingRule nonChild = new PathRule("/z/d");
MultiRule multi1 = new MultiRule(new ISchedulingRule[] {child1, child2});
//add multi to its own children
assertEquals("1.0", multi1, MultiRule.combine(new ISchedulingRule[] {multi1}));
assertEquals("1.1", multi1, MultiRule.combine(new ISchedulingRule[] {multi1, child1, child2, childOfChild1}));
assertEquals("1.2", multi1, MultiRule.combine(multi1, child2));
assertEquals("1.3", multi1, MultiRule.combine(childOfChild1, multi1));
//null
assertEquals("1.4", null, MultiRule.combine(null, null));
assertEquals("1.5", multi1, MultiRule.combine(null, multi1));
assertEquals("1.6", child1, MultiRule.combine(child1, null));
MultiRule result = (MultiRule) MultiRule.combine(multi1, nonChild);
assertTrue("2.0" + result, result.contains(multi1));
assertTrue("2.1", result.contains(nonChild));
}
public void testContains() {
ISchedulingRule child1 = new PathRule("/a");
ISchedulingRule child2 = new PathRule("/b/c");
ISchedulingRule childOfChild1 = new PathRule("/a/b");
ISchedulingRule nonChild = new PathRule("/z/d");
MultiRule multi1 = new MultiRule(new ISchedulingRule[] {child1, child2});
MultiRule multi2 = new MultiRule(new ISchedulingRule[] {childOfChild1});
assertTrue("1.0", multi1.contains(child1));
assertTrue("1.1", multi1.contains(child2));
assertTrue("1.2", !multi1.contains(nonChild));
assertTrue("1.3", multi1.contains(childOfChild1));
assertTrue("1.4", multi1.contains(multi2));
assertTrue("1.5", !multi2.contains(multi1));
assertTrue("1.6", multi1.contains(multi1));
}
public void testIsConflicting() {
ISchedulingRule child1 = new PathRule("/a");
ISchedulingRule child2 = new PathRule("/b/c");
ISchedulingRule childOfChild1 = new PathRule("/a/b");
ISchedulingRule nonChild = new PathRule("/z/d");
MultiRule multi1 = new MultiRule(new ISchedulingRule[] {child1, child2});
MultiRule multi2 = new MultiRule(new ISchedulingRule[] {childOfChild1, nonChild});
assertTrue("1.0", multi1.isConflicting(child1));
assertTrue("1.1", multi1.isConflicting(child2));
assertTrue("1.2", !multi1.isConflicting(nonChild));
assertTrue("1.3", multi1.isConflicting(childOfChild1));
assertTrue("1.4", multi1.isConflicting(multi2));
assertTrue("1.5", multi2.isConflicting(multi1));
assertTrue("1.6", multi1.isConflicting(multi1));
}
}