1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package ifc.io; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import lib.MultiMethodTest; 27*b1cdbd2cSJim Jagielski import lib.Status; 28*b1cdbd2cSJim Jagielski import lib.StatusException; 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski import com.sun.star.io.XActiveDataControl; 31*b1cdbd2cSJim Jagielski import com.sun.star.io.XStreamListener; 32*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject; 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski /** 35*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.io.XActiveDataControl</code> 36*b1cdbd2cSJim Jagielski * interface methods : 37*b1cdbd2cSJim Jagielski * <ul> 38*b1cdbd2cSJim Jagielski * <li><code> addListener()</code></li> 39*b1cdbd2cSJim Jagielski * <li><code> removeListener()</code></li> 40*b1cdbd2cSJim Jagielski * <li><code> start()</code></li> 41*b1cdbd2cSJim Jagielski * <li><code> terminate()</code></li> 42*b1cdbd2cSJim Jagielski * </ul> <p> 43*b1cdbd2cSJim Jagielski * 44*b1cdbd2cSJim Jagielski * Tests <code>XActiveDataControl</code> interface. First, it registers a listener 45*b1cdbd2cSJim Jagielski * and performs <code>start()</code> and <code>terminate()</code> calls. The 46*b1cdbd2cSJim Jagielski * events received in the listener are analyzed to verify the result.<p> 47*b1cdbd2cSJim Jagielski * 48*b1cdbd2cSJim Jagielski * @see com.sun.star.io.XActiveDataControl 49*b1cdbd2cSJim Jagielski */ 50*b1cdbd2cSJim Jagielski public class _XActiveDataControl extends MultiMethodTest { 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski /** 53*b1cdbd2cSJim Jagielski * Contains the object under test. 54*b1cdbd2cSJim Jagielski */ 55*b1cdbd2cSJim Jagielski public XActiveDataControl oObj = null; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski /** 58*b1cdbd2cSJim Jagielski * Indicates that the <code>XStreamListener.started()</code> method has 59*b1cdbd2cSJim Jagielski * been called. 60*b1cdbd2cSJim Jagielski */ 61*b1cdbd2cSJim Jagielski private boolean startCalled = false; 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski /** 64*b1cdbd2cSJim Jagielski * Indicates that the <code>XStreamListener.terminated()</code> method has 65*b1cdbd2cSJim Jagielski * been called. 66*b1cdbd2cSJim Jagielski */ 67*b1cdbd2cSJim Jagielski private boolean terminateCalled = false; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski /** 70*b1cdbd2cSJim Jagielski * Indicates that the <code>XEventListener.closed()</code> method has 71*b1cdbd2cSJim Jagielski * been called. 72*b1cdbd2cSJim Jagielski */ 73*b1cdbd2cSJim Jagielski private boolean closeCalled = false; 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski /** 76*b1cdbd2cSJim Jagielski * Indicates that the <code>XStreamListener.error()</code> method has 77*b1cdbd2cSJim Jagielski * been called. 78*b1cdbd2cSJim Jagielski */ 79*b1cdbd2cSJim Jagielski private boolean errorCalled = false; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski /** 82*b1cdbd2cSJim Jagielski * Contains the error, if <code>XStreamListener.error(Object error)</code> 83*b1cdbd2cSJim Jagielski * method was called. 84*b1cdbd2cSJim Jagielski */ 85*b1cdbd2cSJim Jagielski private Object error; 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski /** 88*b1cdbd2cSJim Jagielski * Indicates that the <code>XEventListener.disposing()</code> method has 89*b1cdbd2cSJim Jagielski * been called. 90*b1cdbd2cSJim Jagielski */ 91*b1cdbd2cSJim Jagielski private boolean smthngElseCalled = false; 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski /** 94*b1cdbd2cSJim Jagielski * The listener is used to verify results of the methods. 95*b1cdbd2cSJim Jagielski */ 96*b1cdbd2cSJim Jagielski private TestStreamListener listener = new TestStreamListener(); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski /** 99*b1cdbd2cSJim Jagielski * XStreamListener implementation. Sets variables 100*b1cdbd2cSJim Jagielski * (<cod>estartedCalled</code>, <code>terminatedCalled</code>, etc.) to 101*b1cdbd2cSJim Jagielski * <tt>true</tt> if the appropriate method was called (for example, if 102*b1cdbd2cSJim Jagielski * <code>started()</code> was called, the <code>startedCalled</code> 103*b1cdbd2cSJim Jagielski * field is set). 104*b1cdbd2cSJim Jagielski */ 105*b1cdbd2cSJim Jagielski private class TestStreamListener implements XStreamListener { started()106*b1cdbd2cSJim Jagielski public void started() { 107*b1cdbd2cSJim Jagielski startCalled = true ; 108*b1cdbd2cSJim Jagielski } terminated()109*b1cdbd2cSJim Jagielski public void terminated() { 110*b1cdbd2cSJim Jagielski terminateCalled = true ; 111*b1cdbd2cSJim Jagielski } error(Object e)112*b1cdbd2cSJim Jagielski public void error(Object e) { 113*b1cdbd2cSJim Jagielski error = e; 114*b1cdbd2cSJim Jagielski errorCalled = true ; 115*b1cdbd2cSJim Jagielski } closed()116*b1cdbd2cSJim Jagielski public void closed() { 117*b1cdbd2cSJim Jagielski closeCalled = true ; 118*b1cdbd2cSJim Jagielski } disposing(EventObject e)119*b1cdbd2cSJim Jagielski public void disposing(EventObject e) { 120*b1cdbd2cSJim Jagielski smthngElseCalled = true ; 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski /** 126*b1cdbd2cSJim Jagielski * Tests <code>addListener()</code>. The verification is performed later, in 127*b1cdbd2cSJim Jagielski * <code>_terminate()</code> method. 128*b1cdbd2cSJim Jagielski */ _addListener()129*b1cdbd2cSJim Jagielski public void _addListener() { 130*b1cdbd2cSJim Jagielski oObj.addListener(listener); 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski /** 134*b1cdbd2cSJim Jagielski * Starts the data activity (e.g. data pump). Verifictation is performed 135*b1cdbd2cSJim Jagielski * later, in <code>_terminate()</code> method. 136*b1cdbd2cSJim Jagielski */ _start()137*b1cdbd2cSJim Jagielski public void _start() { 138*b1cdbd2cSJim Jagielski executeMethod("addListener()"); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski oObj.start(); 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski // waiting a little bit for data transfered 143*b1cdbd2cSJim Jagielski try { 144*b1cdbd2cSJim Jagielski Thread.sleep(200); 145*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 146*b1cdbd2cSJim Jagielski e.printStackTrace(log) ; 147*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed(e.getMessage())); 148*b1cdbd2cSJim Jagielski } 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski /** 152*b1cdbd2cSJim Jagielski * Tests <code>removeListener()</code>. Before, it ensures that other 153*b1cdbd2cSJim Jagielski * tests are perforemed and that <code>addListener()</code> is okay. Then, 154*b1cdbd2cSJim Jagielski * calls <code>XActiveDataControl.start()</code> and checks that no method 155*b1cdbd2cSJim Jagielski * of the listener was called. 156*b1cdbd2cSJim Jagielski */ _removeListener()157*b1cdbd2cSJim Jagielski public void _removeListener() { 158*b1cdbd2cSJim Jagielski // performing other tests before, so, that don't break them 159*b1cdbd2cSJim Jagielski try { 160*b1cdbd2cSJim Jagielski executeMethod("terminate()"); 161*b1cdbd2cSJim Jagielski } catch (StatusException e) { 162*b1cdbd2cSJim Jagielski // the result doesn't matter 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski // check that addListener() is okay 166*b1cdbd2cSJim Jagielski requiredMethod("addListener()"); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski // clearing previous records 169*b1cdbd2cSJim Jagielski startCalled = false; 170*b1cdbd2cSJim Jagielski terminateCalled = false; 171*b1cdbd2cSJim Jagielski errorCalled = false; 172*b1cdbd2cSJim Jagielski error = null; 173*b1cdbd2cSJim Jagielski smthngElseCalled = false; 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski // removing the listener 176*b1cdbd2cSJim Jagielski oObj.removeListener(listener); 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski // starting the activity 179*b1cdbd2cSJim Jagielski oObj.start(); 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski // wait a little bit to allow for listeners to be called 182*b1cdbd2cSJim Jagielski try { 183*b1cdbd2cSJim Jagielski Thread.sleep(200); 184*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 185*b1cdbd2cSJim Jagielski e.printStackTrace(log) ; 186*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed(e.getMessage())); 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski // check that no removed listener's method was called 190*b1cdbd2cSJim Jagielski tRes.tested("removeListener()",!startCalled && 191*b1cdbd2cSJim Jagielski !terminateCalled && !errorCalled && !smthngElseCalled) ; 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski /** 195*b1cdbd2cSJim Jagielski * Tests <code>terminate()</code>. First, ensures that <code>start()</code> 196*b1cdbd2cSJim Jagielski * has been called. Then, verifies <code>start()</code>, 197*b1cdbd2cSJim Jagielski * <code>addListener()</code> and <code>terminate()</code> results, by 198*b1cdbd2cSJim Jagielski * checking that the appropriate listener's methods have been called. 199*b1cdbd2cSJim Jagielski */ _terminate()200*b1cdbd2cSJim Jagielski public void _terminate() { 201*b1cdbd2cSJim Jagielski // ensuring that the activity has been started 202*b1cdbd2cSJim Jagielski executeMethod("start()"); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski // terminating the activity 205*b1cdbd2cSJim Jagielski oObj.terminate(); 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski // waiting a little bit for listeners to be called 208*b1cdbd2cSJim Jagielski try { 209*b1cdbd2cSJim Jagielski Thread.sleep(200); 210*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 211*b1cdbd2cSJim Jagielski e.printStackTrace(log) ; 212*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed(e.getMessage())); 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski // check, if any error occured 216*b1cdbd2cSJim Jagielski if (errorCalled) { 217*b1cdbd2cSJim Jagielski Status.failed("Unexpected error"); 218*b1cdbd2cSJim Jagielski log.println("Unexpected error " + error); 219*b1cdbd2cSJim Jagielski ((Exception)error).printStackTrace(log); 220*b1cdbd2cSJim Jagielski } 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski // verification of start() method - startedCalled method should be 223*b1cdbd2cSJim Jagielski // called 224*b1cdbd2cSJim Jagielski if (!tRes.tested("start()", startCalled)) { 225*b1cdbd2cSJim Jagielski log.println("XStreamListener.started() was not called()"); 226*b1cdbd2cSJim Jagielski } 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski // check that any listener method is called 229*b1cdbd2cSJim Jagielski tRes.tested("addListener()", startCalled || 230*b1cdbd2cSJim Jagielski terminateCalled || errorCalled || smthngElseCalled); 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski // checking that terminated() has been called or streams were closed 233*b1cdbd2cSJim Jagielski // before terminate() call, in this case termination has no sense. 234*b1cdbd2cSJim Jagielski tRes.tested("terminate()", terminateCalled || closeCalled); 235*b1cdbd2cSJim Jagielski } 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski /** 238*b1cdbd2cSJim Jagielski * Disposes the test environment, since it is used. 239*b1cdbd2cSJim Jagielski */ after()240*b1cdbd2cSJim Jagielski public void after() { 241*b1cdbd2cSJim Jagielski this.disposeEnvironment(); 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski } 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski 246