Update ooo320-m1
[ooovba.git] / testautomation / framework / tools / includes / wizards.inc
blobdc0a85a50bb12205aad39aba565918fa5b001c62
1 'encoding UTF-8  Do not remove or change this line!
2 '*******************************************************************************
3 '* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 '* 
5 '* Copyright 2008 by Sun Microsystems, Inc.
6 '*
7 '* OpenOffice.org - a multi-platform office productivity suite
8 '*
9 '* $RCSfile: wizards.inc,v $
11 '* $Revision: 1.1 $
13 '* last change: $Author: jsi $ $Date: 2008-06-16 12:19:06 $
15 '* This file is part of OpenOffice.org.
17 '* OpenOffice.org is free software: you can redistribute it and/or modify
18 '* it under the terms of the GNU Lesser General Public License version 3
19 '* only, as published by the Free Software Foundation.
21 '* OpenOffice.org is distributed in the hope that it will be useful,
22 '* but WITHOUT ANY WARRANTY; without even the implied warranty of
23 '* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 '* GNU Lesser General Public License version 3 for more details
25 '* (a copy is included in the LICENSE file that accompanied this code).
27 '* You should have received a copy of the GNU Lesser General Public License
28 '* version 3 along with OpenOffice.org.  If not, see
29 '* <http://www.openoffice.org/license.html>
30 '* for a copy of the LGPLv3 License.
32 '/******************************************************************************
34 '*  owner : joerg.skottke@sun.com
36 '*  short description : helper functions for the wizards
38 '\******************************************************************************
40 function hOpenWizardWithMenu( cType as string ) as integer
42     const CFN = "hOpenWizardWithMenu::"
44     '///<h3>Open a wizard via menu</h3>
45     '///<i>Starting point: Any plain document</i><br>
46     '///<i>Uses: framework/tools/input/menuentries.txt</i><br>
47     '///<u>Input</u>:
48     '///<ol>
49     '///+<li>Name of Wizard (string). Known Wizards are:</li>
50     '///<ul>
51     '///+<li>&quot;LETTER&quot;</li>
52     '///+<li>&quot;FAX&quot;</li>
53     '///+<li>&quot;AGENDA&quot;</li>
54     '///+<li>&quot;PRESENTATION&quot;</li>
55     '///+<li>&quot;WEBPAGE&quot;</li>
56     '///+<li>&quot;DOCCONV&quot;</li>
57     '///+<li>&quot;EUROCONV&quot;</li>
58     '///+<li>&quot;ADDRESS&quot;</li>
59     '///+<li>&quot;MAILMERGE&quot;</li>
60     '///</ul>
61     '///</ol>
62     '///<u>Returns</u>:
63     '///<ol>
64     '///+<li>Errorcode (integer)</li>
65     '///<ul>
66     '///+<li>0: The expected wizard is open</li>
67     '///+<li>1: No wizard is open</li>
68     '///+<li>2: The incorrect wizard is open</li>
69     '///+<li>3: The requested wizard is unknown to this function</li>
70     '///</ul>
71     '///</ol>
72     '///<u>Description</u>:
73     '///<ul>
74     
75     dim iMainMenuPosition as integer   ' position in the main menu
76     dim iMenuPosition as integer       ' the position of the menuentry
77     dim iWizardMenuPosition as integer ' the position of the wizards menu
78     dim iWizardID as integer           ' a unique number to identify the wizard
79     dim iWait as integer               ' time of the wizard to open
80     dim iOpen as integer               ' identifier for the open dialog
81     dim brc as boolean                 ' some multi purpose boolean returnvalue
83     hOpenWizardWithMenu() = 0
85     '///+<li>find out where in the menustructure the wizards are located</li>
86     printlog( "Requested Wizard: " & cType )
87     iWizardID           = hGetWizardParams( cType , "ID"   )
88     iMainMenuPosition   = hGetWizardParams( cType , "MAIN" )
89     iMenuPosition       = hGetWizardParams( cType , "SUB"  )
90     iWizardMenuPosition = 4 ' This is the "Wizards" menuentry below "File"
91     
92     try
93         kontext "DocumentWriter"
94         hUseMenu()
96         '///+<li>Open the 'File' menu</li>
97         printlog( CFN & "Open Menu at pos " & iMainMenuPosition )
98         hMenuSelectNr( iMainMenuPosition )
99         WaitSlot( 2000 )
100   
101         '///+<li>if we are in the filemenu the wizards are below a submenu</li>
102         if ( iMainMenuPosition = 1 ) then
103             printlog( CFN & "Select wizards-submenu at pos " & iWizardMenuPosition )
104             hMenuSelectNr( iWizardMenuPosition )
105             WaitSlot( 2000 )
106         else
107             printlog( CFN & "Wizard is not in File-Menu" )
108         endif
109     
110         '///+<li>try to click the menuentry where we expect the wizard</li>
111         printlog( CFN & "Select " & cType & " wizard at pos " & iMenuPosition )
112         hMenuSelectNr( iMenuPosition )
113         WaitSlot( 2000 )
114         brc = true
115     catch
116         ' we end up here, when the menuitems could not be accessed
117         printlog( CFN & "Error accessing menuentry for wizard" )
118         hOpenWizardwithMenu() = 1
119         brc = false
120     endcatch
121     
122     if ( not brc ) then
123         printlog( CFN & "Trying to open wizard using the slot" )
124         select case iWizardId
125         case 1 : FileAutopilotLetter
126         case 2 : FileAutopilotFax
127         case 3 : FileAutopilotAgenda
128         case 4 : FileAutopilotPresentation
129         end select
130     endif
131     
132     '///+<li>wait for a wizard to open, iOpen is the number of the menuitem</li>
133     iOpen = hWaitForWizard()
134     
135     '///+<li>Verify that the correct wizard is open. iOpen should match iMenuPosition</li>
136     ' This works because the menu-positions are unique. BEWARE!
137     if ( iOpen <> iWizardID ) then
138             
139         qaerrorlog( CFN & "Incorrect Wizard is open, did the menu-order change?" )
140                 
141         hFinishWizard( 2 ) 
142         hOpenWizardWithMenu() = 2
144     else
145     
146         hOpenWizardWithMenu() = 0
147                 
148     endif    
149     '///</ul>
150     
151 end function
153 '*******************************************************************************
155 function hFinishWizard( iMode as integer ) as boolean
157     const CFN = "hFinishWizard::"
158     
159     '///<h3>Finish or cancel a wizard</h3>
160     '///<i>Starting point: Any known wizard must be open</i><br>
161     '///<i>If several wizards are open at the same time the outcome is undefined</i><br>
162     '///<u>Input</u>:
163     '///<ol>
164     '///+<li>Closing method (integer). Valid options are:</li>
165     '///<ul>
166     '///+<li>1: Click Finish-Button</li>
167     '///+<li>2: Click Cancel-Button</li>
168     '///+<li>3: Use Accelerator for Finish-Button</li>
169     '///</ul>
170     '///</ol>
171     '///<u>Returns</u>:
172     '///<ol>
173     '///+<li>Errorcode (boolean)</li>
174     '///<ul>
175     '///+<li>TRUE: If everything is ok</li>
176     '///+<li>FALSE: On any error (including incorrect function parameters)</li>
177     '///</ul>
178     '///</ol>
179     '///<u>Description</u>:
180     '///<ul>    
181     
182     '///+<li>Handle possible errors when invoking this function</li>
183     if ( ( iMode < 1 ) or ( iMode > 3 ) ) then
184         printlog( CFN & "Invalid iMode = " & iMode )
185         hFinishWizard() = false
186         exit function
187     endif
189     dim cAccel as string
190     dim iWait as integer
191     dim brc as boolean 
192         brc = false
193        
194         
195     '///+<li>Try to close the wizard</li>
196     for iWait = 1 to 5
197     
198         Kontext "AutopilotLetter"
199         if ( AutopilotLetter.exists() ) then
200             select case iMode
201             case 1 : hWaitForObject( FinishButton, 3000 ) : FinishButton.click()
202             case 2 : AutopilotLetter.cancel()
203             case 3 : cAccel = hGetAccel( "Finish_Wizard" )
204                      AutopilotLetter.typeKeys( cAccel )
205             end select
206             brc = true
207             exit for
208         endif
210         Kontext "AutopilotFax"
211         if ( AutopilotFax.exists() ) then
212             select case iMode
213             case 1 : hWaitForObject( FinishButton, 3000 ) : FinishButton.click()
214             case 2 : AutopilotFax.cancel()
215             case 3 : cAccel = hGetAccel( "Finish_Wizard" )
216                      AutopilotFax.typeKeys( cAccel )            
217             end select
218             brc = true
219             exit for
220         endif
221         
222         Kontext "AutopilotAgenda"
223         if ( AutopilotAgenda.exists() ) then
224             select case iMode
225             case 1 : hWaitForObject( createButton, 3000 ) : createButton.click()
226             case 2 : hWaitForObject( cancelButton, 3000 ) : cancelButton.click()
227             case 3 : cAccel = hGetAccel( "Finish_Wizard" )
228                      AutopilotAgenda.typeKeys( cAccel )            
229             end select
230             brc = true
231             exit for
232         endif    
233         
234         Kontext "MailMergeWizard" 
235         if ( MailMergeWizard.exists() ) then
236             select case iMode
237             case 1 : MailMergeWizard.OK()
238             case 2 : MailMergeWizard.Cancel()
239             case 3 : cAccel = hGetAccel( "Finish_Wizard" )
240                      MailMergeWizard.typeKeys( cAccel )            
241             end select
242             brc = true
243             exit for
244         endif      
245         
246         Kontext "AutopilotPraesentation3" 
247         if ( AutopilotPraesentation3.exists() ) then
248             select case iMode
249             case 1 : AutopilotPraesentation3.OK()
250             case 2 : AutopilotPraesentation3.Cancel()
251             case 3 : cAccel = hGetAccel( "Finish_Wizard" )
252                      AutopilotPraesentation3.typeKeys( cAccel )            
253             end select
254             brc = true
255             exit for
256         endif    
257         
258         Kontext "AutoPilotEuroKonverter" 
259         if ( AutoPilotEuroKonverter.exists() ) then
260             select case iMode
261             case 1 : hWaitForObject( Konvertieren, 3000 ) : Konvertieren.click()
262             case 2 : hWaitForObject( abbrechen   , 3000 ) : abbrechen.click()
263             case 3 : cAccel = hGetAccel( "Finish_Wizard" )
264                      AutoPilotEuroKonverter.typeKeys( cAccel )            
265             end select
266             brc = true
267             exit for
268         endif            
269         
270     next iWait
271     
272     '///+<li>Verify that no wizard is open anymore</li>
273     if ( brc ) then
274         printlog( CFN & "Closed wizard" )
275         hFinishWizard() = true
276     else
277         qaerrorlog( CFN & "No (known) wizard is present to be closed" )
278         hFinishWizard() = false
279     endif
280     '///</ul>
281     
282 end function   
284 '*******************************************************************************
286 function hGetWizardParams( cType as string, cParam as string ) as integer
288     const CFN = "hGetWizardParams::"
289     
290     '///<h3>Retrieve the location of a wizard in the menu</h3>
291     '///<i>Uses: framework/tools/input/menuentries.txt</i><br>
292     '///<i>Refer to inline documentation for further information</i><br>
293     '///<u>Input</u>:
294     '///<ol>
295     '///+<li>Name of Wizard (string). Valid options are:</li>
296     '///<ul>
297     '///+<li>&quot;LETTER&quot;</li>
298     '///+<li>&quot;FAX&quot;</li>
299     '///+<li>&quot;AGENDA&quot;</li>
300     '///+<li>&quot;PRESENTATION&quot;</li>
301     '///+<li>&quot;WEBPAGE&quot;</li>
302     '///+<li>&quot;DOCCONV&quot;</li>
303     '///+<li>&quot;EUROCONV&quot;</li>
304     '///+<li>&quot;ADDRESS&quot;</li>
305     '///+<li>&quot;MAILMERGE&quot;</li>
306     '///</ul>
307     '///+<li>Menu Position (string). Valid options are:</li>
308     '///<ul>
309     '///+<li>&quot;ID&quot; - This is a unique id for the wizard</li>
310     '///+<li>&quot;MAIN&quot; - Main menu position (e.g. &quot;File&quot;</li>
311     '///+<li>&quot;SUB&quot; - Position below main menu</li>
312     '///</ul>    
313     '///</ol>
314     '///<u>Returns</u>:
315     '///<ol>
316     '///+<li>Position of a menu entry (integer)</li>
317     '///<ul>
318     '///+<li>0: Invalid function parameter</li>
319     '///+<li>1-n: Position of the item in the menu</li>
320     '///</ul>
321     '///</ol>
322     '///<u>Description</u>:
323     '///<ul>    
325     dim iParam as integer
326     
327     dim cInputArray( 200 ) as string
328     dim iArraySize as integer
329     
330     dim cFile as string
331         cFile = gTesttoolPath & "framework\tools\input\menuentries.txt"
332         cFile = convertpath( cFile )
333     
334     '///+<li>Lowercase all function parameters</li>
335     cType = ucase( cType )
336     cParam = ucase( cParam )
337     
338     '///+<li>Read in the section containing the waizard parameters</li>
339     '///+<li>Retrieve the requested value from the section</li>
340     iArraySize = hGetDataFileSection( cFile , cInputArray() , ctype , "" , "" )
341     if ( iArraySize = 3 ) then
342     
343         select case cParam
344         case "ID"
345             iParam = hGetValueForKeyAsInt( cInputArray() , "iWizardId" )
346         case "MAIN"
347             iParam = hGetValueForKeyAsInt( cInputArray() , "iMainMenuPosition" )
348         case "SUB"
349             iParam = hGetValueForKeyAsInt( cInputArray() , "iMenuPosition" )
350         end select
351     
352         hGetWizardParams() = iParam
353     else
354         qaerrorlog( CFN & "hGetDataFileSection returned invalid data" )
355         hGetWizardParams() = 0
356     endif
357     '///</ul>
358     
359 end function
361 '*******************************************************************************
363 function hWaitForWizard() as integer
365     const CFN = "hWaitForWizard::"
366     const MAXTRIES = 10 
367     
368     '///<h3>Wait for any wizard to open</h3>
369     '///<i>Uses: framework/tools/input/menuentries.txt</i><br>
370     '///<i>NOTE: Not all wizards are known to this function yet.</i><br>
371     '///<u>Input</u>:
372     '///<ol>
373     '///+<li>Nothing</li>
374     '///</ol>
375     '///<u>Returns</u>:
376     '///<ol>
377     '///+<li>Unique ID of the open wizard</li>
378     '///<ul>
379     '///+<li>0: In case of any error</li>
380     '///+<li>1-n: The unique ID of the currently open wizard (integer)</li>
381     '///+</ul>
382     '///</ol>
383     '///<u>Description</u>:
384     '///<ul>        
385     
386     dim iOpen as integer
387     dim iWait as integer
389     '///+<li>Determine the open wizard by trying wizard.exists()</li>
390     for iWait = 1 to MAXTRIES
391      
392         iOpen = 0
393     
394         kontext "AutopilotLetter"
395         if ( AutopilotLetter.exists() ) then
396             printlog( CFN & "Autopilot Letter is open" )
397             iOpen = hGetWizardParams( "LETTER" , "ID" )
398             exit for
399             endif
401         kontext "AutopilotFax"
402         if ( AutopilotFax.exists() ) then
403             printlog( CFN & "Autopilot Fax is open" )
404             iOpen = hGetWizardParams( "FAX" , "ID" )
405             exit for
406         endif 
407         
408         kontext "AutopilotAgenda"
409         if ( AutopilotAgenda.exists() ) then
410             printlog( CFN & "Autopilot Agenda is open" )
411             iOpen = hGetWizardParams( "AGENDA" , "ID" )
412             exit for
413         endif  
414         
415         Kontext "MailMergeWizard"
416         if ( MailMergeWizard.exists() ) then
417             printlog( CFN & "Mailmerge Wizard is open" )
418             iOpen = hGetWizardParams( "MAILMERGE" , "ID" )
419             exit for
420         endif
421         
422         Kontext "AutopilotPraesentation1"
423         if ( AutopilotPraesentation1.exists() ) then
424             printlog( CFN & "Presentation Wizard is open" )
425             iOpen = hGetWizardParams( "IMPRESS" , "ID" )
426             exit for
427         endif        
428         
429         Kontext "AutoPilotEuroKonverter"
430         if ( AutoPilotEuroKonverter.exists() ) then
431             printlog( CFN & "Euro Converter is open" )
432             iOpen = hGetWizardParams( "EUROCONV" , "ID" )
433             exit for
434         endif
435         
436         Kontext "DocumentConverter"
437         if ( DocumentConverter.exists( 1 ) ) then
438             printlog( CFN & "Document Converter is open" )
439             iOpen = hGetWizardParams( "DOCCONV" , "ID" )
440             exit for
441         endif
443     next iWait
444     
445     hWaitForWizard() = iOpen
446     '///</ul>
447     
448 end function    
450 '*******************************************************************************
452 function hSetTemplateSavePath( cFile as string ) as integer
454     '///<h3>Set the template save-path</h3>
455     '///<i>Starting point: Last page on FAX-, AGENDA- or LETTERWIZARD</i><br>
456     '///<u>Input</u>:
457     '///<ol>
458     '///+<li>Fully qualified path to target template name (string)</li>
459     '///</ol>
460     '///<u>Returns</u>:
461     '///<ol>
462     '///+<li>Errorcode (integer)</li>
463     '///<ul>
464     '///+<li>0: No errors, path has been set correctly</li>
465     '///+<li>1: The &quot;SaveAs&quot;-dialog did not open</li>
466     '///+<li>2: The &quot;SaveAs&quot;-button could not be clicked</li>
467     '///+<li>-1: Incorrect call to function</li>
468     '///+</ul>
469     '///</ol>
470     '///<u>Description</u>:
471     '///<ul> 
473     const CFN = "hSetTemplateSavePath::"
474     
475     dim iErr as integer
477     '///+<li>Validate function parameter</li>        
478     if ( cFile = "" ) then
479         printlog( CFN & "Invalid parameter passed to function: Empty Path" )
480         hSetTemplateSavePath() = -1
481         exit function
482     endif
484     printlog( CFN & "Open the file-save-dialog" )
485     
486     '///+<li>Click on the save-as button</li>    
487     try
488         SaveAsButton.click()
489         
490         kontext "SpeichernDlg"
491         if ( SpeichernDlg.exists( 2 ) ) then
492             printlog( CFN & "File Save dialog shown. Good." )
493             iErr = 0
494         else
495             qaerrorlog( "#i49515# FileSave dialog does not open" )
496             iErr = 1 
497         endif            
498     catch
499         qaerrorlog( "#i58297# Cannot click SaveAs button" )
500         iErr = -1
501     endcatch
503     '///+<li>Enter a filename</li>
504     '///+<li>Save the file</li>    
505     if ( iErr = 0 ) then
506         call dialogtest( SpeichernDlg )
507     
508         printlog( CFN & "Name the file" )
509         DateiName.setText( cFile )
510     
511         printlog( CFN & "Save the template" )
512         speichern.click()
513     endif
515     hSetTemplateSavePath() = iErr
516     '///</ul>
517     
518 end function
520 '*******************************************************************************
522 function hHandleSaveError() as integer
524     const CFN = "hHandleSaveError::"
526     '///<h3>Handle errors while saving a template</h3>
527     '///<i>Starting point: Save-As dialog from last page on FAX-, AGENDA- or LETTERWIZARD</i><br>
528     '///<u>Input</u>:
529     '///<ol>
530     '///+<li>Nothing</li>
531     '///</ol>
532     '///<u>Returns</u>:
533     '///<ol>
534     '///+<li>Errorcode (integer)</li>
535     '///<ul>
536     '///+<li>0: No unexpected dialogs were displayed</li>
537     '///+<li>1: Unexpected Active closed by clicking YES</li>
538     '///+<li>2: Unexpected Active closed by clicking OK</li>
539     '///+</ul>
540     '///</ol>
541     '///<u>Description</u>:
542     '///<ul> 
543     '///<li>Check for unexpected messagebox: file could not be saved</li>
544     '///<li>Close the dialog either with YES or OK</li>
545     '///</ul>
546     
547     dim iErr as integer
549     kontext "active"
550     if ( active.exists( 2 ) ) then
551         printlog( CFN & "Unexpected MsgBox: " & active.getText() )
552         try
553             active.ok()
554             iErr = 2
555         catch
556             active.yes()
557             iErr = 1
558         endcatch
559     else
560         iErr = 0
561     endif
562     
563     hHandleSaveError() = iErr
564     
565     
566 end function
568 '*******************************************************************************
570 function hClickNextButton() as boolean
572     '///<h3>Click the Next-Button on some wizards</h3>
573     '///<i>Starting point: Last page on FAX-, AGENDA- or LETTERWIZARD</i><br>
574     '///<i>Refer to inline documentation for further information</i><br>
575     '///<u>Input</u>:
576     '///<ol>
577     '///+<li>Nothing</li>
578     '///</ol>
579     '///<u>Returns</u>:
580     '///<ol>
581     '///+<li>Status (boolean)</li>
582     '///<ul>
583     '///+<li>TRUE: Everything is ok</li>
584     '///+<li>FALSE: Any error</li>
585     '///+</ul>
586     '///</ol>
587     '///<u>Description</u>:
588     '///<ul> 
591     const CFN = "hClickNextButton::"
592     dim irc as integer
593     dim brc as boolean
594         brc = false
595     dim iBreak as integer
596         iBreak = 0
598     '///+<li>Click the &quot;Next&quot;-button</li>
599     irc = hWaitForObject( NextButton, 5000 )
600     if ( irc >= 0 ) then
601         printlog( CFN & "Next..." )
602         NextButton.click()
603         brc = true
604     else
605         qaerrorlog( CFN & "Button not available within specified time -> bad" )
606     endif
607     
608     '///+<li>Handle the &quot;Document Creation&quot;-dialog (Mailmerge Wizard)</li>
609     kontext "active"
610     do while ( active.exists( 1 ) )
611         iBreak = iBreak + 1
612         printlog( CFN & "Waiting for document creation to complete..." )
613         if ( iBreak = 10 ) then
614             warnlog( "DocumentCreation (MailMergeWizard) not complete within 10 seconds" )
615             brc = false
616             exit do
617         endif
618     loop
619     
620     hClickNextButton() = brc
621     '///</ul>
622             
623 end function