<?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="sheet_XSheetCellRangeContainer" 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.sheet.XSheetCellRangeContainer
'*************************************************************************
On Error Goto ErrHndl
    Dim bOK As Boolean
    Dim newAddress As New com.sun.star.table.CellRangeAddress
    Dim newAddress1 As New com.sun.star.table.CellRangeAddress
    Dim newAddresses(1) As Variant
    Dim nCount As Integer

    Test.StartMethod("addRangeAddress()")
    Test.StartMethod("removeRangeAddress()")
    bOK = true
    nCount = oObj.getCount()
    newAddress.Sheet = 0
    newAddress.StartColumn = 15 : newAddress.EndColumn = 18
    newAddress.StartRow    = 15 : newAddress.EndRow    = 16
    oObj.addRangeAddress(newAddress, false)
    bOK = bOK AND oObj.getCount() = nCount + 1
    oObj.removeRangeAddress(newAddress)
    bOK = bOK AND oObj.getCount() = nCount
    Test.MethodTested("addRangeAddress()", bOK)
    Test.MethodTested("removeRangeAddress()", bOK)


    Test.StartMethod("addRangeAddresses()")
    Test.StartMethod("removeRangeAddresses()")
    bOK = true
    newAddress1.Sheet = 0
    newAddress1.StartColumn = 20 : newAddress1.EndColumn = 30
    newAddress1.StartRow    = 20 : newAddress1.EndRow    = 20
    newAddresses(0) = newAddress
    newAddresses(1) = newAddress1
    oObj.addRangeAddresses(newAddresses(), false)
    bOK = bOK AND oObj.getCount() = nCount + 2
    oObj.removeRangeAddresses(newAddresses())
    bOK = bOK AND oObj.getCount() = nCount
    Test.MethodTested("removeRangeAddresses()", bOK)
    Test.MethodTested("addRangeAddresses()", bOK)

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