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());
83 public void disposing(EventObject ev
) {}
88 * @throws StatusException If the relation is not found.
91 public void before() {
92 prod
= (EventProducer
) tEnv
.getObjRelation("EventProducer") ;
94 throw new StatusException(Status
.failed("Relation missed."));
96 EventMsg
= (String
) tEnv
.getObjRelation("EventMsg");
97 Object dp
= tEnv
.getObjRelation("Destroy");
103 EventProducer prod
= null ;
104 EvListener list
= new EvListener();
107 * Adds two listeners and fires event by mean of object relation. <p>
108 * Has <b> OK </b> status if both listeners were called
110 public void _addEventListener() {
111 log
.println("adding listener");
112 oObj
.addAccessibleEventListener(list
);
113 boolean isTransient
= chkTransient(tEnv
.getTestObject());
114 log
.println("fire event");
117 util
.utils
.pause(3000);
119 boolean works
= true;
121 if (list
.notifiedEvent
== null) {
123 log
.println("listener wasn't called");
126 log
.println("Object is Transient, listener isn't expected to be called");
128 oObj
.removeAccessibleEventListener(list
);
131 if (EventMsg
!= null) {
132 log
.println(EventMsg
);
133 tRes
.tested("addEventListener()", Status
.skipped(true) );
137 tRes
.tested("addEventListener()", works
);
141 * Removes one of two listeners added before and fires event
142 * by mean of object relation.<p>
144 * Has <b> OK </b> status if the removed listener wasn't called.<p>
146 * The following method tests are to be completed successfully before:
148 * <li> <code>addEventListener()</code> : to have added listeners </li>
151 public void _removeEventListener() {
152 requiredMethod("addEventListener()");
154 list
.notifiedEvent
= null;
156 log
.println("remove listener");
157 oObj
.removeAccessibleEventListener(list
);
159 log
.println("fire event");
162 util
.utils
.shortWait();
164 if (list
.notifiedEvent
== null) {
165 log
.println("listener wasn't called -- OK");
168 tRes
.tested("removeEventListener()", list
.notifiedEvent
== null);
172 protected static boolean chkTransient(Object Testcase
) {
174 XAccessibleContext accCon
= UnoRuntime
.queryInterface(XAccessibleContext
.class,Testcase
);
175 if (accCon
.getAccessibleStateSet().contains(
176 com
.sun
.star
.accessibility
.AccessibleStateType
.TRANSIENT
)){
177 if (!accCon
.getAccessibleParent().getAccessibleContext().getAccessibleStateSet().contains(
178 com
.sun
.star
.accessibility
.AccessibleStateType
.MANAGES_DESCENDANTS
)) {
179 throw new lib
.StatusException(lib
.Status
.failed("Parent doesn't manage descendents"));
187 * Forces environment recreation.
190 protected void after() {
191 if (destroy
) disposeEnvironment();