update dev300-m58
[ooovba.git] / testautomation / global / tools / includes / optional / t_basic_organizer_tools.inc
blobeb2b302f919979c5bc26b765ea8de39bd634ecbb
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: t_basic_organizer_tools.inc,v $
11 '* $Revision: 1.1 $
13 '* last change: $Author: jsk $ $Date: 2008-06-20 07:57:24 $
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 '/************************************************************************
33 ' **
34 ' ** owner : joerg.skottke@sun.com
35 ' **
36 ' ** short description : tools for tools/macro test
37 ' **
38 '\******************************************************************************
40 function hSelectTheLastModule( bEditEnabled as Boolean ) as string
42     '///<h3>Select the last (editable) module in the macro seletor treelist</li>
44     use "global\tools\includes\optional\t_treelist_tools.inc"
45     
46     const CFN = "hSelectTheLastModule()::"
47     
48     dim bCloseDialog as boolean : bCloseDialog = FALSE
49     dim iNodeCount as integer
50     dim iCurrentNode as integer
52     hSelectTheLastModule() = ""
53     
54     kontext "Makro"
55     if ( not Makro.exists() ) then ToolsMacro_uno : bCloseDialog = TRUE
56     
57     kontext "Makro"
58     iNodeCount = hSelectTheLastNode( MakroAus )
59     
60     if ( bEditEnabled ) then
61         for iCurrentNode = iNodeCount to 1 step -1
62             if ( Bearbeiten.isEnabled() ) then
63                 printlog( CFN & "Editable module found at pos: " & iCurrentNode )
64                 exit for
65             endif
66         next iCurrentNode
67     else
68         printlog( CFN & "Module selected at pos: " & iNodeCount )
69     endif
70     
71     if ( iCurrentNode > 1 ) then hSelectTheLastModule = MakroAus.getSelText()
72     
73 end function
75 '*******************************************************************************
77 function hCreateModuleForDoc( optional cName as string ) as boolean
79     use "global\tools\includes\optional\t_treelist_tools.inc"
80     use "global\tools\includes\optional\t_stringtools.inc"
82     '///<h3>Create a new Basic module for the current document</h3>
83     '///<i>Starting point: Basic Macro Organizer is visible and has focus</i>
84     '///<ul>
86     const CFN = "hCreateModuleForDoc::"
88     dim iWait as integer   ' how long we had to wait for the IDE to open
89     dim iPos as integer
90     dim brc as boolean     ' boolean returncode, a temporary variable
91         brc = false
92     dim cMsg as string
94     ' make sure that we have a name for the module
95     if ( isMissing( cName ) ) Then
96         cName = "TTModule"
97     endif
99     '///+<li>Select the last module (it should belong to the current document)</li>
100     kontext "Makro"
101     iPos = hSelectTheLastNode( MakroAus )
102     
103     '///+<li>Click the New-Button, name the module</li>
104     if ( Neu.isEnabled() ) then
105         'printlog( CFN & "New-button is enabled" )
106     else
107         warnlog( CFN & "New-button is disabled" )
108         hCreateModuleForDoc() = false
109         exit function
110     endif
111     
112     Neu.Click()
113     
114     '///+<li>If the module already exists we end up on the Deletion dialog</li>
115     kontext "Active"
116     if ( Active.exists() ) then
117         cMsg = active.getText()
118         cMsg = hRemoveLineBreaks( cMsg )
119         printlog( "Module seems to exist, deleting Main: " & cMsg )
120         Active.Yes()
121     endif
122     
123     Kontext "NeuesModul"
124     if ( NeuesModul.exists() ) then
125         Modulname.SetText( cName )
126         NeuesModul.OK()
127     else
128         warnlog( CFN & "Failed create a new module, aborting" )
129         hCreateModuleForDoc() = false
130         kontext "Makro"
131         Makro.cancel()
132         exit function
133     endif
134     
135     '///+<li>Wait for the BASIC_IDE to open, verify</li>
136     ' BasicIDE is bad for "Kontexting", using the default toolbar instead
137     kontext "MacroBar"
138     if ( MacroBar.exists( 3 ) ) then
139         printlog( CFN & "Exit: New module: " & cName & ". IDE is open" )
140         brc = true
141     else
142         warnlog( CFN & "Exit: Failed to create the Module" )
143         brc = false
144     endif
145         
146     hCreateModuleForDoc() = brc
147     '///+<li>Return TRUE on success, FALSE on failure</li>
148     '///</ul>
150 end function
152 '*******************************************************************************
154 function hOpenBasicObjectOrganizer( iTabPage as integer ) as boolean
156     '///<h3>Open the Basic Library/Module/Dialog Organizer</h3>
157     '///<i>Starting point: Basic IDE is open and has focus</i>
158     '///<ul>
160     const CFN = "hOpenBasicObjectOrganizer::"
162     ' This function opens a specified tab on the BASIC Organizer from the
163     ' BASIC-IDE
164     ' NOTE: This is the organizer for libraries, modules and dialogs,
165     '       not the one to run or assign macros!
167     dim iMenuSize as integer
168     dim brc as boolean
169     
170     '///+<li>Open the context menu of the tabbar</li>
171     kontext "basicide"
172     Tabbar.OpenContextMenu
173     
174     '///+<li>Select the last entry of the context menu (dynamic menu!)</li>
175     iMenuSize = hMenuItemgetCount()
176     if ( iMenuSize = 2 ) then
177         printlog( " * short context menu (no edit-window)" )
178         hMenuSelectNr( 2 )
179     else
180         printlog( " * long context menu (edit-window/dialog visible)" )
181         hMenuSelectNr( 5 )
182     endif
183     
184     WaitSlot()
186     '///+<li>On the basic object organizer switch to the Modules tab</li>
187     brc = hSelectBasicObjectOrganizerTab( 1 )
188     if ( not brc ) then
189         warnlog( CFN & "Failed to open requested Tabpage" )
190         hOpenBasicObjectOrganizer() = false
191     else
192         printlog( CFN & "Requested page is open" )
193         hOpenBasicObjectOrganizer = true
194     endif
195     '///+<li>Return TRUE on success, FALSE on failure</li>
196     '///</ul>
198     
199 end function
201 '*******************************************************************************
203 function hOpenBasicOrganizerFromDoc() as boolean
205     '///<h3>Open the Basic Macro Organizer from a plain document</h3>
206     '///<i>Starting point: Plain document</i>
207     '///<ul>
208     
209     const CFN = "hOpenBasicOrganizerFromDoc::"
210     
211     '///+<li>Use the slot ToolsMacro_uno to open the Basic Macro organizer</li>
212     ToolsMacro_uno
213     
214     '///+<li>Verify that the dialog is open</li>
215     kontext "Makro"
216     if ( not Makro.exists() ) then
217         warnlog( CFN & "Could not open Macro Organizer" )
218         hOpenBasicOrganizerFromDoc() = false
219         exit function
220     endif
221     
222     call dialogtest( Makro )
223     
224     '///+<li>Return TRUE on success, FALSE on failure</li>
225     printlog( CFN & "Basic Organizer is open" )
226     hOpenBasicOrganizerFromDoc() = true
227     kontext "Makro"
228     '///</ul>
229     
230 end function
232 '*******************************************************************************
234 function hSelectBasicObjectOrganizerTab( iTabPage as integer ) as boolean
236     const CFN = "hSelectBasicObjectOrganizerTab::"
237     
238     '///<h3>Switch between tab pages in the Basic Object Organizer</h3>
239     '///<i>Starting point: Masic Object Organizer is visible and has focus</i>
240     '///<ol>
241     '///+<li>1 = Modules</li>
242     '///+<li>2 = Dialogs</li>
243     '///+<li>3 = Libraries</li>
244     '///</ol>
245     '///Description:
246     '///<ul>
247     
248     '///+<li>Verify function parameters</li>
249     if ( ( iTabPage < 1 ) or ( iTabPage > 3 ) ) then
250         warnlog( CFN & "Illegal argument passed to function: " & iTabPage )
251         hSelectBasicObjectOrganizerTab() = false
252         exit function
253     endif
255     '///+<li>Switch between tabpages 1, 2 or 3</li>
256     select case iTabPage
257     case 1 : 
258         kontext
259         Active.SetPage TabModule
260         kontext "tabmodule"
261         if ( TabModule.exists() ) then
262             printlog( CFN & "Modules-Tab is open"
263             hSelectBasicObjectOrganizerTab() = true
264             exit function
265         endif
266         
267     case 2 : 
268         kontext
269         Active.setPage TabDialogs
270         kontext "tabdialogs"
271         if ( TabDialogs.exists() ) then
272             printlog( CFN & "Dialogs-Tab is open"
273             hSelectBasicObjectOrganizerTab() = true
274             exit function
275         endif
276     case 3 :
277         kontext
278         Active.setPage TabBibliotheken
279         kontext "tabbibliotheken"
280         if ( TabBibliotheken.exists() ) then
281             printlog( CFN & "Libraries-Tab is open"
282             hSelectBasicObjectOrganizerTab() = true
283             exit function
284         endif
285     end select
286     
287     '///+<li>Return TRUE on success, FALSE on failure</li>
288     '///</ul>
289     hSelectBasicObjectOrganizerTab() = false
290     
291 end function
293 '*******************************************************************************
295 function hDeleteLibrary( iLocation as integer, cLibName as string ) as boolean
297     '///<h3>Delete a library by name via Macro Object Organizer</h3>
298     '///<i>Starting point: Plain document</i>
299     '///<ul>
301     const CFN = "hDeleteLibrary::"
302     const ITABPOS = 3
304     '///+<li>Verify function parameters</li>
305     if ( ( iLocation < 1 ) or ( iLocation > 3 ) ) then
306         warnlog( CFN & "Invalid parameter passed to function" )
307         hDeleteLibrary() = false
308     endif
309     
310     dim iObjectCount as integer
311     dim iCurrentObject as integer
312     dim cCurrentObjectName as string
314     '///+<li>Open Macro Organizer</li>
315     hOpenBasicOrganizerFromDoc()
316     
317     '///+<li>Click Manage-button</li>
318     Kontext "Makro"
319     Verwalten.click()
320     
321     '///+<li>Go to the Libraries Tab on the Macro Object Organizer</li>
322     hSelectBasicObjectOrganizerTab( ITABPOS )
323     
324     '///+<li>Select the root node in the libraries treelist</li>
325     ' Needs to be specified to avoid touching the wrong library (e.g. a protected one)
326     kontext "TabBibliotheken"
327     Bibliothek.select( iLocation )
328     iObjectCount = Bibliotheksliste.getItemCount()
329     
330     '///+<li>Find the requested item in the treelist</li>
331     for iCurrentObject = 1 to iObjectCount
332     
333         Bibliotheksliste.select( iCurrentObject )
334         cCurrentObjectName = Bibliotheksliste.getSelText()
335         if ( cCurrentObjectName = cLibName ) then
336         
337             '///+<li>Click Delete</li>
338             Loeschen.click()
339             exit for
340         endif
341     
342     next iCurrentObject
343     
344     '///+<li>Confirm to delete library</li>
345     Kontext "Active"
346     if ( Active.exists() ) then
347         active.yes()
348     else
349         warnlog( CFN & "No confirmation for delete" )
350     endif
351     
352     '///+<li>Verify that there is one item less in the treelist (object has been deleted)</li>
353     kontext "TabBibliotheken"
354     if ( Bibliotheksliste.getItemCount() = ( iObjectCount - 1 ) ) then
355         printlog( CFN & "Library has been deleted" )
356         hDeleteLibrary() = true
357     else    
358         printlog( CFN & "Library has not been deleted" )
359         hDeleteLibrary() = false
360     endif
361     
362     '///+<li>Cancel Macro Object Organizer</li>
363     TabBibliotheken.cancel()
364     
365     '///+<li>Cancel Basic Macro Organizer</li>
366     Kontext "Makro"
367     Makro.cancel()
368     '///+<li>Return TRUE on success, FALSE on failure</li>
369     '///</ul>
370     
371 end function
373 '*******************************************************************************
375 function hIsMacroEditButtonEnabled() as boolean
377     '///<h3>Test whether the "Edit..." button is enabled or not</h3>
378     '///<i>Starting point: Basic Macro Organizer</i>
379     '///<ul>
381     const CFN = "hIsMacroEditButtonEnabled::"
382     dim brc as boolean
384     '///+<li>Check that the macro dialog is open</li>
385     Kontext "Makro"
386     if ( not Makro.exists() ) then
387         warnlog( "Macro organizer is not open, aborting function" )
388         hIsMacroEditButtonEnabled() = false
389         exit function
390     endif
391     
392     '///+<li>Verify that the Edit...-Button exists and is enabled</li>
393     if ( bearbeiten.exists() ) then
394         if ( bearbeiten.isEnabled() ) then
395             printlog( CFN & "Button exists and is enabled" )
396             brc = true
397         else
398             printlog( CFN & "Button exists but is disabled" )
399             brc = false
400         endif
401     else
402         warnlog( CFN & "Button does not exist" )
403         brc = false
404     endif
406     '///+<li>Return TRUE if button exists and is enabled</li>
407     '///</ul>
408     hIsMacroEditButtonEnabled() = brc
409     
410 end function
412 '*******************************************************************************
414 function hIsMacroNewButtonEnabled() as boolean
416     '///<h3>Find out whether the "New..." button is enabled or not</h3>
417     '///<i>Starting point: Basic Macro Organizer</i>
418     '///<ul>
419     
420     const CFN = "hIsMacroNewButtonEnabled::"
421     dim brc as boolean
423     '///+<li>Check that the macro dialog is open</li>
424     Kontext "Makro"
425     if ( not Makro.exists() ) then
426         warnlog( "Macro organizer is not open, aborting function" )
427         hIsMacroNewButtonEnabled() = false
428         exit function
429     endif
430     
431     '///+<li>Verify that the New...-Button exists and is enabled</li>
432     if ( neu.exists() ) then
433         if ( neu.isEnabled() ) then
434             printlog( CFN & "Button exists and is enabled" )
435             brc = true
436         else
437             printlog( CFN & "Button exists but is disabled" )
438             brc = false
439         endif
440     else
441         warnlog( CFN & "Button does not exist" )
442         brc = false
443     endif
445     '///+<li>Return TRUE if button exists and is enabled</li>
446     '///</ul>    
447     hIsMacroNewButtonEnabled() = brc
448     
449 end function
451 '*******************************************************************************
453 function hNameBasicModule( cName as string ) as boolean
455     '///<h3>Name a Basic Module</h3>
456     '///<i>Starting point: Clicked &quot;New...&quot; button in Basic Macro organizer.<br>
457     '///+ On success the kontext will be on the Basic IDE. In case of
458     '///+ failure we remain on the naming dialog so that the function can be 
459     '///+ triggered again.</i><br>
460     '///<u>Input</u>:
461     '///<ol>
462     '///+<li>Name of the module (string)</li>
463     '///</ol>
464     '///<u>Returns</u>:
465     '///<ol>
466     '///+<li>Errorcondition (Boolean)</li>
467     '///<ul>
468     '///+<li>TRUE if name is valid, module has been created</li>
469     '///+<li>FALSE if name is invalid or naming dialog does not exist</li>
470     '///</ul>
471     '///</ol>
472     '///<u>Description</u>:
473     '///<ul>
474     
475     use "global\tools\includes\optional\t_stringtools.inc"
476     
477     const CFN = "hNameBasicModule::"
478     dim brc as boolean
479         brc = true
480     dim cMsg as string
481     
482     '///+<li>Verify that the naming dialog is open</li>
483     kontext "NeuesModul"
484     if ( not NeuesModul.exists() ) then
485         hNameBasicModule() = false
486         exit function
487     endif
488     
489     '///+<li>Insert the name into the EntryField</li>
490     Modulname.SetText( cName )
491     
492     '///+<li>Accept the name with OK</li>
493     NeuesModul.OK()
494     
495     '///+<li>If there is no warning, the name should be valid.</li>
496     kontext "BasicIDE"
497     if ( BasicIde.exists( 2 ) ) then
498         brc = true
499         printlog( CFN & "Name accepted, Basic-Ide is open" )
500     else
501         brc = false
502         '///+<li>Look for invalid name warning, close it</li>
503         kontext "active"
504         if ( active.exists() ) then
505             cMsg = active.getText()
506             cMsg = hRemoveLineBreaks( cMsg 
507             printlog( CFN & "Msgbox: " & cMsg )
508             active.ok()
509         endif
510         
511         '///+<li>If the name is invalid, get back to the naming-dialog</li>
512         kontext "NeuesModul"
513         if ( NeuesModul.exists() ) then
514             printlog( CFN & "Name not accepted, focus on naming-dialog" )
515         else
516             warnlog( CFN & "Naming failed but we are not on the naming dialog" )
517         endif
518     endif
519     
520     hNameBasicModule() = brc
521     '///</ul>
522     
523 end function
525