merge the formfield patch from ooo-build
[ooovba.git] / testautomation / framework / optional / includes / ole_3.inc
blobb047c57a3f9a7c00a74050425d47daca16bea2da
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: ole_3.inc,v $
11 '* $Revision: 1.1 $
13 '* last change: $Author: jsi $ $Date: 2008-06-16 12:18:15 $
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 : thorsten.bosbach@sun.com
36 '* short description :
38 '\******************************************************************************
40 testcase tDraw_As_OLE_Object()
41     
42     '///<h1>Insert, save, reload, close files with Draw as OLE object</h1>
43     call ClosePresentationfloat()
44     call hInsertOLEObject( true, gOLEDraw, "DRAW" )
45     'call hInsertOLEObject( false, gOLEDraw, "DRAW" )
46     
47 endcase
49 testcase tCalc_as_OLE_Object()
50     
51     '///<h1>Insert, save, reload, close files with Calc as OLE object</h1>
52     call ClosePresentationfloat()
53     call hInsertOLEObject( true, gOLECalc, "CALC" )
54     'call hInsertOLEObject( false, gOLECalc, "CALC" )
55     
56 endcase
58 testcase tImpress_As_OLE_Object()
59     
60     '///<h1>Insert, save, reload, close files with Impress as OLE object</h1>
61     call ClosePresentationfloat()
62     call hInsertOLEObject( true, gOLEImpress, "IMPRESS" )
63     'call hInsertOLEObject( false, gOLEImpress, "IMPRESS" )
64     
65 endcase
67 testcase tWriter_As_OLE_Object()
68     
69     '///<h1>Insert, save, reload, close files with Writer as OLE object</h1>
70     call ClosePresentationfloat()
71     call hInsertOLEObject( true, gOLEWriter, "WRITER" )
72     'call hInsertOLEObject( false, gOLEWriter, "WRITER" )
73     
74 endcase
76 testcase tMath_As_OLE_Object()
77     
78     '///<h1>Insert, save, reload, close files with Math as OLE object</h1>
79     call ClosePresentationfloat()
80     call hInsertOLEObject( true, gOLEMath, "MATH" )
81     'call hInsertOLEObject( false, gOLEMath, "MATH" )
82     
83 endcase
85 testcase tChart_As_OLE_Object()
86     
87     '///<h1>Insert, save, reload, close files with Chart as OLE object</h1>
88     call ClosePresentationfloat()
89     call hInsertOLEObject( true, gOLEChart, "CHART" )
90     'call hInsertOLEObject( false, gOLEChart, "CHART" )
91     
92 endcase
94 '*******************************************************************************
96 sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as string )
97     
98     dim sFile as String
99     dim bOleAvailable as boolean
100     
101     '///<h3>Insert OLE objects into the applications / all possible combinations</h3>
102     '///<u>Input</u>:
103     '///<ol>
104     '///+<li>bRemoveFocus (boolean)</li>
105     '///<ul>
106     '///+<li>TRUE = Click into the application frame to remove focus from OLE object before saving</li>
107     '///+<li>FALSE = Do not remove focus from OLE object</li>
108     '///</ul>
109     '///+<li>cOLEObject (string).</li>
110     '///<ul>
111     '///+<li>Any valid entry stored in gOLExxxx (set those with GetOLEDefaultNames())</li>
112     '///</ul>
113     
114     '///+<li>cOLEType (string). valid options are:
115     '///<ul>
116     '///+<li>&quot;WRITER&quot;</li>
117     '///+<li>&quot;CALC&quot;</li>
118     '///+<li>&quot;DRAW&quot;</li>
119     '///+<li>&quot;IMPRESS&quot;</li>
120     '///+<li>&quot;CHART&quot;</li>
121     '///+<li>&quot;MATH&quot;</li>
122     '///</ul>
123     '///</ol>
124     
125     '///<u>Returns</u>:
126     '///<ol>
127     '///+<li>Nothing</li>
128     '///</ol>
129     
130     '///<u>Description</u>:
131     '///<ul>
132     
133     printlog( "" )
134     printlog( "Beginning testcase with options: " )
135     printlog( "* Remove focus...: " & bRemoveFocus )
136     printlog( "* OLE object name: " & cOLEObject )
137     printlog( "* OLE object type: " & cOLEType )
138     printlog( "* Document type..: " & gApplication )
139     printlog( "" )
140     
141     ' We cannot insert an OLE object of same type as the current document
142     ' So writer/writer, calc/calc, masterdoc/writer is skipped ...
143     if ( gApplication = cOleType ) then
144         printlog( "Skipping " & cOleType & " as OLE object" )
145         goto testend
146     endif
147     
148     if ( gApplication = "MASTERDOCUMENT" and cOleType = "WRITER" ) then
149         printlog( "Skipping " & cOleType & " as OLE object" )
150         goto testend
151     endif
152     
153     '///+<li>Open a new document ( Writer / Calc / Draw / Masterdocument ... )</li>
154     hCreateDocument()
155     
156     '///+<li>Insert / object / OLE-object</li>
157     printlog( "Menu: insert / object / OLE object" )
158     InsertObjectOLEObject
159     
160     Kontext "OLEObjektEinfuegen"
161     if ( OLEObjektEinfuegen.exists( 1 ) ) then
162         
163         '///+<li>Select 'create new'</li>
164         printlog( "Select 'create new'" )
165         NeuErstellen.Check()
166         
167         '///+<li>Select the draw-OLE-object ( you can find the name for each language at [TesttoolPath]/global/input/olenames/ole_[lang-code].txt )</li>
168         printlog( "Select objecttype: " & cOLEObject )
169         ObjektTyp.Select( cOLEObject )
170         
171         '///+<li>Click 'OK'</li>
172         printlog( "Click OK" )
173         OLEObjektEinfuegen.OK()
174         WaitSlot( 3000 )
175     else
176         warnlog( "Insert OLE object dialog is missing, test ends" )
177         hDestroyDocument()
178         goto testend
179     endif
180     
181     '///+<li>Optionally remove focus from OLE object</li>
182     if ( bRemoveFocus ) then
183         printlog( "Remove focus from OLE object" )
184         call OLERemoveFocus()
185     else
186         printlog( "Focus is not to be removed from OLE object" )
187         
188         ' The following can - in some cases - reproduce a nasty crash-bug when
189         ' saving files with selected/activated OLE object
190         select case gApplication
191         case "DRAW"      : gMouseClick( 99 , 99 )
192         case "IMPRESS"   : gMouseClick( 99 , 99 )
193         end select
194     endif
195     
196     '///+<li>Build the filename with full path but without suffix</li>
197     sFile = ConvertPath ( gOfficePath + "user\work\ole_" & cOleType )
198     printlog( "Save the file; File to be written (w/o extension): " & sFile )
199     if fileexists(sFile) then
200         kill(sFile)
201         qaerrorlog("killed file from former test run")
202     endif
203     
204     '///+<li>Save the file via FileSave, current fileformat, overwrite</li>
205     hFileSaveAsKill( sFile )
206     
207     '///+<li>Close the document</li>
208     printlog( "Close the document" )
209     hDestroyDocument()
210     
211     '///+<li>Load the file again via FileOpen (filename with suffix)</li>
212     printlog( "Reopen the file: " & sFile )
213     hFileOpen( sFile )
214     
215     '///+<li>Check that the OLE object is listed in the navigator</li>
216     bOleAvailable = isOleAvailable()
217     if ( bOleAvailable ) then
218         
219         '///+<li>Disable the navigator if it exists</li>
220         call DisableNavigator()
221         
222         '///+<li>Set focus to OLE object</li>
223         call OLESetFocus()
224         
225         '///+<li>Remove focus from OLE object</li>
226         call SendEscape()
227     else
228         qaErrorLog( "#i44725# OLE Object not saved in Master Document" )
229     endif
230     
231     '///+<li>Cleanup: Close the document</li>
232     printlog( "Cleanup: Close the document" )
233     hDestroyDocument()
234     
235     '///+<li>Cleanup: Delete the workfile</li>
236     printlog( "Cleanup: Delete the workfile" )
237     hDeleteFile( sFile )
238     '///</ul>
239     
240     ' We end up here when the test has been skipped or aborted
241     testend:
242     
243 end sub
245 '*******************************************************************************
247 function isOleAvailable() as boolean
248     
249     '///<h3>Funtion to determine whether OLE is available</h3>
250     dim i as integer
251     dim a as integer
252     
253     const CFN = "isOleAvailable::"
254     
255     printlog( CFN & "Testing whether OLE object is present in Navigator" )
256 '    qaerrorlog( CFN & "Replace me i'm old, poorly written and undocumented" )
257     
258     isOleAvailable = FALSE
259     ' check if OLE-Objects are in the document with the navigator
260     kontext "NavigatorGlobaldoc"
261     if NavigatorGlobaldoc.exists( 1 ) then
262         printlog CFN & "Navigator globaldoc is available"
263         if NOT AuswahlListe.exists then
264             Umschalten.click
265         endif
266         a = AuswahlListe.getItemCount
267         ' somehow not all items might be displayed
268         if NOT (a>2) then
269             inhaltsansicht.click
270             i = AuswahlListe.getItemCount
271             if NOT(i>a) then
272                 inhaltsansicht.click
273             else
274                 a = i
275             endif
276         endif
277         AuswahlListe.typeKeys("<home>")
278         'fold everything
279         for i = 1 to a
280             AuswahlListe.typeKeys("-<down>")
281         next i
282         ' unfold everything, until there is something to unfold
283         ' then we found the object we looked for: OLE
284         AuswahlListe.typeKeys("<home>")
285         i = 0
286         a = AuswahlListe.getItemCount
287         ' don't run indefinite
288         while ((AuswahlListe.getItemCount = a) AND (i < a))
289             AuswahlListe.typeKeys("+<down>")
290             inc(i)
291         wend
292         try
293             printlog CFN & AuswahlListe.getSelText
294         catch
295             qaerrorlog CFN & "no item in navigator is selected"
296         endcatch
297         ' activate object
298         AuswahlListe.typeKeys("<return>")
299         i = AuswahlListe.getItemCount
300         printlog CFN & i
301         if (i > a) then
302             isOleAvailable = TRUE
303         else
304             isOleAvailable = FALSE
305         endif
306     else
307         Kontext "NavigatorWriter"
308         if NOT NavigatorWriter.exists( 1 ) then
309             ViewNavigator
310         endif
311         Kontext "NavigatorWriter"
312         if NavigatorWriter.exists( 2 ) then ' was 5 secs
313             printlog CFN & "Navigator writer was available"
314             if NOT AuswahlListe.exists then
315                 Umschalten.click
316                 Sleep( 5 )
317             endif
318             a = AuswahlListe.getItemCount
319             ' somehow not all items might be displayed
320             if a=0 then
321                 Sleep( 5 )
322                  a = AuswahlListe.getItemCount
323             endif
324             if NOT (a>2) then
325                 inhaltsansicht.click
326                 Sleep( 3 )
327                 i = AuswahlListe.getItemCount
328                 if NOT(i>a) then
329                     qaerrorlog "failed"
330                 else
331                     a = i
332                 endif
333             endif
334             AuswahlListe.typeKeys("<home>")
335             'fold everything
336             for i = 1 to a
337                 AuswahlListe.typeKeys("-<down>")
338             next i
339             ' unfold everything, until there is something to unfold
340             ' then we found the object we looked for: OLE
341             AuswahlListe.typeKeys("<home>")
342             i = 0
343             a = AuswahlListe.getItemCount
344             ' don't run indefinite
345             while ((AuswahlListe.getItemCount = a) AND (i < a))
346                 AuswahlListe.typeKeys("+<down>")
347                 inc(i)
348             wend
349             try
350                 printlog CFN & AuswahlListe.getSelText
351             catch
352                 qaerrorlog CFN & "no item in navigator is selected"
353             endcatch
354             i = AuswahlListe.getItemCount
355             ' activate object
356             AuswahlListe.typeKeys("<return>")
357             if (i > a) then
358                 isOleAvailable = TRUE
359             else
360                 isOleAvailable = FALSE
361             endif
362         else
363             kontext "NavigatorDraw"
364             if NavigatorDraw.exists( 2 ) then ' was 5 secs
365                 printlog CFN & "Navigator draw is available"
366             else
367                 ViewNavigator
368             endif
369             kontext "NavigatorDraw"
370             if NavigatorDraw.exists( 2 ) then ' was 5 secs
371                 printlog CFN & "Navigator draw is available."
372                 if NOT Liste.exists then
373                     Umschalten.click
374                 endif
375                 Liste.typeKeys("<home>")
376                 'fold everything
377                 a = Liste.getItemCount
378                 for i = 1 to a
379                     Liste.typeKeys("-<down>")
380                 next i
381                 ' unfold everything, until there is something to unfold
382                 ' then we found the object we looked for: OLE
383                 Liste.typeKeys("<home>")
384                 i = 0
385                 a = Liste.getItemCount
386                 ' don't run indefinite
387                 while ((Liste.getItemCount = a) AND (i < a))
388                     Liste.typeKeys("+<down>")
389                     inc(i)
390                 wend
391                 try
392                     printlog CFN & Liste.getSelText
393                 catch
394                     qaerrorlog CFN & "no item in navigator is selected"
395                 endcatch
396                 i = Liste.getItemCount
397                 if (i > a) then
398                     isOleAvailable = TRUE
399                 else
400                     isOleAvailable = FALSE
401                 endif
402             else
403                 ' no globaldoc
404                 ' check if something is selected
405                 try
406                     EditCopy
407                     printlog CFN & "Something was selected; executed Edit->Copy"
408                     isOleAvailable = TRUE
409                 catch
410                     qaErrorLog CFN & "Nothing is selected."
411                     isOleAvailable = FALSE
412                 endcatch
413             endif
414         endif
415     endif
416     
417 end function