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