/*! ****************************************************************************** * * 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.core; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.pentaho.di.core.injection.DefaultInjectionTypeConverter; import org.pentaho.di.core.row.RowMeta; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.core.row.value.ValueMetaBoolean; import org.pentaho.di.core.row.value.ValueMetaInteger; import org.pentaho.di.core.row.value.ValueMetaString; public class RowMetaAndDataTest { RowMeta rowsMeta; RowMetaAndData row; DefaultInjectionTypeConverter converter = new DefaultInjectionTypeConverter(); enum TestEnum { ONE, Two, three } @Before public void prepare() throws Exception { rowsMeta = new RowMeta(); ValueMetaInterface valueMetaString = new ValueMetaString( "str" ); rowsMeta.addValueMeta( valueMetaString ); ValueMetaInterface valueMetaBoolean = new ValueMetaBoolean( "bool" ); rowsMeta.addValueMeta( valueMetaBoolean ); ValueMetaInterface valueMetaInteger = new ValueMetaInteger( "int" ); rowsMeta.addValueMeta( valueMetaInteger ); } @Test public void testStringConversion() throws Exception { row = new RowMetaAndData( rowsMeta, "text", null, null ); assertEquals( "text", row.getAsJavaType( "str", String.class, converter ) ); row = new RowMetaAndData( rowsMeta, "7", null, null ); assertEquals( 7, row.getAsJavaType( "str", int.class, converter ) ); assertEquals( 7, row.getAsJavaType( "str", Integer.class, converter ) ); assertEquals( 7L, row.getAsJavaType( "str", long.class, converter ) ); assertEquals( 7L, row.getAsJavaType( "str", Long.class, converter ) ); row = new RowMetaAndData( rowsMeta, "y", null, null ); assertEquals( true, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( true, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "yes", null, null ); assertEquals( true, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( true, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "true", null, null ); assertEquals( true, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( true, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "no", null, null ); assertEquals( false, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "n", null, null ); assertEquals( false, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "false", null, null ); assertEquals( false, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "f", null, null ); assertEquals( false, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, "other", null, null ); assertEquals( false, row.getAsJavaType( "str", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "str", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, TestEnum.ONE.name(), null, null ); assertEquals( TestEnum.ONE, row.getAsJavaType( "str", TestEnum.class, converter ) ); row = new RowMetaAndData( rowsMeta, TestEnum.Two.name(), null, null ); assertEquals( TestEnum.Two, row.getAsJavaType( "str", TestEnum.class, converter ) ); row = new RowMetaAndData( rowsMeta, TestEnum.three.name(), null, null ); assertEquals( TestEnum.three, row.getAsJavaType( "str", TestEnum.class, converter ) ); row = new RowMetaAndData( rowsMeta, null, null, null ); assertEquals( null, row.getAsJavaType( "str", String.class, converter ) ); assertEquals( null, row.getAsJavaType( "str", Integer.class, converter ) ); assertEquals( null, row.getAsJavaType( "str", Long.class, converter ) ); assertEquals( null, row.getAsJavaType( "str", Boolean.class, converter ) ); } @Test public void testBooleanConversion() throws Exception { row = new RowMetaAndData( rowsMeta, null, true, null ); assertEquals( true, row.getAsJavaType( "bool", boolean.class, converter ) ); assertEquals( true, row.getAsJavaType( "bool", Boolean.class, converter ) ); assertEquals( 1, row.getAsJavaType( "bool", int.class, converter ) ); assertEquals( 1, row.getAsJavaType( "bool", Integer.class, converter ) ); assertEquals( 1L, row.getAsJavaType( "bool", long.class, converter ) ); assertEquals( 1L, row.getAsJavaType( "bool", Long.class, converter ) ); assertEquals( "Y", row.getAsJavaType( "bool", String.class, converter ) ); row = new RowMetaAndData( rowsMeta, null, false, null ); assertEquals( false, row.getAsJavaType( "bool", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "bool", Boolean.class, converter ) ); assertEquals( 0, row.getAsJavaType( "bool", int.class, converter ) ); assertEquals( 0, row.getAsJavaType( "bool", Integer.class, converter ) ); assertEquals( 0L, row.getAsJavaType( "bool", long.class, converter ) ); assertEquals( 0L, row.getAsJavaType( "bool", Long.class, converter ) ); assertEquals( "N", row.getAsJavaType( "bool", String.class, converter ) ); row = new RowMetaAndData( rowsMeta, null, null, null ); assertEquals( null, row.getAsJavaType( "bool", String.class, converter ) ); assertEquals( null, row.getAsJavaType( "bool", Integer.class, converter ) ); assertEquals( null, row.getAsJavaType( "bool", Long.class, converter ) ); assertEquals( null, row.getAsJavaType( "bool", Boolean.class, converter ) ); } @Test public void testIntegerConversion() throws Exception { row = new RowMetaAndData( rowsMeta, null, null, 7L ); assertEquals( true, row.getAsJavaType( "int", boolean.class, converter ) ); assertEquals( true, row.getAsJavaType( "int", Boolean.class, converter ) ); assertEquals( 7, row.getAsJavaType( "int", int.class, converter ) ); assertEquals( 7, row.getAsJavaType( "int", Integer.class, converter ) ); assertEquals( 7L, row.getAsJavaType( "int", long.class, converter ) ); assertEquals( 7L, row.getAsJavaType( "int", Long.class, converter ) ); assertEquals( "7", row.getAsJavaType( "int", String.class, converter ) ); row = new RowMetaAndData( rowsMeta, null, null, 0L ); assertEquals( false, row.getAsJavaType( "int", boolean.class, converter ) ); assertEquals( false, row.getAsJavaType( "int", Boolean.class, converter ) ); row = new RowMetaAndData( rowsMeta, null, null, null ); assertEquals( null, row.getAsJavaType( "int", String.class, converter ) ); assertEquals( null, row.getAsJavaType( "int", Integer.class, converter ) ); assertEquals( null, row.getAsJavaType( "int", Long.class, converter ) ); assertEquals( null, row.getAsJavaType( "int", Boolean.class, converter ) ); } }