/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.framework.hibernate.support;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
public class InClauseBuilderTest
extends TestCase
{
public void testAppendNoValues()
{
final List<Integer> values = new ArrayList<Integer>();
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
}
};
builder.setMaxValuesPrInClause( 3 );
builder.appendTo( sql );
StringBuffer expectedSql = new StringBuffer();
assertEquals( expectedSql.toString(), sql.toString() );
}
public void testAppendOneValue()
{
final List<Integer> values = new ArrayList<Integer>();
values.add( 1 );
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
}
};
builder.setMaxValuesPrInClause( 3 );
builder.appendTo( sql );
StringBuffer expectedSql = new StringBuffer();
expectedSql.append( "(col IN (1))" );
assertEquals( expectedSql.toString(), sql.toString() );
}
public void testAppendOneLessThanThreshold()
{
final List<Integer> values = new ArrayList<Integer>();
values.add( 1 );
values.add( 2 );
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
}
};
builder.setMaxValuesPrInClause( 3 );
builder.appendTo( sql );
StringBuffer expectedSql = new StringBuffer();
expectedSql.append( "(col IN (1,2))" );
assertEquals( expectedSql.toString(), sql.toString() );
}
public void testAppendSameAmountAsThreshold()
{
final List<Integer> values = new ArrayList<Integer>();
values.add( 1 );
values.add( 2 );
values.add( 3 );
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
}
};
builder.setMaxValuesPrInClause( 3 );
builder.appendTo( sql );
StringBuffer expectedSql = new StringBuffer();
expectedSql.append( "(col IN (1,2,3))" );
assertEquals( expectedSql.toString(), sql.toString() );
}
public void testAppendOneMoreThanThreshold()
{
final List<Integer> values = new ArrayList<Integer>();
values.add( 1 );
values.add( 2 );
values.add( 3 );
values.add( 4 );
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
}
};
builder.setMaxValuesPrInClause( 3 );
builder.appendTo( sql );
StringBuffer expectedSql = new StringBuffer();
expectedSql.append( "(col IN (1,2,3) OR col IN (4))" );
assertEquals( expectedSql.toString(), sql.toString() );
}
public void testAppendMany()
{
final List<Integer> values = new ArrayList<Integer>();
values.add( 1 );
values.add( 2 );
values.add( 3 );
values.add( 4 );
values.add( 5 );
values.add( 6 );
values.add( 7 );
values.add( 8 );
values.add( 9 );
values.add( 10 );
values.add( 11 );
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
}
};
builder.setMaxValuesPrInClause( 3 );
builder.appendTo( sql );
StringBuffer expectedSql = new StringBuffer();
expectedSql.append( "(col IN (1,2,3) OR col IN (4,5,6) OR col IN (7,8,9) OR col IN (10,11))" );
assertEquals( expectedSql.toString(), sql.toString() );
}
public void testIndex_starts_with_zero_and_then_increments_by_one()
{
final List<Integer> values = new ArrayList<Integer>();
values.add( 1 );
values.add( 2 );
values.add( 3 );
final StringBuffer sql = new StringBuffer();
InClauseBuilder builder = new InClauseBuilder( "col", values )
{
private int expectedNextIndex = 0;
public void appendValue( StringBuffer sql, Object value )
{
sql.append( value );
assertEquals( expectedNextIndex++, getIndex() );
}
};
builder.appendTo( sql );
}
}