📄 packagebuildertest.java
字号:
assertLength( 0,
builder.getErrors() );
}
public void testDuplicateRuleNames() throws Exception {
final PackageBuilder builder = new PackageBuilder();
final PackageDescr packageDescr = new PackageDescr( "p1" );
RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
LiteralDescr literalDescr = new LiteralDescr( "type",
"==",
null );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
ruleDescr = new RuleDescr( "rule-1" );
ruleDescr.setLocation( 42,
43 );
packageDescr.addRule( ruleDescr );
lhs = new AndDescr();
ruleDescr.setLhs( lhs );
columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
literalDescr = new LiteralDescr( "type",
"!=",
null );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
ruleDescr = new RuleDescr( "rule-2" );
ruleDescr.setLocation( 42,
43 );
packageDescr.addRule( ruleDescr );
lhs = new AndDescr();
ruleDescr.setLhs( lhs );
columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
literalDescr = new LiteralDescr( "type",
"!=",
null );
columnDescr.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
builder.addPackage( packageDescr );
assertLength( 1,
builder.getErrors() );
ParserError err = (ParserError) builder.getErrors()[0];
assertEquals( 42,
err.getRow() );
assertEquals( 43,
err.getCol() );
}
public void testDuplicateDeclaration() {
final PackageBuilder builder = new PackageBuilder();
final PackageDescr packageDescr = new PackageDescr( "p1" );
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
final ColumnDescr column1 = new ColumnDescr( Cheese.class.getName() );
lhs.addDescr( column1 );
final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "type",
"$type" );
final LiteralDescr listeralDescr = new LiteralDescr( "type",
"==",
"stilton" );
column1.addDescr( fieldBindingDescr );
column1.addDescr( listeralDescr );
final ColumnDescr column2 = new ColumnDescr( Cheese.class.getName() );
lhs.addDescr( column2 );
column2.addDescr( fieldBindingDescr );
ruleDescr.setConsequence( "modify(stilton);" );
builder.addPackage( packageDescr );
assertLength( 2,
builder.getErrors() );
}
public void testCompilerConfiguration() throws Exception {
// test default is eclipse jdt core
PackageBuilder builder = new PackageBuilder( );;
Field compilerField = builder.getClass().getDeclaredField( "compiler" );
compilerField.setAccessible(true);
JavaCompiler compiler = ( JavaCompiler ) compilerField.get( builder );
assertSame( EclipseJavaCompiler.class, compiler.getClass() );
// test JANINO with property settings
PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.JANINO );
builder = new PackageBuilder( conf );;
compiler = ( JavaCompiler ) compilerField.get( builder );
assertSame( JaninoJavaCompiler.class, compiler.getClass() );
// test eclipse jdt core with property settings and default source level
conf = new PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
builder = new PackageBuilder( conf );;
compiler = ( JavaCompiler ) compilerField.get( builder );
assertSame( EclipseJavaCompiler.class, compiler.getClass() );
EclipseJavaCompiler eclipseCompiler = ( EclipseJavaCompiler ) compiler;
Field settingsField = eclipseCompiler.getClass().getDeclaredField( "settings" );
settingsField.setAccessible( true );
EclipseJavaCompilerSettings settings = ( EclipseJavaCompilerSettings ) settingsField.get( eclipseCompiler );
assertEquals( "1.4", settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
assertEquals( "1.4", settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
// test eclipse jdt core with property settings and jdk1.5 source level
conf = new PackageBuilderConfiguration();
conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
conf.setJavaLanguageLevel( "1.5" );
builder = new PackageBuilder( conf );;
compiler = ( JavaCompiler ) compilerField.get( builder );
assertSame( EclipseJavaCompiler.class, compiler.getClass() );
eclipseCompiler = ( EclipseJavaCompiler ) compiler;
settings = ( EclipseJavaCompilerSettings ) settingsField.get( eclipseCompiler );
assertEquals( "1.5", settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
assertEquals( "1.5", settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
}
private void createReturnValueRule(final PackageDescr packageDescr,
final String expression) {
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
"stilton" );
lhs.addDescr( column );
FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
"x" );
column.addDescr( fieldBindingDescr );
fieldBindingDescr = new FieldBindingDescr( "price",
"y" );
column.addDescr( fieldBindingDescr );
packageDescr.addGlobal( "map",
"java.util.Map" );
final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
"==",
expression );
column.addDescr( returnValue );
ruleDescr.setConsequence( "modify(stilton);" );
}
private void createPredicateRule(final PackageDescr packageDescr,
final String expression) {
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
"stilton" );
lhs.addDescr( column );
final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
"x" );
column.addDescr( fieldBindingDescr );
packageDescr.addGlobal( "map",
"java.util.Map" );
final PredicateDescr predicate = new PredicateDescr( "price",
"y",
expression );
column.addDescr( predicate );
ruleDescr.setConsequence( "modify(stilton);" );
}
private void createEvalRule(final PackageDescr packageDescr,
final String expression) {
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
packageDescr.addGlobal( "map",
"java.util.Map" );
final EvalDescr evalDescr = new EvalDescr( expression );
lhs.addDescr( evalDescr );
ruleDescr.setConsequence( "" );
}
private void createLiteralRule(final LiteralDescr literalDescr) {
final PackageBuilder builder = new PackageBuilder();
final PackageDescr packageDescr = new PackageDescr( "p1" );
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
final ColumnDescr column = new ColumnDescr( Primitives.class.getName() );
lhs.addDescr( column );
column.addDescr( literalDescr );
ruleDescr.setConsequence( "" );
builder.addPackage( packageDescr );
assertLength( 0,
builder.getErrors() );
}
private Rule createRule(final ConditionalElementDescr ceDescr,
final PackageBuilder builder,
final String consequence) throws Exception {
final PackageDescr packageDescr = new PackageDescr( "p1" );
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
lhs.addDescr( (PatternDescr) ceDescr );
final ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
"stilton" );
final LiteralDescr literalDescr = new LiteralDescr( "type",
"==",
"stilton" );
columnDescr.addDescr( literalDescr );
ceDescr.addDescr( columnDescr );
ruleDescr.setConsequence( consequence );
builder.addPackage( packageDescr );
final Package pkg = (Package) builder.getPackage();
final Rule rule = pkg.getRule( "rule-1" );
assertEquals( "rule-1",
rule.getName() );
return rule;
}
class MockActivation
implements
Activation {
private Rule rule;
private Tuple tuple;
public MockActivation(final Rule rule,
final Tuple tuple) {
this.rule = rule;
this.tuple = tuple;
}
public Rule getRule() {
return this.rule;
}
public Tuple getTuple() {
return this.tuple;
}
public PropagationContext getPropagationContext() {
return null;
}
public long getActivationNumber() {
return 0;
}
public void remove() {
}
public void addLogicalDependency(final LogicalDependency node) {
}
public LinkedList getLogicalDependencies() {
return null;
}
public boolean isActivated() {
return false;
}
public void setActivated(final boolean activated) {
}
public ActivationGroupNode getActivationGroupNode() {
// TODO Auto-generated method stub
return null;
}
public void setActivationGroupNode(final ActivationGroupNode activationGroupNode) {
// TODO Auto-generated method stub
}
}
class MockTuple
implements
Tuple {
private Map declarations;
public MockTuple(final Map declarations) {
this.declarations = declarations;
}
public InternalFactHandle get(final int column) {
return null;
}
public InternalFactHandle get(final Declaration declaration) {
return (InternalFactHandle) this.declarations.get( declaration );
}
public InternalFactHandle[] getFactHandles() {
return (InternalFactHandle[]) this.declarations.values().toArray( new FactHandle[0] );
}
public boolean dependsOn(final FactHandle handle) {
return false;
}
public void setActivation(final Activation activation) {
}
public long getRecency() {
// TODO Auto-generated method stub
return 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -