/*! ****************************************************************************** * * 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.core.row; import junit.framework.TestCase; import org.junit.Test; import org.pentaho.di.core.KettleClientEnvironment; import org.pentaho.di.core.row.value.ValueMetaFactory; public class RowMetaAddRemoveValueTest extends TestCase { @Override protected void setUp() throws Exception { KettleClientEnvironment.init(); } @Test public void testAddRemoveValue() throws Exception { RowMetaInterface rowMeta = new RowMeta(); // Add values ValueMetaInterface a = ValueMetaFactory.createValueMeta( "a", ValueMetaInterface.TYPE_STRING ); rowMeta.addValueMeta( a ); assertEquals( 1, rowMeta.size() ); ValueMetaInterface b = ValueMetaFactory.createValueMeta( "b", ValueMetaInterface.TYPE_INTEGER ); rowMeta.addValueMeta( b ); assertEquals( 2, rowMeta.size() ); ValueMetaInterface c = ValueMetaFactory.createValueMeta( "c", ValueMetaInterface.TYPE_DATE ); rowMeta.addValueMeta( c ); assertEquals( 3, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "b" ) ); assertEquals( 2, rowMeta.indexOfValue( "c" ) ); ValueMetaInterface d = ValueMetaFactory.createValueMeta( "d", ValueMetaInterface.TYPE_NUMBER ); rowMeta.addValueMeta( 0, d ); assertEquals( 4, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "d" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "b" ) ); assertEquals( 3, rowMeta.indexOfValue( "c" ) ); ValueMetaInterface e = ValueMetaFactory.createValueMeta( "e", ValueMetaInterface.TYPE_BIGNUMBER ); rowMeta.addValueMeta( 2, e ); assertEquals( 5, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "d" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "e" ) ); assertEquals( 3, rowMeta.indexOfValue( "b" ) ); assertEquals( 4, rowMeta.indexOfValue( "c" ) ); // Remove values in reverse order rowMeta.removeValueMeta( "e" ); assertEquals( 4, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "d" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "b" ) ); assertEquals( 3, rowMeta.indexOfValue( "c" ) ); rowMeta.removeValueMeta( "d" ); assertEquals( 3, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "b" ) ); assertEquals( 2, rowMeta.indexOfValue( "c" ) ); rowMeta.removeValueMeta( "c" ); assertEquals( 2, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "b" ) ); rowMeta.removeValueMeta( "b" ); assertEquals( 1, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); rowMeta.removeValueMeta( "a" ); assertEquals( 0, rowMeta.size() ); } @Test public void testAddRemoveRenameValue() throws Exception { RowMetaInterface rowMeta = new RowMeta(); // Add values ValueMetaInterface a = ValueMetaFactory.createValueMeta( "a", ValueMetaInterface.TYPE_STRING ); rowMeta.addValueMeta( a ); assertEquals( 1, rowMeta.size() ); ValueMetaInterface b = ValueMetaFactory.createValueMeta( "a", ValueMetaInterface.TYPE_INTEGER ); rowMeta.addValueMeta( b ); assertEquals( 2, rowMeta.size() ); ValueMetaInterface c = ValueMetaFactory.createValueMeta( "a", ValueMetaInterface.TYPE_DATE ); rowMeta.addValueMeta( c ); assertEquals( 3, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "a_1" ) ); assertEquals( 2, rowMeta.indexOfValue( "a_2" ) ); ValueMetaInterface d = ValueMetaFactory.createValueMeta( "a", ValueMetaInterface.TYPE_NUMBER ); rowMeta.addValueMeta( 0, d ); assertEquals( 4, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a_3" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "a_1" ) ); assertEquals( 3, rowMeta.indexOfValue( "a_2" ) ); ValueMetaInterface e = ValueMetaFactory.createValueMeta( "a", ValueMetaInterface.TYPE_BIGNUMBER ); rowMeta.addValueMeta( 2, e ); assertEquals( 5, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a_3" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "a_4" ) ); assertEquals( 3, rowMeta.indexOfValue( "a_1" ) ); assertEquals( 4, rowMeta.indexOfValue( "a_2" ) ); // Remove values in reverse order rowMeta.removeValueMeta( "a_4" ); assertEquals( 4, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a_3" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "a_1" ) ); assertEquals( 3, rowMeta.indexOfValue( "a_2" ) ); rowMeta.removeValueMeta( "a_3" ); assertEquals( 3, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "a_1" ) ); assertEquals( 2, rowMeta.indexOfValue( "a_2" ) ); rowMeta.removeValueMeta( "a_2" ); assertEquals( 2, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "a_1" ) ); rowMeta.removeValueMeta( "a_1" ); assertEquals( 1, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); rowMeta.removeValueMeta( "a" ); assertEquals( 0, rowMeta.size() ); } @Test public void testAddRemoveValueCaseInsensitive() throws Exception { RowMetaInterface rowMeta = new RowMeta(); // Add values ValueMetaInterface a = ValueMetaFactory.createValueMeta( "A", ValueMetaInterface.TYPE_STRING ); rowMeta.addValueMeta( a ); assertEquals( 1, rowMeta.size() ); ValueMetaInterface b = ValueMetaFactory.createValueMeta( "b", ValueMetaInterface.TYPE_INTEGER ); rowMeta.addValueMeta( b ); assertEquals( 2, rowMeta.size() ); ValueMetaInterface c = ValueMetaFactory.createValueMeta( "C", ValueMetaInterface.TYPE_DATE ); rowMeta.addValueMeta( c ); assertEquals( 3, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "B" ) ); assertEquals( 2, rowMeta.indexOfValue( "c" ) ); ValueMetaInterface d = ValueMetaFactory.createValueMeta( "d", ValueMetaInterface.TYPE_NUMBER ); rowMeta.addValueMeta( 0, d ); assertEquals( 4, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "D" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "B" ) ); assertEquals( 3, rowMeta.indexOfValue( "c" ) ); ValueMetaInterface e = ValueMetaFactory.createValueMeta( "E", ValueMetaInterface.TYPE_BIGNUMBER ); rowMeta.addValueMeta( 2, e ); assertEquals( 5, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "D" ) ); assertEquals( 1, rowMeta.indexOfValue( "a" ) ); assertEquals( 2, rowMeta.indexOfValue( "e" ) ); assertEquals( 3, rowMeta.indexOfValue( "b" ) ); assertEquals( 4, rowMeta.indexOfValue( "c" ) ); // Remove values in reverse order rowMeta.removeValueMeta( "e" ); assertEquals( 4, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "d" ) ); assertEquals( 1, rowMeta.indexOfValue( "A" ) ); assertEquals( 2, rowMeta.indexOfValue( "b" ) ); assertEquals( 3, rowMeta.indexOfValue( "C" ) ); rowMeta.removeValueMeta( "D" ); assertEquals( 3, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "B" ) ); assertEquals( 2, rowMeta.indexOfValue( "c" ) ); rowMeta.removeValueMeta( "c" ); assertEquals( 2, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); assertEquals( 1, rowMeta.indexOfValue( "B" ) ); rowMeta.removeValueMeta( "b" ); assertEquals( 1, rowMeta.size() ); assertEquals( 0, rowMeta.indexOfValue( "a" ) ); rowMeta.removeValueMeta( "a" ); assertEquals( 0, rowMeta.size() ); } }