1cdf0e10cSrcweir<?xml version="1.0" encoding="UTF-8"?>
2cdf0e10cSrcweir<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
3cdf0e10cSrcweir<script:module xmlns:script="http://openoffice.org/2000/script" script:name="accessibility_XAccessibleSelection" script:language="StarBasic">
4cdf0e10cSrcweir
5cdf0e10cSrcweir
6cdf0e10cSrcweir'*************************************************************************
7cdf0e10cSrcweir'
8*2f3df0e5SAndrew Rist'  Licensed to the Apache Software Foundation (ASF) under one
9*2f3df0e5SAndrew Rist'  or more contributor license agreements.  See the NOTICE file
10*2f3df0e5SAndrew Rist'  distributed with this work for additional information
11*2f3df0e5SAndrew Rist'  regarding copyright ownership.  The ASF licenses this file
12*2f3df0e5SAndrew Rist'  to you under the Apache License, Version 2.0 (the
13*2f3df0e5SAndrew Rist'  "License"); you may not use this file except in compliance
14*2f3df0e5SAndrew Rist'  with the License.  You may obtain a copy of the License at
15*2f3df0e5SAndrew Rist'
16*2f3df0e5SAndrew Rist'    http://www.apache.org/licenses/LICENSE-2.0
17*2f3df0e5SAndrew Rist'
18*2f3df0e5SAndrew Rist'  Unless required by applicable law or agreed to in writing,
19*2f3df0e5SAndrew Rist'  software distributed under the License is distributed on an
20*2f3df0e5SAndrew Rist'  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21*2f3df0e5SAndrew Rist'  KIND, either express or implied.  See the License for the
22*2f3df0e5SAndrew Rist'  specific language governing permissions and limitations
23*2f3df0e5SAndrew Rist'  under the License.
24cdf0e10cSrcweir'
25cdf0e10cSrcweir'*************************************************************************
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir
29*2f3df0e5SAndrew Rist
30*2f3df0e5SAndrew Rist
31cdf0e10cSrcweir' Be sure that all variables are dimensioned:
32cdf0e10cSrcweiroption explicit
33cdf0e10cSrcweir
34cdf0e10cSrcweir'*************************************************************************
35cdf0e10cSrcweir' This Interface/Service test depends on the following GLOBAL variables,
36cdf0e10cSrcweir' which must be specified in the object creation:
37cdf0e10cSrcweir
38cdf0e10cSrcweir'	Global multiSelection As Boolean
39cdf0e10cSrcweir
40cdf0e10cSrcweir'*************************************************************************
41cdf0e10cSrcweir
42cdf0e10cSrcweir
43cdf0e10cSrcweir
44cdf0e10cSrcweir
45cdf0e10cSrcweir
46cdf0e10cSrcweir
47cdf0e10cSrcweirSub RunTest()
48cdf0e10cSrcweir
49cdf0e10cSrcweir'*************************************************************************
50cdf0e10cSrcweir' INTERFACE:
51cdf0e10cSrcweir' com.sun.star.accessibility.XAccessibleSelection
52cdf0e10cSrcweir'*************************************************************************
53cdf0e10cSrcweirOn Error Goto ErrHndl
54cdf0e10cSrcweir    Dim bOK As Boolean, locRes As Boolean
55cdf0e10cSrcweir    Dim chCount As Long, selCount As Long
56cdf0e10cSrcweir    Dim i As Long, mCount As Integer
57cdf0e10cSrcweir
58cdf0e10cSrcweir    if multiSelection then
59cdf0e10cSrcweir        Out.Log("Object allows multiple selection!")
60cdf0e10cSrcweir    else
61cdf0e10cSrcweir        Out.Log("Object does not allow multiple selection!")
62cdf0e10cSrcweir    End If
63cdf0e10cSrcweir
64cdf0e10cSrcweir    chCount = oObj.getAccessibleChildCount()
65cdf0e10cSrcweir    selCount = oObj.getSelectedAccessibleChildCount()
66cdf0e10cSrcweir    Out.Log("Object has "+chCount+" child(ren), "+selCount+" of them selected.")
67cdf0e10cSrcweir    If (chCount &gt; 50) then
68cdf0e10cSrcweir        mCount = 50
69cdf0e10cSrcweir        Out.Log("Object has too many children. Testing only first 50.")
70cdf0e10cSrcweir    else
71cdf0e10cSrcweir        mCount = chCount
72cdf0e10cSrcweir    End If
73cdf0e10cSrcweir
74cdf0e10cSrcweir    clearSelection()
75cdf0e10cSrcweir
76cdf0e10cSrcweir    Test.StartMethod("selectAccessibleChild()")
77cdf0e10cSrcweir    bOK = true
78cdf0e10cSrcweir    if (mCount &gt; 0) then
79cdf0e10cSrcweir        i = mCount - 1
80cdf0e10cSrcweir        while (oObj.isAccessibleChildSelected(i) OR itemDisabled(oObj.getAccessibleChild(i))) AND (i &gt; 0)
81cdf0e10cSrcweir            i = i - 1
82cdf0e10cSrcweir        wend
83cdf0e10cSrcweir        if (i &gt;= 0) then
84cdf0e10cSrcweir            Out.Log("Selecting child #"+i+"...")
85cdf0e10cSrcweir            oObj.selectAccessibleChild(i)
86cdf0e10cSrcweir            wait(500)
87cdf0e10cSrcweir            locRes = oObj.isAccessibleChildSelected(i)
88cdf0e10cSrcweir            Out.Log("Child #"+i+" selected: "+locRes)
89cdf0e10cSrcweir            bOK = bOK AND locRes
90cdf0e10cSrcweir        End If
91cdf0e10cSrcweir    End If
92cdf0e10cSrcweir    clearSelection()
93cdf0e10cSrcweir    Test.MethodTested("selectAccessibleChild()",bOK)
94cdf0e10cSrcweir
95cdf0e10cSrcweir    Test.StartMethod("isAccessibleChildSelected()")
96cdf0e10cSrcweir    bOK = true
97cdf0e10cSrcweir    if (mCount &gt; 0) then
98cdf0e10cSrcweir        i = mCount - 1
99cdf0e10cSrcweir        while (oObj.isAccessibleChildSelected(i) OR itemDisabled(oObj.getAccessibleChild(i))) AND (i &gt; 0)
100cdf0e10cSrcweir            i = i - 1
101cdf0e10cSrcweir        wend
102cdf0e10cSrcweir        if (i &gt;= 0) then
103cdf0e10cSrcweir            Out.Log("Selecting child #"+i+"...")
104cdf0e10cSrcweir            oObj.selectAccessibleChild(i)
105cdf0e10cSrcweir            wait(500)
106cdf0e10cSrcweir            locRes = oObj.isAccessibleChildSelected(i)
107cdf0e10cSrcweir            Out.Log("Child #"+i+" selected: "+locRes)
108cdf0e10cSrcweir            bOK = bOK AND locRes
109cdf0e10cSrcweir        End If
110cdf0e10cSrcweir    End If
111cdf0e10cSrcweir    clearSelection()
112cdf0e10cSrcweir    Test.MethodTested("isAccessibleChildSelected()",bOK)
113cdf0e10cSrcweir
114cdf0e10cSrcweir    Test.StartMethod("clearAccessibleSelection()")
115cdf0e10cSrcweir    bOK = true
116cdf0e10cSrcweir    if (mCount &gt; 0) AND (multiSelection) then
117cdf0e10cSrcweir        oObj.selectAccessibleChild(chCount - 1)
118cdf0e10cSrcweir        wait(500)
119cdf0e10cSrcweir        oObj.clearAccessibleSelection()
120cdf0e10cSrcweir        wait(500)
121cdf0e10cSrcweir        bOK = bOK AND NOT oObj.isAccessibleChildSelected(mCount - 1)
122cdf0e10cSrcweir    else
123cdf0e10cSrcweir        Out.Log("Cannot clear all selection for this object!")
124cdf0e10cSrcweir    End If
125cdf0e10cSrcweir    Test.MethodTested("clearAccessibleSelection()",bOK)
126cdf0e10cSrcweir
127cdf0e10cSrcweir' ### The following property was not found in correspond IDL file! ###
128cdf0e10cSrcweir    Test.StartMethod("selectAllAccessibleChildren()")
129cdf0e10cSrcweir    bOK = true
130cdf0e10cSrcweir    i = 0
131cdf0e10cSrcweir    if ((mCount &gt; 0) AND multiSelection) then
132cdf0e10cSrcweir' ### The following property was not found in correspond IDL file! ###
133cdf0e10cSrcweir        oObj.selectAllAccessibleChildren()
134cdf0e10cSrcweir        wait(500)
135cdf0e10cSrcweir        while (i &lt; mCount)
136cdf0e10cSrcweir            bOK = bOK AND oObj.isAccessibleChildSelected(i)
137cdf0e10cSrcweir            i = i + 1
138cdf0e10cSrcweir        wend
139cdf0e10cSrcweir    else
140cdf0e10cSrcweir        Out.Log("Cannot select all children for this object!")
141cdf0e10cSrcweir    End If
142cdf0e10cSrcweir    clearSelection()
143cdf0e10cSrcweir    Test.MethodTested("selectAllAccessibleChildren()",bOK)
144cdf0e10cSrcweir
145cdf0e10cSrcweir    Test.StartMethod("getSelectedAccessibleChildCount()")
146cdf0e10cSrcweir    bOK = true
147cdf0e10cSrcweir    Out.Log("Selecting all...")
148cdf0e10cSrcweir    oObj.selectAllAccessibleChildren()
149cdf0e10cSrcweir    wait(500)
150cdf0e10cSrcweir    selCount = oObj.getSelectedAccessibleChildCount()
151cdf0e10cSrcweir    Out.Log("Selected "+selCount+" child(ren).")
152cdf0e10cSrcweir    If (multiSelection) then
153cdf0e10cSrcweir        bOK = bOK AND (selCount = chCount)
154cdf0e10cSrcweir    else
155cdf0e10cSrcweir        bOK = bOK AND (selCount = 1)
156cdf0e10cSrcweir    End If
157cdf0e10cSrcweir    clearSelection()
158cdf0e10cSrcweir    selCount = oObj.getSelectedAccessibleChildCount()
159cdf0e10cSrcweir    if (multiSelection) then
160cdf0e10cSrcweir        bOK = bOK AND (selCount = 0)
161cdf0e10cSrcweir    else
162cdf0e10cSrcweir        bOK = bOK AND (selCount = 1)
163cdf0e10cSrcweir    End If
164cdf0e10cSrcweir    Test.MethodTested("getSelectedAccessibleChildCount()",bOK)
165cdf0e10cSrcweir
166cdf0e10cSrcweir    Test.StartMethod("getSelectedAccessibleChild()")
167cdf0e10cSrcweir    Dim selAccChild As Object, accChild As Object
168cdf0e10cSrcweir    bOK = true
169cdf0e10cSrcweir    if (mCount &gt; 0) then
170cdf0e10cSrcweir        i = mCount - 1
171cdf0e10cSrcweir        while (oObj.isAccessibleChildSelected(i) OR itemDisabled(oObj.getAccessibleChild(i))) AND (i &gt; 0)
172cdf0e10cSrcweir            i = i - 1
173cdf0e10cSrcweir        wend
174cdf0e10cSrcweir        if (i &gt;= 0) then
175cdf0e10cSrcweir            Out.Log("Selecting child #"+i+"...")
176cdf0e10cSrcweir            oObj.selectAccessibleChild(i)
177cdf0e10cSrcweir            wait(500)
178cdf0e10cSrcweir            Out.Log("Child #"+i+" selected: "+oObj.isAccessibleChildSelected(i))
179cdf0e10cSrcweir            Out.Log("Now "+oObj.getSelectedAccessibleChildCount()+" child(ren) selected.")
180cdf0e10cSrcweir            selCount = oObj.getSelectedAccessibleChildCount()
181cdf0e10cSrcweir            if (selCount &gt; 0) then
182cdf0e10cSrcweir                selAccChild = oObj.getSelectedAccessibleChild(selCount-1)
183cdf0e10cSrcweir                accChild = oObj.getAccessibleChild(i)
184cdf0e10cSrcweir                bOK = bOK AND utils.at_equals(accChild,selAccChild)
185cdf0e10cSrcweir            else
186cdf0e10cSrcweir                Out.Log("There are no selected children. Test fails.")
187cdf0e10cSrcweir                bOK = false
188cdf0e10cSrcweir            End If
189cdf0e10cSrcweir        End If
190cdf0e10cSrcweir    End If
191cdf0e10cSrcweir    Test.MethodTested("getSelectedAccessibleChild()",bOK)
192cdf0e10cSrcweir
193cdf0e10cSrcweir    Test.StartMethod("deselectAccessibleChild()")
194cdf0e10cSrcweir    Dim newSelCount As Long
195cdf0e10cSrcweir	Dim isSelected as Boolean
196cdf0e10cSrcweir    bOK = true
197cdf0e10cSrcweir	oObj.selectAllAccessibleChildren()
198cdf0e10cSrcweir	wait(500)
199cdf0e10cSrcweir    selCount = oObj.getSelectedAccessibleChildCount()
200cdf0e10cSrcweir    Out.Log("There was "+selCount+" selected child(ren)")
201cdf0e10cSrcweir    Out.Log("Deselecting child...")
202cdf0e10cSrcweir	for i = 0 to mCount - 1
203cdf0e10cSrcweir		if oObj.isAccessibleChildSelected(i) then
204cdf0e10cSrcweir			isSelected = true
205cdf0e10cSrcweir		end if
206cdf0e10cSrcweir        oObj.deselectAccessibleChild(i)
207cdf0e10cSrcweir        wait(500)
208cdf0e10cSrcweir        newSelCount = oObj.getSelectedAccessibleChildCount()
209cdf0e10cSrcweir		Out.Log("selCount = " + selCount + " newSelCount = " + newSelCount)
210cdf0e10cSrcweir        if (multiSelection) then
211cdf0e10cSrcweir			if isSelected then
212cdf0e10cSrcweir				Out.Log("isSelected")
213cdf0e10cSrcweir	            bOK = bOK AND (selCount - 1 = newSelCount)
214cdf0e10cSrcweir			else
215cdf0e10cSrcweir	            bOK = bOK AND (selCount = newSelCount)
216cdf0e10cSrcweir			end if
217cdf0e10cSrcweir        else
218cdf0e10cSrcweir			Out.Log("is not multi")
219cdf0e10cSrcweir            bOK = bOK AND (newSelCount &lt;= 1)
220cdf0e10cSrcweir        End If
221cdf0e10cSrcweir		selCount = newSelCount
222cdf0e10cSrcweir	next
223cdf0e10cSrcweir    Test.MethodTested("deselectAccessibleChild()",bOK)
224cdf0e10cSrcweir
225cdf0e10cSrcweirExit Sub
226cdf0e10cSrcweirErrHndl:
227cdf0e10cSrcweir    Test.Exception()
228cdf0e10cSrcweir    bOK = false
229cdf0e10cSrcweir    resume next
230cdf0e10cSrcweirEnd Sub
231cdf0e10cSrcweir
232cdf0e10cSrcweirSub clearSelection()
233cdf0e10cSrcweir    if NOT multiSelection then Exit Sub
234cdf0e10cSrcweir    Dim selCount As Long
235cdf0e10cSrcweir    selCount = oObj.getSelectedAccessibleChildCount()
236cdf0e10cSrcweir    if (selCount = 0) then Exit Sub
237cdf0e10cSrcweir    oObj.clearAccessibleSelection()
238cdf0e10cSrcweir    wait(500)
239cdf0e10cSrcweir    selCount = oObj.getSelectedAccessibleChildCount()
240cdf0e10cSrcweir    if selCount = 0 then
241cdf0e10cSrcweir        Out.Log("Deselect all: success")
242cdf0e10cSrcweir    else
243cdf0e10cSrcweir        Out.Log("Deselect all: error!. "+selCount+" child(ren) remains selected.")
244cdf0e10cSrcweir    End If
245cdf0e10cSrcweirEnd Sub
246cdf0e10cSrcweir
247cdf0e10cSrcweirFunction itemDisabled(oChild As Object) As Boolean
248cdf0e10cSrcweir    if NOT hasUNOInterfaces(oChild,"com.sun.star.accessibility.XAccessibleContext") then
249cdf0e10cSrcweir        oChild = oChild.getAccessibleContext()
250cdf0e10cSrcweir    End If
251cdf0e10cSrcweir    itemDisabled = NOT oChild.getAccessibleStateSet().contains(21)
252cdf0e10cSrcweirEnd Function
253cdf0e10cSrcweir
254cdf0e10cSrcweir</script:module>
255