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 <[email protected]>
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
{