This is an automated email from the ASF dual-hosted git repository.

damjan pushed a commit to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git


The following commit(s) were added to refs/heads/AOO42X by this push:
     new 529e2ed379 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.
529e2ed379 is described below

commit 529e2ed3790cc917d723356b2d814f437d1054a3
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 f9af4aea1a..0c6393f105 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 f70c72a4ce..11fb28d4b7 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
     {

Reply via email to