/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2015 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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.pentaho.di.trans.steps.janino;
import junit.framework.TestCase;
import org.pentaho.di.core.row.value.ValueMetaFactory;
import org.pentaho.di.trans.step.StepInjectionMetaEntry;
import org.pentaho.di.trans.step.StepInjectionUtil;
import java.util.List;
public class JaninoMetaInjectionTest extends TestCase {
public static int NR_FIELDS = 10;
public static String NEW_FIELDNAME = "javaField";
public static String JAVA_EXPRESSION = "inField + otherField";
public static String VALUE_TYPE = "Integer";
public static int LENGTH = 10;
public static int PRECISION = 1;
public static String REPLACE_VALUE = "inField";
public void testInjectionExtraction() throws Exception {
// Test Strategy :
//
// Populate a new object, extract the metadata,
// then inject into another set of metadata, compare the results.
//
JaninoMeta meta = populateJaninoMeta();
List<StepInjectionMetaEntry> entries = meta.extractStepMetadataEntries();
assertEquals( 1, entries.size() );
JaninoMeta newMeta = new JaninoMeta();
newMeta.getStepMetaInjectionInterface().injectStepMetadataEntries( entries );
// Automatic compare
//
List<StepInjectionMetaEntry> cmpEntries = newMeta.extractStepMetadataEntries();
StepInjectionUtil.compareEntryValues( entries, cmpEntries );
}
public void testInjectionEntries() throws Exception {
JaninoMeta meta = populateJaninoMeta();
List<StepInjectionMetaEntry> entries = meta.getStepMetaInjectionInterface().getStepInjectionMetadataEntries();
assertEquals( 1, entries.size() );
StepInjectionMetaEntry fieldsEntry = StepInjectionUtil.findEntry( entries,
JaninoMetaInjection.Entry.EXPRESSION_FIELDS );
assertNotNull( fieldsEntry );
StepInjectionMetaEntry fieldEntry = StepInjectionUtil.findEntry( fieldsEntry.getDetails(),
JaninoMetaInjection.Entry.EXPRESSION_FIELD );
assertNotNull( fieldEntry );
assertNotNull( StepInjectionUtil.findEntry( fieldEntry.getDetails(),
JaninoMetaInjection.Entry.NEW_FIELDNAME ) );
assertNotNull( StepInjectionUtil.findEntry( fieldEntry.getDetails(),
JaninoMetaInjection.Entry.JAVA_EXPRESSION ) );
assertNotNull( StepInjectionUtil.findEntry( fieldEntry.getDetails(),
JaninoMetaInjection.Entry.VALUE_TYPE ) );
assertNotNull( StepInjectionUtil.findEntry( fieldEntry.getDetails(),
JaninoMetaInjection.Entry.LENGTH ) );
assertNotNull( StepInjectionUtil.findEntry( fieldEntry.getDetails(),
JaninoMetaInjection.Entry.PRECISION ) );
assertNotNull( StepInjectionUtil.findEntry( fieldEntry.getDetails(),
JaninoMetaInjection.Entry.REPLACE_VALUE ) );
}
private JaninoMeta populateJaninoMeta() {
JaninoMeta meta = new JaninoMeta();
meta.allocate( NR_FIELDS );
// CHECKSTYLE:Indentation:OFF
for ( int i = 0; i < NR_FIELDS; i++ ) {
meta.getFormula()[i] = new JaninoMetaFunction( NEW_FIELDNAME + i, JAVA_EXPRESSION + i,
ValueMetaFactory.getIdForValueMeta( VALUE_TYPE ), LENGTH + i, PRECISION + i, REPLACE_VALUE + i );
}
return meta;
}
}