/* * Copyright 2015 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. * * 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.template.parser; import org.junit.Before; import org.junit.Test; import org.kie.api.KieBase; import org.kie.api.command.Command; import org.kie.api.event.process.ProcessEventListener; import org.kie.api.event.rule.RuleRuntimeEventListener; import org.kie.api.logger.KieRuntimeLogger; import org.kie.api.runtime.Calendars; import org.kie.api.runtime.Channel; import org.kie.api.runtime.Environment; import org.kie.api.runtime.Globals; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.KieSessionConfiguration; import org.kie.api.runtime.ObjectFilter; import org.kie.api.runtime.process.ProcessInstance; import org.kie.api.runtime.rule.EntryPoint; import org.kie.api.runtime.rule.FactHandle; import org.kie.api.runtime.rule.LiveQuery; import org.kie.api.runtime.rule.ViewChangedEventListener; import org.kie.api.time.SessionClock; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; public class ExternalSheetListenerTest { private TemplateDataListener esl; private Map<Row, List<StringCell>> assertedRows = new HashMap<Row, List<StringCell>>(); private List<StringCell> currentRow = new ArrayList<StringCell>(); @Before public void setUp() throws Exception { esl = new TemplateDataListener(2, 2, new TestTemplateContainer(), new TestTemplateRuleBase(), new TestGenerator()); } @Test public void testRenderDrl() { String drl = esl.renderDRL(); assertEquals("Test Template Header\nTest Generated DRL\n", drl); } @Test public void testRowHandling() { esl.newRow(0, 3); esl.newCell(0, 0, "row0col0", 0); esl.newCell(0, 1, "row0col1", 0); esl.newCell(0, 2, "row0col2", 0); esl.newRow(1, 3); esl.newCell(1, 0, "row1col0", 0); esl.newCell(1, 1, "row1col1", 0); esl.newCell(1, 2, "row1col2", 0); esl.newRow(2, 3); esl.newCell(2, 0, "row2col0", 0); esl.newCell(2, 1, "row2col1", 0); esl.newCell(2, 2, "row2col2", 0); esl.finishSheet(); assertEquals(2, assertedRows.size()); for (Map.Entry<Row, List<StringCell>> entry : assertedRows.entrySet()) { Row row = entry.getKey(); List<StringCell> cells = entry.getValue(); // first column is not part of the decision table int i = 1; for (StringCell cell : cells) { assertEquals("row" + row.getRowNumber() + "col" + i, cell.getValue()); assertEquals("Pattern " + i, cell.getColumn().getName()); i++; } } } @Test public void testRowHandlingBlankRows() { esl.newRow(0, 3); esl.newCell(0, 0, "row0col0", 0); esl.newCell(0, 1, "row0col1", 0); esl.newCell(0, 2, "row0col2", 0); esl.newRow(1, 3); esl.newCell(1, 0, "row1col0", 0); esl.newCell(1, 1, "row1col1", 0); esl.newCell(1, 2, "row1col2", 0); esl.newRow(2, 3); esl.newCell(2, 0, "row2col0", 0); esl.newCell(2, 1, "row2col1", 0); esl.newCell(2, 2, "row2col2", 0); esl.newRow(3, 3); esl.newCell(3, 0, "", 0); esl.newCell(3, 1, "", 0); esl.newCell(3, 2, "", 0); esl.newRow(4, 3); esl.newCell(4, 0, "", 0); esl.newCell(4, 1, "", 0); esl.newCell(4, 2, "", 0); esl.finishSheet(); assertEquals(2, assertedRows.size()); } private class TestTemplateRuleBase implements TemplateRuleBase { public KieSession newStatefulSession() { return new KieSession() { @Override public int getId() { return 0; } @Override public long getIdentifier() { return 0L; } @Override public void dispose() { } @Override public void destroy() { } @Override public void submit( AtomicAction action ) { } @Override public <T> T getKieRuntime( Class<T> cls ) { return null; } @Override public <T> T execute(Command<T> command) { return null; } @Override public <T extends SessionClock> T getSessionClock() { return null; } @Override public void setGlobal(String identifier, Object value) { } @Override public Object getGlobal(String identifier) { return null; } @Override public Globals getGlobals() { return null; } @Override public Calendars getCalendars() { return null; } @Override public Environment getEnvironment() { return null; } @Override public KieBase getKieBase() { return null; } @Override public void registerChannel(String name, Channel channel) { } @Override public void unregisterChannel(String name) { } @Override public Map<String, Channel> getChannels() { return null; } @Override public KieSessionConfiguration getSessionConfiguration() { return null; } @Override public void halt() { } @Override public org.kie.api.runtime.rule.Agenda getAgenda() { return null; } @Override public EntryPoint getEntryPoint(String name) { return null; } @Override public Collection<? extends EntryPoint> getEntryPoints() { return null; } @Override public org.kie.api.runtime.rule.QueryResults getQueryResults(String query, Object... arguments) { return null; } @Override public LiveQuery openLiveQuery(String query, Object[] arguments, ViewChangedEventListener listener) { return null; } @Override public String getEntryPointId() { return null; } @Override public FactHandle insert(Object fact) { if (fact instanceof Row) { assertedRows.put((Row) fact, currentRow); currentRow = new ArrayList<StringCell>(); } else if (fact instanceof StringCell) { currentRow.add((StringCell) fact); } return null; } @Override public void retract(org.kie.api.runtime.rule.FactHandle handle) { } @Override public void delete(org.kie.api.runtime.rule.FactHandle handle) { } @Override public void delete(org.kie.api.runtime.rule.FactHandle handle, org.kie.api.runtime.rule.FactHandle.State fhState) { } @Override public void update(org.kie.api.runtime.rule.FactHandle handle, Object object) { } @Override public void update(org.kie.api.runtime.rule.FactHandle handle, Object object, String... modifiedProperties) { } @Override public org.kie.api.runtime.rule.FactHandle getFactHandle(Object object) { return null; } @Override public Object getObject(org.kie.api.runtime.rule.FactHandle factHandle) { return null; } @Override public Collection<? extends Object> getObjects() { return null; } @Override public Collection<? extends Object> getObjects(ObjectFilter filter) { return null; } @Override public <T extends org.kie.api.runtime.rule.FactHandle> Collection<T> getFactHandles() { return null; } @Override public <T extends org.kie.api.runtime.rule.FactHandle> Collection<T> getFactHandles(ObjectFilter filter) { return null; } @Override public long getFactCount() { return 0L; } @Override public KieRuntimeLogger getLogger() { return null; } @Override public void addEventListener(ProcessEventListener listener) { } @Override public void removeEventListener(ProcessEventListener listener) { } @Override public Collection<ProcessEventListener> getProcessEventListeners() { return null; } @Override public ProcessInstance startProcess(String processId) { return null; } @Override public ProcessInstance startProcess(String processId, Map<String, Object> parameters) { return null; } @Override public ProcessInstance createProcessInstance(String processId, Map<String, Object> parameters) { return null; } @Override public ProcessInstance startProcessInstance(long processInstanceId) { return null; } @Override public void signalEvent(String type, Object event) { } @Override public void signalEvent(String type, Object event, long processInstanceId) { } @Override public Collection<ProcessInstance> getProcessInstances() { return null; } @Override public ProcessInstance getProcessInstance(long processInstanceId) { return null; } @Override public ProcessInstance getProcessInstance(long processInstanceId, boolean readonly) { return null; } @Override public void abortProcessInstance(long processInstanceId) { } @Override public org.kie.api.runtime.process.WorkItemManager getWorkItemManager() { return null; } @Override public void addEventListener(RuleRuntimeEventListener listener) { } @Override public void removeEventListener(RuleRuntimeEventListener listener) { } @Override public Collection<RuleRuntimeEventListener> getRuleRuntimeEventListeners() { return null; } @Override public void addEventListener(org.kie.api.event.rule.AgendaEventListener listener) { } @Override public void removeEventListener(org.kie.api.event.rule.AgendaEventListener listener) { } @Override public Collection<org.kie.api.event.rule.AgendaEventListener> getAgendaEventListeners() { return null; } @Override public int fireAllRules() { return 0; } @Override public int fireAllRules(int max) { return 0; } @Override public int fireAllRules(org.kie.api.runtime.rule.AgendaFilter agendaFilter) { return 0; } @Override public int fireAllRules(org.kie.api.runtime.rule.AgendaFilter agendaFilter, int max) { return 0; } @Override public void fireUntilHalt() { } @Override public void fireUntilHalt(org.kie.api.runtime.rule.AgendaFilter agendaFilter) { } }; } } private class TestGenerator implements Generator { public void generate(String templateName, Row row) { } public String getDrl() { return "Test Generated DRL"; } } private class TestTemplateContainer implements TemplateContainer { public void addColumn(Column c) { } public void addTemplate(RuleTemplate template) { } public Column[] getColumns() { return new Column[]{new StringColumn("Pattern 1"), new StringColumn("Pattern 2"), new StringColumn("Pattern 3")}; } public String getHeader() { return "Test Template Header"; } public Map<String, RuleTemplate> getTemplates() { return null; } public void setHeader(String head) { } public void setTemplates(Map<String, RuleTemplate> templates) { } public Column getColumn(String name) { return null; } } }