}
@Test
public void testTripleAlphaObjectCharacterConstraint() {
final CompositeObjectSinkAdapter ad = new CompositeObjectSinkAdapter();
InternalReadAccessor extractor = store.getReader( Cheese.class,
"charObjectType",
this.getClass().getClassLoader() );
final MvelConstraint lit = new MvelConstraintTestUtil( "charObjectType == 65",
new LongFieldImpl( 65 ),
extractor );
final AlphaNode al = new AlphaNode( buildContext.getNextId(),
lit,
new MockObjectSource( buildContext.getNextId() ),
buildContext );
ad.addObjectSink( al );
assertNull( ad.otherSinks );
assertNotNull( ad.hashedFieldIndexes );
assertEquals( 1,
ad.hashableSinks.size() );
assertEquals( al,
ad.getSinks()[0] );
final MvelConstraint lit2 = new MvelConstraintTestUtil( "charObjectType == 66",
new LongFieldImpl( 66 ),
extractor );
final AlphaNode al2 = new AlphaNode( buildContext.getNextId(),
lit2,
new MockObjectSource( buildContext.getNextId() ),
buildContext );
ad.addObjectSink( al2 );
assertNull( ad.hashedSinkMap );
assertEquals( 2,
ad.hashableSinks.size() );
final MvelConstraint lit3 = new MvelConstraintTestUtil( "charObjectType == 67",
new LongFieldImpl( 67 ),
extractor );
final AlphaNode al3 = new AlphaNode( buildContext.getNextId(),
lit3,
new MockObjectSource( buildContext.getNextId() ),
buildContext );
ad.addObjectSink( al3 );
//this should now be nicely hashed.
assertNotNull( ad.hashedSinkMap );
assertNull( ad.hashableSinks );
// test propagation
Cheese cheese = new Cheese();
cheese.setCharObjectType( 'B' );
CompositeObjectSinkAdapter.HashKey hashKey = new CompositeObjectSinkAdapter.HashKey();
// should find this
hashKey.setValue( extractor.getIndex(),
cheese,
extractor );
ObjectSink sink = (ObjectSink) ad.hashedSinkMap.get( hashKey );
assertSame( al2,
sink );
// should not find this one
cheese.setCharObjectType( 'X' );
hashKey.setValue( extractor.getIndex(),
cheese,
extractor );
sink = (ObjectSink) ad.hashedSinkMap.get( hashKey );
assertNull( sink );