2 * This file is part of the LibreOffice project.
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 * This file incorporates work covered by the following license notice:
10 * Licensed to the Apache Software Foundation (ASF) under one or more
11 * contributor license agreements. See the NOTICE file distributed
12 * with this work for additional information regarding copyright
13 * ownership. The ASF licenses this file to you under the Apache
14 * License, Version 2.0 (the "License"); you may not use this file
15 * except in compliance with the License. You may obtain a copy of
16 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 package ifc
.accessibility
;
21 import lib
.MultiMethodTest
;
23 import lib
.StatusException
;
25 import com
.sun
.star
.accessibility
.AccessibleEventObject
;
26 import com
.sun
.star
.accessibility
.XAccessible
;
27 import com
.sun
.star
.accessibility
.XAccessibleContext
;
28 import com
.sun
.star
.accessibility
.XAccessibleEventBroadcaster
;
29 import com
.sun
.star
.accessibility
.XAccessibleEventListener
;
30 import com
.sun
.star
.lang
.EventObject
;
31 import com
.sun
.star
.uno
.UnoRuntime
;
35 * com.sun.star.accessibility.XAccessibleEventBroadcaster</code>
38 * <li><code> addAccessibleEventListener()</code></li>
39 * <li><code> removeAccessibleEventListener()</code></li>
42 * This test needs the following object relations :
44 * <li> <code>'EventProducer'</code> (of type
45 * <code>ifc.accessibility._XAccessibleEventBroadcaster.EventProducer</code>):
46 * this must be an implementation of the interface which could perform
47 * some actions for generating any kind of <code>AccessibleEvent</code></li>
50 * @see com.sun.star.accessibility.XAccessibleEventBroadcaster
52 public class _XAccessibleEventBroadcaster
extends MultiMethodTest
{
54 public interface EventProducer
{
58 public XAccessibleEventBroadcaster oObj
= null;
59 public String EventMsg
= "";
60 public boolean destroy
= false;
64 * Listener implementation which registers listener calls.
66 private class EvListener
implements XAccessibleEventListener
{
67 public AccessibleEventObject notifiedEvent
= null ;
68 public void notifyEvent(AccessibleEventObject ev
) {
69 log
.println("Listener, Event : " + ev
.EventId
);
70 System
.out
.println("EventID: " + ev
.EventId
);
71 Object old
=ev
.OldValue
;
72 if (old
instanceof com
.sun
.star
.accessibility
.XAccessible
) {
73 System
.out
.println("Old: "+((XAccessible
)old
).getAccessibleContext().getAccessibleName());
76 Object nev
=ev
.NewValue
;
77 if (nev
instanceof com
.sun
.star
.accessibility
.XAccessible
) {
78 System
.out
.println("New: "+((XAccessible
)nev
).getAccessibleContext().getAccessibleName());
85 public void disposing(EventObject ev
) {}
90 * @throws StatusException If the relation is not found.
93 public void before() {
94 prod
= (EventProducer
) tEnv
.getObjRelation("EventProducer") ;
96 throw new StatusException(Status
.failed("Relation missed."));
98 EventMsg
= (String
) tEnv
.getObjRelation("EventMsg");
99 Object dp
= tEnv
.getObjRelation("Destroy");
105 EventProducer prod
= null ;
106 EvListener list
= new EvListener();
109 * Adds two listeners and fires event by mean of object relation. <p>
110 * Has <b> OK </b> status if both listeners were called
112 public void _addEventListener() {
113 log
.println("adding listener");
114 oObj
.addAccessibleEventListener(list
);
115 boolean isTransient
= chkTransient(tEnv
.getTestObject());
116 log
.println("fire event");
121 boolean works
= true;
123 AccessibleEventObject ne
;
124 synchronized (list
) {
125 ne
= list
.notifiedEvent
;
129 log
.println("listener wasn't called");
132 log
.println("Object is Transient, listener isn't expected to be called");
134 oObj
.removeAccessibleEventListener(list
);
137 if (EventMsg
!= null) {
138 log
.println(EventMsg
);
139 tRes
.tested("addEventListener()", Status
.skipped(true) );
143 tRes
.tested("addEventListener()", works
);
147 * Removes one of two listeners added before and fires event
148 * by mean of object relation.<p>
150 * Has <b> OK </b> status if the removed listener wasn't called.<p>
152 * The following method tests are to be completed successfully before:
154 * <li> <code>addEventListener()</code> : to have added listeners </li>
157 public void _removeEventListener() throws Exception
{
158 requiredMethod("addEventListener()");
160 log
.println("remove listener");
161 oObj
.removeAccessibleEventListener(list
);
163 synchronized (list
) {
164 list
.notifiedEvent
= null;
167 log
.println("fire event");
172 AccessibleEventObject ne
;
173 synchronized (list
) {
174 ne
= list
.notifiedEvent
;
177 log
.println("listener wasn't called -- OK");
180 tRes
.tested("removeEventListener()", list
.notifiedEvent
== null);
184 protected static boolean chkTransient(Object Testcase
) {
186 XAccessibleContext accCon
= UnoRuntime
.queryInterface(XAccessibleContext
.class,Testcase
);
187 if ((accCon
.getAccessibleStateSet() &
188 com
.sun
.star
.accessibility
.AccessibleStateType
.TRANSIENT
) != 0){
189 if ((accCon
.getAccessibleParent().getAccessibleContext().getAccessibleStateSet() &
190 com
.sun
.star
.accessibility
.AccessibleStateType
.MANAGES_DESCENDANTS
) == 0) {
191 throw new lib
.StatusException(lib
.Status
.failed("Parent doesn't manage descendents"));
199 * Forces environment recreation.
202 protected void after() {
203 if (destroy
) disposeEnvironment();