Update ooo320-m1
[ooovba.git] / testautomation / framework / tools / includes / pbrowser_tools.inc
blobdbf91221b1bc3e8f36ff08493c276c63f259b756
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: pbrowser_tools.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 : Tools for working with the property browser for formcontrols
38 '\******************************************************************************
40 private const DEBUG_ENABLE = false
42 function hOpenPropertyBrowser() as boolean
43     
44     '///<h3>Function to open the properties of a selected control</h3>
45     '///<i>The function verifies that the property browser is really open and
46     '///+ ensures that we are on the General tabpage</i><br><br>
47     
48     '///<u>Input</u>:
49     '///<ol>
50     
51     '///+<li>Nothing</li>
52     
53     '///</ol>
54     
55     '///<u>Returns</u>:
56     '///<ol>
57     
58     '///+<li>Errorcondition (boolean)</li>
59     '///<ul>
60     '///+<li>TRUE on successful open of the property browser</li>
61     '///+<li>FALSE on any error</li>
62     '///</ul>
63     
64     '///</ol>
65     
66     '///<u>Description</u>:
67     '///<ul>
68     
69     const CFN = "hOpenPropertyBrowser::"
70     
71     '///+<li>Open the property browser (call slot)</li>
72     try
73         ContextProperties
74         
75         '///+<li>Verify that the property browser is open</li>
76         kontext "ControlPropertiesTabControl"
77         if ( ControlPropertiesTabControl.exists( 2 ) ) then
78             
79             '///+<li>Activate General-tabpage</li>
80             ControlPropertiesTabControl.setPage( TabGeneralControl )
81         
82             '///+<li>Verify that the General-tabpage is visible</li>
83             kontext "TabGeneralControl"
84             if ( TabGeneralControl.isVisible() ) then
85                 printlog( CFN & "ok" )
86                 hOpenPropertyBrowser() = true
87             else
88                 printlog( CFN & "General-tab is not visible." )
89                 hOpenPropertyBrowser() = false
90             endif   
91         else
92             printlog( CFN & "Could not open property browser" )
93             hOpenPropertyBrowser() = false    
94         endif
95     catch
96         hOpenPropertyBrowser() = false
97         printlog( CFN & "Slot <ContextProperties> not available" )
98     endcatch
99     
100     '///</ul>
101     
102 end function
104 '*******************************************************************************
106 function hClosePropertyBrowser() as boolean
107     
108     '///<h3>A function that closes the Property-Browser</h3>
109     '///<i>The property browser is closed by executing the slot (the slot 
110     '///+ toggles the dialog).</i><br><br>
111     
112     '///<u>Input</u>:
113     '///<ol>
114     '///+<li>Nothing</li>
115     '///</ol>
116     
117     '///<u>Returns</u>:
118     '///<ol>
119     
120     '///+<li>Errorcondition (boolean)</li>
121     '///<ul>
122     '///+<li>TRUE if the Property Browser has been closed</li>
123     '///+<li>FALSE if the property browser is not open</li>
124     '///+<li>FALSE if the property browser could not be closed</li>
125     '///</ul>
126     
127     '///</ol>
128     
129     '///<u>Description</u>:
130     '///<ul>
131     
132     const CFN = "hClosePropertyBrowser::"
134     '///+<li>Verify that the property browser is open</li>
135     kontext "ControlPropertiesTabControl"
136     if ( ControlPropertiesTabControl.exists( 1 ) ) then
137     
138         '///+<li>Execute the ContextProperties slot</li>
139         ContextProperties
140         
141         '///+<li>Verify that the property browser is closed</li>
142         if ( ControlPropertiesTabControl.exists() ) then
143             printlog( CFN & "Property browser could not be closed" )
144             hClosePropertyBrowser() = false
145         else
146             printlog( CFN & "ok" )
147             hClosePropertyBrowser() = true
148         endif
149     else
150         printlog( CFN & "Property browser is not open" )
151         hClosePropertyBrowser() = false
152     endif
153     '///</ul>
154     
155 end function
157 '*******************************************************************************
159 function hPBSetControlName( cControl as string ) as boolean
160     
161     '///<h3>Name a control, with limited errorhandling</h3>
162     
163     '///<i>This function was introduced due to a problem with the property-
164     '///browser not being open fast enough or just refusing to accept input</i><br><br>
165     
166     '///<u>Input</u>:
167     '///<ol>
168     '///+<li>Text to be inserted in the control &quot;NameText&quot; (string)</li>
169     '///</ol>
170     
171     '///<u>Returns</u>:
172     '///<ol>
173     
174     '///+<li>Errorcondition</li>
175     '///<ul>
176     '///+<li>TRUE: The control name was successfully updated</li>
177     '///+<li>FALSE: Control is not visible within current context</li>
178     '///</ul>
179     
180     '///</ol>
181     
182     const CFN = "hPBSetControlName::"
183     
184     '///<u>Description</u>:
185     '///<ul>
186     '///+<li>Test that the control &quot;NameText&quot; exists</li>
187     kontext "TabGeneralControl"
188     if ( NameText.exists() ) then
189         '///+<li>Set the new name</li>
190         WaitSlot()
191         
192         ' Name the control and append some Spaces which should be truncated.
193         printlog( CFN & "Naming control: " & cControl )
194         NameText.setText( cControl )
195         TabGeneralControl.typeKeys( "   <RETURN>" )
196         WaitSlot()
197         
198         printlog( CFN & "Verifying rename..." )
199         if ( NameText.getText() = cControl ) then
200             printlog( CFN & "Name is set ok: " & cControl )
201             hPBSetControlName() = true
202             exit function
203         endif
204         
205         ' If the name cannot be set this is in 99% of the cases a timing problem.
206         ' Here is a (costly) workaround.
207         qaerrorlog( CFN & "Name not set correctly, retrying" )
208         Wait( 300 )
209         NameText.setText( cControl )
210         TabGeneralControl.typeKeys( "<RETURN>" )
211         Wait( 300 )
213         ' Test again, leave function if good
214         if ( NameText.getText() = cControl ) then
215             printlog( CFN & "Name is set ok: " & cControl )
216             hPBSetControlName() = true
217             exit function
218         endif
219         
220         warnlog( CFN & "Unable to set control name: " & cControl )
221         hPBSetControlName() = false
222             
223     else
224         warnlog( "Unable to name the control." )
225         hPBSetControlName() = false
226     endif
227     '///</ul>
228     
229 end function
231 '*******************************************************************************
233 function hPBGetControlName( cControl as string ) as boolean
234     
235     '///<h3>Verify that the expected control is open</h3>
236     '///<i>Use hPBSetControlName( string ) to set the name and when you reopen it
237     '///+ verify that you got the right control wit this function</i><br><br>
238     
239     '///<u>Input</u>:
240     '///<ol>
241     '///+<li>Name of the control (string)</li>
242     '///</ol>
243     
244     '///<u>Returns</u>:
245     '///<ol>
246     
247     '///+<li>Errorcondition (boolean)</li>
248     '///<ul>
249     '///+<li>TRUE: The control has the correct name</li>
250     '///+<li>FALSE: Any other condition</li>
251     '///</ul>
252     
253     '///</ol>
254     
255     '///<u>Description</u>:
256     '///<ul>
257     
258     dim cControlName as string
259     const CFN = "hPBGetControlName::"
260     
261     '///+<li>If &quot;NameText&quot; exists, retrieve its text</li>
262     kontext "TabGeneralControl"
263     if ( TabGeneralControl.exists( 1 ) ) then
264         if ( TabGeneralControl.isVisible() ) then
265     
266             cControlName = NameText.getText()
267         
268             '///+<li>Verify that the name is correct</li>
269             if ( cControlName = cControl ) then
270                 printlog( CFN & "The name of the control is correct: " & cControl )
271                 hPBGetControlName() = true
272             else
273                 warnlog( CFN & "Unexpected control name:" )
274                 printlog( CFN & "Found....: " & cControlName )
275                 printlog( CFN & "Expected.: " & cControl     )
276                 hPBGetControlName() = false
277             endif
278         else
279             warnlog( CFN & "Dialog present but tabpage could not be accessed (TabGeneralControl)." )
280             hPBGetControlName() = false
281         endif
282     else
283         warnlog( CFN & "Unable to get the name from the control, dialog not accessible (TabGeneralControl)." )
284         hPBGetControlName() = false
285     endif
286     '///</ul>
287     
288 end function
290 '*******************************************************************************
292 function hCheckPropertyPresence ( cSetting as string , iPos as integer ) as boolean
293     
294     '///<h3>Function to determine whether a property is available for a control or not</h3>
295     '///<i>This function takes a string (provided by controlcfg.dat) and looks for an 'x' at.
296     '///+ a given position.  If it is found it returns TRUE, FALSE if it is a '-'<br>
297     '///+Note that this function is a terrible workaround for a missing feature: In the current
298     '///+ version of the Testtool we cannot ask which controls are present on a dialog. So this
299     '///+ has to be kept in a list of some sort. This is especially bad for a property browser
300     '///+ test as we need to maintain such a list for 21 controls and a total of 76 (IIRC)
301     '///+ possible properties whereof only a small number (eight, i think) are common for all
302     '///+ controls. The test is barely maintainable, issues have been written but there is
303     '///+ no solution so far.</i><br><br>
304     
305     '///<u>Input</u>:
306     '///<ol>
307     
308     '///+<li>Configuration string (string)</li>
309     '///<ul>
310     '///+<li>The string must be taken from file &quot;controlcfg.dat&quot;</li>
311     '///</ul>
312     
313     '///+<li>Position of the control (integer)</li>
314     '///<ul>
315     '///+<li>&gt; 0 and &lt; 74 (all possible control config items)</li>
316     '///</ul>
317     
318     '///</ol>
319     
320     '///<u>Returns</u>:
321     '///<ol>
322     '///+<li>Status (boolean)</li>
323     '///<ul>
324     '///+<li>TRUE: The property should exist for the current control</li>
325     '///+<li>FALSE: The property is not expected to exist for this control</li>
326     '///</ul>
327     
328     '///</ol>
329     
330     '///<u>Description</u>:
331     '///<ul>
332     
333     ' this function looks at a given position in the string cSetting for either
334     ' a "x" or a "-".
335     ' if "x" is found, the function returns true, else false.
336     
337     
338     '///+<li>Find the requested position in the string, set TRUE if it is an &quot;x&quot;</li>
339     if ( mid( cSetting , iPos , 1 ) = "x" ) then
340         hCheckPropertyPresence() = true
341     else
342         hCheckPropertyPresence() = false
343     endif
344     '///</ul>
345     
346 end function
348 '*******************************************************************************
350 function hSetPBTabPage( iPage as integer ) as boolean
351     
352     '///<h3>A small helper to switch between tabpages in the property-browser</h3>
353     '///<u>Input</u>:
354     '///<ol>
355     
356     '///+<li>Page-ID (integer)</li>
357     '///<ul>
358     '///+<li>1 = General page</li>
359     '///+<li>2 = Events page</li>
360     '///</ul>
361     
362     '///</ol>
363     
364     '///<u>Returns</u>:
365     '///<ol>
366     
367     '///+<li>Errorcondition (boolean)</li>
368     '///<ul>
369     '///+<li>TRUE on success</li>
370     '///+<li>FALSE on any error</li>
371     '///</ul>
372     
373     '///</ol>
374     
375     '///<u>Description</u>:
376     '///<ul>
377     
378     const CFN = "hSetPBTabPage::"
379     printlog( CFN & "Enter with option: " & iPage )
380     
381     '///+<li>Switch to the requested page</li>
382     kontext "ControlPropertiesTabControl"
383     if ( not ControlPropertiesTabControl.exists( 3 ) ) then
384         printlog( CFN & "Exit: Control Properties Dialog is not open, aborting" )
385         hSetPBTabPage() = false
386         exit function
387     else
388         if ( DEBUG_ENABLE ) then
389             printlog( CFN & "Control Properties Dialog is open" )
390         endif
391     endif
392     
393     select case iPage
394     case 1 
395     
396         printlog( CFN & "Switching to control properties tabpage" )
397         kontext "ControlPropertiesTabControl"
398         ControlPropertiesTabControl.setPage TabGeneralControl
399         
400         kontext "TabGeneralControl"
401         if ( nametext.exists( 5 ) ) then
402             printlog( CFN & "Exit: Control properties are open (true)" )
403             hSetPBTabPage() = true
404             exit function
405         else
406             printlog( CFN & "Exit: Failed to open Control Properties (false)" )
407             hSetPBTabPage() = false
408             exit function
409         endif
410             
411     case 2
412     
413         printlog( CFN & "Switching to event assignment tabpage" )
414         kontext "ControlPropertiesTabControl"
415         ControlPropertiesTabControl.setPage TabEventsControl
416         
417         kontext "TabEventsControl"
418         if ( PBFocusGained.exists( 5 ) ) then
419             printlog( CFN & "Exit: Events page is open (true)" )
420             hSetPBTabPage() = true
421             exit function
422         else
423             printlog( CFN & "Exit: Failed to open events-page (false)" )
424             hSetPBTabPage() = false
425             exit function
426         endif
427         
428     case else
429     
430         printlog( CFN & "Invalid parameter passed to function: " & iPage )
431         hSerPBTabPage() = false
432         exit function
433             
434     end select
435     '///</ul>
436     
437 end function
439 '*******************************************************************************
441 function hSetLabelName( sLabelName as string ) as boolean
442     
443     '///<h3>Name a control, with limited errorhandling</h3>
444     
445     '///<i>This function was introduced due to a problem with the property-
446     '///browser not being open fast enough or just refusing to accept input</i><br><br>
447     
448     '///<u>Input</u>:
449     '///<ol>
450     '///+<li>Text to be inserted in the control &quot;NameText&quot; (string)</li>
451     '///</ol>
452     
453     '///<u>Returns</u>:
454     '///<ol>
455     
456     '///+<li>Errorcondition</li>
457     '///<ul>
458     '///+<li>TRUE: The control name was successfully updated</li>
459     '///+<li>FALSE: Control is not visible within current context</li>
460     '///</ul>
461     
462     '///</ol>
463     
464     '///<u>Description</u>:
465     '///<ul>
466     '///+<li>Test that the control &quot;NameText&quot; exists</li>
467     kontext "TabGeneralControl"
468     if ( Label.exists() ) then
469         '///+<li>Set the new name</li>
470         Label.setText( sLabelName )
471         TabGeneralControl.TypeKeys ("<RETURN>" , true)
472         hSetLabelName() = true
473     else
474         warnlog( "Unable to name the control." )
475         hSetLabelName() = false
476     endif
477     '///</ul>
478     
479 end function