basic/qa/basic_coverage/test_booltypename.bas |   46 ++++++++++++++++++++++++++
 basic/qa/cppunit/test_vba.cxx                 |    1 
 basic/qa/vba_tests/booltypename.vb            |   16 +++++++--
 basic/source/sbx/sbxvalue.cxx                 |    3 +
 4 files changed, 62 insertions(+), 4 deletions(-)

New commits:
commit 565a5fdee3c00b383b4d36180be845d48fd42556
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Tue Dec 28 13:01:22 2021 +0100
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Tue Dec 28 19:54:58 2021 +0100

    tdf#145960 - Return type of boolean operators should be of type boolean
    
    In addition, added missing vba test to the test routine.
    
    Change-Id: I3ee837e1eab30f10e0a4169d11014f9b6574ad1c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127631
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/basic/qa/basic_coverage/test_booltypename.bas 
b/basic/qa/basic_coverage/test_booltypename.bas
new file mode 100644
index 000000000000..f8ed1f13e2a9
--- /dev/null
+++ b/basic/qa/basic_coverage/test_booltypename.bas
@@ -0,0 +1,46 @@
+'
+' 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/.
+'
+
+Option Explicit
+
+Function doUnitTest() As String
+    TestUtil.TestInit
+    verify_testTypeNameBoolean
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testTypeNameBoolean()
+    On Error GoTo errorHandler
+
+    TestUtil.AssertEqual(TypeName(1>2),       "Boolean",  "TypeName(1>2)")
+    TestUtil.AssertEqual(TypeName(2.0>1.0),   "Boolean",  "TypeName(2.0>1.0)")
+    TestUtil.AssertEqual(TypeName("A">"B"),   "Boolean",  
"TypeName(""A"">""B"")")
+
+    TestUtil.AssertEqual(Str(2>1), "True",  "Str(2>1)")
+    TestUtil.AssertEqual(Str(1>2), "False", "Str(1>2)")
+
+    TestUtil.AssertEqual(Str(2.0>1.0), "True",  "Str(2.0>1.0)")
+    TestUtil.AssertEqual(Str(1.0>2.0), "False", "Str(1.0>2.0)")
+
+    TestUtil.AssertEqual(Str("B">"A"), "True",  "Str(""B"">""A"")")
+    TestUtil.AssertEqual(Str("A">"B"), "False", "Str(""A"">""B"")")
+
+    ' tdf#145960 - return type of boolean operators should be of type boolean
+    TestUtil.AssertEqual(TypeName(True Mod True),   "Long",     "TypeName(True 
Mod True)")
+    TestUtil.AssertEqual(TypeName(True \ True),     "Long",     "TypeName(True 
\ True)")
+    TestUtil.AssertEqual(TypeName(True And True),   "Boolean",  "TypeName(True 
And True)")
+    TestUtil.AssertEqual(TypeName(True Or True),    "Boolean",  "TypeName(True 
Or True)")
+    TestUtil.AssertEqual(TypeName(True Xor True),   "Boolean",  "TypeName(True 
Xor True)")
+    TestUtil.AssertEqual(TypeName(True Eqv True),   "Boolean",  "TypeName(True 
Eqv True)")
+    TestUtil.AssertEqual(TypeName(True Imp True),   "Boolean",  "TypeName(True 
Imp True)")
+    TestUtil.AssertEqual(TypeName(Not True),        "Boolean",  "TypeName(Not 
True)")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_testTypeNameBoolean", Err, Error$, Erl)
+End Sub
diff --git a/basic/qa/cppunit/test_vba.cxx b/basic/qa/cppunit/test_vba.cxx
index 87d29f63e464..089da748addb 100644
--- a/basic/qa/cppunit/test_vba.cxx
+++ b/basic/qa/cppunit/test_vba.cxx
@@ -67,6 +67,7 @@ void VBATest::testMiscVBAFunctions()
         "array.vb",
         "asc.vb",
         "atn.vb",
+        "booltypename.vb",
         "cbool.vb",
         "cdate.vb",
         "cdbl.vb",
diff --git a/basic/qa/vba_tests/booltypename.vb 
b/basic/qa/vba_tests/booltypename.vb
index 8c1fd17c211b..202c2370e712 100644
--- a/basic/qa/vba_tests/booltypename.vb
+++ b/basic/qa/vba_tests/booltypename.vb
@@ -18,9 +18,9 @@ End Function
 Sub verify_testTypeNameBoolean()
     On Error GoTo errorHandler
 
-    TestUtil.AssertEqual(TypeName 1>2,       "Boolean",  "TypeName 1>2")
-    TestUtil.AssertEqual(TypeName 2.0>1.0,   "Boolean",  "TypeName 2.0>1.0")
-    TestUtil.AssertEqual(TypeName "A">"B",   "Boolean",  "TypeName 
""A"">""B""")
+    TestUtil.AssertEqual(TypeName(1>2),       "Boolean",  "TypeName(1>2)")
+    TestUtil.AssertEqual(TypeName(2.0>1.0),   "Boolean",  "TypeName(2.0>1.0)")
+    TestUtil.AssertEqual(TypeName("A">"B"),   "Boolean",  
"TypeName(""A"">""B"")")
 
     TestUtil.AssertEqual(Str(2>1), "True",  "Str(2>1)")
     TestUtil.AssertEqual(Str(1>2), "False", "Str(1>2)")
@@ -31,6 +31,16 @@ Sub verify_testTypeNameBoolean()
     TestUtil.AssertEqual(Str("B">"A"), "True",  "Str(""B"">""A"")")
     TestUtil.AssertEqual(Str("A">"B"), "False", "Str(""A"">""B"")")
 
+    ' tdf#145960 - return type of boolean operators should be of type boolean
+    TestUtil.AssertEqual(TypeName(True Mod True),   "Long",     "TypeName(True 
Mod True)")
+    TestUtil.AssertEqual(TypeName(True \ True),     "Long",     "TypeName(True 
\ True)")
+    TestUtil.AssertEqual(TypeName(True And True),   "Boolean",  "TypeName(True 
And True)")
+    TestUtil.AssertEqual(TypeName(True Or True),    "Boolean",  "TypeName(True 
Or True)")
+    TestUtil.AssertEqual(TypeName(True Xor True),   "Boolean",  "TypeName(True 
Xor True)")
+    TestUtil.AssertEqual(TypeName(True Eqv True),   "Boolean",  "TypeName(True 
Eqv True)")
+    TestUtil.AssertEqual(TypeName(True Imp True),   "Boolean",  "TypeName(True 
Imp True)")
+    TestUtil.AssertEqual(TypeName(Not True),        "Boolean",  "TypeName(Not 
True)")
+
     Exit Sub
 errorHandler:
     TestUtil.ReportErrorHandler("verify_testTypeNameBoolean", Err, Error$, Erl)
diff --git a/basic/source/sbx/sbxvalue.cxx b/basic/source/sbx/sbxvalue.cxx
index 10396c3e5eb9..dee531ea28c0 100644
--- a/basic/source/sbx/sbxvalue.cxx
+++ b/basic/source/sbx/sbxvalue.cxx
@@ -843,7 +843,8 @@ bool SbxValue::Compute( SbxOperator eOp, const SbxValue& 
rOp )
                 if( GetType() == SbxSALUINT64 || GetType() == SbxSALINT64
                  || GetType() == SbxCURRENCY  || GetType() == SbxULONG )
                     aL.eType = aR.eType = GetType();
-                else if ( bVBAInterop && eOpType == SbxBOOL )
+                // tdf#145960 - return type of boolean operators should be of 
type boolean
+                else if ( eOpType == SbxBOOL && eOp != SbxMOD && eOp != 
SbxIDIV )
                     aL.eType = aR.eType = SbxBOOL;
                 else
                     aL.eType = aR.eType = SbxLONG;

Reply via email to