'************************************************************************* ' ' 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. ' '************************************************************************* '************************************************************************* 'Change-Listener needs bound-Properties 'Veto-Listener needs constrained-Propperties '************************************************************************* Const BOUND = 2 Const CONSTRAINED = 4 Const MAYBENULL = 8 Const READONLY = 16 Dim aBoundProps() As String Dim aConstrainedProps() As String Dim aNormalProps() As String Dim aReadOnlyProps() As String Dim nBoundCount As Integer Dim nConstrainedCount As Integer Dim nNormalCount As Integer Dim nReadOnlyCount As Integer Dim aAllProps As Object Dim vetoCalled1 As Boolean Dim propCalled1 As Boolean Dim vetoCalled2 As Boolean Dim propCalled2 As Boolean Sub RunTest() '************************************************************************* ' INTERFACE: ' com.sun.star.beans.XPropertySet '************************************************************************* On Error Goto ErrHndl If (bErrHndl) Then On Error Goto ErrHndl Dim oPCListener1 As Object Dim oVListener1 As Object Dim oPCListener2 As Object Dim oVListener2 As Object Dim bOK As boolean Test.StartMethod("getPropertySetInfo()") bOK = true bOK = NOT isNULL(oObj.PropertySetInfo) Test.MethodTested("getPropertySetInfo()", bOK) Out.Log("Get properties()") bOK = GetProps() Out.Log("Create Listeners") oPCListener1 = createUNOListener("CB1_","com.sun.star.beans.XPropertyChangeListener") oVListener1 = createUNOListener("CB1_","com.sun.star.beans.XVetoableChangeListener") oPCListener2 = createUNOListener("CB2_","com.sun.star.beans.XPropertyChangeListener") oVListener2 = createUNOListener("CB2_","com.sun.star.beans.XVetoableChangeListener") Test.StartMethod("getPropertyValue()") bOK = true bOK = bOK AND test_getPropertyValue() Test.MethodTested("getPropertyValue()", bOK) Test.StartMethod("setPropertyValue()") bOK = true Dim bReadOnlyOK As Boolean Dim bNormalOK As Boolean bReadOnlyOK = false bNormalOK = false Dim bCVOK As boolean if (nReadOnlyCount = 0) then bReadOnlyOK = true Out.Log("No ReadOnly properties!") else for i = 0 to nReadOnlyCount - 1 Out.Log("READONLY: '" & aReadOnlyProps(i) & "'") if (aReadOnlyProps(i) = "Preview") then bCVOK = true else bCVOK = PropertyTester.TestPropertyWithoutParams(aReadOnlyProps(i), true) end if Out.Log(bCVOK) Out.Log("") bReadOnlyOK = bReadOnlyOK OR bCVOK next i end if bOK = bOK AND bReadOnlyOK if (nNormalCount = 0) then bNormalOK = true Out.Log("No Normal properties!") else for i = 0 to nNormalCount - 1 Out.Log("NORMAL: '" & aNormalProps(i) & "'") bCVOK = PropertyTester.TestPropertyWithoutParams(aNormalProps(i), false) Out.Log(bCVOK) Out.Log("") bNormalOK = bNormalOK OR bCVOK next i end if bOK = bOK AND bNormalOK Test.MethodTested("setPropertyValue()", bOK) Test.StartMethod("addVetoableChangeListener()") Test.StartMethod("removeVetoableChangeListener()") Dim bAddVeto As Boolean Dim bRmvVeto As Boolean bRmvVeto = true bAddVeto = true if (nConstrainedCount = 0) then Out.Log("No Constrained properties!") bAddVeto = true bRmvVeto = true else for i = 0 to nConstrainedCount - 1 vetoCalled1 = false vetoCalled2 = false oObj.addVetoableChangeListener(aConstrainedProps(i), oVListener1) oObj.addVetoableChangeListener(aConstrainedProps(i), oVListener2) PropertyTester.TestPropertyWithoutParams(aConstrainedProps(i), false) bAddVeto = bAddVeto OR (vetoCalled1 AND vetoCalled2) Out.Log("addVetoableChangeListener: " & aConstrainedProps(i) & " Listener1 must be called: " & vetoCalled1) Out.Log("addVetoableChangeListener: " & aConstrainedProps(i) & " Listener2 must be called: " & vetoCalled2) vetoCalled1 = false vetoCalled2 = false oObj.removeVetoableChangeListener(aConstrainedProps(i), oVListener1) PropertyTester.TestPropertyWithoutParams(aConstrainedProps(i), false) bRmvVeto = bRmvVeto OR (NOT vetoCalled1 AND vetoCalled2) Out.Log("removeVetoableChangeListener: " & aConstrainedProps(i) & " Listener1 must not be called: " & NOT vetoCalled1) Out.Log("removeVetoableChangeListener: " & aConstrainedProps(i) & " Listener2 must not be called: " & NOT vetoCalled2) oObj.removeVetoableChangeListener(aConstrainedProps(i), oVListener2) next i end if Test.MethodTested("addVetoableChangeListener()", bAddVeto) Test.MethodTested("removeVetoableChangeListener()", bRmvVeto) Test.StartMethod("addPropertyChangeListener()") Test.StartMethod("removePropertyChangeListener()") Dim bAddProp As Boolean Dim bRmvProp As Boolean bRmvProp = true bAddProp = true if (nBoundCount = 0) then Out.Log("No Bound properties!") bAddProp = true bRmvProp = true else for i = 0 to nBoundCount - 1 propCalled1 = false propCalled2 = false oObj.addPropertyChangeListener(aBoundProps(i), oPCListener1) oObj.addPropertyChangeListener(aBoundProps(i), oPCListener2) PropertyTester.TestPropertyWithoutParams(aBoundProps(i), false) bAddProp = bAddProp OR (propCalled1 AND propCalled2) Out.Log("addPropertyChangeListener: " & aBoundProps(i) & " Listener1 must be called :" & propCalled1) Out.Log("addPropertyChangeListener: " & aBoundProps(i) & " Listener2 must be called :" & propCalled2) propCalled1 = false propCalled2 = false oObj.removePropertyChangeListener(aBoundProps(i), oPCListener1) PropertyTester.TestPropertyWithoutParams(aBoundProps(i), false) bRmvProp = bRmvProp OR (NOT propCalled1 AND propCalled2) Out.Log("removePropertyChangeListener: " & aBoundProps(i) & " Listener must not be called: " & NOT propCalled) oObj.removePropertyChangeListener(aBoundProps(i), oPCListener2) next i end if Test.MethodTested("addPropertyChangeListener()", bAddProp) Test.MethodTested("removePropertyChangeListener()", bRmvProp) ReCreateObj() Exit Sub ErrHndl: Test.Exception() bOK = false resume next End Sub Function GetProps() As Boolean On Error Goto ErrHndl Dim bOK as Boolean Dim i As Integer Dim attr As Variant bOK = true aAllProps = oObj.propertySetInfo.getProperties nNormalCount = 0 nBoundCount = 0 nConstrainedCount = 0 nReadOnlyCount = 0 'first we should find out how many properties of different kinds exists for i = lbound(aAllProps) to ubound(aAllProps) attr = aAllProps(i).Attributes if (attr AND READONLY) OR (attr AND BOUND) OR (attr AND CONSTRAINED) then if (attr AND BOUND) then nBoundCount = nBoundCount + 1 end if if (attr AND CONSTRAINED) then nConstrainedCount = nConstrainedCount + 1 end if if (attr AND READONLY) then nReadOnlyCount = nReadOnlyCount + 1 end if else if (NOT isNULL(oObj.getPropertyValue(aAllProps(i).Name))) then nNormalCount = nNormalCount + 1 end if end if next i Out.Log("" & nNormalCount & " Normal properties found") Out.Log("" & nBoundCount & " Bound properties found") Out.Log("" & nConstrainedCount & " Constrained properties found") Out.Log("" & nReadOnlyCount & " ReadOnly properties found") Dim AN(nNormalCount) As String aNormalProps = AN() Dim AB(nBoundCount) As String aBoundProps = AB() Dim AC(nConstrainedCount) As String aConstrainedProps = AC() Dim AR(nReadOnlyCount) As String aReadOnlyProps = AR() 'Filling up arrays... nNormalCount = 0 nBoundCount = 0 nConstrainedCount = 0 nReadOnlyCount = 0 for i = lbound(aAllProps) to ubound(aAllProps) attr = aAllProps(i).Attributes if (attr AND READONLY) OR (attr AND BOUND) OR (attr AND CONSTRAINED) then if (attr AND BOUND) then aBoundProps(nBoundCount) = aAllProps(i).Name nBoundCount = nBoundCount + 1 end if if (attr AND CONSTRAINED) then aConstrainedProps(nConstrainedCount) = aAllProps(i).Name nConstrainedCount = nConstrainedCount + 1 end if if (attr AND READONLY) then aReadOnlyProps(nReadOnlyCount) = aAllProps(i).Name nReadOnlyCount = nReadOnlyCount + 1 end if else if (NOT isNULL(oObj.getPropertyValue(aAllProps(i).Name))) then aNormalProps(nNormalCount) = aAllProps(i).Name nNormalCount = nNormalCount + 1 end if end if next i GetProps = bOK Exit Function ErrHndl: Test.Exception() resume next End Function Function test_GetPropertyValue() As Boolean On Error goto ErrHndl Dim bOK As Boolean Dim i As Integer Dim propName As String Dim propVal As Variant bOK = false for i = lbound(aAllProps) to ubound(aAllProps) propName = aAllProps(i).Name propVal = oObj.getPropertyValue(propName) bOK = true if (isNULL(propVal)) AND NOT(aAllProps(i).Attributes AND MAYBENULL) then Out.Log(cIfcShortName & " " & aAllProps(i).Name & " is NULL, but it is not MAYBENULL") end if next i test_GetPropertyValue() = bOK Exit Function ErrHndl: Test.Exception() bOK = false resume next End Function Sub CB1_propertyChange Out.Log("CallBack 'PropertyChange' for listener 1 was called.") propCalled1 = true CB1_propertyChange = true End Sub Sub CB1_vetoableChange Out.Log("CallBack 'vetoableChange' for listener 1 was called.") vetoCalled1 = true End Sub Sub CB2_propertyChange Out.Log("CallBack 'PropertyChange' for listener 2 was called.") propCalled2 = true CB2_propertyChange = true End Sub Sub CB2_vetoableChange Out.Log("CallBack 'vetoableChange' for listener 2 was called.") vetoCalled2 = true End Sub