/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2016 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.textfileoutput; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.UUID; import org.junit.BeforeClass; import org.junit.Test; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.row.value.ValueMetaFactory; import org.pentaho.di.trans.steps.loadsave.LoadSaveTester; import org.pentaho.di.trans.steps.loadsave.validator.ArrayLoadSaveValidator; import org.pentaho.di.trans.steps.loadsave.validator.FieldLoadSaveValidator; public class TextFileOutputMetaTest { @BeforeClass public static void setUpBeforeClass() throws KettleException { KettleEnvironment.init( false ); } public static List<String> getMetaAttributes() { return Arrays.asList( "separator", "enclosure", "enclosure_forced", "enclosure_fix_disabled", "header", "footer", "format", "compression", "encoding", "endedLine", "fileNameInField", "fileNameField", "create_parent_folder", "fileName", "is_command", "servlet_output", "do_not_open_new_file_init", "extention", "append", "split", "haspartno", "add_date", "add_time", "SpecifyFormat", "date_time_format", "add_to_result_filenames", "pad", "fast_dump", "splitevery", "OutputFields" ); } public static Map<String, String> getGetterMap() { Map<String, String> getterMap = new HashMap<String, String>(); getterMap.put( "separator", "getSeparator" ); getterMap.put( "enclosure", "getEnclosure" ); getterMap.put( "enclosure_forced", "isEnclosureForced" ); getterMap.put( "enclosure_fix_disabled", "isEnclosureFixDisabled" ); getterMap.put( "header", "isHeaderEnabled" ); getterMap.put( "footer", "isFooterEnabled" ); getterMap.put( "format", "getFileFormat" ); getterMap.put( "compression", "getFileCompression" ); getterMap.put( "encoding", "getEncoding" ); getterMap.put( "endedLine", "getEndedLine" ); getterMap.put( "fileNameInField", "isFileNameInField" ); getterMap.put( "fileNameField", "getFileNameField" ); getterMap.put( "create_parent_folder", "isCreateParentFolder" ); getterMap.put( "fileName", "getFileName" ); getterMap.put( "is_command", "isFileAsCommand" ); getterMap.put( "servlet_output", "isServletOutput" ); getterMap.put( "do_not_open_new_file_init", "isDoNotOpenNewFileInit" ); getterMap.put( "extention", "getExtension" ); getterMap.put( "append", "isFileAppended" ); getterMap.put( "split", "isStepNrInFilename" ); getterMap.put( "haspartno", "isPartNrInFilename" ); getterMap.put( "add_date", "isDateInFilename" ); getterMap.put( "add_time", "isTimeInFilename" ); getterMap.put( "SpecifyFormat", "isSpecifyingFormat" ); getterMap.put( "date_time_format", "getDateTimeFormat" ); getterMap.put( "add_to_result_filenames", "isAddToResultFiles" ); getterMap.put( "pad", "isPadded" ); getterMap.put( "fast_dump", "isFastDump" ); getterMap.put( "splitevery", "getSplitEvery" ); getterMap.put( "OutputFields", "getOutputFields" ); return getterMap; } public static Map<String, String> getSetterMap() { Map<String, String> setterMap = new HashMap<String, String>(); setterMap.put( "separator", "setSeparator" ); setterMap.put( "enclosure", "setEnclosure" ); setterMap.put( "enclosure_forced", "setEnclosureForced" ); setterMap.put( "enclosure_fix_disabled", "setEnclosureFixDisabled" ); setterMap.put( "header", "setHeaderEnabled" ); setterMap.put( "footer", "setFooterEnabled" ); setterMap.put( "format", "setFileFormat" ); setterMap.put( "compression", "setFileCompression" ); setterMap.put( "encoding", "setEncoding" ); setterMap.put( "endedLine", "setEndedLine" ); setterMap.put( "fileNameInField", "setFileNameInField" ); setterMap.put( "fileNameField", "setFileNameField" ); setterMap.put( "create_parent_folder", "setCreateParentFolder" ); setterMap.put( "fileName", "setFilename" ); setterMap.put( "is_command", "setFileAsCommand" ); setterMap.put( "servlet_output", "setServletOutput" ); setterMap.put( "do_not_open_new_file_init", "setDoNotOpenNewFileInit" ); setterMap.put( "extention", "setExtension" ); setterMap.put( "append", "setFileAppended" ); setterMap.put( "split", "setStepNrInFilename" ); setterMap.put( "haspartno", "setPartNrInFilename" ); setterMap.put( "add_date", "setDateInFilename" ); setterMap.put( "add_time", "setTimeInFilename" ); setterMap.put( "SpecifyFormat", "setSpecifyingFormat" ); setterMap.put( "date_time_format", "setDateTimeFormat" ); setterMap.put( "add_to_result_filenames", "setAddToResultFiles" ); setterMap.put( "pad", "setPadded" ); setterMap.put( "fast_dump", "setFastDump" ); setterMap.put( "splitevery", "setSplitEvery" ); setterMap.put( "OutputFields", "setOutputFields" ); return setterMap; } public static Map<String, FieldLoadSaveValidator<?>> getAttributeValidators() { return new HashMap<String, FieldLoadSaveValidator<?>>(); } public static Map<String, FieldLoadSaveValidator<?>> getTypeValidators() { Map<String, FieldLoadSaveValidator<?>> typeValidators = new HashMap<String, FieldLoadSaveValidator<?>>(); typeValidators.put( TextFileField[].class.getCanonicalName(), new ArrayLoadSaveValidator<TextFileField>( new TextFileFieldLoadSaveValidator() ) ); return typeValidators; } @Test public void testRoundTrip() throws KettleException { LoadSaveTester<TextFileOutputMeta> loadSaveTester = new LoadSaveTester<TextFileOutputMeta>( TextFileOutputMeta.class, getMetaAttributes(), getGetterMap(), getSetterMap(), getAttributeValidators(), getTypeValidators() ); loadSaveTester.testSerialization(); } public static class TextFileFieldLoadSaveValidator implements FieldLoadSaveValidator<TextFileField> { Random rand = new Random(); @Override public TextFileField getTestObject() { String name = UUID.randomUUID().toString(); int type = ValueMetaFactory.getIdForValueMeta( ValueMetaFactory.getValueMetaNames()[rand.nextInt( ValueMetaFactory .getValueMetaNames().length )] ); String format = UUID.randomUUID().toString(); int length = Math.abs( rand.nextInt() ); int precision = Math.abs( rand.nextInt() ); String currencySymbol = UUID.randomUUID().toString(); String decimalSymbol = UUID.randomUUID().toString(); String groupSymbol = UUID.randomUUID().toString(); String nullString = UUID.randomUUID().toString(); return new TextFileField( name, type, format, length, precision, currencySymbol, decimalSymbol, groupSymbol, nullString ); } @Override public boolean validateTestObject( TextFileField testObject, Object actual ) { if ( !( actual instanceof TextFileField ) || testObject.compare( actual ) != 0 ) { return false; } TextFileField act = (TextFileField) actual; if ( testObject.getName().equals( act.getName() ) && testObject.getType() == act.getType() && testObject.getFormat().equals( act.getFormat() ) && testObject.getLength() == act.getLength() && testObject.getPrecision() == act.getPrecision() && testObject.getCurrencySymbol().equals( act.getCurrencySymbol() ) && testObject.getDecimalSymbol().equals( act.getDecimalSymbol() ) && testObject.getGroupingSymbol().equals( act.getGroupingSymbol() ) && testObject.getNullString().equals( act.getNullString() ) ) { return true; } else { return false; } } } }