basic/qa/basic_coverage/test_like.bas |   41 +++++++++++++++++++++++++++++++++
 basic/qa/cppunit/test_vba.cxx         |    1 
 basic/qa/vba_tests/like.vb            |   42 ++++++++++++++++++++++++++++++++++
 basic/source/runtime/runtime.cxx      |    7 +++--
 4 files changed, 88 insertions(+), 3 deletions(-)

New commits:
commit e12fff12b66561bc46a0e22f58919efa443e7e17
Author:     Baole Fang <baole.f...@gmail.com>
AuthorDate: Sat Mar 11 21:39:23 2023 -0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Mar 16 21:14:20 2023 +0000

    tdf#152690: Fix "!" behavior when it is not the first in a group
    
    Fix "!" behavior when it is not the first in a group.
    Add testcases for "!" and Like.
    
    Change-Id: Ia76fa26722b6546d08dd8842d83f55bb0c0ea5ac
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148720
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/basic/qa/basic_coverage/test_like.bas 
b/basic/qa/basic_coverage/test_like.bas
new file mode 100644
index 000000000000..2d018bf64f01
--- /dev/null
+++ b/basic/qa/basic_coverage/test_like.bas
@@ -0,0 +1,41 @@
+'
+' 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_testLike
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testLike()
+    On Error GoTo errorHandler
+    ' Negation test
+    TestUtil.AssertEqual("!" Like "[.!?]",  True, "Negation1")
+    TestUtil.AssertEqual("a" Like "[!abc]",  False, "Negation2")
+    TestUtil.AssertEqual("!" Like "[!!?]", False, "Negation3")
+    TestUtil.AssertEqual("^" Like "[.!?]", False, "Negation4")
+    TestUtil.AssertEqual("^" Like "[.^?]", True, "Negation5")
+    ' Like test from microsoft vba
+    TestUtil.AssertEqual("aBBBa" Like "a*a", True, "Like1")
+    TestUtil.AssertEqual("F" Like "[A-Z]", True, "Like2")
+    TestUtil.AssertEqual("F" Like "[!A-Z]", False, "Like3")
+    TestUtil.AssertEqual("a2a" Like "a#a", True, "Like4")
+    TestUtil.AssertEqual("aM5b" Like "a[L-P]#[!c-e]", True, "Like5")
+    TestUtil.AssertEqual("BAT123khg" Like "B?T*", True, "Like6")
+    TestUtil.AssertEqual("CAT123khg" Like "B?T*", False, "Like7")
+    TestUtil.AssertEqual("ab" Like "a*b", True, "Like8")
+    TestUtil.AssertEqual("a*b" Like "a [*]b", False, "Like9")
+    TestUtil.AssertEqual("axxxxxb" Like "a [*]b", False, "Like10")
+    TestUtil.AssertEqual("a [xyz" Like "a [[]*", True, "Like11")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_testLike", Err, Error$, Erl)
+End Sub
diff --git a/basic/qa/cppunit/test_vba.cxx b/basic/qa/cppunit/test_vba.cxx
index b778d393019b..8a15ba7234e8 100644
--- a/basic/qa/cppunit/test_vba.cxx
+++ b/basic/qa/cppunit/test_vba.cxx
@@ -114,6 +114,7 @@ void VBATest::testMiscVBAFunctions()
         "minute.vb",
         "month.vb",
         "monthname.vb",
+        "like.vb",
         "oct.vb",
         "optional_paramters.vb",
         "qbcolor.vb",
diff --git a/basic/qa/vba_tests/like.vb b/basic/qa/vba_tests/like.vb
new file mode 100644
index 000000000000..c3be1e081b16
--- /dev/null
+++ b/basic/qa/vba_tests/like.vb
@@ -0,0 +1,42 @@
+'
+' 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 VBASupport 1
+Option Explicit
+
+Function doUnitTest() As String
+    TestUtil.TestInit
+    verify_testLike
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testLike()
+    On Error GoTo errorHandler
+    ' Negation test
+    TestUtil.AssertEqual("!" Like "[.!?]",  True, "Negation1")
+    TestUtil.AssertEqual("a" Like "[!abc]",  False, "Negation2")
+    TestUtil.AssertEqual("!" Like "[!!?]", False, "Negation3")
+    TestUtil.AssertEqual("^" Like "[.!?]", False, "Negation4")
+    TestUtil.AssertEqual("^" Like "[.^?]", True, "Negation5")
+    ' Like test from microsoft vba
+    TestUtil.AssertEqual("aBBBa" Like "a*a", True, "Like1")
+    TestUtil.AssertEqual("F" Like "[A-Z]", True, "Like2")
+    TestUtil.AssertEqual("F" Like "[!A-Z]", False, "Like3")
+    TestUtil.AssertEqual("a2a" Like "a#a", True, "Like4")
+    TestUtil.AssertEqual("aM5b" Like "a[L-P]#[!c-e]", True, "Like5")
+    TestUtil.AssertEqual("BAT123khg" Like "B?T*", True, "Like6")
+    TestUtil.AssertEqual("CAT123khg" Like "B?T*", False, "Like7")
+    TestUtil.AssertEqual("ab" Like "a*b", True, "Like8")
+    TestUtil.AssertEqual("a*b" Like "a [*]b", False, "Like9")
+    TestUtil.AssertEqual("axxxxxb" Like "a [*]b", False, "Like10")
+    TestUtil.AssertEqual("a [xyz" Like "a [[]*", True, "Like11")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_testLike", Err, Error$, Erl)
+End Sub
diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx
index 060676cbb8e5..69eeb19b1d1f 100644
--- a/basic/source/runtime/runtime.cxx
+++ b/basic/source/runtime/runtime.cxx
@@ -1491,6 +1491,10 @@ namespace
             case '[':
                 sResult.append(*start++);
                 seenright = 0;
+                if (start < end && *start=='!'){
+                    sResult.append('^');
+                    start++;
+                }
                 while (start < end && !seenright)
                 {
                     switch (*start)
@@ -1505,9 +1509,6 @@ namespace
                         sResult.append(*start);
                         seenright = 1;
                         break;
-                    case '!':
-                        sResult.append('^');
-                        break;
                     default:
                         if (NeedEsc(*start))
                         {

Reply via email to