/**
* Copyright (c) 2011 Cloudsmith Inc. and other contributors, as listed below.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cloudsmith
*
*/
package org.cloudsmith.geppetto.pp.dsl.tests;
import org.cloudsmith.geppetto.pp.AdditiveExpression;
import org.cloudsmith.geppetto.pp.FunctionCall;
import org.cloudsmith.geppetto.pp.LiteralBoolean;
import org.cloudsmith.geppetto.pp.LiteralDefault;
import org.cloudsmith.geppetto.pp.LiteralName;
import org.cloudsmith.geppetto.pp.LiteralNameOrReference;
import org.cloudsmith.geppetto.pp.LiteralRegex;
import org.cloudsmith.geppetto.pp.LiteralUndef;
import org.cloudsmith.geppetto.pp.PuppetManifest;
import org.cloudsmith.geppetto.pp.SelectorEntry;
import org.cloudsmith.geppetto.pp.SelectorExpression;
import org.cloudsmith.geppetto.pp.SingleQuotedString;
import org.cloudsmith.geppetto.pp.VariableExpression;
import org.cloudsmith.geppetto.pp.dsl.validation.IPPDiagnostics;
import org.eclipse.xtext.junit4.validation.AssertableDiagnostics;
import org.junit.Test;
/**
* Tests validation and serialization of SelectorExpression
*
*/
public class TestSelectorExpression extends AbstractPuppetTests {
// @formatter:off
static final String Sample_Selector = "x ? {\n a => true,\n}\n";
static final String Sample_Selector2 = "x ? {\n a => true,\n be => false,\n}\n";
// @formatter:on
@Test
public void test_Serialize_SelectorExpression() {
PuppetManifest pp = pf.createPuppetManifest();
SelectorExpression se = pf.createSelectorExpression();
pp.getStatements().add(se);
SelectorEntry entry = pf.createSelectorEntry();
se.getParameters().add(entry);
LiteralNameOrReference slhs = pf.createLiteralNameOrReference();
slhs.setValue("x");
LiteralNameOrReference entrylhs = pf.createLiteralNameOrReference();
entrylhs.setValue("a");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
LiteralBoolean b = pf.createLiteralBoolean();
b.setValue(true);
entry.setRightExpr(b);
String s = serializeFormatted(pp);
assertEquals("serialization should produce specified result", Sample_Selector, s);
// add a second entry and format
entry = pf.createSelectorEntry();
se.getParameters().add(entry);
entrylhs = pf.createLiteralNameOrReference();
entrylhs.setValue("be");
entry.setLeftExpr(entrylhs);
b = pf.createLiteralBoolean();
b.setValue(false);
entry.setRightExpr(b);
s = serializeFormatted(pp);
assertEquals("serialization should produce specified result", Sample_Selector2, s);
}
@Test
public void test_Validate_SelectorExpression_NotOk() {
PuppetManifest pp = pf.createPuppetManifest();
SelectorExpression se = pf.createSelectorExpression();
pp.getStatements().add(se);
SelectorEntry entry = pf.createSelectorEntry();
se.getParameters().add(entry);
AdditiveExpression slhs = pf.createAdditiveExpression();
slhs.setOpName("+");
slhs.setLeftExpr(createNameOrReference("1"));
slhs.setRightExpr(createNameOrReference("1"));
VariableExpression entrylhs = pf.createVariableExpression();
entrylhs.setVarName("$a");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(
AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT),
AssertableDiagnostics.errorCode(IPPDiagnostics.ISSUE__UNSUPPORTED_EXPRESSION));
entry.setLeftExpr(slhs);
se.setLeftExpr(entrylhs);
tester.validate(se).assertAll(
AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT),
AssertableDiagnostics.errorCode(IPPDiagnostics.ISSUE__UNSUPPORTED_EXPRESSION));
}
@Test
public void test_Validate_SelectorExpression_Ok() {
PuppetManifest pp = pf.createPuppetManifest();
SelectorExpression se = pf.createSelectorExpression();
pp.getStatements().add(se);
SelectorEntry entry = pf.createSelectorEntry();
se.getParameters().add(entry);
// -- Literal String
{
SingleQuotedString slhs = pf.createSingleQuotedString();
slhs.setText("x");
LiteralName entrylhs = pf.createLiteralName();
entrylhs.setValue("a");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- LiteralName
{
LiteralName slhs = pf.createLiteralName();
slhs.setValue("x");
LiteralName entrylhs = pf.createLiteralName();
entrylhs.setValue("a");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- LiteralNameOrReference
{
LiteralNameOrReference slhs = createNameOrReference("x");
LiteralNameOrReference entrylhs = createNameOrReference("a");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- variable
{
VariableExpression slhs = pf.createVariableExpression();
slhs.setVarName("$x");
VariableExpression entrylhs = pf.createVariableExpression();
entrylhs.setVarName("$a");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- function call
{
FunctionCall slhs = pf.createFunctionCall();
slhs.setLeftExpr(createNameOrReference("include"));
slhs.getParameters().add(pf.createLiteralBoolean());
FunctionCall entrylhs = pf.createFunctionCall();
entrylhs.setLeftExpr(createNameOrReference("include"));
entrylhs.getParameters().add(pf.createLiteralBoolean());
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// boolean
{
LiteralBoolean slhs = pf.createLiteralBoolean();
LiteralBoolean entrylhs = pf.createLiteralBoolean();
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- undef
{
LiteralUndef slhs = pf.createLiteralUndef();
LiteralUndef entrylhs = pf.createLiteralUndef();
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- regex
{
LiteralRegex slhs = pf.createLiteralRegex();
slhs.setValue("/[a-z]*/");
LiteralRegex entrylhs = pf.createLiteralRegex();
entrylhs.setValue("/[a-z]*/");
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertAll(AssertableDiagnostics.warningCode(IPPDiagnostics.ISSUE__MISSING_DEFAULT));
}
// -- default
{
LiteralDefault slhs = pf.createLiteralDefault();
LiteralDefault entrylhs = pf.createLiteralDefault();
se.setLeftExpr(slhs);
entry.setLeftExpr(entrylhs);
entry.setRightExpr(pf.createLiteralBoolean());
tester.validate(se).assertOK();
}
}
}