<?xml version="1.0" encoding="UTF-8"?>
<!--***********************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 ***********************************************************-->


<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Test_Ext" script:language="StarBasic">REM  *****  BASIC  *****

const cMessageExtensionService = &quot;Extension Service&quot;
const cMessageExtensionInstall = &quot;Install Extension&quot;
const cMessageExtensionUninstall = &quot;Uninstall Extension&quot;

Sub TestExtensions
	Dim oTestExtension as Object, obj_null as Object
	Dim sCurrentMessage as String
	Dim bResult as Boolean
	Dim sImplementationNameString as String
	sImplementationNameString = cUnoSmoketestTestExtension + &quot;$_TestExtension&quot;

	On Local Error GoTo EXTERROR
	
	gCurrentTestCase = cLogfileFailed
	LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest))
	
	sCurrentMessage = cMessageExtensionService
	gCurrentTestCase = cEXTService

	&apos;Create an implementation of com.sun.star.ucb.XCommandEnvironment which is needed for 
	&apos;adding the extension. The implementation is in 
	&apos;javaunohelper/com/sun/star/comp/juhtest/SmoketestCommandEnvironment.java and the code is in juh.jar
	cmdEnv = createUnoService(cUnoSmoketestCommandEnvironment)

	&apos;Create the component context and then get the singleton ExtensionManager
	&apos;A singleton cannot be created with createUnoService
	ctx = getDefaultContext
	ext_mgr = ctx.getValueByName(&quot;/singletons/&quot; + cExtensionManager)

	LogTestResult( &quot;Extension &quot;+ cMessageExtensionService, not IsNull (ext_mgr) )
	if (IsNull(ext_mgr)) then
		Close #LocalTestLog%
		LocalTestLog = 0
		Exit Sub
	End If

	sCurrentMessage = cMessageExtensionInstall
	gCurrentTestCase = cEXTInstall
	
	&apos;Add the extension. We must provide a file URL here.
	&apos;By passing &quot;user&quot; we determine that the actions we perform on
	&apos;XExtensionManager only affect the user installation. To modify the share installation one would pass &quot;share&quot;.

	Dim props() as Object
	ext_mgr.addExtension(sExtensionURL + cExtensionFileName, props, &quot;user&quot;, obj_null, cmdEnv)
	
	&apos;Check if the extension has been added by creating a service which is contained in the extension.
	oTestExtension = createUnoService(cUnoSmoketestTestExtension)
	bResult = (oTestExtension.getImplementationName = sImplementationNameString)
	LogTestResult( &quot;Extension &quot;+ cMessageExtensionInstall, bResult )
	if (not bResult) then
		Close #LocalTestLog%
		LocalTestLog = 0
		Exit Sub
	End If

	sCurrentMessage = cMessageExtensionUninstall
	gCurrentTestCase = cEXTUninstall
	
	&apos;Remove the package
	ext_mgr.removeExtension(&quot;org.openoffice.legacy.&quot; + cExtensionFileName, cExtensionFileName, &quot;user&quot;,obj_null, cmdEnv)

	&apos;Try to create the service which is contained in the now removed extension.
	oTestExtension = createUnoService(cUnoSmoketestTestExtension)

	&apos;The service must not be available anymore. Therefor isNull must return true.
	LogTestResult( &quot;Extension &quot;+ cMessageExtensionUninstall, IsNull (oTestExtension) )
	
	Print #LocalTestLog, &quot;---&quot;
	Close #LocalTestLog%
	LocalTestLog = 0
	Exit Sub &apos; Without error

	EXTERROR:
	If ( gCurrentTestCase = cLogfileFailed ) then
		LogTestResult( &quot; &quot;, False )
		Exit Sub
	else
		LogTestResult( &quot;Extension &quot;+ sCurrentMessage, False )
		Close #LocalTestLog%
		LocalTestLog = 0
	End If	
	Exit Sub &apos; With error

End Sub
</script:module>
