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.frame;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import com.sun.star.awt.XWindow;
27*b1cdbd2cSJim Jagielski //import com.sun.star.awt.XWindow;
28*b1cdbd2cSJim Jagielski import com.sun.star.frame.FrameAction;
29*b1cdbd2cSJim Jagielski import com.sun.star.frame.FrameActionEvent;
30*b1cdbd2cSJim Jagielski import com.sun.star.frame.XController;
31*b1cdbd2cSJim Jagielski import com.sun.star.frame.XFrame;
32*b1cdbd2cSJim Jagielski import com.sun.star.frame.XFrameActionListener;
33*b1cdbd2cSJim Jagielski import com.sun.star.frame.XFramesSupplier;
34*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject;
35*b1cdbd2cSJim Jagielski import java.io.PrintWriter;
36*b1cdbd2cSJim Jagielski import lib.MultiMethodTest;
37*b1cdbd2cSJim Jagielski import lib.TestEnvironment;
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski /**
40*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.frame.XFrame</code>
41*b1cdbd2cSJim Jagielski * interface methods:
42*b1cdbd2cSJim Jagielski * <ul>
43*b1cdbd2cSJim Jagielski *  <li><code> getName() </code></li>
44*b1cdbd2cSJim Jagielski *  <li><code> setName() </code></li>
45*b1cdbd2cSJim Jagielski *  <li><code> activate() </code></li>
46*b1cdbd2cSJim Jagielski *  <li><code> deactivate() </code></li>
47*b1cdbd2cSJim Jagielski *  <li><code> isActive() </code></li>
48*b1cdbd2cSJim Jagielski *  <li><code> addFrameActionListener() </code></li>
49*b1cdbd2cSJim Jagielski *  <li><code> removeFrameActionListener() </code></li>
50*b1cdbd2cSJim Jagielski *  <li><code> getCreator() </code></li>
51*b1cdbd2cSJim Jagielski *  <li><code> getComponentWindow() </code></li>
52*b1cdbd2cSJim Jagielski *  <li><code> getContainerWindow() </code></li>
53*b1cdbd2cSJim Jagielski *  <li><code> getController() </code></li>
54*b1cdbd2cSJim Jagielski *  <li><code> isTop() </code></li>
55*b1cdbd2cSJim Jagielski *  <li><code> findFrame() </code></li>
56*b1cdbd2cSJim Jagielski *  <li><code> contextChanged() </code></li>
57*b1cdbd2cSJim Jagielski *  <li><code> setCreator() </code></li>
58*b1cdbd2cSJim Jagielski *  <li><code> setComponent() </code></li>
59*b1cdbd2cSJim Jagielski *  <li><code> initialize() </code></li>
60*b1cdbd2cSJim Jagielski * </ul><p>
61*b1cdbd2cSJim Jagielski * This test needs the following object relations :
62*b1cdbd2cSJim Jagielski * <ul>
63*b1cdbd2cSJim Jagielski *  <li> <code>'XFrame'</code> (of type <code>XFrame</code>)
64*b1cdbd2cSJim Jagielski *  <b>optional</b>: any frame named 'XFrame'.
65*b1cdbd2cSJim Jagielski *  Could be used by <code>findFrame</code> method to try
66*b1cdbd2cSJim Jagielski *  to find other frame than itself.</li>
67*b1cdbd2cSJim Jagielski *
68*b1cdbd2cSJim Jagielski *  <li> <code>'Desktop'</code> (of type <code>Object</code>):
69*b1cdbd2cSJim Jagielski *  if exsists, then desktop component is tested</li>
70*b1cdbd2cSJim Jagielski * </ul> <p>
71*b1cdbd2cSJim Jagielski * Test is <b> NOT </b> multithread compilant. <p>
72*b1cdbd2cSJim Jagielski * @see com.sun.star.frame.XFrame
73*b1cdbd2cSJim Jagielski */
74*b1cdbd2cSJim Jagielski public class _XFrame extends MultiMethodTest {
75*b1cdbd2cSJim Jagielski     final FrameAction[] actionEvent = new FrameAction[1] ;
76*b1cdbd2cSJim Jagielski     final boolean[] listenerCalled = new boolean[] {false} ;
77*b1cdbd2cSJim Jagielski     final boolean[] activatedCalled = new boolean[] {false} ;
78*b1cdbd2cSJim Jagielski     final boolean[] deactivatedCalled = new boolean[] {false} ;
79*b1cdbd2cSJim Jagielski     final TestFrameActionListener listener =
80*b1cdbd2cSJim Jagielski         new TestFrameActionListener() ;
81*b1cdbd2cSJim Jagielski     public static XFrame oObj = null;
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski     /**
84*b1cdbd2cSJim Jagielski     * Class used to test listeners.
85*b1cdbd2cSJim Jagielski     */
86*b1cdbd2cSJim Jagielski     private class TestFrameActionListener
87*b1cdbd2cSJim Jagielski         implements XFrameActionListener {
88*b1cdbd2cSJim Jagielski 
frameAction(FrameActionEvent e)89*b1cdbd2cSJim Jagielski         public void frameAction(FrameActionEvent e) {
90*b1cdbd2cSJim Jagielski             listenerCalled[0] = true ;
91*b1cdbd2cSJim Jagielski             activatedCalled[0] |= e.Action == FrameAction.FRAME_ACTIVATED;
92*b1cdbd2cSJim Jagielski             deactivatedCalled[0] |= e.Action == FrameAction.FRAME_DEACTIVATING;
93*b1cdbd2cSJim Jagielski             actionEvent[0] = e.Action;
94*b1cdbd2cSJim Jagielski         }
95*b1cdbd2cSJim Jagielski 
disposing(EventObject e)96*b1cdbd2cSJim Jagielski         public void disposing(EventObject e) {}
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski     }
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski     /**
101*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
102*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the method does not return null.
103*b1cdbd2cSJim Jagielski     */
_getName()104*b1cdbd2cSJim Jagielski     public void _getName() {
105*b1cdbd2cSJim Jagielski         String name = oObj.getName() ;
106*b1cdbd2cSJim Jagielski         if (name == null)
107*b1cdbd2cSJim Jagielski             log.println("getName() returned null: FAILED") ;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski         tRes.tested("getName()", name!=null) ;
110*b1cdbd2cSJim Jagielski     }
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski     /**
113*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
114*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if set and gotten names are equal.
115*b1cdbd2cSJim Jagielski     */
_setName()116*b1cdbd2cSJim Jagielski     public void _setName() {
117*b1cdbd2cSJim Jagielski         String sName = "XFrame" ;
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski         oObj.setName(sName);
120*b1cdbd2cSJim Jagielski         String gName = oObj.getName();
121*b1cdbd2cSJim Jagielski         boolean res = sName.equals(gName);
122*b1cdbd2cSJim Jagielski         if (! res)
123*b1cdbd2cSJim Jagielski             log.println("setName('" + sName +
124*b1cdbd2cSJim Jagielski                 "'), but getName() return '" + gName + "'") ;
125*b1cdbd2cSJim Jagielski         tRes.tested("setName()", res);
126*b1cdbd2cSJim Jagielski     }
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     /**
129*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
130*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the method successfully returns
131*b1cdbd2cSJim Jagielski     * and no exceptions were thrown.
132*b1cdbd2cSJim Jagielski     */
_activate()133*b1cdbd2cSJim Jagielski     public void _activate() {
134*b1cdbd2cSJim Jagielski         oObj.activate() ;
135*b1cdbd2cSJim Jagielski         tRes.tested("activate()", true) ;
136*b1cdbd2cSJim Jagielski     }
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski     /**
139*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
140*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the method successfully returns
141*b1cdbd2cSJim Jagielski     * and no exceptions were thrown.
142*b1cdbd2cSJim Jagielski     */
_deactivate()143*b1cdbd2cSJim Jagielski     public void _deactivate() {
144*b1cdbd2cSJim Jagielski         oObj.deactivate() ;
145*b1cdbd2cSJim Jagielski         oObj.activate() ;
146*b1cdbd2cSJim Jagielski         tRes.tested("deactivate()", true) ;
147*b1cdbd2cSJim Jagielski     }
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     /**
150*b1cdbd2cSJim Jagielski     * Test calls the method. Then frame is deactivated and method called
151*b1cdbd2cSJim Jagielski     * again. <p>
152*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() returns true or if the method
153*b1cdbd2cSJim Jagielski     * always display real status of a frame during activation/deactivation.
154*b1cdbd2cSJim Jagielski     */
_isActive()155*b1cdbd2cSJim Jagielski     public void _isActive() {
156*b1cdbd2cSJim Jagielski         boolean result = true;
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
159*b1cdbd2cSJim Jagielski             log.println("Desktop is always active");
160*b1cdbd2cSJim Jagielski             tRes.tested("isActive()", oObj.isActive()) ;
161*b1cdbd2cSJim Jagielski             return;
162*b1cdbd2cSJim Jagielski         }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski         oObj.deactivate();
165*b1cdbd2cSJim Jagielski         result &= !oObj.isActive();
166*b1cdbd2cSJim Jagielski         if (oObj.isActive())
167*b1cdbd2cSJim Jagielski             log.println("after deactivate() method call, isActive() returned true");
168*b1cdbd2cSJim Jagielski         oObj.activate();
169*b1cdbd2cSJim Jagielski         result &= oObj.isActive();
170*b1cdbd2cSJim Jagielski         if (!oObj.isActive())
171*b1cdbd2cSJim Jagielski             log.println("after activate() method call, isActive() returned false") ;
172*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log,tEnv,"isActive()");
173*b1cdbd2cSJim Jagielski         if (res) result=res;
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski         tRes.tested("isActive()", result) ;
176*b1cdbd2cSJim Jagielski     }
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski     /**
179*b1cdbd2cSJim Jagielski     * Test calls the method. Then frame status (activated/deactivated) is
180*b1cdbd2cSJim Jagielski     * changed, and the listener is checked.<p>
181*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returnes true, or if the
182*b1cdbd2cSJim Jagielski     * listener was called and frame was activated.
183*b1cdbd2cSJim Jagielski     */
_addFrameActionListener()184*b1cdbd2cSJim Jagielski     public void _addFrameActionListener() {
185*b1cdbd2cSJim Jagielski         boolean result = true ;
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski         oObj.addFrameActionListener(listener) ;
188*b1cdbd2cSJim Jagielski         oObj.activate() ;
189*b1cdbd2cSJim Jagielski         oObj.deactivate() ;
190*b1cdbd2cSJim Jagielski         oObj.activate() ;
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
193*b1cdbd2cSJim Jagielski             log.println("No actions supported by Desktop");
194*b1cdbd2cSJim Jagielski             tRes.tested("addFrameActionListener()", true) ;
195*b1cdbd2cSJim Jagielski             return;
196*b1cdbd2cSJim Jagielski         }
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski         try {
199*b1cdbd2cSJim Jagielski             Thread.sleep(500);
200*b1cdbd2cSJim Jagielski         }catch (InterruptedException ex) {}
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski         if (!listenerCalled[0]) {
204*b1cdbd2cSJim Jagielski             log.println("listener was not called.") ;
205*b1cdbd2cSJim Jagielski             result = false ;
206*b1cdbd2cSJim Jagielski         } else {
207*b1cdbd2cSJim Jagielski             if (!activatedCalled[0]) {
208*b1cdbd2cSJim Jagielski                 log.println("Listener was called, FRAME_ACTIVATED was not") ;
209*b1cdbd2cSJim Jagielski                 result = false ;
210*b1cdbd2cSJim Jagielski             }
211*b1cdbd2cSJim Jagielski             if (!deactivatedCalled[0]) {
212*b1cdbd2cSJim Jagielski                 log.println("Listener was called, FRAME_DEACTIVATING was not") ;
213*b1cdbd2cSJim Jagielski                 result = false ;
214*b1cdbd2cSJim Jagielski             }
215*b1cdbd2cSJim Jagielski         }
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log, tEnv, "addFrameActionListener()");
218*b1cdbd2cSJim Jagielski         if (res) result=res;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski         tRes.tested("addFrameActionListener()", result) ;
221*b1cdbd2cSJim Jagielski     }
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski     /**
224*b1cdbd2cSJim Jagielski     * Test calls the method.  Then frame status (activated/deactivated) is
225*b1cdbd2cSJim Jagielski     * changed, and the listener is checked.<p>
226*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returns true, or if the
227*b1cdbd2cSJim Jagielski     * method actually removes listener so it does not react on
228*b1cdbd2cSJim Jagielski     * activate/deactivate events. <p>
229*b1cdbd2cSJim Jagielski     * The following method tests are to be completed successfully before :
230*b1cdbd2cSJim Jagielski     * <ul>
231*b1cdbd2cSJim Jagielski     *  <li> <code> addFrameActionListener() </code>: adds action listener
232*b1cdbd2cSJim Jagielski     * to a frame </li>
233*b1cdbd2cSJim Jagielski     * </ul>
234*b1cdbd2cSJim Jagielski     */
_removeFrameActionListener()235*b1cdbd2cSJim Jagielski     public void _removeFrameActionListener() {
236*b1cdbd2cSJim Jagielski         boolean result = true;
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski         requiredMethod("addFrameActionListener()");
239*b1cdbd2cSJim Jagielski         listenerCalled[0] = false;
240*b1cdbd2cSJim Jagielski         oObj.removeFrameActionListener(listener);
241*b1cdbd2cSJim Jagielski         oObj.activate();
242*b1cdbd2cSJim Jagielski         oObj.deactivate();
243*b1cdbd2cSJim Jagielski         oObj.activate();
244*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
245*b1cdbd2cSJim Jagielski             log.println("No actions supported by Desktop");
246*b1cdbd2cSJim Jagielski             tRes.tested("removeFrameActionListener()", true) ;
247*b1cdbd2cSJim Jagielski             return;
248*b1cdbd2cSJim Jagielski         }
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski         if (listenerCalled[0])
251*b1cdbd2cSJim Jagielski             log.println("Listener wasn't removed, and was called");
252*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log, tEnv, "removeFrameActionListener()");
253*b1cdbd2cSJim Jagielski         if (res) result=res; else result = (!listenerCalled[0]);
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski         tRes.tested("removeFrameActionListener()", result);
256*b1cdbd2cSJim Jagielski     }
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski     /**
259*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
260*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returns true or if the method
261*b1cdbd2cSJim Jagielski     * does not return null.
262*b1cdbd2cSJim Jagielski     */
_getCreator()263*b1cdbd2cSJim Jagielski     public void _getCreator() {
264*b1cdbd2cSJim Jagielski         boolean result = true;
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
267*b1cdbd2cSJim Jagielski             log.println("Desktop has no creator");
268*b1cdbd2cSJim Jagielski             tRes.tested("getCreator()", true) ;
269*b1cdbd2cSJim Jagielski             return;
270*b1cdbd2cSJim Jagielski         }
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski         XFramesSupplier creator = oObj.getCreator() ;
273*b1cdbd2cSJim Jagielski         if (creator == null)
274*b1cdbd2cSJim Jagielski             log.println("getCreator() returns null") ;
275*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log,tEnv,"getCreator()");
276*b1cdbd2cSJim Jagielski         if (res) result=res; else result = (creator != null);
277*b1cdbd2cSJim Jagielski         tRes.tested("getCreator()", result) ;
278*b1cdbd2cSJim Jagielski     }
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski     /**
281*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
282*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returns true or if the method
283*b1cdbd2cSJim Jagielski     * does not return null.
284*b1cdbd2cSJim Jagielski     */
_getComponentWindow()285*b1cdbd2cSJim Jagielski     public void _getComponentWindow() {
286*b1cdbd2cSJim Jagielski         boolean result = true;
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski         XWindow win = oObj.getComponentWindow() ;
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
291*b1cdbd2cSJim Jagielski             log.println("Desktop has no component window");
292*b1cdbd2cSJim Jagielski             tRes.tested("getComponentWindow()", true) ;
293*b1cdbd2cSJim Jagielski             return;
294*b1cdbd2cSJim Jagielski         }
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski         if (win == null)
297*b1cdbd2cSJim Jagielski             log.println("getComponentWindow() returns null") ;
298*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log,tEnv,"getComponentWindow()");
299*b1cdbd2cSJim Jagielski         if (res) result=res; else result = (win != null);
300*b1cdbd2cSJim Jagielski         tRes.tested("getComponentWindow()", result) ;
301*b1cdbd2cSJim Jagielski     }
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski     /**
304*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
305*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returns true or if the method
306*b1cdbd2cSJim Jagielski     * does not return null.
307*b1cdbd2cSJim Jagielski     */
_getContainerWindow()308*b1cdbd2cSJim Jagielski     public void _getContainerWindow() {
309*b1cdbd2cSJim Jagielski         boolean result = true;
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
312*b1cdbd2cSJim Jagielski             log.println("Desktop has no container window");
313*b1cdbd2cSJim Jagielski             tRes.tested("getContainerWindow()", true) ;
314*b1cdbd2cSJim Jagielski             return;
315*b1cdbd2cSJim Jagielski         }
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski         XWindow win = oObj.getContainerWindow() ;
318*b1cdbd2cSJim Jagielski         if (win == null)
319*b1cdbd2cSJim Jagielski             log.println("getContainerWindow() returns null") ;
320*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log,tEnv,"getContainerWindow()");
321*b1cdbd2cSJim Jagielski         if (res) result=res; else result = (win != null);
322*b1cdbd2cSJim Jagielski         tRes.tested("getContainerWindow()", result) ;
323*b1cdbd2cSJim Jagielski     }
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski     /**
326*b1cdbd2cSJim Jagielski     * Test calls the method. Then returned controller is checked. <p>
327*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returns true or
328*b1cdbd2cSJim Jagielski     * if the method returns non-null controller, having frame that's equal to
329*b1cdbd2cSJim Jagielski     * a (XFrame) oObj.
330*b1cdbd2cSJim Jagielski     */
_getController()331*b1cdbd2cSJim Jagielski     public void _getController() {
332*b1cdbd2cSJim Jagielski         boolean result = true;
333*b1cdbd2cSJim Jagielski         XController ctrl = oObj.getController();
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
336*b1cdbd2cSJim Jagielski             log.println("Desktop has no controller");
337*b1cdbd2cSJim Jagielski             tRes.tested("getController()", true) ;
338*b1cdbd2cSJim Jagielski             return;
339*b1cdbd2cSJim Jagielski         }
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski         if (ctrl == null) {
342*b1cdbd2cSJim Jagielski             log.println("getController() returns null");
343*b1cdbd2cSJim Jagielski             result = false;
344*b1cdbd2cSJim Jagielski         } else {
345*b1cdbd2cSJim Jagielski             XFrame frm = ctrl.getFrame();
346*b1cdbd2cSJim Jagielski             if (!oObj.equals(frm)) {
347*b1cdbd2cSJim Jagielski                 log.println("Frame returned by controller not " +
348*b1cdbd2cSJim Jagielski                     "equals to frame testing");
349*b1cdbd2cSJim Jagielski                 result = false;
350*b1cdbd2cSJim Jagielski             }
351*b1cdbd2cSJim Jagielski         }
352*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log, tEnv, "getController()");
353*b1cdbd2cSJim Jagielski         if (res) result=res;
354*b1cdbd2cSJim Jagielski         tRes.tested("getController()", result) ;
355*b1cdbd2cSJim Jagielski     }
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski     /**
358*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
359*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the method successfully returns
360*b1cdbd2cSJim Jagielski     * and no exceptions were thrown.
361*b1cdbd2cSJim Jagielski     */
_isTop()362*b1cdbd2cSJim Jagielski     public void _isTop() {
363*b1cdbd2cSJim Jagielski         log.println("isTop() = " + oObj.isTop());
364*b1cdbd2cSJim Jagielski         tRes.tested("isTop()", true) ;
365*b1cdbd2cSJim Jagielski     }
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski     /**
368*b1cdbd2cSJim Jagielski     * After obtaining an object relation 'XFrame', test tries to find a frame
369*b1cdbd2cSJim Jagielski     * named 'XFrame'. <p>
370*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the method returns non-null object that's equal
371*b1cdbd2cSJim Jagielski     * to previously obtained object relation.
372*b1cdbd2cSJim Jagielski     */
_findFrame()373*b1cdbd2cSJim Jagielski     public void _findFrame() {
374*b1cdbd2cSJim Jagielski         boolean result = true ;
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski         XFrame aFrame = (XFrame) tEnv.getObjRelation("XFrame");
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski         if (aFrame != null) {
379*b1cdbd2cSJim Jagielski             log.println("Trying to find a frame with name 'XFrame' ...");
380*b1cdbd2cSJim Jagielski             XFrame frame = oObj.findFrame("XFrame",
381*b1cdbd2cSJim Jagielski                 com.sun.star.frame.FrameSearchFlag.GLOBAL) ;
382*b1cdbd2cSJim Jagielski             if (frame == null) {
383*b1cdbd2cSJim Jagielski                 log.println("findFrame(\"XFrame,com.sun.star.frame.FrameSearchFlag.GLOBAL\") returns null") ;
384*b1cdbd2cSJim Jagielski                 result = false ;
385*b1cdbd2cSJim Jagielski             } else if ( !aFrame.equals(frame) ) {
386*b1cdbd2cSJim Jagielski                 log.println("findFrame(\"XFrame,com.sun.star.frame.FrameSearchFlag.GLOBAL\") "
387*b1cdbd2cSJim Jagielski                     + " returns frame which is not equal to passed in relation") ;
388*b1cdbd2cSJim Jagielski                 result = false ;
389*b1cdbd2cSJim Jagielski             }
390*b1cdbd2cSJim Jagielski         }
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski         log.println("Trying to find a frame with name '_self' ...");
393*b1cdbd2cSJim Jagielski         XFrame frame = oObj.findFrame("_self",
394*b1cdbd2cSJim Jagielski             com.sun.star.frame.FrameSearchFlag.AUTO) ;
395*b1cdbd2cSJim Jagielski         if (frame == null) {
396*b1cdbd2cSJim Jagielski             log.println("findFrame(\"_self\") returns null") ;
397*b1cdbd2cSJim Jagielski             result = false ;
398*b1cdbd2cSJim Jagielski         } else if ( !oObj.equals(frame) ) {
399*b1cdbd2cSJim Jagielski             log.println("findFrame(\"_self\") "
400*b1cdbd2cSJim Jagielski                 + " returns frame which is not equal to tested") ;
401*b1cdbd2cSJim Jagielski             result = false ;
402*b1cdbd2cSJim Jagielski         }
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski         tRes.tested("findFrame()", result) ;
405*b1cdbd2cSJim Jagielski     }
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski     /**
408*b1cdbd2cSJim Jagielski     * At first new listener is added, then test calls the method and result
409*b1cdbd2cSJim Jagielski     * is checked. <p>
410*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if isDesktop() method returnes true or if the
411*b1cdbd2cSJim Jagielski     * listener was called and proper event past to listener.
412*b1cdbd2cSJim Jagielski     */
_contextChanged()413*b1cdbd2cSJim Jagielski     public void _contextChanged() {
414*b1cdbd2cSJim Jagielski         boolean result = true;
415*b1cdbd2cSJim Jagielski         TestFrameActionListener listener = new TestFrameActionListener();
416*b1cdbd2cSJim Jagielski 
417*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
418*b1cdbd2cSJim Jagielski             log.println("Desktop cann't change context");
419*b1cdbd2cSJim Jagielski             tRes.tested("contextChanged()", true) ;
420*b1cdbd2cSJim Jagielski             return;
421*b1cdbd2cSJim Jagielski         }
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski         listenerCalled[0] = false;
424*b1cdbd2cSJim Jagielski         oObj.addFrameActionListener(listener);
425*b1cdbd2cSJim Jagielski         try {
426*b1cdbd2cSJim Jagielski             oObj.contextChanged();
427*b1cdbd2cSJim Jagielski             if ( !listenerCalled[0] ) {
428*b1cdbd2cSJim Jagielski                 log.println("listener was not called on contextChanged() call.") ;
429*b1cdbd2cSJim Jagielski                 result = false;
430*b1cdbd2cSJim Jagielski             } else if (actionEvent[0] != FrameAction.CONTEXT_CHANGED) {
431*b1cdbd2cSJim Jagielski                 log.println("listener was called, but Action != CONTEXT_CHANGED") ;
432*b1cdbd2cSJim Jagielski                 result = false;
433*b1cdbd2cSJim Jagielski             }
434*b1cdbd2cSJim Jagielski         } finally {
435*b1cdbd2cSJim Jagielski             oObj.removeFrameActionListener(listener);
436*b1cdbd2cSJim Jagielski         }
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski         boolean res = isDesktop(log, tEnv, "contextChanged()");
439*b1cdbd2cSJim Jagielski         if (res) result = res;
440*b1cdbd2cSJim Jagielski         tRes.tested("contextChanged()", result);
441*b1cdbd2cSJim Jagielski     }
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski     /**
445*b1cdbd2cSJim Jagielski     * Test calls the method. Remembered old creater is restored at the end. <p>
446*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the method sucessfully set new value to (XFrame)
447*b1cdbd2cSJim Jagielski     * oObj object.
448*b1cdbd2cSJim Jagielski     */
_setCreator()449*b1cdbd2cSJim Jagielski     public void _setCreator() {
450*b1cdbd2cSJim Jagielski         if (tEnv.getTestCase().getObjectName().equals("Desktop")) {
451*b1cdbd2cSJim Jagielski             log.println("Desktop has no creator");
452*b1cdbd2cSJim Jagielski             tRes.tested("setCreator()", true) ;
453*b1cdbd2cSJim Jagielski             return;
454*b1cdbd2cSJim Jagielski         }
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski         XFramesSupplier oldCreator = oObj.getCreator() ;
457*b1cdbd2cSJim Jagielski         oObj.setCreator(null) ;
458*b1cdbd2cSJim Jagielski         tRes.tested("setCreator()", oObj.getCreator() == null) ;
459*b1cdbd2cSJim Jagielski         oObj.setCreator(oldCreator) ;
460*b1cdbd2cSJim Jagielski     }
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski     /**
463*b1cdbd2cSJim Jagielski     * Test calls the method, then result is checked.<p>
464*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true, and values, set by the
465*b1cdbd2cSJim Jagielski     * method are nulls, or if method returns false, and values are not changed.
466*b1cdbd2cSJim Jagielski     * This method destroy the object. Therfore all other methods have to be
467*b1cdbd2cSJim Jagielski     * executed before :
468*b1cdbd2cSJim Jagielski     * <ul>
469*b1cdbd2cSJim Jagielski     *  <li> <code> getName() </code>
470*b1cdbd2cSJim Jagielski     *  <li> <code> setName() </code>
471*b1cdbd2cSJim Jagielski     *  <li> <code> activate() </code>
472*b1cdbd2cSJim Jagielski     *  <li> <code> deactivate() </code>
473*b1cdbd2cSJim Jagielski     *  <li> <code> isActive() </code>
474*b1cdbd2cSJim Jagielski     *  <li> <code> addFrameActionListener() </code>
475*b1cdbd2cSJim Jagielski     *  <li> <code> getComponentWindow() </code>
476*b1cdbd2cSJim Jagielski     *  <li> <code> getContainerWindow() </code>
477*b1cdbd2cSJim Jagielski     *  <li> <code> getController() </code>
478*b1cdbd2cSJim Jagielski     *  <li> <code> isTop() </code>
479*b1cdbd2cSJim Jagielski     *  <li> <code> findFrame() </code>
480*b1cdbd2cSJim Jagielski     *  <li> <code> contextChanged() </code>
481*b1cdbd2cSJim Jagielski     *  <li> <code> setCreator() </code>
482*b1cdbd2cSJim Jagielski     *  object</li>
483*b1cdbd2cSJim Jagielski     * </ul>
484*b1cdbd2cSJim Jagielski     */
_setComponent()485*b1cdbd2cSJim Jagielski     public void _setComponent() {
486*b1cdbd2cSJim Jagielski         // setComponent() destr
487*b1cdbd2cSJim Jagielski         requiredMethod("getName()") ;
488*b1cdbd2cSJim Jagielski         requiredMethod("setName()") ;
489*b1cdbd2cSJim Jagielski         requiredMethod("activate()") ;
490*b1cdbd2cSJim Jagielski         requiredMethod("deactivate()") ;
491*b1cdbd2cSJim Jagielski         requiredMethod("isActive()") ;
492*b1cdbd2cSJim Jagielski         requiredMethod("addFrameActionListener()") ;
493*b1cdbd2cSJim Jagielski         requiredMethod("getComponentWindow()") ;
494*b1cdbd2cSJim Jagielski         requiredMethod("getContainerWindow()") ;
495*b1cdbd2cSJim Jagielski         requiredMethod("getController()") ;
496*b1cdbd2cSJim Jagielski         requiredMethod("isTop()") ;
497*b1cdbd2cSJim Jagielski         requiredMethod("findFrame()") ;
498*b1cdbd2cSJim Jagielski         requiredMethod("contextChanged()") ;
499*b1cdbd2cSJim Jagielski         requiredMethod("setCreator()") ;
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski         boolean result = true;
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski         XWindow oldWindow = oObj.getComponentWindow();
504*b1cdbd2cSJim Jagielski         XController oldController = oObj.getController();
505*b1cdbd2cSJim Jagielski         boolean rs = oObj.setComponent(null, null);
506*b1cdbd2cSJim Jagielski         if (rs) {  // component must be changed
507*b1cdbd2cSJim Jagielski             result &= oObj.getComponentWindow() == null;
508*b1cdbd2cSJim Jagielski             result &= oObj.getController() == null;
509*b1cdbd2cSJim Jagielski             if (!result)
510*b1cdbd2cSJim Jagielski                 log.println("setComponent() returns true, but component is " +
511*b1cdbd2cSJim Jagielski                  "not changed.");
512*b1cdbd2cSJim Jagielski         } else {   // frame is not allowed to change component
513*b1cdbd2cSJim Jagielski             result &= oObj.getComponentWindow() == oldWindow ;
514*b1cdbd2cSJim Jagielski             result &= oObj.getController() == oldController ;
515*b1cdbd2cSJim Jagielski             if (!result)
516*b1cdbd2cSJim Jagielski                 log.println("setComponent() returns false, but component is" +
517*b1cdbd2cSJim Jagielski                  "changed.");
518*b1cdbd2cSJim Jagielski         }
519*b1cdbd2cSJim Jagielski         tRes.tested("setComponent()", result);
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski     }
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski     /**
524*b1cdbd2cSJim Jagielski      * Test calls the method. <p>
525*b1cdbd2cSJim Jagielski      * Has <b> OK </b> status if the method successfully returns.
526*b1cdbd2cSJim Jagielski      * In case a frame should initialised twice, a
527*b1cdbd2cSJim Jagielski      * <CODE>com.sun.star.uno.RuntimeException</CODE> was thron. This is ok. But since
528*b1cdbd2cSJim Jagielski      * a com.sun.star.uno.RuntimeException could thrown in any state the message of
529*b1cdbd2cSJim Jagielski      * the exception must contain a defined string. In this case the test get an
530*b1cdbd2cSJim Jagielski      * <CODE>OK</CODE> status.
531*b1cdbd2cSJim Jagielski      * The following method tests are to be completed successfully before :
532*b1cdbd2cSJim Jagielski      * <ul>
533*b1cdbd2cSJim Jagielski      *  <li> <code> setComponent() </code> : sets window and controller to the
534*b1cdbd2cSJim Jagielski      *  object</li>
535*b1cdbd2cSJim Jagielski      * </ul>
536*b1cdbd2cSJim Jagielski      */
_initialize()537*b1cdbd2cSJim Jagielski     public void _initialize() {
538*b1cdbd2cSJim Jagielski         requiredMethod("setComponent()") ;
539*b1cdbd2cSJim Jagielski         XWindow win = oObj.getContainerWindow() ;
540*b1cdbd2cSJim Jagielski         boolean bOK = true;
541*b1cdbd2cSJim Jagielski         try {
542*b1cdbd2cSJim Jagielski             oObj.initialize(win) ;
543*b1cdbd2cSJim Jagielski         } catch (com.sun.star.uno.RuntimeException e){
544*b1cdbd2cSJim Jagielski             String message="Frame::initialized() is called more then once, which isnt usefull nor allowed.";
545*b1cdbd2cSJim Jagielski             if (e.toString().indexOf(message) != -1){
546*b1cdbd2cSJim Jagielski                 log.println(e.toString());
547*b1cdbd2cSJim Jagielski                 log.println("methods throws exception, but it's OK");
548*b1cdbd2cSJim Jagielski             }else{
549*b1cdbd2cSJim Jagielski                 log.println(e.toString());
550*b1cdbd2cSJim Jagielski                 bOK=false;
551*b1cdbd2cSJim Jagielski             }
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski         }
554*b1cdbd2cSJim Jagielski         tRes.tested("initialize()", bOK) ;
555*b1cdbd2cSJim Jagielski     }
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski     /**
558*b1cdbd2cSJim Jagielski     * Checks does relation 'Desktop' exist. Returns true if exist.
559*b1cdbd2cSJim Jagielski     */
isDesktop(PrintWriter log, TestEnvironment env, String method)560*b1cdbd2cSJim Jagielski     public static boolean isDesktop(PrintWriter log,
561*b1cdbd2cSJim Jagielski             TestEnvironment env, String method) {
562*b1cdbd2cSJim Jagielski         Object isD = env.getObjRelation("Desktop");
563*b1cdbd2cSJim Jagielski         if (isD != null) {
564*b1cdbd2cSJim Jagielski             log.println("The Desktop doesn't support the method " + method);
565*b1cdbd2cSJim Jagielski             log.println("It will always return true");
566*b1cdbd2cSJim Jagielski             return true;
567*b1cdbd2cSJim Jagielski         }
568*b1cdbd2cSJim Jagielski         else {
569*b1cdbd2cSJim Jagielski             return false;
570*b1cdbd2cSJim Jagielski         }
571*b1cdbd2cSJim Jagielski     }
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski     /**
574*b1cdbd2cSJim Jagielski     * Forces environment recreation.
575*b1cdbd2cSJim Jagielski     */
after()576*b1cdbd2cSJim Jagielski     public void after() {
577*b1cdbd2cSJim Jagielski         disposeEnvironment();
578*b1cdbd2cSJim Jagielski     }
579*b1cdbd2cSJim Jagielski }
580