/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.base;
import java.lang.reflect.Field;
import junit.framework.TestCase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
public class DelegateJavaFactHandlerTest extends TestCase {
public void test1Entry() throws Exception {
final DelegateJavaFactHandler handler = new DelegateJavaFactHandler();
final Field field = handler.getClass().getDeclaredField( "entries" );
field.setAccessible( true );
final WorkingMemory wm1 = RuleBaseFactory.newRuleBase().newStatefulSession();
handler.register( wm1 );
JavaFactRegistryEntry[] entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 1,
entries.length );
assertTrue( handler.isRegistered( wm1 ) );
assertEquals( 1,
handler.listWorkingMemories().length );
assertSame( wm1,
handler.listWorkingMemories()[0].getWorkingMemory() );
final WorkingMemory wm2 = RuleBaseFactory.newRuleBase().newStatefulSession();
assertFalse( handler.isRegistered( wm2 ) );
handler.unregister( wm1 );
assertFalse( handler.isRegistered( wm1 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertNull( entries );
}
public void test2Entries() throws Exception {
final DelegateJavaFactHandler handler = new DelegateJavaFactHandler();
final Field field = handler.getClass().getDeclaredField( "entries" );
field.setAccessible( true );
final WorkingMemory wm1 = RuleBaseFactory.newRuleBase().newStatefulSession();
final WorkingMemory wm2 = RuleBaseFactory.newRuleBase().newStatefulSession();
handler.register( wm1 );
handler.register( wm2 );
JavaFactRegistryEntry[] entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 2,
entries.length );
assertTrue( handler.isRegistered( wm1 ) );
assertTrue( handler.isRegistered( wm2 ) );
assertEquals( 2,
handler.listWorkingMemories().length );
assertSame( wm1,
handler.listWorkingMemories()[0].getWorkingMemory() );
assertSame( wm2,
handler.listWorkingMemories()[1].getWorkingMemory() );
handler.unregister( wm1 );
assertFalse( handler.isRegistered( wm1 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 1,
entries.length );
handler.unregister( wm2 );
assertFalse( handler.isRegistered( wm2 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertNull( entries );
// check revererse
handler.register( wm1 );
handler.register( wm2 );
handler.unregister( wm2 );
assertFalse( handler.isRegistered( wm2 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 1,
entries.length );
handler.unregister( wm1 );
assertFalse( handler.isRegistered( wm1 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertNull( entries );
}
public void test3Entries() throws Exception {
final DelegateJavaFactHandler handler = new DelegateJavaFactHandler();
final Field field = handler.getClass().getDeclaredField( "entries" );
field.setAccessible( true );
final WorkingMemory wm1 = RuleBaseFactory.newRuleBase().newStatefulSession();
final WorkingMemory wm2 = RuleBaseFactory.newRuleBase().newStatefulSession();
final WorkingMemory wm3 = RuleBaseFactory.newRuleBase().newStatefulSession();
handler.register( wm1 );
handler.register( wm2 );
handler.register( wm3 );
JavaFactRegistryEntry[] entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 3,
entries.length );
assertTrue( handler.isRegistered( wm1 ) );
assertTrue( handler.isRegistered( wm2 ) );
assertTrue( handler.isRegistered( wm3 ) );
assertEquals( 3,
handler.listWorkingMemories().length );
assertSame( wm1,
handler.listWorkingMemories()[0].getWorkingMemory() );
assertSame( wm2,
handler.listWorkingMemories()[1].getWorkingMemory() );
assertSame( wm3,
handler.listWorkingMemories()[2].getWorkingMemory() );
handler.unregister( wm2 );
assertFalse( handler.isRegistered( wm2 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 2,
entries.length );
handler.unregister( wm1 );
assertFalse( handler.isRegistered( wm1 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertEquals( 1,
entries.length );
handler.unregister( wm3 );
assertFalse( handler.isRegistered( wm3 ) );
entries = (JavaFactRegistryEntry[]) field.get( handler );
assertNull( entries );
}
}