<?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="accessibility_XAccessibleImage" 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.
'
'*************************************************************************





' Be sure that all variables are dimensioned:
option explicit




Sub RunTest()

'*************************************************************************
' INTERFACE: 
' com.sun.star.accessibility.XAccessibleImage
'*************************************************************************
On Error Goto ErrHndl
    Dim bOK As Boolean

    Test.StartMethod("getAccessibleImageDescription()")
    Dim descr As String
    bOK = true
    descr = oObj.getAccessibleImageDescription()
    Out.Log("AccessibleImageDescription: "+descr)
    bOK = bOK AND NOT isNull(descr)
    Test.MethodTested("getAccessibleImageDescription()",bOK)

    Test.StartMethod("getAccessibleImageHeight()")
    Dim height As Long
    bOK = true
    height = oObj.getAccessibleImageHeight()
    Out.Log("AccessibleImageHeight: "+height)
    Test.MethodTested("getAccessibleImageHeight()",bOK)

    Test.StartMethod("getAccessibleImageWidth()")
    Dim width As Long
    bOK = true
    width = oObj.getAccessibleImageWidth()
    Out.Log("AccessibleImageWidth: "+width)
    Test.MethodTested("getAccessibleImageWidth()",bOK)

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