<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="drawing_XShapeCombiner" script:language="StarBasic">


'*************************************************************************
'
'  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.
'
'*************************************************************************





'*************************************************************************
' This Interface/Service test depends on the following GLOBAL variables,
' which must be specified in the object creation:

'     - Global oCombinerCollection As Object

'*************************************************************************




Sub RunTest()

'*************************************************************************
' INTERFACE: 
' com.sun.star.drawing.XShapeCombiner
'*************************************************************************
On Error Goto ErrHndl
    Dim bOK As Boolean
    Dim oCombine As Object
    Dim nCount As Integer

    ReCreateObj()

    Test.StartMethod("combine()")
    bOK = true
    nCount = oObj.count
    Out.Log("" &amp; nCount &amp; " elements in collection")
    oCombine = oObj.combine(oCombinerCollection)
    if (isNULL(oCombine)) then Out.Log("combine() returned NULL")
    bOK = bOK AND (nCount &lt;&gt; oObj.count) AND NOT isNull(oCombine)
    bOK = bOK AND hasUnoInterfaces(oCombine, "com.sun.star.drawing.XShape")
    Test.MethodTested("combine()", bOK)

    Test.StartMethod("split()")
    if (NOT bOK) then
        Out.Log("Can't test split() without combine()")
    else
        oObj.split(oCombine)
        Out.Log("" &amp; oObj.count &amp; " elements in collection")
        bOK = bOK AND (nCount = oObj.count)
        Test.MethodTested("split()", bOK)
    end if

Exit Sub
ErrHndl:
    Test.Exception()
    bOK = false
    resume next
End Sub
</script:module>
