diff options
Diffstat (limited to 'testautomation/global/tools/includes/optional/t_docfuncs.inc')
-rw-r--r-- | testautomation/global/tools/includes/optional/t_docfuncs.inc | 475 |
1 files changed, 475 insertions, 0 deletions
diff --git a/testautomation/global/tools/includes/optional/t_docfuncs.inc b/testautomation/global/tools/includes/optional/t_docfuncs.inc new file mode 100644 index 000000000000..7f43b7211630 --- /dev/null +++ b/testautomation/global/tools/includes/optional/t_docfuncs.inc @@ -0,0 +1,475 @@ +'encoding UTF-8 Do not remove or change this line! +'************************************************************************** +' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +' +' Copyright 2000, 2010 Oracle and/or its affiliates. +' +' OpenOffice.org - a multi-platform office productivity suite +' +' This file is part of OpenOffice.org. +' +' OpenOffice.org is free software: you can redistribute it and/or modify +' it under the terms of the GNU Lesser General Public License version 3 +' only, as published by the Free Software Foundation. +' +' OpenOffice.org is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU Lesser General Public License version 3 for more details +' (a copy is included in the LICENSE file that accompanied this code). +' +' You should have received a copy of the GNU Lesser General Public License +' version 3 along with OpenOffice.org. If not, see +' <http://www.openoffice.org/license.html> +' for a copy of the LGPLv3 License. +' +'/************************************************************************ +'* +'* owner : joerg.skottke@oracle.com +'* +'* short description : misc functions to handle documents +'* +'\****************************************************************************** + +function hUseImpressAutopilot( bEnable as boolean ) as boolean + + '///<h3>Enable/disable the Impress Autopilot in Tools/Options</h3> + '///<i>Starting point: Any plain document</i> + '///<ul> + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hUseImpressAutopilot::" + + if ( GVERBOSE ) then printlog( CFN & "Enter" ) + + '///+<li>Create a new IMPRESS document</li> + gApplication = "IMPRESS" + hCreateDocument() + + '///+<li>Open Tools/Options, go to Presentataion/General page</li> + ToolsOptions + hToolsOptions( gApplication , "General" ) + + '///+<li>Check or uncheck to start with autopilot</li> + Kontext "TabSonstigesDraw" + if ( mitAutopilotStarten.exists( 2 ) ) then + + if ( bEnable ) then + mitAutopilotStarten.check() + if ( GVERBOSE ) then printlog( CFN & "Enable Impress Autopilot" ) + else + mitAutopilotStarten.uncheck() + if ( GVERBOSE ) then printlog( CFN & "Disable Impress Autopilot" ) + endif + + '///+<li>Return Status of Checkbox (checked=TRUE)</li> + hUseImpressAutopilot() = mitAutopilotStarten.isChecked() + + else + + warnlog( CFN & "Cannot find Autopilot Checkbox" ) + + endif + + '///+<li>Close Tools/Options</li> + Kontext "OptionenDlg" + hCloseDialog( OptionenDlg, "ok" ) + + '///+<li>Close IMPRESS document</li> + hDestroyDocument() + + '///+<li>Returncode is undefined</li> + if ( GVERBOSE ) then printlog( CFN & "Exit" ) + '///</ul> + +end function + +'******************************************************************************* + +function hNumericDocType( doctype as integer ) as string + + '///<h3>Convert a numeric expression to a gApplication</h3> + '///<i>BEWARE: This is a core function used by many testcases!</i><br> + '///<u>Using file: global/input/applications.txt as reference</u> + '///<ul> + + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hNumericDocType::" + + dim sFile as string + sFile = gTesttoolPath & "global\input\applications.txt" + sFile = convertpath( sFile ) + + dim sList( 100 ) as string + dim iDocTypes as integer + + if ( GVERBOSE ) then printlog( CFN & "Enter" ) + + '///+<li>Retrieve matching list from file</li> + hGetDataFileSection( sFile , sList() , "application" , "" , "" ) + iDocTypes = val( sList( 0 ) ) + + '///+<li>Verify that the functionparameter (documenttype) is valid</li> + if ( ( doctype < 0 ) or ( doctype > iDocTypes ) ) then + warnlog( CFN & "Undefined numeric doctype: " & doctype ) + hNumericDocType() = "" + exit function + endif + + '///+<li>Set gApplication to the requested document type</li> + gApplication = hGetValueForKeyAsString( sList() , doctype ) + + '///+<li>Set a plain text name as returnvalue for the function</li> + hGetDataFileSection( sFile , sList() , "application_names" , "" , "" ) + hNumericDocType() = hGetValueForKeyAsString( sList() , gApplication ) + if ( GVERBOSE ) then printlog( CFN & "Exit" ) + '///</ul> + +end function + +'******************************************************************************* + +function hChangeDoc() as string + + '///<h3>Function to modify all documenttypes to set the "changed" flag</h3> + '///<i>Starting point: Any plain document</i><br> + '///<u>Input</u>: + '///<ol> + '///+<li>Nothing</li> + '///</ol> + '///<u>Returns</u>: + '///<ol> + '///+<li>String, ready to use in printlog</li> + '///<ul> + '///+<li>"Changed <Documenttype>"</li> + '///</ul> + '///</ol> + '///<u>Description</u>: + '///<ul> + + sleep() + + select case gApplication + + '///+<li>WRITER: Type some text</li> + case "WRITER", "HTML", "MASTERDOCUMENT" + Kontext "DocumentWriter" + DocumentWriter.TypeKeys "<Return>This doc is changed!" + hChangeDoc() = "Changed WRITER/HTML/MASTERDOC" + + '///+<li>CALC: Write some text into the current location (usually A1)</li> + case "CALC" : Kontext "DocumentCalc" + DocumentCalc.TypeKeys "<Down>This doc is changed!<Return>" + hChangeDoc() = "Changed CALC" + + '///+<li>DRAW: Draw a rectangle</li> + case "DRAW" : Kontext "DocumentDraw" + hRechteckErstellen ( 20, 20, 25, 25 ) + gMouseClick ( 1, 1 ) + hChangeDoc() = "Changed DRAW" + + '///+<li>IMPRESS: Draw a rectangle</li> + case "IMPRESS": Kontext "DocumentImpress" + hRechteckErstellen ( 20, 20, 25, 25 ) + gMouseClick ( 1, 1 ) + hChangeDoc() = "Changed IMPRESS" + + '///+<li>MATH: Create a simple formaula</li> + case "MATH" : SchreibenInMathdok( "b over c" ) + kontext "DocumentMath" + hChangeDoc() = "Changed MATH" + gMouseClick( 50 , 50 ) + + end select + '///</ul> + +end function + +'******************************************************************************* + +function hIdentifyWriterDoc( cString as string, bWarn as boolean ) as boolean + + '///<h3>Function to validate that the expected WRITER doc has the focus</h3> + '///<i>Starting point: Any WRITER document containing some text</i> + '///<ul> + + use "global\tools\includes\optional\t_stringtools.inc" + + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hIdentifyWriterDoc::" + dim cIdentifier as string + dim irc as integer ' some temporary returnvalue + + if ( GVERBOSE ) then printlog( CFN & "Enter" ) + + '///+<li>Test the function parameter</li> + if ( cString = "" ) then + qaerrorlog( CFN & "Function parameter is empty string. Aborting" ) + hIdentifyWriterDoc() = false + exit function + endif + + '///+<li>Verify function prerequisites</li> + kontext "DocumentWriter" + if ( not DocumentWriter.exists() ) then + printlog( CFN & "There is no Writer document. Aborting" ) + hIdentifyWriterDoc() = false + exit function + endif + + hIdentifyWriterDoc() = true + + '///+<li>Go to the very beginning of the current writer document</li> + kontext "DocumentWriter" + DocumentWriter.typeKeys( "<MOD1 HOME>" ) + + '///+<li>Select the entire line</li> + DocumentWriter.typeKeys( "<SHIFT END>" ) + + '///+<li>copy the string to the clipboard and store it into a variable</li> + hUseAsyncSlot( "EditCopy" ) + cIdentifier = getClipboardText() + + '///+<li>compare the string to the reference (given as parameter)</li> + irc = hCompareSubstrings( cIdentifier, cString ) + + '///+<li>Write the result to the printlog if desired</li> + if ( irc = 0 ) then + + if ( GVERBOSE ) then printlog( CFN & "The focus is not on the expected document" ) + if ( bWarn ) then warnlog ( CFN & "The focus is not on the expected document" ) + + printlog( CFN & "Expected: " & cString ) + printlog( CFN & "Found...: " & cIdentifier ) + hIdentifyWriterDoc() = false + + else + printlog( CFN & "OK: The document contains the requested string" ) + endif + '///+<li>Return TRUE only if the current document is the expected one</li> + + if ( GVERBOSE ) then printlog( CFN & "Exit" ) + '///</ul> + +end function + +'******************************************************************************* + +function hCreateDocument() as boolean + + '///<h3>Create anew document, extends hNewDocument() by providing a returnvalue</h3> + ' TRUE = New document created, FALSE = Failed to create a new document ' + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hCreateDocument::" + + dim iDocCountBefore as integer + dim iDocCountAfter as integer + + iDocCountBefore = getDocumentCount + if ( GVERBOSE ) then printlog( CFN & "Number of open documents before: " & iDocCountBefore ) + + if ( gApplication = "BACKGROUND" ) then + hFileCloseAll() + hCreateDocument() = true + else + + call hNewDocument() + iDocCountAfter = getDocumentCount() + if ( iDocCountAfter = ( iDocCountBefore + 1 ) ) then + hCreateDocument() = true + else + hCreateDocument() = false + endif + endif + if ( GVERBOSE ) then printlog( CFN & "New document created. Open: " & iDocCountAfter ) + '///</ul> + +end function + +'******************************************************************************* + +function hDocumentTypeKeys( cString as string ) as boolean + + '///<h3>Type a string to a document</h3> + '///<i>The documenttype is determined by gApplication.<br> + '///See hNumericDocType for details and number/gApplication matching</i><br> + '///<u>Input</u>: + '///<ol> + '///+<li>Keystrokes to be sent to the document (string), e.g.</li> + '///<ul> + '///+<li>"<SHIFT HOME>"</li> + '///+<li>"<MOD1 A>"</li> + '///+<li>"<MOD2 Q>"</li> + '///+<li>"Hello"</li> + '///</ul> + '///</ol> + '///<u>Returns</u>: + '///<ol> + '///+<li>Errorstatus (boolean)</li> + '///<ul> + '///+<li>TRUE if all went well</li> + '///+<li>FALSE on any error</li> + '///</ul> + '///</ol> + '///<u>Description</u>: + '///<ul> + + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hDocumentTypeKeys::" + + if ( GVERBOSE ) then printlog( CFN & "Enter" ) + hDocumentTypeKeys() = true + + '///+<li>Set focus to the current documenttype determined by gApplication</li> + '///+<li>Type the string passed as function parameter</li> + select case gApplication + case "WRITER" : kontext "DocumentWriter" + DocumentWriter.typeKeys( cString ) + case "CALC" : kontext "DocumentCalc" + DocumentCalc.typeKeys( cString ) + case "IMPRESS" : kontext "DocumentImpress" + DocumentImpress.typeKeys( cString ) + case "DRAW" : kontext "DocumentDraw" + DocumentDraw.typeKeys( cString ) + case "MATH" : kontext "DocumentMath" + DocumentMath.typeKeys( cString ) + case "MASTERDOCUMENT": kontext "DocumentWriter" + DocumentWriter.typeKeys( cString ) + case "HTML" : kontext "DocumentWriter" + DocumentWriter.typeKeys( cString ) + case else + warnlog( CFN & "Exit: Unknown gApplication: " & gApplication ) + hDocumentTypeKeys() = false + exit function + end select + + '///+<li>Print some message to the log on success</li> + printlog( CFN & "Exit: Sent keystroke to " & gApplication ) + '///</ul> + +end function + + +'******************************************************************************* + +function hDestroyDocument() as boolean + + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hDestroyDocument: " + dim iDocCount as integer : iDocCount = getDocumentCount() + hDestroyDocument() = false + + dim method( 3 ) as string + method( 1 ) = "no,optional" + method( 2 ) = "202,optional" + method( 3 ) = "ok,optional" ' This could be a File I/O error + + dim iCurrentMethod as integer + dim bDialogClosed as boolean + + if ( iDocCount = 0 ) then exit function + if ( GVERBOSE ) then printlog( CFN & "In.: Open: " & iDocCount ) + + hUseAsyncSlot( "FileClose" ) + + for iCurrentMethod = 1 to 3 + + bDialogClosed = false + + Kontext "Active" + if ( Active.exists( 1 ) ) then + printlog( CFN & "Msgbox: " & Active.getText() ) + if ( GVERBOSE ) then printlog( CFN & "Method: " & method( iCurrentMethod ) ) + bDialogClosed = hCloseDialog( Active, method( iCurrentMethod ) ) + else + exit for + endif + + if ( iCurrentMethod = 3 and bDialogClosed ) then + warnlog( "Unexpected messagebox was handled" ) + endif + + next iCurrentMethod + + if ( getDocumentCount() = iDocCount ) then hCloseDocument() + if ( getDocumentCount() = iDocCount - 1 ) then hDestroyDocument() = true + if ( GVERBOSE ) then printlog( CFN & "Out: Open: " & getDocumentCount() ) + +end function + +'******************************************************************************* + +function hInitSingleDoc() as boolean + + hFileCloseAll() + hCreateDocument() + + if ( GVERBOSE ) then printlog( "hInitSingleDoc(): Opening document: " & gApplication ) + + if ( getDocumentCount = 1 ) then + hInitSingleDoc() = true + else + hInitSingleDoc() = false + endif + +end function + +'*******************************************************************************'******************************************************************************* + +function hInitWriteDocIdentifier( cString as string ) as boolean + + + '///<h3>Write a specific string to an open writer document</h3> + '///<i>This function verifies that exactly one document is open, that this is a + '///+ Writer document and writes the string to the document</i><br><br> + + '///<u>Parameter(s):</u><br> + '///<ol> + + '///+<li>A free form string (String) which serves as identifier for the document</li> + '///<ul> + '///+<li>The first character should be uppercase</li> + '///</ul> + + '///</ol> + + + '///<u>Returns:</u><br> + '///<ol> + '///+<li>Errorcondition (Boolean)</li> + '///<ul> + '///+<li>TRUE: The string was written correctly</li> + '///+<li>FALSE: Too many open documents</li> + '///+<li>FALSE: Not a Writer document</li> + '///+<li>FALSE: Any other error</li> + '///</ul> + '///</ol> + + const CFN = "global::tools::includes::optional::t_docfuncs.inc::hInitWriteDocIdentifier::" + const RC_TIMEOUT = -1 + + if ( getDocumentCount = 1 and gApplication = "WRITER" ) then + + kontext "DocumentWriter" + DocumentWriter.typeKeys( "<MOD1 END>" ) + DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" ) + DocumentWriter.typeKeys( "<DELETE>" ) + DocumentWriter.typekeys( cString ) + + DocumentWriter.typeKeys( "<MOD1 END>" ) + DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" ) + + if ( hUseAsyncSlot( "EditCopy" ) <> RC_TIMEOUT ) then + + if ( getClipboardText = cString ) then + printlog( CFN & "Writer document has been successfully modified." ) + hInitWriteDocIdentifier() = true + else + warnlog( CFN & "Could not verify document identification string" ) + hInitWriteDocIdentifier() = false + endif + else + warnlog( CFN & "Unable to copy text to clipboard using <EditCopy>" ) + hInitWriteDocIdentifier() = false + endif + else + warnlog ( CFN & "Only one single writer document may be open" ) + printlog( CFN & "Number of documents: " & getDocumentCount ) + printlog( CFN & "Application........: " & gApplication ) + hInitWriteDocIdentifier() = false + endif + +end function |