1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[239050] - Added DMContextsTest.java to the org.eclipse.dd.tests.dsf plugin.

This commit is contained in:
Pawel Piech 2008-07-16 21:16:38 +00:00
parent 255b92bfbd
commit ba02695848

View file

@ -0,0 +1,185 @@
/*******************************************************************************
* Copyright (c) 2007 Ericsson 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:
* Ericsson - Initial Implementation
*******************************************************************************/
package org.eclipse.dd.tests.dsf.dm;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.ExecutionException;
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.datamodel.AbstractDMContext;
import org.eclipse.dd.dsf.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.tests.dsf.TestDsfExecutor;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DMContextsTest {
TestDsfExecutor fExecutor;
DsfSession fSession;
@Before public void startExecutor() throws ExecutionException, InterruptedException {
fExecutor = new TestDsfExecutor();
fExecutor.submit(new DsfRunnable() { public void run() {
fSession = DsfSession.startSession(fExecutor, "DMContextsTest"); //$NON-NLS-1$
}}).get();
// Build a hierarchy of contexts to run the tests. Note that this hierarchy
// is not valid in the DSF model, but that is ok for these tests.
// Let's build the following:
//
// SecondType4
// |
// FirstType3 SecondType7
// | |
// ThirdType2 ThirdType6
// | / |
// FirstType1 ThirdType5
// | /
// FirstType0
c[7] = new SecondType(new IDMContext[0], 7);
c[6] = new ThirdType(new IDMContext[]{c[7]}, 6);
c[5] = new ThirdType(new IDMContext[]{c[6]}, 5);
c[4] = new SecondType(new IDMContext[0], 4);
c[3] = new FirstType(new IDMContext[]{c[4]}, 3);
c[2] = new ThirdType(new IDMContext[]{c[3]}, 2);
c[1] = new FirstType(new IDMContext[]{c[2],c[6]}, 1);
c[0] = new FirstType(new IDMContext[]{c[1],c[5]}, 0);
}
@After public void shutdownExecutor() throws ExecutionException, InterruptedException {
DsfSession.endSession(fSession);
fSession = null;
fExecutor.submit(new DsfRunnable() { public void run() {
fExecutor.shutdown();
}}).get();
if (fExecutor.exceptionsCaught()) {
Throwable[] exceptions = fExecutor.getExceptions();
throw new ExecutionException(exceptions[0]);
}
fExecutor = null;
}
BaseContextType c[] = new BaseContextType[8];
private class BaseContextType extends AbstractDMContext {
final int fId;
public BaseContextType(IDMContext[] parents, int id) {
super(fSession.getId(), parents);
fId = id;
}
@Override
public String toString() { return baseToString() + ".[" + fId + "]"; } //$NON-NLS-1$ //$NON-NLS-2$
@Override
public boolean equals(Object obj) {
return super.baseEquals(obj) && ((BaseContextType)obj).fId == fId;
}
@Override
public int hashCode() { return super.baseHashCode() ^ fId; }
}
private class FirstType extends BaseContextType {
public FirstType(IDMContext[] parents, int id) {
super(parents, id);
}
}
private class SecondType extends BaseContextType {
public SecondType(IDMContext[] parents, int id) {
super(parents, id);
}
}
private class ThirdType extends BaseContextType {
public ThirdType(IDMContext[] parents, int id) {
super(parents, id);
}
}
private interface UnknownType extends IDMContext {}
/**
* Test that we get the closest ancestor in terms of depth.
*/
@Test
public void testClosestAncestor() throws Throwable {
BaseContextType ancestor = DMContexts.getAncestorOfType(c[0], FirstType.class);
assertTrue("Got unexpected null ancestor", ancestor != null);
assertTrue("Got ancestor " + ancestor.fId + " intead of 1", ancestor.fId == 0);
ancestor = DMContexts.getAncestorOfType(c[0], SecondType.class);
assertTrue("Got unexpected null ancestor", ancestor != null);
assertTrue("Got ancestor " + ancestor.fId + " intead of 8", ancestor.fId == 7);
ancestor = DMContexts.getAncestorOfType(c[0], ThirdType.class);
assertTrue("Got unexpected null ancestor", ancestor != null);
assertTrue("Got ancestor " + ancestor.fId + " intead of 6", ancestor.fId == 5);
ancestor = DMContexts.getAncestorOfType(c[1], SecondType.class);
assertTrue("Got unexpected null ancestor", ancestor != null);
assertTrue("Got ancestor " + ancestor.fId + " intead of 8", ancestor.fId == 7);
ancestor = DMContexts.getAncestorOfType(c[1], ThirdType.class);
assertTrue("Got unexpected null ancestor", ancestor != null);
assertTrue("Got ancestor " + ancestor.fId + " intead of 3", ancestor.fId == 2);
ancestor = DMContexts.getAncestorOfType(c[5], FirstType.class);
assertTrue("Got unexpected non-null ancestor", ancestor == null);
}
/**
* Test that we get all the ancestors in order of closest in terms of depth.
*/
@Test
public void testAllClosestAncestors() throws Throwable {
checkAncestors(c[0], BaseContextType.class, new int[]{0,1,5,2,6,3,7,4});
checkAncestors(c[0], FirstType.class, new int[]{0,1,3});
checkAncestors(c[0], SecondType.class, new int[]{7,4});
checkAncestors(c[0], ThirdType.class, new int[]{5,2,6});
UnknownType[] exprAncestors = DMContexts.getAllAncestorsOfType(c[0], UnknownType.class);
assertTrue("Got unexpected non-null ancestor list", exprAncestors == null);
}
private <V extends IDMContext> void checkAncestors(BaseContextType ctx, Class<V> type, int[] expected) {
BaseContextType[] ancestors = (BaseContextType[])DMContexts.getAllAncestorsOfType(ctx, type);
assertTrue("Got unexpected null ancestor", ancestors != null);
String ancestorsStr = "", expectedStr = "";
for (int k=0;k<ancestors.length;k++) {
ancestorsStr += ancestors[k].fId + ",";
}
for (int j=0;j<expected.length;j++) {
expectedStr += expected[j] + ",";
}
assertTrue("Got " + ancestorsStr + " instead of " + expectedStr, ancestors.length == expected.length);
for (int i=0;i<expected.length;i++) {
if (ancestors[i].fId != expected[i]) {
assertTrue("Got " + ancestorsStr + " instead of " + expectedStr, false);
}
}
}
}