Branch libreoffice-5-0-4
[LibreOffice.git] / qadevOOo / tests / java / ifc / accessibility / _XAccessibleEventBroadcaster.java
blob3002dbe8ced41b7a040f24f45ba539d7ba0bc179
1 /*
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;
22 import lib.Status;
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;
33 /**
34 * Testing <code>
35 * com.sun.star.accessibility.XAccessibleEventBroadcaster</code>
36 * interface methods :
37 * <ul>
38 * <li><code> addAccessibleEventListener()</code></li>
39 * <li><code> removeAccessibleEventListener()</code></li>
40 * </ul> <p>
42 * This test needs the following object relations :
43 * <ul>
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>
48 * <ul> <p>
50 * @see com.sun.star.accessibility.XAccessibleEventBroadcaster
52 public class _XAccessibleEventBroadcaster extends MultiMethodTest {
54 public interface EventProducer {
55 void fireEvent();
58 public XAccessibleEventBroadcaster oObj = null;
59 public String EventMsg = "";
60 public boolean destroy = false;
63 /**
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());
80 notifiedEvent = ev;
83 public void disposing(EventObject ev) {}
86 /**
87 * Retrieves relation.
88 * @throws StatusException If the relation is not found.
90 @Override
91 public void before() {
92 prod = (EventProducer) tEnv.getObjRelation("EventProducer") ;
93 if (prod == null) {
94 throw new StatusException(Status.failed("Relation missed."));
96 EventMsg = (String) tEnv.getObjRelation("EventMsg");
97 Object dp = tEnv.getObjRelation("Destroy");
98 if (dp != null) {
99 destroy=true;
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");
115 prod.fireEvent() ;
117 util.utils.pause(3000);
119 boolean works = true;
121 if (list.notifiedEvent == null) {
122 if (!isTransient) {
123 log.println("listener wasn't called");
124 works = false;
125 } else {
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) );
134 return;
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:
147 * <ul>
148 * <li> <code>addEventListener()</code> : to have added listeners </li>
149 * </ul>
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");
160 prod.fireEvent() ;
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) {
173 boolean ret = false;
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"));
181 ret=true;
183 return ret;
187 * Forces environment recreation.
189 @Override
190 protected void after() {
191 if (destroy) disposeEnvironment();