vcl/CppunitTest_vcl_unit_conversion.mk |   25 +++++++++++++++++++++++++
 vcl/Module_vcl.mk                      |    1 +
 vcl/qa/cppunit/UnitConversionTest.cxx  |   33 +++++++++++++++++++++++++++++++++
 vcl/source/control/field.cxx           |    2 +-
 4 files changed, 60 insertions(+), 1 deletion(-)

New commits:
commit c1f837156e7a2970dd20d319d5381c6ed10e8d16
Author:     Mike Kaganski <[email protected]>
AuthorDate: Sun Oct 19 18:29:20 2025 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Sun Oct 19 19:01:24 2025 +0200

    Fix ConvertAndScaleValue
    
    When taking a shortcut, it must consider the corrected nDecDigits,
    not the original value of nDigits.
    
    E.g., when nValue is 100, nDigits is 0, eInUnit is Map100thMM, and
    eOutUnit is FieldUnit::MM, the expected result is 1 (mm). The old
    code took a shortcut, and returned 100.
    
    Change-Id: Ie71184dcfaea309968f9cacbd9251078efcf2c9b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192670
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>

diff --git a/vcl/CppunitTest_vcl_unit_conversion.mk 
b/vcl/CppunitTest_vcl_unit_conversion.mk
new file mode 100644
index 000000000000..77b574078566
--- /dev/null
+++ b/vcl/CppunitTest_vcl_unit_conversion.mk
@@ -0,0 +1,25 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 
100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,vcl_unit_conversion))
+
+$(eval $(call gb_CppunitTest_set_include,vcl_unit_conversion,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/vcl/inc \
+))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,vcl_unit_conversion, \
+    vcl/qa/cppunit/UnitConversionTest \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,vcl_unit_conversion, \
+    vcl \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
index 34053662f68c..a80744aad17a 100644
--- a/vcl/Module_vcl.mk
+++ b/vcl/Module_vcl.mk
@@ -253,6 +253,7 @@ $(eval $(call gb_Module_add_check_targets,vcl,\
     $(if $(filter SKIA,$(BUILD_TYPE)), \
         CppunitTest_vcl_skia) \
     CppunitTest_vcl_filter_igif \
+    CppunitTest_vcl_unit_conversion \
 ))
 
 ifeq ($(USING_X11),TRUE)
diff --git a/vcl/qa/cppunit/UnitConversionTest.cxx 
b/vcl/qa/cppunit/UnitConversionTest.cxx
new file mode 100644
index 000000000000..2fe03db9a8a2
--- /dev/null
+++ b/vcl/qa/cppunit/UnitConversionTest.cxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <vcl/fieldvalues.hxx>
+
+namespace
+{
+CPPUNIT_TEST_FIXTURE(CppUnit::TestFixture, UnitConversionTest)
+{
+    CPPUNIT_ASSERT_EQUAL(sal_Int64(100),
+                         vcl::ConvertAndScaleValue(10000, 0, 
MapUnit::Map100thMM, FieldUnit::MM));
+    CPPUNIT_ASSERT_EQUAL(sal_Int64(1000),
+                         vcl::ConvertAndScaleValue(10000, 1, 
MapUnit::Map100thMM, FieldUnit::MM));
+    CPPUNIT_ASSERT_EQUAL(sal_Int64(10000),
+                         vcl::ConvertAndScaleValue(10000, 2, 
MapUnit::Map100thMM, FieldUnit::MM));
+}
+} // namespace
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx
index ad91e506b11e..d4f3751a2df6 100644
--- a/vcl/source/control/field.cxx
+++ b/vcl/source/control/field.cxx
@@ -1131,7 +1131,7 @@ namespace vcl
         }
 
         // Avoid sal_Int64 <-> double conversion issues if possible:
-        if (eFieldUnit == eOutUnit && nDigits == 0)
+        if (eFieldUnit == eOutUnit && nDecDigits == 0)
         {
             return nValue;
         }

Reply via email to