/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* 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.workbench.models.commons.backend.rule;
import java.util.Arrays;
import java.util.Collections;
import org.drools.workbench.models.commons.backend.oracle.PackageDataModelOracleImpl;
import org.drools.workbench.models.commons.backend.rule.actions.TestIAction;
import org.drools.workbench.models.commons.backend.rule.exception.RuleModelDRLPersistenceException;
import org.drools.workbench.models.commons.backend.rule.extensions.TestIActionPersistenceExtension;
import org.drools.workbench.models.commons.backend.rule.extensions.TestIActionPersistenceExtensionCopy;
import org.drools.workbench.models.datamodel.rule.FreeFormLine;
import org.drools.workbench.models.datamodel.rule.IAction;
import org.drools.workbench.models.datamodel.rule.RuleModel;
import org.junit.Test;
import static org.junit.Assert.*;
public class RuleModelDRLPersistenceExtensionsTest {
private static final String DRL_RULE = "" +
"rule \"TestIAction rule\"\n" +
"\tdialect \"mvel\"\n" +
"\twhen\n" +
"\tthen\n" +
"\t\ttestIAction();\n" +
"end\n";
private static final String DSL_RULE = "" +
"rule \"TestIAction rule\"\n" +
"\tdialect \"mvel\"\n" +
"\twhen\n" +
"\tthen\n" +
"\t\t>testIAction();\n" +
"end\n";
@Test
public void unmarshalWithoutExtensions() {
RuleModel ruleModel = RuleModelDRLPersistenceImpl.getInstance().unmarshal(DRL_RULE,
Collections.emptyList(),
new PackageDataModelOracleImpl());
assertEquals(1,
ruleModel.rhs.length);
IAction iAction = ruleModel.rhs[0];
assertTrue(iAction instanceof FreeFormLine);
}
@Test
public void unmarshalWithExtensions() {
RuleModel ruleModel = RuleModelDRLPersistenceImpl.getInstance().unmarshal(DRL_RULE,
Collections.emptyList(),
new PackageDataModelOracleImpl(),
Arrays.asList(new TestIActionPersistenceExtension()));
assertEquals(1,
ruleModel.rhs.length);
IAction iAction = ruleModel.rhs[0];
assertTrue(iAction instanceof TestIAction);
}
@Test(expected = RuleModelDRLPersistenceException.class)
public void unmarshalWithAmbiguousExtensions() {
RuleModelDRLPersistenceImpl.getInstance().unmarshal(DRL_RULE,
Collections.emptyList(),
new PackageDataModelOracleImpl(),
Arrays.asList(new TestIActionPersistenceExtension(),
new TestIActionPersistenceExtensionCopy()));
}
@Test
public void unmarshalDSLWithoutExtensions() {
RuleModel ruleModel = RuleModelDRLPersistenceImpl.getInstance().unmarshalUsingDSL(DSL_RULE,
Collections.emptyList(),
new PackageDataModelOracleImpl());
assertEquals(1,
ruleModel.rhs.length);
IAction iAction = ruleModel.rhs[0];
assertTrue(iAction instanceof FreeFormLine);
}
@Test
public void unmarshalDSLWithExtensions() {
RuleModel ruleModel = RuleModelDRLPersistenceImpl.getInstance().unmarshalUsingDSL(DSL_RULE,
Collections.emptyList(),
new PackageDataModelOracleImpl(),
Arrays.asList(new TestIActionPersistenceExtension()));
assertEquals(1,
ruleModel.rhs.length);
IAction iAction = ruleModel.rhs[0];
assertTrue(iAction instanceof TestIAction);
}
@Test(expected = RuleModelDRLPersistenceException.class)
public void unmarshalDSLWithAmbiguousExtensions() {
RuleModelDRLPersistenceImpl.getInstance().unmarshalUsingDSL(DRL_RULE,
Collections.emptyList(),
new PackageDataModelOracleImpl(),
Arrays.asList(new TestIActionPersistenceExtension(),
new TestIActionPersistenceExtensionCopy()));
}
@Test
public void marshalWithoutExtensions() {
RuleModel ruleModel = new RuleModel();
ruleModel.name = "TestIAction rule";
ruleModel.addRhsItem(new TestIAction());
String marshaledString = RuleModelDRLPersistenceImpl.getInstance().marshal(ruleModel);
String expectedString = "" +
"rule \"TestIAction rule\"\n" +
"\tdialect \"mvel\"\n" +
"\twhen\n" +
"\tthen\n" +
"end\n";
assertEquals(expectedString,
marshaledString);
}
@Test
public void marshalWithExtensions() {
RuleModel ruleModel = new RuleModel();
ruleModel.name = "TestIAction rule";
ruleModel.addRhsItem(new TestIAction());
String marshaledString = RuleModelDRLPersistenceImpl.getInstance().marshal(ruleModel,
Arrays.asList(new TestIActionPersistenceExtension()));
assertEquals(DRL_RULE,
marshaledString);
}
@Test(expected = RuleModelDRLPersistenceException.class)
public void marshalWithAmbigiousExtensions() {
RuleModel ruleModel = new RuleModel();
ruleModel.name = "TestIAction rule";
ruleModel.addRhsItem(new TestIAction());
RuleModelDRLPersistenceImpl.getInstance().marshal(ruleModel,
Arrays.asList(new TestIActionPersistenceExtension(),
new TestIActionPersistenceExtensionCopy()));
}
}