001: package org.drools.compiler;
002:
003: import java.util.ArrayList;
004: import java.util.List;
005: import java.util.Map;
006: import java.util.Properties;
007:
008: import junit.framework.TestCase;
009:
010: import org.drools.base.ClassFieldExtractorCache;
011: import org.drools.base.TypeResolver;
012: import org.drools.lang.descr.AndDescr;
013: import org.drools.lang.descr.AttributeDescr;
014: import org.drools.lang.descr.BaseDescr;
015: import org.drools.lang.descr.EvalDescr;
016: import org.drools.lang.descr.FunctionDescr;
017: import org.drools.lang.descr.FunctionImportDescr;
018: import org.drools.lang.descr.ImportDescr;
019: import org.drools.lang.descr.PackageDescr;
020: import org.drools.lang.descr.RuleDescr;
021: import org.drools.rule.Package;
022: import org.drools.rule.Pattern;
023: import org.drools.rule.Rule;
024: import org.drools.rule.RuleConditionElement;
025: import org.drools.rule.builder.AccumulateBuilder;
026: import org.drools.rule.builder.ConsequenceBuilder;
027: import org.drools.rule.builder.FromBuilder;
028: import org.drools.rule.builder.GroupElementBuilder;
029: import org.drools.rule.builder.PatternBuilder;
030: import org.drools.rule.builder.PredicateBuilder;
031: import org.drools.rule.builder.QueryBuilder;
032: import org.drools.rule.builder.ReturnValueBuilder;
033: import org.drools.rule.builder.RuleBuildContext;
034: import org.drools.rule.builder.RuleClassBuilder;
035: import org.drools.rule.builder.RuleConditionBuilder;
036: import org.drools.rule.builder.SalienceBuilder;
037: import org.drools.rule.builder.dialect.java.JavaDialect;
038: import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
039: import org.drools.rule.builder.dialect.mvel.MVELDialect;
040: import org.drools.util.ChainedProperties;
041:
042: public class PackageBuilderConfigurationTest extends TestCase {
043:
044: protected void setUp() throws Exception {
045: System.getProperties().remove("drools.dialect.java.compiler");
046: System.getProperties().remove("drools.dialect.default");
047: }
048:
049: protected void tearDown() throws Exception {
050: System.getProperties().remove("drools.dialect.java.compiler");
051: System.getProperties().remove("drools.dialect.default");
052: }
053:
054: public void testIgnoreDetauls() {
055: // check standard chained properties, that includes defaults
056: ChainedProperties chainedProperties = new ChainedProperties(
057: null, "packagebuilder.conf", true);
058: //System.out.println( chainedProperties.getProperty( "drools.dialect.java.compiler",
059: // null ) );
060: assertNotNull(chainedProperties.getProperty(
061: "drools.dialect.java.compiler", null));
062:
063: // now check that chained properties can ignore defaults
064: chainedProperties = new ChainedProperties(null,
065: "packagebuilder.conf", false);
066: //System.out.println( chainedProperties.getProperty( "drools.dialect.java.compiler",
067: // null ) );
068: assertNull(chainedProperties.getProperty(
069: "drools.dialect.java.compiler", null));
070:
071: // now check it can find defaults again.
072: chainedProperties = new ChainedProperties(null,
073: "packagebuilder.conf", true);
074: //System.out.println( chainedProperties.getProperty( "drools.dialect.java.compiler",
075: // null ) );
076: assertNotNull(chainedProperties.getProperty(
077: "drools.dialect.java.compiler", null));
078: }
079:
080: public void testSystemProperties() {
081: PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
082: JavaDialectConfiguration javaConf = (JavaDialectConfiguration) cfg
083: .getDialectConfiguration("java");
084: assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf
085: .getCompiler());
086:
087: System.setProperty("drools.dialect.java.compiler", "JANINO");
088: cfg = new PackageBuilderConfiguration();
089: javaConf = (JavaDialectConfiguration) cfg
090: .getDialectConfiguration("java");
091: assertEquals(JavaDialectConfiguration.JANINO, javaConf
092: .getCompiler());
093:
094: PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration();
095: JavaDialectConfiguration javaConf2 = (JavaDialectConfiguration) cfg2
096: .getDialectConfiguration("java");
097: assertEquals(javaConf.getCompiler(), javaConf2.getCompiler());
098:
099: System.setProperty("drools.dialect.java.compiler", "ECLIPSE");
100: cfg = new PackageBuilderConfiguration();
101: javaConf = (JavaDialectConfiguration) cfg
102: .getDialectConfiguration("java");
103: assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf
104: .getCompiler());
105:
106: javaConf2.setCompiler(JavaDialectConfiguration.ECLIPSE);
107: assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf2
108: .getCompiler());
109:
110: javaConf2.setCompiler(JavaDialectConfiguration.JANINO);
111: assertEquals(JavaDialectConfiguration.JANINO, javaConf2
112: .getCompiler());
113:
114: final PackageBuilderConfiguration cfg3 = new PackageBuilderConfiguration();
115: JavaDialectConfiguration javaConf3 = (JavaDialectConfiguration) cfg3
116: .getDialectConfiguration("java");
117: assertEquals(javaConf.getCompiler(), javaConf3.getCompiler());
118: }
119:
120: public void testProgrammaticProperties() {
121: PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
122: assertTrue(cfg.getDefaultDialect() instanceof JavaDialect);
123:
124: Properties properties = new Properties();
125: properties.setProperty("drools.dialect.default", "mvel");
126: PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration(
127: properties);
128: assertTrue(cfg1.getDefaultDialect() instanceof MVELDialect);
129:
130: final PackageBuilderConfiguration cfg2 = new PackageBuilderConfiguration(
131: properties);
132: assertEquals(cfg1.getDefaultDialect().getClass(), cfg2
133: .getDefaultDialect().getClass());
134: }
135:
136: public void testProgramaticProperties2() {
137: JavaDialectConfiguration javaConf = new JavaDialectConfiguration();
138: javaConf.setCompiler(JavaDialectConfiguration.ECLIPSE);
139: PackageBuilderConfiguration cfg = new PackageBuilderConfiguration();
140: cfg.setDialectConfiguration("java", javaConf);
141: JavaDialectConfiguration javaConf2 = (JavaDialectConfiguration) cfg
142: .getDialectConfiguration("java");
143: assertSame(javaConf, javaConf2);
144: assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf2
145: .getCompiler());
146:
147: javaConf = new JavaDialectConfiguration();
148: javaConf.setCompiler(JavaDialectConfiguration.JANINO);
149: cfg = new PackageBuilderConfiguration();
150: cfg.setDialectConfiguration("java", javaConf);
151: javaConf2 = (JavaDialectConfiguration) cfg
152: .getDialectConfiguration("java");
153: assertSame(javaConf, javaConf2);
154: assertEquals(JavaDialectConfiguration.JANINO, javaConf2
155: .getCompiler());
156: }
157:
158: public void testMockDialect() {
159: Package pkg = new Package("org.pkg1");
160:
161: PackageBuilderConfiguration cfg1 = new PackageBuilderConfiguration();
162: MockDialectConfiguration mockConf = new MockDialectConfiguration();
163: cfg1.getDialectRegistry().addDialectConfiguration("mock",
164: mockConf);
165: cfg1.setDefaultDialect("mock");
166:
167: PackageBuilder builder = new PackageBuilder(pkg, cfg1);
168:
169: MockDialect mockDialect2 = (MockDialect) builder
170: .getPackageBuilderConfiguration().getDefaultDialect();
171: assertSame(mockConf.getDialect(), mockDialect2);
172:
173: assertSame(builder, mockDialect2.getPackageBuilder());
174: assertSame(pkg, mockDialect2.getPkg());
175: assertNull(mockDialect2.getRuleDescr());
176:
177: RuleDescr ruleDescr = new RuleDescr("test rule");
178: ruleDescr.addAttribute(new AttributeDescr("dialect", "mock"));
179: ruleDescr.setLhs(new AndDescr());
180: EvalDescr evalDescr = new EvalDescr();
181: ruleDescr.getLhs().addDescr(evalDescr);
182:
183: PackageDescr pkgDescr = new PackageDescr("org.pkg1");
184: pkgDescr.addImport(new ImportDescr("java.util.HashMap"));
185: FunctionImportDescr functionImportDescr = new FunctionImportDescr();
186: functionImportDescr.setTarget("System.out.println");
187: pkgDescr.addFunctionImport(functionImportDescr);
188:
189: pkgDescr.addRule(ruleDescr);
190:
191: builder.addPackage(pkgDescr);
192:
193: assertSame(ruleDescr, mockDialect2.getRuleDescr());
194: assertTrue(mockDialect2.getImport().contains(
195: "java.util.HashMap"));
196: assertTrue(mockDialect2.getStaticImport().contains(
197: "System.out.println"));
198: assertEquals("eval was built", evalDescr.getContent());
199: assertEquals("consequence was built", ruleDescr
200: .getConsequence());
201: assertTrue(mockDialect2.isCompileAll());
202:
203: assertNotNull(pkg.getRule("test rule"));
204:
205: }
206:
207: public static class MockDialectConfiguration implements
208: DialectConfiguration {
209: private MockDialect dialect = new MockDialect();
210: private PackageBuilderConfiguration conf;
211:
212: public Dialect getDialect() {
213: return this .dialect;
214: }
215:
216: public PackageBuilderConfiguration getPackageBuilderConfiguration() {
217: return this .conf;
218: }
219:
220: public void init(PackageBuilderConfiguration configuration) {
221: this .conf = configuration;
222: }
223:
224: }
225:
226: public static class MockDialect implements Dialect {
227: private PackageBuilder builder;
228: private Package pkg;
229: private RuleDescr ruleDescr;
230: private Rule rule;
231:
232: private List imports = new ArrayList();
233: private List staticImports = new ArrayList();
234:
235: private boolean compileAll = false;
236:
237: public void init(PackageBuilder builder) {
238: this .builder = builder;
239:
240: }
241:
242: public void init(Package pkg) {
243: this .pkg = pkg;
244: }
245:
246: public void init(RuleDescr ruleDescr) {
247: this .ruleDescr = ruleDescr;
248: }
249:
250: public PackageBuilder getPackageBuilder() {
251: return builder;
252: }
253:
254: public Package getPkg() {
255: return pkg;
256: }
257:
258: public RuleDescr getRuleDescr() {
259: return ruleDescr;
260: }
261:
262: public void addFunction(FunctionDescr functionDescr,
263: TypeResolver typeResolver) {
264: // TODO Auto-generated method stub
265:
266: }
267:
268: public void addImport(String importEntry) {
269: this .imports.add(importEntry);
270: }
271:
272: public List getImport() {
273: return this .imports;
274: }
275:
276: public void addStaticImport(String importEntry) {
277: this .imports.add(importEntry);
278: }
279:
280: public List getStaticImport() {
281: return this .imports;
282: }
283:
284: public void addRule(RuleBuildContext context) {
285: this .rule = context.getRule();
286: }
287:
288: public Rule getRule() {
289: return this .rule;
290: }
291:
292: public AnalysisResult analyzeBlock(RuleBuildContext context,
293: BaseDescr descr, String text) {
294: // TODO Auto-generated method stub
295: return null;
296: }
297:
298: public AnalysisResult analyzeExpression(
299: RuleBuildContext context, BaseDescr descr,
300: Object content) {
301: // TODO Auto-generated method stub
302: return null;
303: }
304:
305: public void compileAll() {
306: this .compileAll = true;
307: }
308:
309: public boolean isCompileAll() {
310: return this .compileAll;
311: }
312:
313: public AccumulateBuilder getAccumulateBuilder() {
314: // TODO Auto-generated method stub
315: return null;
316: }
317:
318: public RuleConditionBuilder getBuilder(Class clazz) {
319: if (clazz == EvalDescr.class) {
320: return getEvalBuilder();
321: } else if (clazz == AndDescr.class) {
322: return new GroupElementBuilder();
323: } else {
324: throw new RuntimeException("clazz " + clazz
325: + " is not yet configured ");
326: }
327: }
328:
329: public Map getBuilders() {
330: // TODO Auto-generated method stub
331: return null;
332: }
333:
334: public ClassFieldExtractorCache getClassFieldExtractorCache() {
335: // TODO Auto-generated method stub
336: return null;
337: }
338:
339: public ConsequenceBuilder getConsequenceBuilder() {
340: return new MockConsequenceBuilder();
341: }
342:
343: public RuleConditionBuilder getEvalBuilder() {
344: return new MockEvalBuilder();
345: }
346:
347: public String getExpressionDialectName() {
348: // TODO Auto-generated method stub
349: return null;
350: }
351:
352: public FromBuilder getFromBuilder() {
353: // TODO Auto-generated method stub
354: return null;
355: }
356:
357: public PatternBuilder getPatternBuilder() {
358: // TODO Auto-generated method stub
359: return null;
360: }
361:
362: public PredicateBuilder getPredicateBuilder() {
363: // TODO Auto-generated method stub
364: return null;
365: }
366:
367: public QueryBuilder getQueryBuilder() {
368: // TODO Auto-generated method stub
369: return null;
370: }
371:
372: public List getResults() {
373: // TODO Auto-generated method stub
374: return null;
375: }
376:
377: public ReturnValueBuilder getReturnValueBuilder() {
378: // TODO Auto-generated method stub
379: return null;
380: }
381:
382: public RuleClassBuilder getRuleClassBuilder() {
383: // TODO Auto-generated method stub
384: return null;
385: }
386:
387: public SalienceBuilder getSalienceBuilder() {
388: // TODO Auto-generated method stub
389: return null;
390: }
391:
392: public TypeResolver getTypeResolver() {
393: // TODO Auto-generated method stub
394: return null;
395: }
396:
397: public String getId() {
398: // TODO Auto-generated method stub
399: return null;
400: }
401: }
402:
403: public static class MockEvalBuilder implements RuleConditionBuilder {
404:
405: public RuleConditionElement build(RuleBuildContext context,
406: BaseDescr descr) {
407: EvalDescr evalDescr = (EvalDescr) descr;
408: evalDescr.setContent("eval was built");
409: return null;
410: }
411:
412: public RuleConditionElement build(RuleBuildContext context,
413: BaseDescr descr, Pattern prefixPattern) {
414: return null;
415: }
416:
417: }
418:
419: public static class MockConsequenceBuilder implements
420: ConsequenceBuilder {
421:
422: public void build(RuleBuildContext context) {
423: context.getRuleDescr().setConsequence(
424: "consequence was built");
425: }
426:
427: }
428: }
|