Update ooo320-m1
[ooovba.git] / testautomation / extensions / optional / includes / extensions.inc
blobd873830df760aa92549c96935d43efd978041b4e
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: extensions.inc,v $
11 '* $Revision: 1.3 $
13 '* last change: $Author: rt $ $Date: 2008-09-04 09:15:21 $
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 : Function test of extension manager
38 '\************************************************************************
40 testcase tExtensionsFunction
42     ' written for CWS jsc7, in master since SRC680m176
43     ' additions for CWS sb63 - Dependency checking with versioning - documents 24-30
44     ' features: - http://specs.openoffice.org/appwide/packagemanager/simple_extension_license.odt
45     '           - http://specs.openoffice.org/appwide/packagemanager/extensiondependencies1.odt
46     '/// The test documents are available at http://qa.openoffice.org/source/browse/qa/qatesttool/framework/basic/input/extensions/ ///'
47     '/// Textdocuments used in this test and expected messages: ///'
48     '/// (1/31): simpleLicense\BadDesc.oxt ///'
49     '/// - BadDesc.oxt/description.xml contains data which cannot be parsed. ///'
50     '/// - will not install ///'
51     '/// (2/31): simpleLicense\BadNamespace.oxt ///'
52     '/// - BadNamespace.oxt/description.xml contains a root element with an unsupported namespace. ///'
53     '/// - will not install ///'
54     '/// (3/31): simpleLicense\BadRoot.oxt ///'
55     '/// - BadRoot.oxt/description.xml does not contain the root element <description>. ///'
56     '/// - will not install ///'
57     '/// (4/31): simpleLicense\IncompAttr1.oxt ///'
58     '/// - ExtensionSoftwareLicenseAgreement dialog exists ///'
59     '/// - installs and is enabled ///'
60     '/// (5/31): simpleLicense\IncompAttr2.oxt ///'
61     '/// - Cannot find a localized license text or a default license text. ///'
62     '/// - will not install ///'
63     '/// (6/31): simpleLicense\LongLic.oxt ///'
64     '/// - ExtensionSoftwareLicenseAgreement dialog exists ///'
65     '/// - It is a Long License ///'
66     '/// - installs and is enabled ///'
67     '/// (7/31): simpleLicense\MissingLic.oxt ///'
68     '/// - MissingLic.oxt\registration\license_en_US.txt does not exist. ///'
69     '/// - will not install ///'
70     '/// (8/31): simpleLicense\MissingLicRef.oxt ///'
71     '/// - Cannot find a localized license text or a default license text. ///'
72     '/// - will not install ///'
73     '/// (9/31): simpleLicense\NoDesc.oxt ///'
74     '/// - installs and is enabled ///'
75     '/// (10/31): simpleLicense\NoLangNoDefault.oxt ///'
76     '/// - Cannot find a localized license text or a default license text. ///'
77     '/// - will not install ///'
78     '/// (11/31): simpleLicense\OnlyDefault.oxt ///'
79     '/// - Cannot find a localized license text or a default license text. ///'
80     '/// - will not install ///'
81     '/// (12/31): simpleLicense\ShortLicense.oxt ///'
82     '/// - ExtensionSoftwareLicenseAgreement dialog exists ///'
83     '/// - installs and is enabled ///'
84     '/// (13/31): ///'
85     '/// - will not install ///'
86     '/// (14/31): simpleLicense\ShortLicenseShared.oxt ///'
87     '/// - ExtensionSoftwareLicenseAgreement dialog exists ///'
88     '/// - installs and is enabled ///'
89     '/// (15/31): dependencies\broken-dependency.oxt ///'
90     '/// - broken-dependency.oxt/description.xml contains data which cannot be parsed. ///'
91     '/// - will not install ///'
92     '/// (16/31): dependencies\double-dependencies.oxt ///'
93     '/// - UnsatisfiedDependencies dialog exists ///'
94     '///     (1/2): Dependency 1 ///'
95     '///     (2/2): Dependency 2 ///'
96     '/// - will not install ///'
97     '/// (17/31): dependencies\empty-dependencies.oxt ///'
98     '/// - installs and is enabled ///'
99     '/// (18/31): dependencies\funny-dependency.oxt ///'
100     '/// - UnsatisfiedDependencies dialog exists ///'
101     '///     (1/1): & < > ' " > ' tab   . crlf ///'
102     '///           . em-dash�;. line-separator?. paragraph-separator?. xxxxxxxxxxx... ///'
103     '/// - will not install ///'
104     '/// (19/31): dependencies\license-dependency.oxt ///'
105     '/// - UnsatisfiedDependencies dialog exists ///'
106     '///     (1/1): Dependency ///'
107     '/// - will not install ///'
108     '/// (20/31): dependencies\many-dependencies.oxt ///'
109     '/// - UnsatisfiedDependencies dialog exists ///'
110     '///     (1/20): Dependency 1 ///'
111     '///     (2/20): Dependency 2 ///'
112     '///     (3/20): Dependency 3 ///'
113     '///     (4/20): Dependency 4 ///'
114     '///     (5/20): Dependency 5 ///'
115     '///     (6/20): Dependency 6 ///'
116     '///     (7/20): Dependency 7 ///'
117     '///     (8/20): Dependency 8 ///'
118     '///     (9/20): Dependency 9 ///'
119     '///     (10/20): Dependency 10 ///'
120     '///     (11/20): Dependency 11 ///'
121     '///     (12/20): Dependency 12 ///'
122     '///     (13/20): Dependency 13 ///'
123     '///     (14/20): Dependency 14 ///'
124     '///     (15/20): Dependency 15 ///'
125     '///     (16/20): Dependency 16 ///'
126     '///     (17/20): Dependency 17 ///'
127     '///     (18/20): Dependency 18 ///'
128     '///     (19/20): Dependency 19 ///'
129     '///     (20/20): Dependency 20 ///'
130     '/// - will not install ///'
131     '/// (21/31): dependencies\no-dependencies.oxt ///'
132     '/// - installs and is enabled ///'
133     '/// (22/31): dependencies\no-description.oxt ///'
134     '/// - installs and is enabled ///'
135     '/// (23/31): dependencies\unknown-dependency.oxt ///'
136     '/// - UnsatisfiedDependencies dialog exists ///'
137     '///     (1/1): Unknown ///'
138     '/// - will not install ///'
139     '/// (24/31): dependencies\version21.oxt ///'
140     '/// - installs and is enabled ///'
141     '/// (25/31): dependencies\version10000.oxt ///'
142     '/// - UnsatisfiedDependencies dialog exists ///'
143     '///     (1/1): Unknown ///'
144     '/// - will not install ///'
145     '/// (26/31): dependencies\version21ns.oxt ///'
146     '/// - installs and is enabled ///'
147     '/// (27/31): dependencies\version21other.oxt ///'
148     '/// - UnsatisfiedDependencies dialog exists ///'
149     '///     (1/1): Unknown ///'
150     '/// - will not install ///'
151     '/// (25/31): dependencies\version25.oxt ///'
152     '/// - installs and is enabled ///'
153     '/// (25/31): dependencies\version30.oxt ///'
154     '/// - installs and is enabled ///'
155     '/// (25/31): dependencies\version31.oxt ///'
156     '/// - UnsatisfiedDependencies dialog exists ///'
157     '///     (1/1): Unknown ///'
158     '/// - will not install ///'
159     '/// (27/31): dependencies\version21other.oxt ///'
160     '/// - UnsatisfiedDependencies dialog exists ///'
161     '///     (1/1): Unknown ///'
162     '/// (30/31): dependencies\versionempty.oxt ///'
163     '/// - installs and is enabled ///'
164     '/// (31/31): dependencies\versionnone.oxt ///'
165     '/// - installs and is enabled ///'
166     '/// (32/41): versions/plain.oxt
167     '/// - installs and is enabled ///'
168     '/// (33/41): versions/plain.oxt
169     '/// - You are about to install version 1.02.4.7.0 of the extension org.openoffice.legacy.plain.oxt. That version is already installed.
170     '/// - installs and is enabled ///'
171     '/// (34/41): versions/version_none/plain.oxt
172     '/// - You are about to install version 0 of the extension org.openoffice.legacy.plain.oxt. The newer version 1.02.4.7.0 is already installed.
173     '/// - installs and is enabled ///'
174     '/// (35/41): versions/version_1.2.3/plain.oxt
175     '/// - You are about to install version 1.2.3 of the extension org.openoffice.legacy.plain.oxt. The older version 0 is already installed.
176     '/// - installs and is enabled ///'
177     '/// (36/41): versions/version_1.2.3/plain.oxt
178     '/// - You are about to install version 1.2.3 of the extension org.openoffice.legacy.plain.oxt. That version is already installed.
179     '/// - installs and is enabled ///'
180     '/// (37/41): versions/version_0.0/plain.oxt
181     '/// - You are about to install version 0.0 of the extension org.openoffice.legacy.plain.oxt. The newer version 1.2.3 is already installed.
182     '/// - installs and is enabled ///'
183     '/// (38/41): versions/version_1.2.4.7/plain.oxt
184     '/// - You are about to install version 1.2.4.7 of the extension org.openoffice.legacy.plain.oxt. The older version 0.0 is already installed.
185     '/// - installs and is enabled ///'
186     '/// (39/41): versions/version_1.02.4.7.0/plain.oxt
187     '/// - You are about to install version 1.02.4.7.0 of the extension org.openoffice.legacy.plain.oxt. That version is already installed.
188     '/// - installs and is enabled ///'
189     '/// (40/41): versions/version_1.2.3/plain.oxt
190     '/// - You are about to install version 1.2.3 of the extension org.openoffice.legacy.plain.oxt. The newer version 1.02.4.7.0 is already installed.
191     '/// - installs and is enabled ///'
192     '/// (41/41): versions/version_1.2.15.3/plain.oxt
193     '/// - You are about to install version 1.2.15.3 of the extension org.openoffice.legacy.plain.oxt. The older version 1.2.3 is already installed.
195     dim j,b,i,a,x,y as integer
196     dim sPath as string
197     dim aFiles(50) as string
198     dim aFeatures(50) as string
199     dim aFileList(50) as string
200     dim sTemp as string
201     dim sTemp2 as string
202     dim sTemp3 as string
203     dim sTemp4 as string
204     dim aTemp
205     dim aTemp2
206     dim sFirstStatus as string
207     dim bFound as boolean
208     dim aRemovePackages(50) as string
209     dim bFoundNumber as boolean
210     dim sLastVersion as string
212     sLastVersion = ""
213     ' want to start and work with just one document window
214     b = getDocumentCount
215     hFileCloseAll()
216     hNewDocument()
218     ' load about twenty one extension files, to test the features
219     ' the list tells the filename and in encoded numbers the features
220     ' a line looks like:
221     ' simpleLicense\LongLic.oxt;0,2,1,0
222     ' - the filename and the features are seperated by a semicolon
223     ' - the numbes for the features are seperated by colons
224     ' 1st number: Unsatisfied dependencies; if there are any, the number counts them; if there are none it is zero and the dialog won't come up
225     ' 2nd number: License; if there is one the value is 1; it it a long one, where the scroll button needs to be used it is 2; 3 if the license should not be accepted for testing purposes, if there is no license the value is zero
226     ' 3rd number: If the extension should successfully install the value is one, else zero.
227     ' 4th number: If an active is expected after selecting a file for installation the value is one, else zero.
228     ' 5th number: If active is expected the expected version information after selecting a file for installation the value is one, else zero and if an upgrade/downgrade is expected, the number is 2.
230     ' Base path for test files
231     sPath = convertPath(gTestToolPath+"extensions/optional/input/")
232     ' read filelist and expected features
233     ListRead(aFileList(), sPath+"files.txt")
234     a = listCount(aFileList())
235     printlog a
236     for i = 1 to a
237         aTemp = split (aFileList(i),";")
238         if uBound(aTemp()) >0 then
239             listAppend(aFiles(),aTemp(0))
240             listAppend(aFeatures(),aTemp(1))
241         endif
242     next i
244     ' there are some dependencys to languages...
245     if iSprache = 49 then
246         sTemp = aFeatures(4)
247         aFeatures(4) = aFeatures(5)
248         aFeatures(5) = sTemp
249     else
250         if iSprache <> 01 then
251             aFeatures(4) = aFeatures(5)
252             aFeatures(6) = aFeatures(5)
253             aFeatures(12) = aFeatures(5)
254             aFeatures(13) = aFeatures(5)
255             aFeatures(14) = aFeatures(5)
256         endif
257     endif
258     ' cleanup before starting; check that no extension from the list is installed right now; if remove it.
259     '/// Before starting, look into extension manager, if already a file is installed, that will be used in this test ///'
260     '/// Remove it. ///'
261     a = listCount(aFiles())
262     dim ii as integer
263     ToolsPackageManager
264     kontext "PackageManager"
265     If PackageManager.exists(10) then
266         BrowsePackages.typeKeys("<home>")
267         ii = 1
268         while (ii < BrowsePackages.getItemCount+1 )
269             kontext "PackageManager"
270             'BrowsePackages.typeKeys("+")
271             'BrowsePackages.typeKeys("<down>")
272             BrowsePackages.select ii
273             sTemp = BrowsePackages.getItemText (ii,1)
274             if right(sTemp,3) = "oxt" then
275                 for x = 1 to a
276                     sTemp3 = aFiles(x)
277                     aTemp = split(sTemp3,"\")
278                     if uBound(aTemp) < 1 then
279                         aTemp = split(sTemp3,"/")
280                     endif
281                     sTemp3 = aTemp(uBound(aTemp))
282                     if sTemp = sTemp3 then
283                         qaErrorLog "Package is already installed, trying to remove it: '" + sTemp + "'"
284                         if remove.isEnabled then
285                             remove.click
286                             
287                             kontext "Active"
288                             if ( Active.exists( 2 ) ) then
289                                 Active.ok()
290                             else
291                                 warnlog( "No confirmation dialog for Extension removal" )
292                             endif
293                             
294                             Kontext "AddingPackages"
295                             y=0
296                             while AddingPackages.exists(1) AND (y<30)
297                                 printlog "RemovingPackages..."
298                                 sleep 1
299                                 y=y+1
300                             wend
301                             kontext "PackageManager"
302                             BrowsePackages.typeKeys("<up>")
303                             x = 100
304                         else
305                             warnlog "Package is already installed and can't get removed: '" + sTemp + "'"
306                             ii=ii+1
307                             x = 101
308                         endif
309                     endif
310                 next x
311                 if x < 100 then
312                     ii=ii+1
313                 endif
314             else
315                 ii=ii+1
316             endif
317         wend
318         kontext "PackageManager"
319         PackageManager.close
320         WaitSlot( 5000 )
321     endif
323     ' for every test file do...
324     a = listCount(aFiles())
325     for i = 1 to a
326         printlog "********** Test file ("+i+"/"+a+"): "+aFiles(i)
327         aTemp = split (aFeatures(i),",")
328         '/// call Tools - Package/Extension manager ///'
329         ToolsPackageManager
330         kontext "PackageManager"
331         If PackageManager.exists(10) then
332             '/// going to top of package list and explode every line, until the button 'Add' is enabled ///'
333             '/// should be 'My Packages' ///'
334             'BrowsePackages.typeKeys("<home>")
335             'sTemp = BrowsePackages.getSelText
336             'sTemp2 = ""
337             'while (Not Add.isEnabled AND (sTemp <> sTemp2))
338             '    BrowsePackages.typeKeys("+")
339             '    BrowsePackages.typeKeys("<down>")
340             '    sTemp2 = sTemp
341             '    sTemp = BrowsePackages.getSelText
342             'wend
343             'if sTemp = sTemp2 then
344             '    warnlog "Couldn't find a way to enable the Add button - aborting"
345             '    goto endsub
346             'endif
347             'printlog BrowsePackages.getSelText
348             '/// click button 'Add' ///'
349             try
350                 Add.click
351             catch
352                 warnlog "#i90870# extension manager deadlock/C++ runtimes"
353                 exitrestarttheoffice
354                 ToolsPackageManager
355                 kontext "PackageManager"
356                 Add.click
357             endcatch
358             '/// Add Package(s)... dialg comes up ///'
359             Kontext "OeffnenDlg"
360             if OeffnenDlg.exists(5) then
361                 '/// put filename into field ///'
362                 Dateiname.setText convertPath(sPath + aFiles(i))
363                 printlog DateiTyp.getSelText
364                 '/// press button 'Open' ///'
365                 Oeffnen.click
366             else
367                 warnlog "Add Package(s)... dialog didn't came up"
368             endif
370             'Asking for whom to install; All: YES, Me: NO, nobody: Cancel
371             kontext
372             if active.exists(5) then
373                 sTemp = active.getText
374                 try
375                     active.yes
376                 catch
377                     warnlog( "Try...catch: Failed to click Yes-button" )
378                 endcatch
379             endif
381             '/// Progress dialog comes up ///'
382             Kontext "AddingPackages"
383             if AddingPackages.exists(1) then
384                 printlog " - AddingPackages dialog exists"
385                 'DialogTest(AddingPackages)
386             endif
388             '/// If any error happens, an active comes up, telling what is wrong ///'
389             ' error is just a dialog with one button
390             ' version infos have two buttons
391             Kontext
392             if active.exists(5) then
393                 sTemp = active.getText
394                 select case active.getbuttoncount
395                 case 1:
396                     y = instr(sTemp, " ")
397                     if cBool(aTemp(3)) then
398                         printlog sTemp
399                     else
400                         warnlog sTemp
401                     endif
402                 case 2:
403                     x = 0
404                     if cBool(aTemp(4)) then
405                         printlog "Version info message available."
406                     else
407                         warnlog "Version info message available, but not expected"
408                     endif
409                     printlog sTemp
410                     bFoundNumber = false
411                     aTemp2 = split(sTemp," ")
412                     y = uBound(aTemp2)
413                     while ((NOT bFoundNumber) AND (x < y))
414                         stemp2 = left(aTemp2(x),1)
415                         if isNumeric(stemp2) then
416                             bFoundNumber = TRUE
417                             printlog  "Try to install version: " + aTemp2(x)
418                         endif
419                         x=x+1
420                     wend
421                     if NOT bFoundNumber then
422                         warnlog "No version was mentioned in the version message!"
423                     endif
424                     bFoundNumber = false
425                     while (NOT bFoundNumber AND x < y)
426                         stemp2 = left(aTemp2(x),1)
427                         if isNumeric(stemp2) then
428                             bFoundNumber = TRUE
429                         endif
430                         x=x+1
431                     wend
432                     if aTemp(4) = "2" AND bFoundNumber then
433                         printlog "Old version is: " + aTemp2(x-1)
434                     elseif bFoundNumber then
435                         warnlog "No old version expected: " + aTemp2(x-1)
436                     elseif aTemp(4) = "2" then
437                         warnlog "Old version expected, but not mentioned."
438                     endif
439                 end select
440                 active.ok
441             else
442                 if cBool(aTemp(3)) then
443                     if i = 3 then
444                         qaErrorLog "#i73367# "
445                     else
446                         warnlog "errormessage expected, but none came up."
447                     endif
448                 endif
449             endif
451             '/// If there are any unsatisfied dependencies, they are shown now ///'
452             Kontext "UnsatisfiedDependencies"
453             if UnsatisfiedDependencies.exists(10) then
454                 if cBool(aTemp(0)) then
455                     printlog " - UnsatisfiedDependencies dialog exists"
456                 else
457                     warnLog "UnsatisfiedDependencies are not expected but available"
458                 endif
459                 DialogTest(UnsatisfiedDependencies)
460                 y = UnsatisfiedDependencyList.getItemCount
461                 if cInt(aTemp(0)) <> y then
462                     warnlog "Difference in dependencies; expected: " + aTemp(0) + "; found: " +y
463                 endif
464                 for x = 1 to y
465                     printlog "   ("+x+"/"+y+"): "+UnsatisfiedDependencyList.getItemText(x)
466                 next x
467                 '/// close dialog if available, extension will not be installed ///'
468                 UnsatisfiedDependencies.close
469             else
470                 if cBool(aTemp(0)) then
471                     warnLog "UnsatisfiedDependencies expected but none shown."
472                 endif
473             endif
475             '/// If there is a license, it is shown now ///'
476             Kontext "ExtensionSoftwareLicenseAgreement"
477             if ExtensionSoftwareLicenseAgreement.exists(10) then
478                 if cBool(aTemp(1)) then
479                     printlog " - ExtensionSoftwareLicenseAgreement dialog exists"
480                 else
481                     warnlog "ExtensionSoftwareLicenseAgreement are not expected but shown"
482                 endif
483                 if NOT Accept.isEnabled then
484                     if cInt(aTemp(1)) = 2 then
485                         printlog "   Long License"
486                     else
487                         errorlog "Long License"
488                     endif
489                 else
490                     if NOT cInt(aTemp(1)) = 2 then
491                         printlog "Long License"
492                     else
493                         errorlog "Long License"
494                     endif
495                 endif
496                 '/// scroll down until accept button is enabled, click accept button ///'
497                 LicenseText.typeKeys ("<mod1 a>",true)
498                 if Accept.isEnabled then
499                     '/// for testing purposes click cancel one time - the extension should not get installed ///'
500                     if cInt(aTemp(1)) = 3 then
501                         ExtensionSoftwareLicenseAgreement.CANCEL
502                     else
503                         Accept.click
504                     endif
505                 else
506                     qaErrorLog "Accept not enabled.yet"
507                     while NOT Accept.isEnabled
508                         ScrollDown.click
509                         printlog "Scrolling..."
510                         sleep 1
511                     wend
512                     '/// for testing purposes click cancel one time - the extension should not get installed ///'
513                     if cInt(aTemp(1)) = 3 then
514                         ExtensionSoftwareLicenseAgreement.CANCEL
515                     else
516                         Accept.click
517                     endif
518                 endif
519             else
520                 if cBool(aTemp(1)) then
521                     errorlog "ExtensionSoftwareLicenseAgreement dialog expected but not shown."
522                 endif
523             endif
525             '/// There may come up another active right now, which would be an error ///'
526             Kontext
527             if active.exists(5) then
528                 sTemp = active.getText
529                 if i = 7 then
530                     qaerrorlog "#i67452# " + sTemp
531                 else
532                     if i = 13 then
533                         qaerrorlog "#i73307#" + stemp
534                     else
535                         warnlog sTemp
536                     endif
537                 endif
538                 active.ok
539             endif
541             '/// the progress dialog is now available again ///'
542             Kontext "AddingPackages"
543             x=0
544             while AddingPackages.exists(1) AND (x<30)
545                 printlog "AddingPackages..."
546                 sleep 1
547                 x=x+1
548             wend
550             '/// There may come up another active right now, which would be an error ///'
551             Kontext
552             if active.exists(5) then
553                 sTemp = active.getText
554                 warnlog sTemp
555                 active.ok
556             endif
558             ' find out, if the extension got installed
559             kontext "PackageManager"
560             BrowsePackages.typeKeys("<home>")
561             BrowsePackages.typeKeys("+")
562             y = BrowsePackages.getItemCount
563             sTemp = aFiles(i)
564             aTemp2 = split(sTemp,"\")
565             if uBound(aTemp2) < 1 then
566                 aTemp2 = split(sTemp,"/")
567             endif
568             sTemp = aTemp2(uBound(aTemp2))
569             printlog stemp
570             bFound = FALSE
571             for x = 1 to y
572                 sTemp2 = BrowsePackages.getItemText(x,1)
573                 printlog "("+x+"/"+y+"): "+sTemp2
574                 ' Mechanism to detect a status change; report it only one time
575                 sTemp3 = BrowsePackages.getItemText(x,3) ' enabled?
576                 sTemp4 = BrowsePackages.getItemText(x,2) ' version
577                 if sTemp3 <> "" AND sFirstStatus = "" then
578                     sFirstStatus = sTemp3
579                 else
580                     if (sFirstStatus <> sTemp3) AND (sTemp3 <> "") AND (sFirstStatus <> "alreadyshown") then
581                         qaErrorlog "#i67450# " + sFirstStatus + " <> " + sTemp3
582                         sFirstStatus= "alreadyshown"
583                     endif
584                 endif
585                 if sTemp3 <> "" then
586                     printlog "   +++ " + sTemp3
587                 endif
588                 if sTemp4 <> "" then
589                     sLastVersion = sTemp4
590                     printlog "   Version:" + sTemp4
591                 endif
592                 if sTemp = sTemp2 then
593                     listAppend(aRemovePackages(), sTemp)
594                     if cBool(aTemp(2)) then
595                         printlog  "-------------------------------- Extension got installed"
596                         bFound = TRUE
597                     else
598                         if i = 3 then
599                             qaerrorLog "#i73367# "
600                         else
601                             warnLog "-------------------------------- Extension got installed, but shouldn't do that"
602                         endif
603                     endif
604                 endif
605             next x
606             if NOT cBool(aTemp(2)) and bFound then
607                 warnlog "not found"
608             endif
609             '/// Close extension manager ///'
610             PackageManager.OK
611             'OK / Close
612         else
613             warnlog "Couldn't call Tools -> Package manager - aborting test at " + i
614             goto endsub
615         endif
616     next i
618     '/// after installing all extensions, remove them ///'
619     ' uninstall all components, that were installed
620     a = listCount(aRemovePackages())
621     ToolsPackageManager
622     kontext "PackageManager"
623     If PackageManager.exists(10) then
624         BrowsePackages.typeKeys("<home>")
625         ii = 1
626         while (ii < BrowsePackages.getItemCount +1)
627             kontext "PackageManager"
628             'BrowsePackages.typeKeys("+")
629             'BrowsePackages.typeKeys("<down>")
630             sTemp2 = sTemp
631             BrowsePackages.select ii
632             sTemp = BrowsePackages.getItemText (ii,1)
633             if right(sTemp,3) = "oxt" then
634                 for x = 1 to a
635                     if sTemp = aRemovePackages(x) then
636                         printlog "Package is installed, trying to remove it: '" + sTemp + "'"
637                         if remove.isEnabled then
638                             remove.click
640                             kontext "Active"
641                             if ( Active.exists( 2 ) ) then
642                                 Active.ok()
643                             else
644                                 warnlog( "No confirmation for extension removal" )
645                             endif
647                             Kontext "AddingPackages"
648                             y=0
649                             while AddingPackages.exists(1) AND (y<30)
650                                 printlog "RemovingPackages..."
651                                 sleep 1
652                                 y=y+1
653                             wend
654                             kontext "PackageManager"
655                             BrowsePackages.typeKeys("<up>")
656                             x = 100
657                         else
658                             warnlog "Package can't get removed: '" + sTemp + "'"
659                             ii=ii+1
660                         endif
661                     endif
662                 next x
663             endif
664             ii = ii+1
665         wend
666         kontext "PackageManager"
667         PackageManager.close
668     else
669         qaErrorLog "disabling installed extensions failed;"
670     endif
671     WaitSlot()
672     hFileCloseAll()
673 endcase