diff options
-rw-r--r-- | basic/qa/basic_coverage/test_tdf125637.vb | 54 | ||||
-rw-r--r-- | basic/qa/cppunit/test_scanner.cxx | 3 | ||||
-rw-r--r-- | basic/source/comp/scanner.cxx | 16 | ||||
-rw-r--r-- | basic/source/inc/scanner.hxx | 1 |
4 files changed, 62 insertions, 12 deletions
diff --git a/basic/qa/basic_coverage/test_tdf125637.vb b/basic/qa/basic_coverage/test_tdf125637.vb new file mode 100644 index 000000000000..58fd1db3b377 --- /dev/null +++ b/basic/qa/basic_coverage/test_tdf125637.vb @@ -0,0 +1,54 @@ +' +' 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 + +Dim passCount As Integer +Dim failCount As Integer +Dim result As String + +Function doUnitTest() As String + result = verify_tdf125637() + If failCount <> 0 Or passCount = 0 Then + doUnitTest = 0 + Else + doUnitTest = 1 + End If +End Function + +Function verify_tdf125637() As String + + passCount = 0 + failCount = 0 + + result = "Test Results" & Chr$(10) & "============" & Chr$(10) + + ' tdf#125637 - correctly hand names ending with an underscore character at the end of the line + Dim test As Long + Dim test_ As Long + test_ = 1234 + test = test_ + + ' Without the fix in place, this test would have failed with: + ' - Expected: 1234 + ' - Actual : 0 + TestLog_ASSERT test, 1234, "Assignment of the variable failed (tdf#125637)" + + result = result & Chr$(10) & "Tests passed: " & passCount & Chr$(10) & "Tests failed: " & failCount & Chr$(10) + verify_tdf125637 = result + +End Function + +Sub TestLog_ASSERT(actual As Variant, expected As Variant, testName As String) + If expected = actual Then + passCount = passCount + 1 + Else + result = result & Chr$(10) & "Failed: " & testName & " returned " & actual & ", expected " & expected + failCount = failCount + 1 + End If +End Sub diff --git a/basic/qa/cppunit/test_scanner.cxx b/basic/qa/cppunit/test_scanner.cxx index 5663c44d027e..01d16e714db6 100644 --- a/basic/qa/cppunit/test_scanner.cxx +++ b/basic/qa/cppunit/test_scanner.cxx @@ -297,7 +297,8 @@ void ScannerTest::testAlphanum() CPPUNIT_ASSERT_EQUAL(size_t(2), symbols.size()); CPPUNIT_ASSERT_EQUAL(OUString("joxclk_"), symbols[0].text); CPPUNIT_ASSERT_EQUAL(SbxVARIANT, symbols[0].type); - CPPUNIT_ASSERT_EQUAL(OUString("joxclk "), source7); // Change the trailing '_' to a ' ' + // tdf#125637 - don't change underscore to space + CPPUNIT_ASSERT_EQUAL(OUString("joxclk_"), source7); CPPUNIT_ASSERT_EQUAL(cr, symbols[1].text); CPPUNIT_ASSERT_EQUAL(SbxVARIANT, symbols[1].type); diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx index f74259d7bbbf..8196d2c7f6e8 100644 --- a/basic/source/comp/scanner.cxx +++ b/basic/source/comp/scanner.cxx @@ -51,6 +51,7 @@ SbiScanner::SbiScanner(const OUString& rBuf, StarBASIC* p) , bCompatible(false) , bVBASupportOn(false) , bPrevLineExtentsComment(false) + , bClosingUnderscore(false) , bInStatement(false) { } @@ -286,19 +287,11 @@ bool SbiScanner::NextSym() if(nCol < aLine.getLength() && bCompatible && aSym.equalsIgnoreAsciiCase("go")) scanGoto(); - // replace closing '_' by space when end of line is following - // (wrong line continuation otherwise) + // tdf#125637 - check for closing underscore if (nCol == aLine.getLength() && aLine[nCol - 1] == '_') { - // We are going to modify a potentially shared string, so force - // a copy, so that aSym is not modified by the following operation - OUString aSymCopy( aSym.getStr(), aSym.getLength() ); - aSym = aSymCopy; - - // HACK: modifying a potentially shared string here! - const_cast<sal_Unicode*>(aLine.getStr())[nLineIdx - 1] = ' '; + bClosingUnderscore = true; } - // type recognition? // don't test the exclamation mark // if there's a symbol behind it @@ -685,7 +678,7 @@ PrevLineCommentLbl: eoln: - if( nCol && aLine[--nLineIdx] == '_' ) + if (nCol && aLine[--nLineIdx] == '_' && !bClosingUnderscore) { nLineIdx = -1; bool bRes = NextSym(); @@ -706,6 +699,7 @@ eoln: nCol2 = nOldCol2; aSym = "\n"; nColLock = 0; + bClosingUnderscore = false; return true; } } diff --git a/basic/source/inc/scanner.hxx b/basic/source/inc/scanner.hxx index 339b4421b829..e5575e99fbaf 100644 --- a/basic/source/inc/scanner.hxx +++ b/basic/source/inc/scanner.hxx @@ -61,6 +61,7 @@ protected: bool bCompatible; // true: OPTION compatible bool bVBASupportOn; // true: OPTION VBASupport 1 otherwise default False bool bPrevLineExtentsComment; // true: Previous line is comment and ends on "... _" + bool bClosingUnderscore; // true: Closing underscore followed by end of line bool bInStatement; void GenError( ErrCode ); |