merge the formfield patch from ooo-build
[ooovba.git] / testautomation / framework / required / includes / wizard_mailmerge.inc
blob7b036c85464da769cbea8c76e4e52d1a05ea3f71
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: wizard_mailmerge.inc,v $
11 '* $Revision: 1.2 $
13 '* last change: $Author: rt $ $Date: 2008-09-04 09:17:13 $
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 : Update test for the mailmerge wizard
38 '\******************************************************************************
40 private CSV_DATABASE as string
42 testcase tUpdtWizardMailMerge
44     dim brc as boolean
45     dim irc as integer
46     
47     qaerrorlog( "#i54524# - MM-Wizard modifies datasource -> CVS merge conflict" )
48     
49     CSV_DATABASE = hGetWorkPath() & "myDatabase"
50     hDeleteFile( CSV_DATABASE )
51     hRemoveDatabaseConnections()
53     '///<H1>Update test for Mailmerge Wizard</H1>
54     '///<ul>
55     
56     '///+<li>Make sure exactly one single writer document is open</li>
57     hInitSingleDoc()
58     
59     '///<li>Open the Mailmerge-Wizard</li>
60     printlog( "Open the Mailmerge-Wizard" )
61     ToolsMailMergeWizard
62     
63     '///<ol>
64     '///<li>Page 1</li>
65     Kontext "MailMergeWizard"
66     brc = hUpdtMMWpage1()
67     if ( not brc ) then
68         warnlog( "MailMergeWizard is not visible, aborting test" )
69         goto endsub
70     endif
71     
72     '///<li>Page 2</li>
73     Kontext "MailMergeWizard"
74     brc = hClickNextButton()
75     hUpdtMMWPage2()
76     
77     '///<li>Page 3</li>
78     Kontext "MailMergeWizard"
79     brc = hClickNextButton()
80         hUpdtMMWpage3()
81     
82     '///<li>Page 4</li>
83     Kontext "MailMergeWizard"
84     brc = hClickNextButton()
85     hUpdtMMWPage4()
86     
87     '///<li>Page 5</li>
88     Kontext "MailMergeWizard"
89     brc = hClickNextButton()
90     hUpdtMMWPage5()
92     '///<li>Page 6</li>
93     Kontext "MailMergeWizard"
94     brc = hClickNextButton()
95     hUpdtMMWPage6()
96     
97     '///<li>Page 7</li>
98     Kontext "MailMergeWizard"
99     brc = hClickNextButton()
100     hUpdtMMWPage7()
101     
102     '///<li>Page 8</li>
103     Kontext "MailMergeWizard"
104     brc = hClickNextButton()
105     hUpdtMMWPage8()
106     
107     '///</ol>
108     '///<li>close the wizard</li>
109     printlog( "close the wizard" )
110     Kontext "MailMergeWizard"
111     MailMergeWizard.cancel()
113     hRemoveDatabaseConnections()
114     hCloseDocument()
115     hCloseDocument()
116     '///</ul>
117     
119 endcase
121 '**********************************************************************
123 function hUpdtMMWpage1() as boolean
125     '///<h3>Update test for Mailmerge Wizard - page 1</h3>
126     '///<u>Input</u>:
127     '///<ol>
128     '///+<li>Nothing</li>
129     '///</ol>
130     '///<u>Returns</u>:
131     '///<ol>
132     '///+<li>Errorstatus (boolean)</li>
133     '///<ul>
134     '///+<li>Do not use</li>
135     '///</ul>
136     '///</ol>
137     '///<u>Description</u>:
138     '///<ul>
139     
141     const CFN = "hUpdtMMWpage1::"
142     
143     '///+<li>Verify that the tabpage is open</li>
144     Kontext "TabMailMergeSourceDocument"
145     if ( not TabMailMergeSourceDocument.exists() ) then
146         warnlog( CFN & "Page 1 could not be accessed" )
147         hUpdtMMWPage1() = false
148         exit function
149     endif
151     '///+<li>Click on Browse Document to open FileOpen</li>
152     Kontext "TabMailMergeSourceDocument"
153     if ( BrowseDocument.exists( 1 ) ) then
154         if ( BrowseDocument.isEnabled ) then
155             BrowseDocument.click()
156             
157             '///+<li>Cancel FileOpen dialog</li>
158             Kontext "OeffnenDlg"
159             if ( OeffnenDlg.exists( 1 ) ) then
160                 printlog( CFN & "BrowseDocument::File Open Dialog" )
161                 call dialogtest( OeffnenDlg )
162                 OeffnenDlg.cancel()
163             else
164                 warnlog( CFN & "BrowseDocument::FileOpen not open" )
165             endif
166         else
167             warnlog( CFN & "BrowseDocument::Button is disabled" )
168        endif
169     else
170         warnlog( CFN & "BrowseDocument::Button does not exist" )
171     endif
172     
173     '///+<li>Click on Browse Template to open the New...-dialog</li>
174     Kontext "TabMailMergeSourceDocument"
175     if ( BrowseTemplate.exists( 2 ) ) then
176         if ( BrowseTemplate.isEnabled ) then
177             BrowseTemplate.click()
178             
179             '///+<li>Cancel the New...-dialog</li>
180             Kontext "Neu"
181             if ( Neu.exists( 1 ) ) then
182                 printlog( CFN & "BrowseTemplate::New Dialog" )
183                 call dialogtest( Neu )
184                 Neu.cancel()
185             else
186                 warnlog( CFN & "BrowseTemplate::FileOpen not open" )
187             endif
188         else
189             warnlog( CFN & "BrowseTemplate::Button is disabled" )
190         endif
191     else
192         warnlog( CFN & "BrowseTemplate::Button does not exist" )
193     endif
194         
195     '///+<li>Check to create a new document</li>
196     kontext "TabMailMergeSourceDocument"
197     if ( CreateANewDocument.exists( 2 ) ) then
198         if ( CreateANewDocument.isEnabled ) then
199             printlog( CFN & "Check Create new Document" )
200             CreateANewDocument.check()
201         else
202             warnlog( CFN & "CheckBbox is disabled" )
203         endif
204     else
205         warnlog( CFN & "CheckBox does not exist" )
206     endif
208     hUpdtMMWPage1() = true
209     '///</ul>
211 end function
213 '**********************************************************************
215 function hUpdtMMWpage2()
217     '///<h3>Update test for Mailmerge Wizard - page 2</h3>
218     '///<u>Input</u>:
219     '///<ol>
220     '///+<li>Nothing</li>
221     '///</ol>
222     '///<u>Returns</u>:
223     '///<ol>
224     '///+<li>Nothing</li>
225     '///</ol>
226     '///<u>Description</u>:
227     '///<ul>
229     const CFN = "hUpdtMMWpage2::"
231     '///+<li>Verify that the tabpage is open</li>
232     Kontext "TabMailMergeDocumentType"
233     if ( not TabMailMergeDocumentType.exists( 2 ) ) then
234         warnlog( CFN & "Page 2 could not be accessed" )
235         exit function
236     endif
237     
238     call dialogtest( TabMailMergeDocumentType )
239     
240     '///+<li>Check the Letter-checkbox</li>
241     printlog( CFN & "Select to create a letter" )
242     if ( Letter.exists() ) then
243         if ( Letter.isEnabled() ) then
244             Letter.check()
245         else
246             warnlog( CFN & "Cannot check Letter-Checkbox" )
247         endif
248     else
249         warnlog( CFN & "Letter Checkbox does not exist" )
250     endif
251     '///</ul>
252     
253 end function   
255 '*******************************************************************************
257 function hUpdtMMWpage3()
259     '///<h3>Update test for Mailmerge Wizard - page 3</h3>
260     '///<u>Input</u>:
261     '///<ol>
262     '///+<li>Nothing</li>
263     '///</ol>
264     '///<u>Returns</u>:
265     '///<ol>
266     '///+<li>Nothing</li>
267     '///</ol>
268     '///<u>Description</u>:
269     '///<ul>
271     const CFN = "hUpdtMMWpage3::"
272     
273     dim cDatabase as string
274         cDatabase = gTesttoolpath & "framework\required\input\mailmerge_data.odb"
275         cDatabase = convertpath( cDatabase )
276     
277     '///+<li>Verify that the tabpage is open</li>
278     Kontext "TabMailMergeAddressBlock"
279     if ( not TabMailMergeAddressBlock.exists( 2 ) ) then
280         warnlog( CFN & "Page 3 could not be accessed" )
281         exit function
282     endif
283     
284     call Dialogtest( TabMailMergeAddressBlock )
285     
286     '///+<li>Click &quot;different addresslist&quot; button and open all subsequent dialogs</li>
287     Kontext "TabMailMergeAddressBlock"
288     hSelectDifferentAddressList( cDatabase )
289     
290     '///+<li>Click more button</li>
291     Kontext "TabMailMergeAddressBlock"
292     if ( AddressBlock.exists( 2 ) ) then
294         
295         if( not AddressBlock.isChecked() ) then
296             warnlog( CFN & "AddressBlock Checkbox not checked" )
297             AddressBlock.check()
298         endif
300         hSelectAddressBlock()
301     
302         '///+<li>Click match fields button</li>
303         '///+<li>Assign any value to all of the listboxes</li>
304         hUpdtMailmergeMatchFields()
305     else
306         warnlog( CFN & "AddressBlock-Checkbox missing, skipping dialogs" )
307     endif
308     '///</ul>
309     
310     
311 end function
313 '*******************************************************************************
315 function hUpdtMMWpage4()
317     '///<h3>Update test for Mailmerge Wizard - page 4</h3>
318     '///<u>Input</u>:
319     '///<ol>
320     '///+<li>Nothing</li>
321     '///</ol>
322     '///<u>Returns</u>:
323     '///<ol>
324     '///+<li>Nothing</li>
325     '///</ol>
326     '///<u>Description</u>:
327     '///<ul>
329     const CFN = "hUpdtMMWpage4::"
330     dim brc as boolean
331    
332     brc = false
334     '///+<li>Verify that the tabpage is open</li>
335     Kontext "TabMailMergeGreetingsPage"
336     if ( not TabMailMergeGreetingsPage.exists( 2 ) ) then
337         warnlog( CFN & "Page 4 could not be accessed" )
338         exit function
339     endif
340     
341     call dialogtest( TabMailMergeGreetingsPage )
342     
343     ' the salutation checkbox must be checked, otherwise the buttons are not 
344     ' available
345     '///+<li>Verify that the Checkbox for Salutation is chaecked</li>
346     if ( not GreetingPersonalized.isEnabled() ) then
347         warnlog( CFN & "CheckBox Salutation not in HID.LST, it should be checked" )
348         exit function
349     endif
350     
351     '///+<li>Edit Addressblock for female salutation (GreetingsbuttonFemale)</li>
352     Kontext "TabMailMergeGreetingsPage"
353     printlog( CFN & "GreetingButtonFemale" )
354     if ( GreetingButtonFemale.isEnabled() ) then
355         hNewEditAddressBlock( 3 )
356     else
357         warnlog( CFN & "GreetingButtonFemale is not enabled" )
358     endif
360     '///+<li>Edit Addressblock for female salutation (GreetingsbuttonMale)</li>
361     Kontext "TabMailMergeGreetingsPage"
362     printlog( CFN & "GreetingButtonMale" )
363     if ( GreetingButtonMale.isEnabled() ) then
364         hNewEditAddressBlock( 4 )
365     else
366         warnlog( CFN & "GreetingButtonMale is not enabled" )
367     endif
369     '///+<li>Click the &quot;Match Fields&quot;-button</li>
370     Kontext "TabMailMergeGreetingsPage"
371     '///</ul>
373 end function
376 '**************************************************************************
378 function hUpdtMMWpage5()
380     '///<h3>Update test for Mailmerge Wizard - page 5</h3>
381     '///<u>Input</u>:
382     '///<ol>
383     '///+<li>Nothing</li>
384     '///</ol>
385     '///<u>Returns</u>:
386     '///<ol>
387     '///+<li>Nothing</li>
388     '///</ol>
389     '///<u>Description</u>:
390     '///<ul>
392     const CFN = "hUpdtMMWpage5::"
393     
394     '///+<li>Verify that the tabpage is open</li>
395     kontext "TabMailMergeLayoutPage"
396     if ( not TabMailMergeLayoutPage.exists( 2 ) ) then
397         warnlog( CFN & "Page 5 could not be accessed" )
398         exit function
399     endif
400     
401     '///+<li>Change nothing, go to next page directly</li>
402     call DialogTest( TabMailMergeLayoutPage )
403     
404     printlog( CFN )
405     '///</ul>
406     
407 end function
409 '**************************************************************************
411 function hUpdtMMWpage6()
413     '///<h3>Update test for Mailmerge Wizard - page 6</h3>
414     '///<u>Input</u>:
415     '///<ol>
416     '///+<li>Nothing</li>
417     '///</ol>
418     '///<u>Returns</u>:
419     '///<ol>
420     '///+<li>Nothing</li>
421     '///</ol>
422     '///<u>Description</u>:
423     '///<ul>
425     const CFN = "hUpdtMMWpage6::"
426     
427     printlog( CFN )
428     
429     '///+<li>Verify that the tabpage is open</li>
430     kontext "TabMailMergePrepare"
431     if ( not TabMailMergePrepare.exists( 2 ) ) then
432         warnlog( CFN & "Page 6 could not be accessed" )
433         exit function
434     endif
435     
436     call DialogTest( TabMailMergePrepare )
437     
438     '///+<li>Click the &quot;Edit&quot;-button</li>
439     qaerrorlog( "Skipping preview button" )
440     '///</ul>
441     
442 end function
444 '**************************************************************************
446 function hUpdtMMWpage7()
448     '///<h3>Update test for Mailmerge Wizard - page 7</h3>
449     '///<u>Input</u>:
450     '///<ol>
451     '///+<li>Nothing</li>
452     '///</ol>
453     '///<u>Returns</u>:
454     '///<ol>
455     '///+<li>Nothing</li>
456     '///</ol>
457     '///<u>Description</u>:
458     '///<ul>
459     
460     const CFN = "hUpdtMMWpage7::"
461     
462     printlog( CFN )    
463     
464     '///+<li>Verify that the tabpage is open</li>
465     kontext "TabMailMergePersonalize"
466     hWaitForObject( EditIndividualButton, 8000 )
467     'if ( not TabMailMergePersonalize.exists( 2 ) ) then
468     '    warnlog( CFN & "Page 7 could not be accessed" )
469     '    exit function
470     'endif
471     
472     call DialogTest( TabMailMergePersonalize )
473     
474     '///+<li>Click on &quot;EditIndividual&quot;-button</li>
475     qaerrorlog( "Skipping Preview-Button" )
476     '///</ul>
477     
478 end function
480 '**************************************************************************
482 function hUpdtMMWpage8()
484     '///<h3>Update test for Mailmerge Wizard - page 8</h3>
485     '///<u>Input</u>:
486     '///<ol>
487     '///+<li>Nothing</li>
488     '///</ol>
489     '///<u>Returns</u>:
490     '///<ol>
491     '///+<li>Nothing</li>
492     '///</ol>
493     '///<u>Description</u>:
494     '///<ul>
496     const CFN = "hUpdtMMWpage8::"
497     
498     '///+<li>Verify that the tabpage is open</li>
499     kontext "TabMailMergeOutputPage"
500     if ( not TabMailMergeOutputPage.exists( 2 ) ) then
501         warnlog( CFN & "Page 8 could not be accessed" )
502         exit function
503     endif
504     
505     printlog( CFN )
506     
507     call DialogTest( TabMailMergeOutputPage )
508     
509     '///+<li>Check Save Document, go throught subsequent dialogs (if any)</li>
510     kontext "TabMailMergeOutputPage"
511     hSaveStartingDocument()
512     
513     '///+<li>Check Save Mailmerge Document, go throught subsequent dialogs (if any)</li>
514     kontext "TabMailMergeOutputPage"
515     hSaveMailMergeDocument()
516     
517     '///+<li>Check Print, go throught subsequent dialogs (if any)</li>
518     kontext "TabMailMergeOutputPage"
519     hPrintMailMergeDocument()
520     
521     '///+<li>Check Send, go throught subsequent dialogs (if any)</li>
522     kontext "TabMailMergeOutputPage"
523     hSendMailMergeDocument()
524     '///</ul>
525     
526 end function
528 '*******************************************************************************
530 function hSelectDifferentAddressList( cDatabase as string ) as boolean
532     '///<h3>Update test for &quot;Select Address List&quot; dialog</h3>
533     '///<i>Starting point: Page three of the Mail Merge Wizard</i><br>
534     '///<u>Input</u>:
535     '///<ol>
536     '///+<li>Path/Name of the database (string)</li>
537     '///<ul>
538     '///+<li>Valid, readable database</li>
539     '///</ul>
540     '///</ol>
541     '///<u>Returns</u>:
542     '///<ol>
543     '///+<li>Errorcondition (boolean)</li>
544     '///<ul>
545     '///+<li>TRUE if all is ok</li>
546     '///+<li>FALSE on any other condition</li>
547     '///</ul>
548     '///</ol>
549     '///<u>Description</u>:
550     '///<ul>
552     const CFN = "hSelectDifferentAddressList::"
553     
554     dim brc as boolean
555         
556     dim iAddressList as integer
557     dim cAddressList as string
558         
559     '///+<li>Click the &quot;Select Address List...&quot; button</li>        
560     Kontext "TabMailMergeAddressBlock"
561     SelectAddressListButton.click()
563     '///+<li>Verify that the dialog is open</li>
564     Kontext "SelectAddressList"
565     if ( SelectAddressList.exists( 2 ) ) then
566         printlog( CFN & "Select Address List Dialog" )
567         call dialogtest( SelectAddressList )
568     else
569         warnlog( CFN & "SelectAddressList dialog is not open" )
570         hSelectDifferentAddressList() = false
571         exit function
572     endif
573             
574         '///+<li>Add the named database</li>
575     Kontext "SelectAddressList"
576     brc = hAddDatabase( cDatabase ) 
578     
579     '///+<li>Make sure we have at least two databases to choose from</li>
580     Kontext "SelectAddressList"
581     if ( SelectAddressList.exists( 2 ) ) then
582         if ( AddressList.getItemCount() < 2 ) then
583             brc = hAddDatabase( cDatabase )
584         endif
585         
586         '///+<li>Create another address list, return</li>
587         Kontext "SelectAddressList"
588         brc = hEditCreateAddressList( 1 )
589         
590         '///+<li>Open the filter dialog, work with it and return</li>
591         Kontext "SelectAddressList" 
592         brc = hFilterDialog()
594         '///+<li>Edit the address list, return</li>
595         Kontext "SelectAddressList"
596         brc = hEditCreateAddressList( 2 )
597         
598         '///+<li>Verify that the ok button is enabled for all address lists</li>
599         Kontext "SelectAddressList"
600         for iAddressList = 1 to AddressList.getItemCount()
601         
602             AddressList.select( iAddressList )
603             cAddressList = AddressList.getText()
604             printlog( CFN & "Current address list: " & cAddressList )
605             
606             try
607                 SelectAddressList.ok()
608                 brc = true
609                 exit for
610             catch
611                 qaerrorlog( CFN & "Ok-Button disabled for <" & cAddressList & ">" )
612                 brc = false
613             endcatch
614             
615         next iAddressList
616         
617         if ( not brc ) then
618             warnlog( "#i84250# OK button not enabled for any address list." )
619         endif        
620     else
621         warnlog( CFN & "Select Address List dialog is not open" )
622         brc = false
623     endif
624     
626     
627     Kontext "TabMailMergeAddressBlock"
628     hSelectDifferentAddressList() = brc
629     '///</ul>
631 end function
633 '*******************************************************************************
635 function hWaitForBackToWizardFloat() as boolean
637     '///<h3>Update test: Try to close the BackToWizard float</h3>
638     '///<i>Starting point: Edit individual document from Mail Merge Wizard
639     '///+ Back to wizard float must be visible</i><br>
640     '///<u>Input</u>:
641     '///<ol>
642     '///+<li>Nothing</li>
643     '///</ol>
644     '///<u>Returns</u>:
645     '///<ol>
646     '///+<li>Errorcondition (boolean)</li>
647     '///<ul>
648     '///+<li>TRUE if all is ok</li>
649     '///+<li>FALSE on any other condition</li>
650     '///</ul>
651     '///</ol>
652     '///<u>Description</u>:
653     '///<ul>
655     const CFN = "hWaitForBackToWizardFloat::"
656     dim brc as boolean
657     
658     printlog( CFN & "Enter" )
659            
660     '///+<li>Try to grab the float (it is currently an "active"</li>
661     Kontext "MailMergeFloat"
662     if ( MailMergeFloat.exists( 20 ) ) then
663         printlog( CFN & "Back to document float is open" )
664         ReturnToMailMergeWizard.click()
665         
666         '///+<li>Verify that we are back to the wizard (might take some time)</li>
667         Kontext "MailMergeWizard"
668         if ( MailMergeWizard.exists( 5 ) ) then
669             printlog( CFN & "Successfully returned to Mail Merge Wizard" )
670             brc = true
671         else
672             warnlog( CFN & "Could not return to Mail Merge Wizard" )
673             brc = false
674         endif
675     else
676         warnlog( CFN & "Unable to access Mail Merge Float" )
677         brc = false
678     endif
679     
680     printlog( CFN & "Exit with result = " & brc )
681     hWaitForBackToWizardFloat() = brc
682     '///</ul>
683         
684 end function
686 '*******************************************************************************
688 function hAddDatabase( cDatabase as string ) as boolean
690     '///<h3>Update test for &quot;Add Database&quot; dialog</h3>
691     '///<i>Starting point: Select Address List dialog</i><br>
692     '///<u>Input</u>:
693     '///<ol>
694     '///+<li>Path to database to be added (string)</li>
695     '///<ul>
696     '///+<li>Database must be valid</li>
697     '///</ul>
698     '///</ol>
699     '///<u>Returns</u>:
700     '///<ol>
701     '///+<li>Errorcondition (boolean)</li>
702     '///<ul>
703     '///+<li>TRUE if all is ok</li>
704     '///+<li>FALSE on any other condition</li>
705     '///</ul>
706     '///</ol>
707     '///<u>Description</u>:
708     '///<ul>
709     
710     const CFN = "hAddDatabase::"
711     
712     dim brc as boolean
713         brc = false
714         
715     dim iWait as integer
716     
717     '///+<li>Click &quot;Add...&quot;</li>
718     add.click()
720     '///+<li>File Open dialog opens, enter filename</li>
721     Kontext "OeffnenDlg"
722     if ( OeffnenDlg.exists( 2 ) ) then
723         printlog( CFN & "File Open Dialog" )
724         DateiName.setText( cDatabase )
725         Oeffnen.click()
726         brc = true
727     else
728         warnlog( CFN & "FileOpen is missing" )
729     endif
730         
731     ' When a new addressdatabase is imported it might take some time before we
732     ' get back to the SelectAddressList dialog
733     '///+<li>Wait for the dialog to populate (might take an instant)</li>
734     hWaitForSelectAddressListDialog()
735     
736     hAddDatabase() = brc
737     '///</ul>
738     
739 end function
741 '******************************************************************************
743 function hEditCreateAddressList( iMode as integer ) as boolean
745     const CFN = "hEditCreateAddressList::"
747     dim brc as boolean
748         brc = false
749         
750     dim iWait as integer
751         
752     Kontext "SelectAddressList"
753     select case iMode
754     case 1 : create.click()
755     case 2 : edit.click()
756     end select
758     Kontext "NewAddressList"
759     if ( NewAddressList.exists( 2 ) ) then
760         printlog( CFN & "New/Edit Address List Dialog is open" )
761         call dialogtest( NewAddressList )
762         brc = true
763     else
764         warnlog( CFN & "New/EditAddressList does not exist" )
765     endif
767     if ( not brc ) then
768         hEditCreateAddressList() = brc
769         exit function
770     endif
771         
773     ' Try to use the Find-dialog, do not evaluate the returncode,
774     ' the test should continue even if the dialog does not come up.
775     brc = hFindDialog()
776     
777     ' Try to use the Customize-dialog, don't evaluate the rc either
778     brc = hCustomizeAddressList()
779     
780     ' Return to "NewAddressList" 
781     Kontext "NewAddressList"
782     NewAddressList.ok()
783     
784     ' only save when a new list has been created, editing saves automatically
785     if ( iMode = 1 ) then
786         hSaveNewAddressList()
787     endif
788     
789     hWaitForSelectAddressListDialog()
790     
791     Kontext "SelectAddressList"
792     hEditCreateAddressList() = brc
793         
794 end function
796 '*******************************************************************************
798 function hFindDialog() as boolean
800     '///<h3>Update test for Mail Merge Wizard Find dialog</h3>
801     '///<i>Starting point: Select Address List dialog</i><br>
802     '///<u>Input</u>:
803     '///<ol>
804     '///+<li>Nothing</li>
805     '///</ol>
806     '///<u>Returns</u>:
807     '///<ol>
808     '///+<li>Errorcondition (boolean)</li>
809     '///<ul>
810     '///+<li>TRUE if all is ok</li>
811     '///+<li>FALSE on any other condition</li>
812     '///</ul>
813     '///</ol>
814     '///<u>Description</u>:
815     '///<ul>
817     const CFN = "hFindDialog::"
819     dim brc as boolean
820         brc = false
821         
822     printlog( CFN )
824     Kontext "NewAddressList"
825     find.click()
827     kontext "FindEntry"
828     if ( FindEntry.exists( 2 ) ) then
829         call dialogtest( FindEntry )
830         printlog( CFN & "Find Entry Dialog is open" )
831         FindEntry.cancel()
832         brc = true
833     else
834         warnlog( CFN & "Dialog is not open" )
835     endif
836         
837     Kontext "NewAddressList"
838     hFindDialog() = brc
839     '///</ul>
840         
841 end function
843 '******************************************************************************
845 function hCustomizeAddressList() as boolean
847     '///<h3>Update test for Mail Merge Wizard Customize Address List dialog</h3>
848     '///<i>Starting point: New Address List dialog</i><br>
849     '///<u>Input</u>:
850     '///<ol>
851     '///+<li>Nothing</li>
852     '///</ol>
853     '///+<li>Errorcondition (boolean)</li>
854     '///<ul>
855     '///+<li>TRUE on success</li>
856     '///+<li>FALSE on failure</li>
857     '///</ul>
858     '///</ol>
859     '///<u>Description</u>:
860     '///<ul>    
863     const CFN = "hCustomizeAddressList::"
865     dim brc as boolean
866         brc = false
867         
868     printlog( CFN )
870     Kontext "NewAddressList"
871     if ( Customize.exists( 2 ) ) then
872         if ( Customize.isEnabled() ) then
873             Customize.click()
875             kontext "CustomizeAddressList"
876             if ( CustomizeAddressList.exists( 2 ) ) then
877                 printlog( CFN & "Customize Address List Dialog" )
878                 call dialogtest( CustomizeAddressList )
879                 
880                 kontext "CustomizeAddressList"
881                 hAddRenameElement( "NewElement" , 1 ) 
882                 
883                 kontext "CustomizeAddressList"
884                 hAddRenameElement( "Renamed" , 2 )
885                 
886                 kontext "CustomizeAddressList"
887                 printlog( CFN & "Delete" )
888                 delete.click()
889                 
890                 kontext "CustomizeAddressList"
891                 CustomizeAddressList.cancel()
892                 brc = true
893             else
894                 warnlog( CFN & "Dialog is not open" )
895             endif
896         else
897             warnlog( CFN & "Button is not enabled" )
898         endif
899     else
900         warnlog( CFN & "Button does not exist" )
901     endif
902         
903     Kontext "NewAddressList"
904     hCustomizeAddressList() = brc
905     '///</ul>
906         
907 end function
909 '************************************************************************************
911 function hAddRenameElement( cElementName as string , iMode as integer ) as boolean
913     const CFN = "hAddRenameElement::"
914     dim brc as boolean
915         brc = false
917     select case iMode
918     case 1 : Add.click()
919     case 2 : Rename.click()
920     end select
921     
922     Kontext "RenameElement"
923     if ( RenameElement.exists( 2 ) ) then
924         printlog( CFN & "Add/Rename Element Dialog" )
925         call Dialogtest( RenameElement )
926         
927         FieldTitle.setText( cElementName )
928         RenameElement.ok()
929         brc = true
930     else
931         warnlog( CFN & "Dialog is not open" )
932     endif
933         
934     hAddRenameElement() = brc
935         
936 end function
938 '*******************************************************************************
940 function hFilterDialog() as integer
942     '///<h3>Update test for Mail Merge Wizard Filter dialog</h3>
943     '///<i>Starting point: Select Address List dialog</i><br>
944     '///<u>Input</u>:
945     '///<ol>
946     '///+<li>Nothing</li>
947     '///</ol>
948     '///+<li>Errorcondition (boolean)</li>
949     '///<ul>
950     '///+<li>TRUE on success</li>
951     '///+<li>FALSE on failure</li>
952     '///</ul>
953     '///</ol>
954     '///<u>Description</u>:
955     '///<ul>    
957     const CFN = "hFilterDialog::"
958     
959     dim brc as boolean
960         brc = false
961         
962     Kontext "SelectAddressList"
963     if ( Filter.exists( 2 ) ) then
964         if ( Filter.isEnabled() ) then
965             Filter.click()
966             
967             kontext "FilterDialog"
968             if ( FilterDialog.exists( 2 ) ) then
969                 printlog( CFN & "Filter Dialog" )
970                 call Dialogtest( FilterDialog )
971                 
972                 FilterDialog.cancel()
973                 brc = true
974             else
975                 warnlog( "#i54150 " & CFN & "Filter dialog is not open" )
976             endif
977         else
978             warnlog( CFN & "Filter Button is not enabled" )
979         endif
980     else
981         warnlog( CFN & "Filter Button is missing" )
982     endif
983     
984     hWaitForSelectAddressListDialog()
985     hFilterDialog() = brc
986     '///</ul>
987   
988 end function
990 '****************************************************************************
992 function hSelectAddressBlock() as boolean
994     const CFN = "hSelectAddressBlock::"
995     
996     dim brc as boolean
997         brc = false
998         
999     printlog( CFN  & "More..." )
1000         
1001     Kontext "TabMailMergeAddressBlock"
1002     if ( more.exists( 2 ) ) then
1003     
1004         ' A dynamic delay (function borrowed from toolbar_tools.inc)
1005         hWaitForObject( more , 3000 )
1006         
1007         if ( more.isEnabled() ) then
1008             more.click()
1009             
1010             Kontext "SelectAddressBlock"
1011             if ( SelectAddressBlock.exists( 2 ) ) then
1012                 printlog( CFN & "SelectAddressBlock dialog is open" )
1013                 call DialogTest( SelectAddressBlock )
1014                 
1015                 Kontext "SelectAddressBlock"
1016                 hNewEditAddressBlock( 1 )
1017                 
1018                 Kontext "SelectAddressBlock"
1019                 hNewEditAddressBlock( 2 )
1020                 
1021                 Kontext "SelectAddressBlock"
1022                 SelectAddressBlock.ok()
1023                 brc = true
1024             else
1025                 warnlog( CFN & "Dialog is not open" )
1026             endif        
1027         else
1028             warnlog( CFN & "Button is disabled" )
1029         endif
1030     else
1031         warnlog( CFN & "Button does not exist" )
1032     endif
1033         
1034     hSelectAddressBlock() = brc
1035     
1036 end function
1038 '*******************************************************************************
1040 function hNewEditAddressBlock( iMode as integer ) as boolean
1042     const CFN = "hNewEditAddressBlock::"
1044     select case iMode
1045     case 1 : NewBtn.click()
1046     case 2 : Customize.click()
1047     case 3 : GreetingButtonFemale.click()
1048     case 4 : GreetingButtonMale.click()
1049     end select
1050     
1051     Kontext "NewAddressBlock"
1052     if ( NewAddressBlock.exists( 2 ) ) then
1053         printlog( cfn & "Dialog is open" )
1054         NewAddressBlock.cancel()
1055         hNewEditAddressBlock() = true
1056     else
1057         warnlog( cfn & "Dialog is not open" )
1058         hNewEditAddressBlock() = false
1059     endif
1060         
1061 end function
1063 '*******************************************************************************
1065 function hSaveStartingDocument() as boolean
1067     const CFN = "hSaveStartingDocument::"
1068     
1069     dim brc as boolean
1070         brc = false
1072     if ( RBSaveStartDoc.exists( 2 ) ) then
1073          if ( RBSaveStartDoc.isEnabled ) then
1074              RBSaveStartDoc.check()
1075              brc = true
1076          else
1077              warnlog( CFN & "Cannot set radiobutton" )
1078          endif
1079     else
1080         warnlog( CFN & "Radiobutton is missing" )
1081     endif
1082     
1083     ' save file
1084     if ( PBSaveStartDoc.exists( 2 ) ) then
1085         if ( PBSaveStartDoc.isEnabled ) then
1086             PBSaveStartDoc.click()
1087              
1088             Kontext "SpeichernDlg"
1089             if ( SpeichernDlg.exists( 2 ) ) then
1090                 printlog( CFN & "Save As Dialog is open" )
1091                 SpeichernDlg.cancel()
1092                 brc = true
1093             else
1094                 warnlog( CFN & "FileSave dialog is missing" )
1095             endif
1096         else
1097             warnlog( CFN & "SaveStartDoc is disabled" )
1098         endif
1099     else
1100         warnlog( CFN & "SaveStartDoc is missing" )
1101     endif            
1102     
1103     hSaveStartingDocument() = brc
1104     
1105 end function
1107 '******************************************************************************* 
1109 function hSaveMailMergeDocument() as boolean
1111     const CFN = "hSaveMailMergeDocument::"
1112     
1113     dim brc as boolean
1114         brc = false
1116     if ( RBSaveMergedDoc.exists( 2 ) ) then
1117          if ( RBSaveMergedDoc.isEnabled() ) then
1118              RBSaveMergedDoc.check()
1119              brc = true
1120          else
1121              warnlog( CFN & "Cannot set radiobutton" )
1122          endif
1123     else
1124         warnlog( CFN & "Radiobutton is missing" )
1125     endif
1126     
1127     ' save file
1128     if ( PBSaveNow.exists( 2 ) ) then
1129         if ( PBSaveNow.isEnabled() ) then
1130             PBSaveNow.click()
1131              
1132             Kontext "SpeichernDlg"
1133             if ( SpeichernDlg.exists( 2 ) ) then
1134                 printlog( CFN & "Save As Dialog is open" )
1135                 SpeichernDlg.cancel()
1136                 brc = true
1137             else
1138                 warnlog( CFN & "FileSave dialog is missing" )
1139             endif
1140         else
1141             warnlog( CFN & "Save Now is disabled" )
1142         endif
1143     else
1144         warnlog( CFN & "Save Now is missing" )
1145     endif            
1146     
1147     hSaveMailMergeDocument() = brc
1148     
1149 end function
1151 '******************************************************************************* 
1153 function hPrintMailMergeDocument() as boolean
1155     const CFN = "hPrintMailMergeDocument::"
1156     
1157     dim brc as boolean
1158         brc = false
1160     if ( RBPrintMerged.exists( 2 ) ) then
1161          if ( RBPrintMerged.isEnabled() ) then
1162              RBPrintMerged.check()
1163              brc = true
1164          else
1165              warnlog( CFN & "Cannot set radiobutton" )
1166          endif
1167     else
1168         warnlog( CFN & "Radiobutton is missing" )
1169     endif
1171     if ( instr( gtSYSName , "win" ) > 0 ) then
1172         printlog( CFN & "Skipping printer dialog on windows" )
1173         hPrintMailMergeDocument() = true
1174         exit function
1175     endif
1176     
1177     if ( lcase( gPlatform ) = "osx" ) then
1178         qaerrorlog( "#i81545# No printer settings on MacOS X" )
1179         hPrintMailMergeDocument() = true
1180         exit function
1181     endif
1182     
1183     ' printer settings
1184     if ( PBPrinterSettings.exists( 2 ) ) then
1185         if ( PBPrinterSettings.isEnabled() ) then
1186             PBPrinterSettings.click()
1187              
1188             Kontext "TabSPAPaper"
1189             if ( TabSPAPaper.exists() ) then
1190                 printlog( CFN & "Printer Settings Dialog" )
1191                 TabSPAPaper.OK
1192                 brc = true
1193             else
1194                 warnlog( "#i89114# Printer Settings dialog is missing" )
1195             endif
1196         else
1197             warnlog( CFN & "Printer Settings is disabled" )
1198         endif
1199     else
1200         warnlog( CFN & "Printer Settings is missing" )
1201     endif   
1202     
1203     hPrintMailMergeDocument() = brc
1204     
1205 end function
1207 '******************************************************************************* 
1209 function hSendMailMergeDocument() as boolean
1211     const CFN = "hSendMailMergeDocument::"
1212     
1213     dim brc as boolean
1214         brc = false
1216     if ( RBSendAsMail.exists( 2 ) ) then
1217          if ( RBSendAsMail.isEnabled() ) then
1218              RBSendAsMail.check()
1219          else
1220              warnlog( CFN & "Cannot set radiobutton" )
1221          endif
1222     else
1223         warnlog( CFN & "Radiobutton is missing" )
1224     endif
1225     
1226     ' send copy to
1227     if ( PBCopyTo.exists( 2 ) ) then
1228         if ( PBCopyTo.isEnabled() ) then
1229             PBCopyTo.click()
1230              
1231             Kontext "CopyToDialog"
1232             if ( CopyToDialog.exists( 2 ) ) then
1233                 printlog( CFN & "CopyToDialog is open" )
1234                 call DialogTest( CopyToDialog )
1235                 CopyToDialog.OK()
1236             else
1237                 warnlog( CFN & "CopyToDialog dialog is missing" )
1238             endif
1239         else
1240             warnlog( CFN & "PBCopyTo is disabled" )
1241         endif
1242     else
1243         warnlog( CFN & "PBCopyTo is missing" )
1244     endif   
1245     
1246     kontext "TabMailMergeOutputPage"
1247     if ( PBSendDocuments.exists( 2 ) ) then
1248         if ( PBSendDocuments.isEnabled() ) then
1249             PBSendDocuments.click()
1250             Kontext "Active"
1251             if ( active.exists( 2 ) ) then
1252                 printlog( CFN & "Dialog asking for EMail-account is open" )
1253                 call Dialogtest( active )
1254                 active.yes()
1255                 
1256                 kontext "TabMailMergeEmail"
1257                 hMailMergeEmailDialog()
1258             else
1259                 warnlog( CFN & "Dialog asking for EMail-account is missing" )
1260             endif
1261         else
1262             warnlog( CFN & "Send documents Button is disabled" )
1263         endif
1264     else
1265         warnlog( CFN & "Send Documents Button is missing" )
1266     endif
1267     
1268     hSendMailMergeDocument() = brc
1269     
1270 end function
1272 '******************************************************************************* 
1274 function hMailMergeEmailDialog() as boolean
1276     const CFN = "hMailMergeEmailDialog::"
1277     dim brc as boolean
1278         brc = false
1279     
1280     if ( TabMailMergeEmail.exists( 2 ) ) then
1281         printlog( CFN & "EMail Account Dialog is open" )
1282         brc = true
1283     else
1284         warnlog( CFN & "EMail Account Dialog is not open" )
1285         exit function
1286     endif
1287     
1288     ' server authentication
1289     if ( ServerAuthentication.exists( 2 ) ) then
1290         if ( ServerAuthentication.isEnabled() ) then
1291             ServerAuthentication.click()
1292             
1293             Kontext "ServerAuthentication"
1294             if ( ServerAuthentication.exists( 2 ) ) then
1295                 printlog( CFN & "Server Authentication dialog is open" )
1296                 call DialogTest( ServerAuthentication )
1297                 ServerAuthentication.cancel()
1298             else
1299                 warnlog( CFN & "ServerAuthentication is not open" )
1300             endif
1301         else
1302             warnlog( CFN & "ServerAuthentication-Button is not enabled" )
1303         endif
1304     else
1305         warnlog( CFN & "ServerAuthentication-Button does not exist" )
1306         brc = false
1307     endif
1308     
1309     ' Test settings
1310     kontext "TabMailMergeEmail"   
1311     if ( TestSettings.exists( 2 ) ) then
1312         if ( TestSettings.isEnabled() ) then
1313             TestSettings.click()
1314             
1315             kontext "TestAccountSettings"
1316             if ( TestAccountSettings.exists( 2 ) ) then
1317                 printlog( CFN & "Test Account Settings Dialog is open" )
1318                 call DialogTest( TestAccountSettings )
1319                 TestAccountSettings.cancel()
1320             else
1321                 warnlog( CFN & "Test Account Settings Dialog is not open" )
1322             endif
1323         else
1324             warnlog( CFN & "Test Settings-button is disabled" )
1325         endif
1326     else
1327         warnlog( CFN & "Test Settings-button is missing" )
1328     endif
1329     
1330     kontext "TabMailMergeEmail"
1331     TabMailMergeEmail.cancel()
1332     
1333     hMailMergeEmailDialog() = brc
1334     
1335 end function
1337 '*******************************************************************************
1339 function hWaitForSelectAddressListDialog() as boolean
1341     Kontext "SelectAddressList"
1342     if ( SelectAddressList.exists( 5 ) ) then
1343         hWaitForSelectAddressListDialog() = true
1344     else
1345         hWaitForSelectAddressListDialog() = false
1346     endif
1347     
1348     
1349 end function
1351 '*******************************************************************************
1353 function hSaveNewAddressList()
1355     const CFN = "hSaveNewAddressList::"
1357     Kontext "SpeichernDlg"
1358     if ( SpeichernDlg.exists( 2 ) ) then
1359     
1360         DateiName.setText( CSV_DATABASE )
1361         Speichern.click()
1362         
1363         kontext "active"
1364         if ( active.exists( 2 ) ) then
1365             warnlog( active.getText() ) 
1366             active.yes()
1367         endif
1368         
1369         printlog( CFN & "File saved" )
1370     else
1371         warnlog( CFN & "FileSave did not come up" )
1372     endif
1373     
1374 end function
1376 '*******************************************************************************
1378 function hRemoveDatabaseConnections() as integer
1380     const CFN = "hRemoveDatabaseConnections()::"
1381     const DEFAULT_DATABASE = "Bibliography"
1382     
1383     dim iConnectionCount as integer
1384     dim iCurrentConnection as integer
1385     dim cConnectionName as string
1386     dim bOptionsOpen as boolean : bOptionsOpen = true
1387     
1388     kontext "OptionenDlg"
1389     if ( not OptionenDlg.exists() ) then
1390         bOptionsOpen = false
1391         ToolsOptions
1392     endif
1393     
1394     hToolsOptions( "DataSources", "Databases" )
1395     
1396     kontext "TabRegisteredDatabase"
1397     iConnectionCount = RegisteredDatabases.getItemCount()
1398     
1399     for iCurrentConnection = iConnectionCount to 1 step -1
1400     
1401         kontext "TabRegisteredDatabase"
1402         if ( TabRegisteredDatabase.exists( 2 ) ) then
1403         
1404             RegisteredDatabases.select( iCurrentConnection )
1405             cConnectionName = RegisteredDatabases.getSelText()
1406             printlog( CFN & "Current database: " & cConnectionName )
1407         
1408             if ( cConnectionName <> DEFAULT_DATABASE ) then
1409                 DeleteBtn.click()
1410                 kontext "active"
1411                 if ( active.exists( 2 ) ) then
1412                     active.yes()
1413                 else
1414                     warnlog( CFN & "Confirmation dialog for delete is missing" )
1415                 endif
1416             else
1417                 printlog( CFN & "Not deleting default database connection" )
1418             endif
1419         else
1420             warnlog( CFN & "Failed to set context to Registered Databases Tab" )
1421         endif
1422         
1423     next iCurrentConnection
1424     
1425     if ( not bOptionsOpen ) then
1426         kontext "OptionenDlg"
1427         OptionenDlg.ok()
1428     endif
1429     
1430     hRemoveDatabaseConnections() = iConnectionCount - 1
1431     
1432 end function
1434 '*******************************************************************************
1436 function hUpdtMailmergeMatchFields() as boolean
1438     '///<h3>Assign random fields on the Match Fields dialog of the Mailmerge Wizard</h3>
1439     '///<i>Starting point: Match fields dialog</i><br>
1440     '///<u>Input</u>:
1441     '///<ol>
1442     '///+<li>Nothing</li>
1443     '///</ol>
1444     '///<u>Returns</u>:
1445     '///<ol>
1446     '///+<li>Errorcondition (boolean)</li>
1447     '///<ul>
1448     '///+<li>TRUE on no error</li>
1449     '///+<li>FALSE otherwise</li>
1450     '///</ul>
1451     '///</ol>
1452     '///<u>Description</u>:
1453     '///<ul>
1454     
1455     const CFN = "hUpdtMailmergeMatchFields::"
1456     dim brc as boolean
1457     
1458     printlog( CFN & "Accessing Match Fields Dialog" )
1459     Kontext "TabMailMergeAddressBlock"
1460     MatchFieldsButton.click()
1461     
1462     '///+<li>Verify that the match fields dialog is open</li>
1463     kontext "MatchFields"
1464     if ( not MatchFields.exists( 2 ) ) then
1465         warnlog( CFN & "Unable to access Match Fields dialog" )
1466         brc = false
1467     else
1468     
1469         '///+<li>Assign randomly one of the 8 values to each of the 14 listboxes</li>
1470         Title.select( 2 )
1471         FirstName.select( 3 )
1472         LastName.select( 4 )
1473         Company.select( 5 )
1474         Address1.select( 6 )
1475         Address2.select( 7 )
1476         City.select( 8 )
1477         State.select( 2 )
1478         ZIP.select( 3 )
1479         Country.select( 4 )
1480         PhonePrivate.select( 1 )
1481         PhoneBusiness.select( 2 )
1482         EMail.select( 5 )
1483         Gender.select( 4 )
1484         
1485         '///+<li>Return to the Mail Merge Wizard</li>
1486         MatchFields.OK()
1487         printlog( CFN & "Leaving Match Fields Dialog" )
1488         brc = true
1489         
1490     endif
1491     
1492     hUpdtMailmergeMatchFields() = brc
1493     '///</ul>
1494         
1495 end function