This is an automated email from the ASF dual-hosted git repository. mseidel pushed a commit to branch AOO41X in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/AOO41X by this push: new dab0a4ea61 Just like we check for an initial decimal separator in ScanStartString() when the string doesn't start with a currency symbol, check for an initial decimal separator after the currency symbol too. Without this, "$.nn" gets parsed as a text field with "$.nn" instead of a numeric field with $0.nn. dab0a4ea61 is described below commit dab0a4ea612c2d6530cd278121b761102f466930 Author: Damjan Jovanovic <dam...@apache.org> AuthorDate: Wed Jun 12 17:39:30 2024 +0200 Just like we check for an initial decimal separator in ScanStartString() when the string doesn't start with a currency symbol, check for an initial decimal separator after the currency symbol too. Without this, "$.nn" gets parsed as a text field with "$.nn" instead of a numeric field with $0.nn. Add a subsequent JUnit test for this too. Fixes: https://bz.apache.org/ooo/show_bug.cgi?id=82687 - Text entry or CSV import treats $.nn as text Patch by: me (cherry picked from commit 96178715f486e8815def398176cafa748d3cbb73) --- main/svl/JunitTest_svl_complex.mk | 2 + .../numberformatter/NumberFormatterUnitTest.java | 92 ++++++++++++++++++++++ main/svl/source/numbers/zforfind.cxx | 5 ++ 3 files changed, 99 insertions(+) diff --git a/main/svl/JunitTest_svl_complex.mk b/main/svl/JunitTest_svl_complex.mk index 69ae39bc6a..2d53ab830b 100644 --- a/main/svl/JunitTest_svl_complex.mk +++ b/main/svl/JunitTest_svl_complex.mk @@ -46,10 +46,12 @@ $(eval $(call gb_JunitTest_add_sourcefiles,svl_complex,\ svl/qa/complex/passwordcontainer/Test01 \ svl/qa/complex/passwordcontainer/PasswordContainerTest \ svl/qa/complex/passwordcontainer/MasterPasswdHandler \ + svl/qa/complex/numberformatter/NumberFormatterUnitTest \ )) $(eval $(call gb_JunitTest_add_classes,svl_complex,\ complex.passwordcontainer.PasswordContainerUnitTest \ + complex.numberformatter.NumberFormatterUnitTest \ )) # vim: set noet sw=4 ts=4: diff --git a/main/svl/qa/complex/numberformatter/NumberFormatterUnitTest.java b/main/svl/qa/complex/numberformatter/NumberFormatterUnitTest.java new file mode 100644 index 0000000000..3a47cf3d0f --- /dev/null +++ b/main/svl/qa/complex/numberformatter/NumberFormatterUnitTest.java @@ -0,0 +1,92 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 complex.numberformatter; + +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.util.XNumberFormatsSupplier; +import com.sun.star.util.XNumberFormatter; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.openoffice.test.OfficeConnection; +import static org.junit.Assert.*; + +public class NumberFormatterUnitTest { + private XMultiServiceFactory m_xMSF = null; + + @Before public void before() { + try { + m_xMSF = getMSF(); + } catch (Exception e) { + fail ("Cannot create service factory!"); + } + if (m_xMSF == null) { + fail ("Cannot create service factory!"); + } + } + + @After public void after() { + m_xMSF = null; + } + + @Test + public void testDollarDotNumberFormat() throws Exception + { + Object numberFormatterService = m_xMSF.createInstance( "com.sun.star.util.NumberFormatter" ); + XNumberFormatter numberFormatter = UnoRuntime.queryInterface( XNumberFormatter.class, numberFormatterService ); + Object numberFormatsSupplierService = m_xMSF.createInstance( "com.sun.star.util.NumberFormatsSupplier" ); + XNumberFormatsSupplier numberFormatsSupplier = UnoRuntime.queryInterface( XNumberFormatsSupplier.class, numberFormatsSupplierService ); + numberFormatter.attachNumberFormatsSupplier( numberFormatsSupplier ); + + // Bug 82687 - Text entry or CSV import treats $.nn as text + double number = numberFormatter.convertStringToNumber(0, "$.1"); + assertEquals(0.1, number, 0.00001); + } + + private XMultiServiceFactory getMSF() + { + final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); + return xMSF1; + } + + // setup and close connections + @BeforeClass public static void setUpConnection() throws Exception { + System.out.println("setUpConnection()"); + connection.setUp(); + } + + @AfterClass public static void tearDownConnection() + throws InterruptedException, com.sun.star.uno.Exception + { + System.out.println("tearDownConnection()"); + connection.tearDown(); + } + + private static final OfficeConnection connection = new OfficeConnection(); + +} diff --git a/main/svl/source/numbers/zforfind.cxx b/main/svl/source/numbers/zforfind.cxx index 56c8cc87c5..80cb0069dc 100644 --- a/main/svl/source/numbers/zforfind.cxx +++ b/main/svl/source/numbers/zforfind.cxx @@ -1502,6 +1502,11 @@ sal_Bool ImpSvNumberInputScan::ScanStartString( const String& rString, if ( nSign ) // DM -1 SkipBlanks(rString, nPos); } + if ( GetDecSep(rString, nPos) ) + { + nDecPos = 1; + SkipBlanks(rString, nPos); + } } else {