/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package ifc.io; import lib.MultiMethodTest; import lib.Status; import lib.StatusException; import com.sun.star.io.XActiveDataControl; import com.sun.star.io.XStreamListener; import com.sun.star.lang.EventObject; /** * Testing com.sun.star.io.XActiveDataControl * interface methods : *

* * Tests XActiveDataControl interface. First, it registers a listener * and performs start() and terminate() calls. The * events received in the listener are analyzed to verify the result.

* * @see com.sun.star.io.XActiveDataControl */ public class _XActiveDataControl extends MultiMethodTest { /** * Contains the object under test. */ public XActiveDataControl oObj = null; /** * Indicates that the XStreamListener.started() method has * been called. */ private boolean startCalled = false; /** * Indicates that the XStreamListener.terminated() method has * been called. */ private boolean terminateCalled = false; /** * Indicates that the XEventListener.closed() method has * been called. */ private boolean closeCalled = false; /** * Indicates that the XStreamListener.error() method has * been called. */ private boolean errorCalled = false; /** * Contains the error, if XStreamListener.error(Object error) * method was called. */ private Object error; /** * Indicates that the XEventListener.disposing() method has * been called. */ private boolean smthngElseCalled = false; /** * The listener is used to verify results of the methods. */ private TestStreamListener listener = new TestStreamListener(); /** * XStreamListener implementation. Sets variables * (estartedCalled, terminatedCalled, etc.) to * true if the appropriate method was called (for example, if * started() was called, the startedCalled * field is set). */ private class TestStreamListener implements XStreamListener { public void started() { startCalled = true ; } public void terminated() { terminateCalled = true ; } public void error(Object e) { error = e; errorCalled = true ; } public void closed() { closeCalled = true ; } public void disposing(EventObject e) { smthngElseCalled = true ; } } /** * Tests addListener(). The verification is performed later, in * _terminate() method. */ public void _addListener() { oObj.addListener(listener); } /** * Starts the data activity (e.g. data pump). Verifictation is performed * later, in _terminate() method. */ public void _start() { executeMethod("addListener()"); oObj.start(); // waiting a little bit for data transfered try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(log) ; throw new StatusException(Status.failed(e.getMessage())); } } /** * Tests removeListener(). Before, it ensures that other * tests are perforemed and that addListener() is okay. Then, * calls XActiveDataControl.start() and checks that no method * of the listener was called. */ public void _removeListener() { // performing other tests before, so, that don't break them try { executeMethod("terminate()"); } catch (StatusException e) { // the result doesn't matter } // check that addListener() is okay requiredMethod("addListener()"); // clearing previous records startCalled = false; terminateCalled = false; errorCalled = false; error = null; smthngElseCalled = false; // removing the listener oObj.removeListener(listener); // starting the activity oObj.start(); // wait a little bit to allow for listeners to be called try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(log) ; throw new StatusException(Status.failed(e.getMessage())); } // check that no removed listener's method was called tRes.tested("removeListener()",!startCalled && !terminateCalled && !errorCalled && !smthngElseCalled) ; } /** * Tests terminate(). First, ensures that start() * has been called. Then, verifies start(), * addListener() and terminate() results, by * checking that the appropriate listener's methods have been called. */ public void _terminate() { // ensuring that the activity has been started executeMethod("start()"); // terminating the activity oObj.terminate(); // waiting a little bit for listeners to be called try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(log) ; throw new StatusException(Status.failed(e.getMessage())); } // check, if any error occured if (errorCalled) { Status.failed("Unexpected error"); log.println("Unexpected error " + error); ((Exception)error).printStackTrace(log); } // verification of start() method - startedCalled method should be // called if (!tRes.tested("start()", startCalled)) { log.println("XStreamListener.started() was not called()"); } // check that any listener method is called tRes.tested("addListener()", startCalled || terminateCalled || errorCalled || smthngElseCalled); // checking that terminated() has been called or streams were closed // before terminate() call, in this case termination has no sense. tRes.tested("terminate()", terminateCalled || closeCalled); } /** * Disposes the test environment, since it is used. */ public void after() { this.disposeEnvironment(); } }