package org.openrdf.repository.object;
import junit.framework.Test;
import org.openrdf.annotations.Iri;
import org.openrdf.repository.object.base.ObjectRepositoryTestCase;
public class BridgeMethodTest extends ObjectRepositoryTestCase {
public static Test suite() throws Exception {
return ObjectRepositoryTestCase.suite(BridgeMethodTest.class);
}
@Iri("urn:test:Concept")
public interface Concept {
Concept getThis();
Concept getThat();
}
@Iri("urn:test:Concept")
public interface Sub1 extends Concept {
Sub1 getThis();
Sub1 getThat();
}
@Iri("urn:test:Concept")
public interface Sub2 extends Concept {
Sub2 getThis();
Sub2 getThat();
}
public static abstract class Stub1 implements Sub1 {
public static int count;
public Stub1 getThis() {
count++;
return this;
}
public Stub1 getThat() {
count++;
return null;
}
}
public static abstract class Stub2 implements Sub2 {
public static int count;
public Stub2 getThis() {
count++;
return this;
}
public Stub2 getThat() {
count++;
return null;
}
}
public void setUp() throws Exception {
Stub1.count = 0;
Stub2.count = 0;
config.addConcept(Concept.class);
config.addConcept(Sub1.class);
config.addConcept(Sub2.class);
config.addBehaviour(Stub1.class);
config.addBehaviour(Stub2.class);
super.setUp();
}
public void testConflict() throws Exception {
Concept c = con.addDesignation(con.getObject("urn:test:concept"), Concept.class);
assertEquals(c, c.getThis());
}
public void testBridgeSub1() throws Exception {
Sub1 c = con.addDesignation(con.getObject("urn:test:concept"), Sub1.class);
assertNull(c.getThat());
assertEquals(1, Stub1.count);
assertEquals(1, Stub2.count);
}
public void testBridgeSub2() throws Exception {
Sub2 c = con.addDesignation(con.getObject("urn:test:concept"), Sub2.class);
assertNull(c.getThat());
assertEquals(1, Stub1.count);
assertEquals(1, Stub2.count);
}
}