<?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="container_XChild" 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 followingobject relations
' variables, which must be specified in the object creation:

'      ObjectRelation: oObjRelation(0).Name = "cannotSwitchParent"
'      ObjectRelation: oObjRelation(0).Value = "configmgr: BasicElement::setParent: cannot move Entry"

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

Sub RunTest()

'*************************************************************************
' INTERFACE: 
' com.sun.star.container.XChild
'*************************************************************************
On Error Goto ErrHndl

    Dim bOK As Boolean
    Dim oXInterface As Object
    Dim vRaises As Variant

    Test.StartMethod("getParent()")
    bOK = isObject(oObj.getParent())
    Test.MethodTested("getParent()", bOK)

    Test.StartMethod("setParent()")
    bOK = true
    Dim cObjRelation as Variant
    cObjRelation = utils.getObjectRelation("cannotSwitchParent")
    if isNull(cObjRelation) then
        oXInterface = oObj.getParent()
        vRaises = oObj.setParent(oXInterface)
        bOK = bOK AND isEmpty(vRaises)
    else
        out.Log(cObjRelation)
    end if
    Test.MethodTested("setParent()", bOK)


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