/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 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.compatibility;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import junit.framework.TestCase;
/**
* Test class for the basic functionality of ValueString.
*
* @author Sven Boden
*/
public class ValueStringTest extends TestCase {
/**
* Constructor test 1.
*/
public void testConstructor1() {
ValueString vs = new ValueString();
assertEquals( Value.VALUE_TYPE_STRING, vs.getType() );
assertEquals( "String", vs.getTypeDesc() );
assertEquals( -1, vs.getLength() );
assertEquals( -1, vs.getPrecision() );
ValueString vs1 = new ValueString( "Boden Test" );
assertEquals( Value.VALUE_TYPE_STRING, vs1.getType() );
assertEquals( "String", vs1.getTypeDesc() );
// is the length of the field, not the length of the value
assertEquals( -1, vs1.getLength() );
assertEquals( -1, vs1.getPrecision() );
ValueString vs2 = new ValueString();
// precision is ignored
vs2.setPrecision( 2 );
assertEquals( -1, vs2.getPrecision() );
vs2.setLength( 10 );
assertEquals( 10, vs2.getLength() );
}
/**
* Set the value to null and see what comes out on conversions.
*/
public void testGetNullValue() {
ValueString vs = new ValueString();
assertNull( vs.getString() );
assertEquals( 0.0D, vs.getNumber(), 0.0D );
assertNull( vs.getDate() );
assertEquals( false, vs.getBoolean() );
assertEquals( 0, vs.getInteger() );
assertEquals( null, vs.getBigNumber() );
assertNull( vs.getSerializable() );
}
/**
* Set the value to an integer number and see what comes out on conversions.
*/
public void testGetNumericValue1() {
ValueString vs = new ValueString( "1000" );
assertEquals( "1000", vs.getString() );
assertEquals( 1000.0D, vs.getNumber(), 0.0D );
assertNull( vs.getDate() ); // will fail parsing
assertEquals( false, vs.getBoolean() );
assertEquals( 1000, vs.getInteger() );
assertEquals( BigDecimal.valueOf( 1000 ), vs.getBigNumber() );
}
/**
* Set the value to an "float" number and see what comes out on conversions.
*/
public void testGetNumericValue2() {
ValueString vs = new ValueString( "2.8" );
assertEquals( "2.8", vs.getString() );
assertEquals( 2.8D, vs.getNumber(), 0.0D );
assertNull( vs.getDate() ); // will fail parsing
assertEquals( false, vs.getBoolean() );
assertEquals( 0, vs.getInteger() );
assertEquals( 2.8D, vs.getBigNumber().doubleValue(), 0.1D );
}
/**
* Set the value to a non numeric string.
*/
public void testGetString() {
ValueString vs = new ValueString( "Boden" );
assertEquals( "Boden", vs.getString() );
assertEquals( 0.0, vs.getNumber(), 0.0D );
assertNull( vs.getDate() ); // will fail parsing
assertEquals( false, vs.getBoolean() );
assertEquals( 0, vs.getInteger() );
try {
vs.getBigNumber();
fail( "Expected a NumberFormatException" );
} catch ( NumberFormatException ex ) {
vs = null;
}
}
/**
* Test setting a string.
*/
public void testSetString() {
ValueString vs = new ValueString();
vs.setString( null );
assertNull( vs.getString() );
vs.setString( "" );
assertEquals( "", vs.getString() );
vs.setString( "Boden" );
assertEquals( "Boden", vs.getString() );
}
/**
* Test setting a number.
*
*/
public void testSetNumber() {
ValueString vs = new ValueString();
vs.setNumber( 0 );
assertEquals( "0.0", vs.getString() );
vs.setNumber( 1 );
assertEquals( "1.0", vs.getString() );
vs.setNumber( -1 );
assertEquals( "-1.0", vs.getString() );
vs.setNumber( 2.5 );
assertEquals( "2.5", vs.getString() );
vs.setNumber( 2.8 );
assertEquals( "2.8", vs.getString() );
}
/**
* Test dates in ValueString
*/
public void testSetDate() throws ParseException {
ValueString vs = new ValueString();
SimpleDateFormat format = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss.SSS", Locale.US );
try {
vs.setDate( null );
// assertNull(vs.getString());
fail( "expected NullPointerException" );
} catch ( NullPointerException ex ) {
// This is the original behaviour
}
vs.setDate( format.parse( "2006/06/07 01:02:03.004" ) );
assertEquals( "2006/06/07 01:02:03.004", vs.getString() );
}
/**
* Test booleans in ValueString
*/
public void testSetBoolean() {
ValueString vs = new ValueString();
vs.setBoolean( false );
assertEquals( "N", vs.getString() );
vs.setBoolean( true );
assertEquals( "Y", vs.getString() );
}
public void testSetInteger() {
ValueString vs = new ValueString();
vs.setInteger( -1L );
assertEquals( "-1", vs.getString() );
vs.setInteger( 0L );
assertEquals( "0", vs.getString() );
vs.setInteger( 1L );
assertEquals( "1", vs.getString() );
}
public void testSetBigNumber() {
ValueString vs = new ValueString();
try {
vs.setBigNumber( null );
// assertNull(vs.getString());
fail( "expected NullPointerException" );
} catch ( NullPointerException ex ) {
// This is the original behaviour
}
vs.setBigNumber( BigDecimal.ZERO );
assertEquals( "0", vs.getString() );
}
public void testClone() {
ValueString vs = new ValueString( "Boden" );
ValueString vs1 = (ValueString) vs.clone();
assertFalse( vs.equals( vs1 ) ); // not the same object, equals not implement
assertTrue( vs != vs1 ); // not the same object
assertEquals( vs.getString(), vs1.getString() );
}
}