/*! ******************************************************************************
*
* 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 junit.framework.TestCase;
import org.pentaho.di.core.row.RowMeta;
import org.pentaho.di.core.row.RowMetaInterface;
import org.pentaho.di.core.row.ValueMetaInterface;
import org.pentaho.di.core.row.value.ValueMetaInteger;
/**
* Test class for the basic functionality of RowSet.
*
* @author Sven Boden
*/
public class RowSetTest extends TestCase {
public RowMetaInterface createRowMetaInterface() {
RowMetaInterface rm = new RowMeta();
ValueMetaInterface[] valuesMeta = { new ValueMetaInteger( "ROWNR" ), };
for ( int i = 0; i < valuesMeta.length; i++ ) {
rm.addValueMeta( valuesMeta[i] );
}
return rm;
}
/**
* The basic stuff.
*/
public void testBasicCreation() {
RowSet set = new BlockingRowSet( 10 );
assertTrue( !set.isDone() );
// TODO assertTrue(set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 0, set.size() );
}
/**
* Functionality test.
*/
public void testFuntionality1() {
RowSet set = new BlockingRowSet( 3 );
RowMetaInterface rm = createRowMetaInterface();
Object[] r1 = new Object[] { new Long( 1L ) };
Object[] r2 = new Object[] { new Long( 2L ) };
Object[] r3 = new Object[] { new Long( 3L ) };
Object[] r4 = new Object[] { new Long( 4L ) };
Object[] r5 = new Object[] { new Long( 5L ) };
// TODO assertTrue(set.isEmpty());
assertEquals( 0, set.size() );
// Add first row. State 1
set.putRow( rm, r1 );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 1, set.size() );
// Add another row. State: 1 2
set.putRow( rm, r2 );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 2, set.size() );
// Pop off row. State: 2
Object[] r = set.getRow();
int i = rm.indexOfValue( "ROWNR" );
assertEquals( 1L, ( (Long) r[i] ).longValue() );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 1, set.size() );
// Add another row. State: 2 3
set.putRow( rm, r3 );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 2, set.size() );
// Add another row. State: 2 3 4
set.putRow( rm, r4 );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(set.isFull());
assertEquals( 3, set.size() );
/*********************************************************************
* This was made in more restrict in v2.5.0 with a new RowSet implementation. After v2.5.0 you may not try to put
* more rows in a rowset then it can hold (this functionality was also never used in PDI anyway).
*
* // Add another row. State: 2 3 4 5 // Note that we can still add rows after the set is full. set.putRow(r5);
* assertTrue(!set.isEmpty()); assertTrue(set.isFull()); assertEquals(4, set.size());
*********************************************************************/
// Pop off row. State: 3 4
r = set.getRow();
i = rm.indexOfValue( "ROWNR" );
assertEquals( 2L, ( (Long) r[i] ).longValue() );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 2, set.size() );
// Add another row. State: 3 4 5
set.putRow( rm, r5 );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(set.isFull());
assertEquals( 3, set.size() );
// Pop off row. State: 4 5
r = set.getRow();
i = rm.indexOfValue( "ROWNR" );
assertEquals( 3L, ( (Long) r[i] ).longValue() );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 2, set.size() );
// Pop off row. State: 5
r = set.getRow();
i = rm.indexOfValue( "ROWNR" );
assertEquals( 4L, ( (Long) r[i] ).longValue() );
// TODO assertTrue(!set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 1, set.size() );
// Pop off row. State:
r = set.getRow();
i = rm.indexOfValue( "ROWNR" );
assertEquals( 5L, ( (Long) r[i] ).longValue() );
// TODO assertTrue(set.isEmpty());
// TODO assertTrue(!set.isFull());
assertEquals( 0, set.size() );
/*********************************************************************
* This was changed v2.5.0 with a new RowSet // Pop off row. State: try { r = set.getRow();
* fail("expected NoSuchElementException"); } catch ( IndexOutOfBoundsException ex ) { } assertTrue(set.isEmpty());
* assertTrue(!set.isFull()); assertEquals(0, set.size());
**********************************************************************/
}
/**
* Names test. Just for completeness.
*/
public void testNames() {
RowSet set = new BlockingRowSet( 3 );
set.setThreadNameFromToCopy( "from", 2, "to", 3 );
assertEquals( "from", set.getOriginStepName() );
assertEquals( 2, set.getOriginStepCopy() );
assertEquals( "to", set.getDestinationStepName() );
assertEquals( 3, set.getDestinationStepCopy() );
assertEquals( set.toString(), set.getName() );
assertEquals( "from.2 - to.3", set.getName() );
}
}