/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2006 - 2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.openformula.ui.util;
import junit.framework.TestCase;
import org.pentaho.openformula.ui.ParameterUpdateEvent;
import org.pentaho.openformula.ui.model2.FormulaDocument;
import org.pentaho.openformula.ui.model2.FunctionInformation;
import org.pentaho.reporting.libraries.formula.LibFormulaBoot;
@SuppressWarnings( "HardCodedStringLiteral" )
public class FunctionParameterEditHelperTest extends TestCase {
public FunctionParameterEditHelperTest() {
}
protected void setUp() throws Exception {
LibFormulaBoot.getInstance().start();
}
public void testEditExtraParameterEmptyText() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 10, "", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=SUM()" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=SUM()", editResult.text );
assertEquals( 5, editResult.caretPositionAfterEdit );
}
public void testEditExtraParameterText() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 4, "1", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=SUM()" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=SUM(;;;;1)", editResult.text );
assertEquals( 10, editResult.caretPositionAfterEdit );
}
public void testEditExtraParameterText2() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 0, "1", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=SUM()" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=SUM(1)", editResult.text );
assertEquals( 6, editResult.caretPositionAfterEdit );
}
public void testEditExtraParameterText3() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 1, "1", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=SUM(1)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=SUM(1;1)", editResult.text );
assertEquals( 8, editResult.caretPositionAfterEdit );
}
public void testEditExtraParameterText0() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 0, "1", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=SUM(2)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=SUM(1)", editResult.text );
assertEquals( 6, editResult.caretPositionAfterEdit );
}
public void testGlobalReplaceAgainstEmpty() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, -1, "SUM(1; (1 + 1))", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=SUM()" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=SUM(1; (1 + 1))", editResult.text );
assertEquals( 16, editResult.caretPositionAfterEdit );
}
public void testParameterReplacement() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 1, "SUM(1; (1 + 1))", false );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=IF(;;)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=IF(;SUM(1; (1 + 1));)", editResult.text );
assertEquals( 20, editResult.caretPositionAfterEdit );
}
public void testParameterReplacementFirst() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 0, "SUM(1; (1 + 1))", false );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=IF(;;)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=IF(SUM(1; (1 + 1));;)", editResult.text );
assertEquals( 19, editResult.caretPositionAfterEdit );
}
public void testParameterReplacementLast() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 2, "SUM(1; (1 + 1))", false );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=IF(;;)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=IF(;;SUM(1; (1 + 1)))", editResult.text );
assertEquals( 21, editResult.caretPositionAfterEdit );
}
public void testNestedParameterReplacement() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 1, "AND(1; (1 + 1))", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=IF(;SUM();)" );
final FunctionInformation fn = doc.getFunctionForPosition( 9 );
assertEquals( "SUM", fn.getCanonicalName() );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=IF(;SUM(;AND(1; (1 + 1)));)", editResult.text );
assertEquals( 25, editResult.caretPositionAfterEdit );
}
public void testNestedParameterReplacement2() {
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 0, "AND(1; (1 + 1))", true );
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=IF(;SUM();)" );
final FunctionInformation fn = doc.getFunctionForPosition( 9 );
assertEquals( "SUM", fn.getCanonicalName() );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=IF(;SUM(AND(1; (1 + 1)));)", editResult.text );
assertEquals( 24, editResult.caretPositionAfterEdit );
}
public void testCatchAllParameterReplacementFixedPart() {
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=MESSAGE(\"Test\"; 1 ; 2)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 0, "[Some parameter]", true );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=MESSAGE([Some parameter]; 1 ; 2)", editResult.text );
assertEquals( 25, editResult.caretPositionAfterEdit );
}
public void testCatchAllParameterReplacementSoftPart() {
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=MESSAGE(\"Test\"; 1 ; 2)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 2, "[Some parameter]", true );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=MESSAGE(\"Test\"; 1 ;[Some parameter])", editResult.text );
assertEquals( 36, editResult.caretPositionAfterEdit );
}
public void testCatchAllParameterReplacementSoftPart2() {
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=MESSAGE(\"Test\"; 1 ; 2)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 3, "[Some parameter]", true );
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, doc.getText() );
assertEquals( "=MESSAGE(\"Test\"; 1 ; 2;[Some parameter])", editResult.text );
assertEquals( 39, editResult.caretPositionAfterEdit );
}
public void testOptimizeCatchAll() {
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=MESSAGE(\"Test\";;;;)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 3, "[Some parameter]", true );
String text = doc.getText();
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, text );
assertEquals( "=MESSAGE(\"Test\";;;[Some parameter])", editResult.text );
assertEquals( 34, editResult.caretPositionAfterEdit );
}
public void testOptimizeCatchAll2() {
final FormulaDocument doc = new FormulaDocument();
doc.setText( "=MESSAGE(\"Test\";;;;;;)" );
final FunctionInformation fn = doc.getFunctionForPosition( 1 );
final ParameterUpdateEvent event = new ParameterUpdateEvent( this, 3, "[Some parameter]", true );
String text = doc.getText();
final FunctionParameterEditHelper.EditResult editResult =
FunctionParameterEditHelper.buildFormulaText( event, fn, text );
assertEquals( "=MESSAGE(\"Test\";;;[Some parameter])", editResult.text );
assertEquals( 34, editResult.caretPositionAfterEdit );
}
}