/* * 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 ); } }