diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
commit | ed5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch) | |
tree | 7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /qadevOOo/tests/java/ifc/accessibility/_XAccessibleEventBroadcaster.java | |
parent | Initial commit. (diff) | |
download | libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip |
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | qadevOOo/tests/java/ifc/accessibility/_XAccessibleEventBroadcaster.java | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/qadevOOo/tests/java/ifc/accessibility/_XAccessibleEventBroadcaster.java b/qadevOOo/tests/java/ifc/accessibility/_XAccessibleEventBroadcaster.java new file mode 100644 index 000000000..297166988 --- /dev/null +++ b/qadevOOo/tests/java/ifc/accessibility/_XAccessibleEventBroadcaster.java @@ -0,0 +1,208 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +package ifc.accessibility; + +import lib.MultiMethodTest; +import lib.Status; +import lib.StatusException; + +import com.sun.star.accessibility.AccessibleEventObject; +import com.sun.star.accessibility.XAccessible; +import com.sun.star.accessibility.XAccessibleContext; +import com.sun.star.accessibility.XAccessibleEventBroadcaster; +import com.sun.star.accessibility.XAccessibleEventListener; +import com.sun.star.lang.EventObject; +import com.sun.star.uno.UnoRuntime; + +/** + * Testing <code> + * com.sun.star.accessibility.XAccessibleEventBroadcaster</code> + * interface methods : + * <ul> + * <li><code> addAccessibleEventListener()</code></li> + * <li><code> removeAccessibleEventListener()</code></li> + * </ul> <p> + * + * This test needs the following object relations : + * <ul> + * <li> <code>'EventProducer'</code> (of type + * <code>ifc.accessibility._XAccessibleEventBroadcaster.EventProducer</code>): + * this must be an implementation of the interface which could perform + * some actions for generating any kind of <code>AccessibleEvent</code></li> + * <ul> <p> + * + * @see com.sun.star.accessibility.XAccessibleEventBroadcaster + */ +public class _XAccessibleEventBroadcaster extends MultiMethodTest { + + public interface EventProducer { + void fireEvent(); + } + + public XAccessibleEventBroadcaster oObj = null; + public String EventMsg = ""; + public boolean destroy = false; + + + /** + * Listener implementation which registers listener calls. + */ + private class EvListener implements XAccessibleEventListener { + public AccessibleEventObject notifiedEvent = null ; + public void notifyEvent(AccessibleEventObject ev) { + log.println("Listener, Event : " + ev.EventId); + System.out.println("EventID: " + ev.EventId); + Object old=ev.OldValue; + if (old instanceof com.sun.star.accessibility.XAccessible) { + System.out.println("Old: "+((XAccessible)old).getAccessibleContext().getAccessibleName()); + } + + Object nev=ev.NewValue; + if (nev instanceof com.sun.star.accessibility.XAccessible) { + System.out.println("New: "+((XAccessible)nev).getAccessibleContext().getAccessibleName()); + } + synchronized (this) { + notifiedEvent = ev; + } + } + + public void disposing(EventObject ev) {} + } + + /** + * Retrieves relation. + * @throws StatusException If the relation is not found. + */ + @Override + public void before() { + prod = (EventProducer) tEnv.getObjRelation("EventProducer") ; + if (prod == null) { + throw new StatusException(Status.failed("Relation missed.")); + } + EventMsg = (String) tEnv.getObjRelation("EventMsg"); + Object dp = tEnv.getObjRelation("Destroy"); + if (dp != null) { + destroy=true; + } + } + + EventProducer prod = null ; + EvListener list = new EvListener(); + + /** + * Adds two listeners and fires event by mean of object relation. <p> + * Has <b> OK </b> status if both listeners were called + */ + public void _addEventListener() { + log.println("adding listener"); + oObj.addAccessibleEventListener(list); + boolean isTransient = chkTransient(tEnv.getTestObject()); + log.println("fire event"); + prod.fireEvent() ; + + waitForEventIdle(); + + boolean works = true; + + AccessibleEventObject ne; + synchronized (list) { + ne = list.notifiedEvent; + } + if (ne == null) { + if (!isTransient) { + log.println("listener wasn't called"); + works = false; + } else { + log.println("Object is Transient, listener isn't expected to be called"); + } + oObj.removeAccessibleEventListener(list); + } + + if (EventMsg != null) { + log.println(EventMsg); + tRes.tested("addEventListener()", Status.skipped(true) ); + return; + } + + tRes.tested("addEventListener()", works ); + } + + /** + * Removes one of two listeners added before and fires event + * by mean of object relation.<p> + * + * Has <b> OK </b> status if the removed listener wasn't called.<p> + * + * The following method tests are to be completed successfully before: + * <ul> + * <li> <code>addEventListener()</code> : to have added listeners </li> + * </ul> + */ + public void _removeEventListener() throws Exception { + requiredMethod("addEventListener()"); + + log.println("remove listener"); + oObj.removeAccessibleEventListener(list); + + synchronized (list) { + list.notifiedEvent = null; + } + + log.println("fire event"); + prod.fireEvent() ; + + waitForEventIdle(); + + AccessibleEventObject ne; + synchronized (list) { + ne = list.notifiedEvent; + } + if (ne == null) { + log.println("listener wasn't called -- OK"); + } + + tRes.tested("removeEventListener()", list.notifiedEvent == null); + + } + + protected static boolean chkTransient(Object Testcase) { + boolean ret = false; + XAccessibleContext accCon = UnoRuntime.queryInterface(XAccessibleContext.class,Testcase); + if (accCon.getAccessibleStateSet().contains( + com.sun.star.accessibility.AccessibleStateType.TRANSIENT)){ + if (!accCon.getAccessibleParent().getAccessibleContext().getAccessibleStateSet().contains( + com.sun.star.accessibility.AccessibleStateType.MANAGES_DESCENDANTS)) { + throw new lib.StatusException(lib.Status.failed("Parent doesn't manage descendents")); + } + ret=true; + } + return ret; + } + + /** + * Forces environment recreation. + */ + @Override + protected void after() { + if (destroy) disposeEnvironment(); + } + + +} + |