@Test(timeout=10000) public void traitMethodsWithObjects() { String source = "org/drools/compiler/factmodel/traits/testTraitWrapping.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List errors = new ArrayList(); ks.setGlobal( "list", errors ); ks.fireAllRules(); if (!errors.isEmpty()) { System.err.println( errors.toString() ); } assertTrue( errors.isEmpty() ); }
@Test(timeout=10000) public void testOverrideType3( ) { String drl = "package org.drools.compiler.trait.test; \n" + "import org.drools.core.factmodel.traits.Traitable; \n" + "" + "declare trait Foo end\n" + "declare trait Bar end \n" + "" + "declare trait Mask fld : Foo end \n" + "declare Face @Traitable fld : Bar end \n" + "" + "rule Don when then\n" + " Face face = new Face(); \n" + " don( face, Mask.class ); \n" + "end\n"; KieSession ks = getSessionFromString( drl ); TraitFactory.setMode( mode, ks.getKieBase() ); try { ks.fireAllRules(); fail( "An exception was expected since a trait can't override the type of a core class field with these settings " ); } catch ( Throwable rde ) { assertTrue( rde.getCause() instanceof UnsupportedOperationException ); } }
@Test(timeout=10000) public void testHierarchyEncodeOnPackageMerge() { String drl0 = "package org.drools.test; " + "declare trait X end "; String drl1 = "package org.drools.test; " + "import org.drools.core.factmodel.traits.*; " + "global java.util.List list; " + "declare trait A end " + "declare trait B extends A end " + "declare trait C extends B end " + ""; InternalKnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); TraitFactory.setMode( mode, knowledgeBase ); KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder(); kb.add( new ByteArrayResource( drl0.getBytes() ), ResourceType.DRL ); assertFalse( kb.hasErrors() ); knowledgeBase.addPackages( kb.getKnowledgePackages() ); KnowledgeBuilder kb2 = KnowledgeBuilderFactory.newKnowledgeBuilder(); kb2.add( new ByteArrayResource( drl1.getBytes() ), ResourceType.DRL ); System.out.print( kb2.getErrors() ); assertFalse( kb2.hasErrors() ); knowledgeBase.addPackages( kb2.getKnowledgePackages() ); HierarchyEncoder<String> hier = ( (KnowledgeBaseImpl) knowledgeBase ).getConfiguration().getComponentFactory().getTraitRegistry().getHierarchy(); BitSet b = (BitSet) hier.getCode( "org.drools.test.B" ).clone(); BitSet c = (BitSet) hier.getCode( "org.drools.test.C" ).clone(); c.and( b ); assertEquals( b, c ); }
@Test(timeout=10000) public void testTraitEncodeExtendingNonTrait() { String s1 = "package test;\n" + "import org.drools.compiler.factmodel.traits.TraitTest.IntfParent;\n" + "" + "declare IntfParent end\n" + "" + "declare trait TChild extends IntfParent end \n" + ""; String s2 = "package test; declare trait SomeThing end \n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ByteArrayResource( s2.getBytes() ), ResourceType.DRL ); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); } InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); TraitFactory.setMode( mode, kbase ); kbase.addPackages( kbuilder.getKnowledgePackages() ); KnowledgeBuilder kbuilder2 = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder2.add( new ByteArrayResource( s1.getBytes() ), ResourceType.DRL ); if ( kbuilder2.hasErrors() ) { fail( kbuilder2.getErrors().toString() ); } kbase.addPackages( kbuilder2.getKnowledgePackages() ); }
TraitFactory.setMode( mode, kbase ); ksession.fireAllRules(); assertEquals( CodedHierarchyImpl.stringToBitSet( "1" ), ent.getCurrentTypeCode( ) ); ksession.fireAllRules(); assertEquals( CodedHierarchyImpl.stringToBitSet( "11" ), ent.getCurrentTypeCode( ) ); ksession.fireAllRules(); assertEquals( CodedHierarchyImpl.stringToBitSet( "1011" ), ent.getCurrentTypeCode( ) );
@Test(timeout=10000) public void traitMethodsWithPrimitives() { String source = "org/drools/compiler/factmodel/traits/testTraitWrappingPrimitives.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List errors = new ArrayList(); ks.setGlobal( "list", errors ); ks.fireAllRules(); if (!errors.isEmpty()) { System.err.println( errors ); } assertTrue( errors.isEmpty() ); }
@Test(timeout=10000) public void testHasTypes() { kb.addPackages(kbuilder.getKnowledgePackages()); TraitFactory traitBuilder = ((KnowledgeBaseImpl) kb).getConfiguration().getComponentFactory().getTraitFactory(); TraitFactory.setMode( mode, kb ); assertSame(thing,thing2); assertEquals(2, core.getTraits().size());
@Test(timeout=10000) public void testOverrideType2( ) { String drl = "package org.drools.compiler.trait.test; \n" + "import org.drools.core.factmodel.traits.Traitable; \n" + "" + "declare Foo @Traitable end\n" + "declare trait Bar end \n" + "" + "declare trait Mask fld : Foo end \n" + "declare Face @Traitable fld : Bar end \n" + "" + "rule Don when then\n" + " Face face = new Face(); \n" + " don( face, Mask.class ); \n" + "end\n"; KieSession ks = getSessionFromString( drl ); TraitFactory.setMode( mode, ks.getKieBase() ); try { ks.fireAllRules(); fail( "An exception was expected since a trait can't override the type of a core class field with these settings " ); } catch ( Throwable rde ) { assertTrue( rde.getCause() instanceof UnsupportedOperationException ); } }
@Test(timeout=10000) public void testMixin() { String source = "org/drools/compiler/factmodel/traits/testTraitMixin.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); ks.fireAllRules(); assertTrue( info.contains( "27" ) ); }
@Test(timeout=10000) public void testIsAOperator() { String source = "org/drools/compiler/factmodel/traits/testTraitIsA2.drl"; KieSession ksession = getSession( source ); TraitFactory.setMode( mode, ksession.getKieBase() ); AgendaEventListener ael = mock( AgendaEventListener.class ); ksession.addEventListener( ael ); Person student = new Person( "student", 18 ); ksession.insert( student ); ksession.fireAllRules(); ArgumentCaptor<AfterMatchFiredEvent> cap = ArgumentCaptor.forClass( AfterMatchFiredEvent.class ); verify( ael, times( 3 ) ).afterMatchFired( cap.capture() ); List<AfterMatchFiredEvent> values = cap.getAllValues(); assertThat( values.get( 0 ).getMatch().getRule().getName(), is( "create student" ) ); assertThat( values.get( 1 ).getMatch().getRule().getName(), is( "print student" ) ); assertThat( values.get( 2 ).getMatch().getRule().getName(), is( "print school" ) ); }
@Test(timeout=10000) public void testIsA() { String source = "org/drools/compiler/factmodel/traits/testTraitIsA.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); ks.fireAllRules(); int num = 10; System.out.println( info ); assertEquals( num, info.size() ); for (int j = 0; j < num; j++) { assertTrue( info.contains( "" + j ) ); } }
@Test(timeout=10000) public void traitWithEquality() { String source = "org/drools/compiler/factmodel/traits/testTraitWithEquality.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); ks.fireAllRules(); assertTrue( info.contains( "DON" ) ); assertTrue( info.contains( "EQUAL" ) ); }
@Test(timeout=10000) public void testIsAInstanceOfNonTraitable() { String drl = "package org.drools.test; " + "global java.util.List list; " + "rule Test1 " + "when " + " Object( this isA String.class ) " + "then list.add( 1 ); end " + ""; KieBase kbase = getKieBaseFromString( drl ); List list = new ArrayList( ); TraitFactory.setMode( mode, kbase ); KieSession knowledgeSession = kbase.newKieSession(); knowledgeSession.setGlobal( "list", list ); knowledgeSession.insert( "hello" ); assertEquals( 1, knowledgeSession.fireAllRules() ); assertEquals( Arrays.asList( 1 ), list ); }
@Test(timeout=10000) public void isAWithBackChaining() { String source = "org/drools/compiler/factmodel/traits/testTraitIsAWithBC.drl"; KieSession ksession = getSession( source ); TraitFactory.setMode( mode, ksession.getKieBase() ); List list = new ArrayList(); ksession.setGlobal( "list", list ); ksession.fireAllRules(); ksession.insert( "Como" ); ksession.fireAllRules(); assertTrue( list.contains( "Italy" ) ); }
@Test(timeout=10000) public void testTraitLegacyTraitableWithLegacyTrait() { final String s1 = "package org.drools.compiler.factmodel.traits;\n" + "import " + TraitTest.class.getName() + ".SomeTrait; \n" + "import org.drools.core.factmodel.traits.*; \n" + "global java.util.List list;\n" + "" + "rule \"Don ItemStyle\"\n" + " when\n" + " then\n" + " don( new StudentImpl(), SomeTrait.class );\n" + "end\n"; KieBase kbase = getKieBaseFromString(s1); TraitFactory.setMode( mode, kbase ); ArrayList list = new ArrayList(); KieSession knowledgeSession = kbase.newKieSession(); knowledgeSession.setGlobal( "list", list ); knowledgeSession.fireAllRules(); assertEquals( 2, knowledgeSession.getObjects().size() ); }
@Test(timeout=10000) public void testIsALegacyTrait() { final String s1 = "package org.drools.compiler.factmodel.traits;\n" + TraitFactory.setMode( mode, kbase ); ArrayList list = new ArrayList(); knowledgeSession.setGlobal( "list", list ); knowledgeSession.fireAllRules(); assertEquals( Arrays.asList( 1 ), list );
@Test(timeout=10000) public void testTraitCollections() { String source = "org/drools/compiler/factmodel/traits/testTraitCollections.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); ks.fireAllRules(); System.err.println( " -------------- " + ks.getObjects().size() + " ---------------- " ); for (Object o : ks.getObjects()) { System.err.println( "\t\t" + o ); } System.err.println( " -------------- ---------------- " ); System.err.println( info ); System.err.println( " -------------- ---------------- " ); assertEquals( 1, info.size() ); assertTrue( info.contains( "OK" ) ); }
@Test(timeout=10000) public void testTraitDon() { String source = "org/drools/compiler/factmodel/traits/testTraitDon.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); ks.fireAllRules(); Collection<? extends Object> wm = ks.getObjects(); ks.insert( "go" ); ks.fireAllRules(); assertTrue( info.contains( "DON" ) ); assertTrue( info.contains( "SHED" ) ); Iterator it = wm.iterator(); Object x = it.next(); if ( x instanceof String ) { x = it.next(); } System.out.println( x.getClass() ); System.out.println( x.getClass().getSuperclass() ); System.out.println( Arrays.asList( x.getClass().getInterfaces() )); }
@Test(timeout=10000) public void testOverrideType() { String source = "org/drools/compiler/factmodel/traits/testTraitOverride.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); try { ks.fireAllRules(); fail( "An exception was expected since a trait can't override the type of a core class field with these settings " ); } catch ( Throwable rde ) { assertTrue( rde.getCause() instanceof UnsupportedOperationException ); } }
@Test() public void testTraitCore() { String source = "org/drools/compiler/factmodel/traits/testTraitLegacyCore.drl"; KieSession ks = getSession( source ); TraitFactory.setMode( mode, ks.getKieBase() ); List info = new ArrayList(); ks.setGlobal( "list", info ); ks.fireAllRules(); System.err.println( " -------------- " + ks.getObjects().size() + " ---------------- " ); for (Object o : ks.getObjects()) { System.err.println( "\t\t" + o ); } System.err.println( " -------------- ---------------- " ); System.err.println( info ); System.err.println( " -------------- ---------------- " ); assertTrue( info.contains( "OK" ) ); assertTrue( info.contains( "OK2" ) ); assertEquals( 2, info.size() ); }