1 /* 2 * This file is part of the LibreOffice project. 3 * 4 * This Source Code Form is subject to the terms of the Mozilla Public 5 * License, v. 2.0. If a copy of the MPL was not distributed with this 6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 * 8 * This file incorporates work covered by the following license notice: 9 * 10 * Licensed to the Apache Software Foundation (ASF) under one or more 11 * contributor license agreements. See the NOTICE file distributed 12 * with this work for additional information regarding copyright 13 * ownership. The ASF licenses this file to you under the Apache 14 * License, Version 2.0 (the "License"); you may not use this file 15 * except in compliance with the License. You may obtain a copy of 16 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 17 */ 18 19 package ifc.awt; 20 21 import com.sun.star.awt.FocusEvent; 22 import com.sun.star.awt.KeyEvent; 23 import com.sun.star.awt.MouseEvent; 24 import com.sun.star.awt.PaintEvent; 25 import com.sun.star.awt.Point; 26 import com.sun.star.awt.PosSize; 27 import com.sun.star.awt.Rectangle; 28 import com.sun.star.awt.Size; 29 import com.sun.star.awt.WindowEvent; 30 import com.sun.star.awt.XFocusListener; 31 import com.sun.star.awt.XKeyListener; 32 import com.sun.star.awt.XMouseListener; 33 import com.sun.star.awt.XMouseMotionListener; 34 import com.sun.star.awt.XPaintListener; 35 import com.sun.star.awt.XWindow; 36 import com.sun.star.awt.XWindowListener; 37 import com.sun.star.drawing.XControlShape; 38 import com.sun.star.lang.EventObject; 39 import lib.MultiMethodTest; 40 import util.ValueComparer; 41 42 /** 43 * Testing <code>com.sun.star.awt.XWindow</code> 44 * interface methods : 45 * <ul> 46 * <li><code> setPosSize()</code></li> 47 * <li><code> getPosSize()</code></li> 48 * <li><code> setVisible()</code></li> 49 * <li><code> setEnable()</code></li> 50 * <li><code> setFocus()</code></li> 51 * <li><code> addWindowListener()</code></li> 52 * <li><code> removeWindowListener()</code></li> 53 * <li><code> addFocusListener()</code></li> 54 * <li><code> removeFocusListener()</code></li> 55 * <li><code> addKeyListener()</code></li> 56 * <li><code> removeKeyListener()</code></li> 57 * <li><code> addMouseListener()</code></li> 58 * <li><code> removeMouseListener()</code></li> 59 * <li><code> addMouseMotionListener()</code></li> 60 * <li><code> removeMouseMotionListener()</code></li> 61 * <li><code> addPaintListener()</code></li> 62 * <li><code> removePaintListener()</code></li> 63 * </ul> <p> 64 * This test needs the following object relations : 65 * <ul> 66 * <li> <code>'XWindow.AnotherWindow'</code> (of type <code>XWindow</code>): 67 * Some another window which can gain focus so the tested one 68 * must lost it. </li> 69 * <li> <code>'XWindow.ControlShape'</code> <b>optional</b> 70 * (of type <code>XControlShape</code>): 71 * Some shapes can't change their size within fixed ControlShape 72 * and their size could be changed only if size of container 73 * ControlShape is changed. For such shapes this relation should 74 * be passed for proper <code>addWindowListener</code> test. </li> 75 * </ul> <p> 76 * Test is <b> NOT </b> multithread compliant. <p> 77 * @see com.sun.star.awt.XWindow 78 */ 79 public class _XWindow extends MultiMethodTest { 80 public XWindow oObj = null; 81 private Rectangle posSize = null ; 82 private XWindow win = null; 83 84 /** 85 * Test calls the method. <p> 86 * Has <b> OK </b> status if the method does not return null. 87 */ _getPosSize()88 public void _getPosSize() { 89 posSize = oObj.getPosSize() ; 90 tRes.tested("getPosSize()", posSize != null) ; 91 } 92 93 /** 94 * After defining Rectangle structure to be set, test calls the method. <p> 95 * Has <b> OK </b> status if structure obtained using getPosSize() is 96 * equal to structure previously set using setPosSize(). <p> 97 * The following method tests are to be completed successfully before : 98 * <ul> 99 * <li> <code> getPosSize() </code> : returns the outer bounds of 100 * the window </li> 101 * </ul> 102 */ _setPosSize()103 public void _setPosSize() { 104 Rectangle newRec = new Rectangle(); 105 106 requiredMethod("getPosSize()"); 107 newRec.X = posSize.X + 1; 108 newRec.Y = posSize.Y + 1; 109 newRec.Width = posSize.Width - 3; 110 newRec.Height = posSize.Height - 3; 111 oObj.setPosSize(newRec.X, newRec.Y, newRec.Width, newRec.Height, 112 PosSize.POSSIZE); 113 Rectangle gPS = oObj.getPosSize(); 114 log.println("Was : (" + posSize.X + ", " + posSize.Y + ", " + 115 posSize.Width + ", " + posSize.Height + "), "); 116 log.println("Set : (" + newRec.X + ", " + newRec.Y + ", " + 117 newRec.Width + ", " + newRec.Height + "), "); 118 log.println("Get : (" + gPS.X + ", " + gPS.Y + ", " + 119 gPS.Width + ", " + gPS.Height + "). "); 120 tRes.tested("setPosSize()", ValueComparer.equalValue(newRec, gPS) ); 121 } 122 123 /** 124 * At first object relation 'XWindow.AnotherWindow' is obtained. 125 * Then test calls the methods of two 'XWindow' objects several times to be 126 * sure that the focus has changed. <p> 127 * Has <b> OK </b> status if the method successfully returns 128 * and no exceptions were thrown. 129 */ _setFocus()130 public void _setFocus() { 131 win = (XWindow) tEnv.getObjRelation("XWindow.AnotherWindow"); 132 oObj.setFocus(); 133 win.setFocus(); 134 oObj.setFocus(); 135 tRes.tested("setFocus()", true); 136 } 137 138 /** 139 * Test calls the method twice with two parameters: 'true' and 'false'. <p> 140 * Has <b> OK </b> status if the method successfully returns 141 * and no exceptions were thrown. 142 */ _setVisible()143 public void _setVisible() { 144 oObj.setVisible(false); 145 oObj.setVisible(true); 146 tRes.tested("setVisible()", true); 147 } 148 149 /** 150 * Test calls the method twice with two parameters: 'true' and 'false'. <p> 151 * Has <b> OK </b> status if the method successfully returns 152 * and no exceptions were thrown. 153 */ _setEnable()154 public void _setEnable() { 155 oObj.setEnable(false); 156 oObj.setEnable(true); 157 tRes.tested("setEnable()", true); 158 } 159 160 161 /** 162 * A class we use to test addWindowListener() and 163 * removeWindowListener() 164 */ 165 public static class TestWindowListener implements XWindowListener { 166 public boolean resized = false ; 167 public boolean moved = false ; 168 public boolean hidden = false ; 169 public boolean shown = false ; 170 init()171 public void init() { 172 resized = false ; 173 moved = false ; 174 hidden = false ; 175 shown = false ; 176 } 177 windowResized(WindowEvent e)178 public void windowResized(WindowEvent e) { 179 resized = true ; 180 } windowMoved(WindowEvent e)181 public void windowMoved(WindowEvent e) { 182 moved = true ; 183 } windowHidden(EventObject e)184 public void windowHidden(EventObject e) { 185 hidden = true ; 186 } windowShown(EventObject e)187 public void windowShown(EventObject e) { 188 shown = true ; 189 } disposing(EventObject e)190 public void disposing(EventObject e) {} 191 192 } 193 194 private final TestWindowListener wListener = new TestWindowListener() ; 195 196 197 /** 198 * Test calls the method. Then we check if listener's methods were called 199 * when we move, resize, hide and show the window. The resizing is 200 * performed depending on 'XWindow.ControlShape' existence. If this 201 * relation exists then the size and position of container control 202 * shape is changed, else the position and size of window itself is 203 * changed<p> 204 * 205 * Has <b> OK </b> status if methods of wListener were called when 206 * corresponding events occurred. <p> 207 * 208 * The following method tests are to be executed before : 209 * <ul> 210 * <li> <code> setPosSize() </code>: sets the outer bounds of the 211 * window</li> 212 * <li> <code> setVisible() </code>: shows or hides the window 213 * depending on the parameter</li> 214 * </ul> 215 */ _addWindowListener()216 public void _addWindowListener() { 217 executeMethod("setPosSize()"); 218 executeMethod("setVisible()"); 219 boolean result = true ; 220 221 oObj.addWindowListener(wListener); 222 223 // testing wListener.windowMoved() 224 XControlShape ctrlShape = (XControlShape) 225 tEnv.getObjRelation("XWindow.ControlShape"); 226 log.println("change object position and size..."); 227 228 if (ctrlShape != null) { 229 try { 230 Size sz = ctrlShape.getSize(); 231 sz.Height += 100; 232 ctrlShape.setSize(sz); 233 Point pos = ctrlShape.getPosition(); 234 pos.X += 100 ; 235 ctrlShape.setPosition(pos); 236 } catch (com.sun.star.beans.PropertyVetoException e) { 237 log.println("Couldn't change size or position: "); 238 e.printStackTrace(log); 239 } 240 } else { 241 oObj.setPosSize(posSize.X + 2, 0, 0, 0, PosSize.X); 242 oObj.setPosSize(0, 0, 100, 100, PosSize.WIDTH); 243 } 244 245 waitForEventIdle(); 246 boolean res = wListener.resized && wListener.moved && 247 !wListener.hidden && !wListener.shown; 248 result &= res; 249 if (!res) { 250 log.println("\twindowHidden() wasn't called: " + !wListener.hidden); 251 log.println("\twindowShown() wasn't called: " + !wListener.shown); 252 log.println("\twindowResized() was called: " + wListener.resized); 253 log.println("\twindowMoved() was called: " + wListener.moved); 254 } else { 255 log.println("windowMoved() and windowResized() was called"); 256 } 257 258 // testing wListener.windowHidden() 259 wListener.init(); 260 waitForEventIdle(); 261 log.println("set object invisible..."); 262 oObj.setVisible(false); 263 waitForEventIdle(); 264 res = wListener.hidden && !wListener.resized 265 && !wListener.moved && !wListener.shown; 266 result &= res; 267 if (!res) { 268 log.println("\twindowHidden() was called: " + wListener.hidden); 269 log.println("\twindowShown() wasn't called: " + !wListener.shown); 270 log.println("\twindowResized() wasn't called: " + !wListener.resized); 271 log.println("\twindowMoved() wasn't called: " + !wListener.moved); 272 } else { 273 log.println("windowHidden() was called"); 274 } 275 276 // testing wListener.windowShown() 277 wListener.init() ; 278 waitForEventIdle(); 279 log.println("set object visible..."); 280 oObj.setVisible(true) ; 281 waitForEventIdle(); 282 res = wListener.shown && !wListener.resized && 283 !wListener.hidden && !wListener.moved; 284 result &= res; 285 if (!res) { 286 log.println("\twindowHidden() wasn't called: " + !wListener.hidden); 287 log.println("\twindowShown() was called: " + wListener.shown); 288 log.println("\twindowResized() wasn't called: " + !wListener.resized); 289 log.println("\twindowMoved() wasn't called: " + !wListener.moved); 290 } else { 291 log.println("windowShown() was called"); 292 } 293 294 tRes.tested("addWindowListener()", result) ; 295 } 296 297 298 /** 299 * Test calls the method. Then we change window and check that listener's 300 * methods were not called. <p> 301 * Has <b> OK </b> status if listener does not react on window events.<p> 302 * The following method tests are to be completed successfully before : 303 * <ul> 304 * <li> <code> addWindowListener() </code>: adds window listener to the 305 * object </li> 306 * </ul> 307 */ _removeWindowListener()308 public void _removeWindowListener() { 309 requiredMethod("addWindowListener()"); 310 oObj.removeWindowListener(wListener); 311 wListener.init(); 312 oObj.setPosSize(posSize.X, posSize.Y, 313 posSize.Width , posSize.Height, PosSize.POSSIZE); 314 oObj.setVisible(false); 315 oObj.setVisible(true); 316 boolean res = !(wListener.resized || wListener.moved 317 || wListener.hidden || wListener.shown); 318 319 tRes.tested("removeWindowListener()", res); 320 } 321 322 /** 323 * A class we use to test addFocusListener() and 324 * removeFocusListener() 325 */ 326 public static class TestFocusListener implements XFocusListener { 327 public boolean gained = false ; 328 public boolean lost = false ; 329 focusGained(FocusEvent e)330 public void focusGained(FocusEvent e) { 331 gained = true ; 332 } focusLost(FocusEvent e)333 public void focusLost(FocusEvent e) { 334 lost = true ; 335 } init()336 public void init() { 337 gained = false; 338 lost = false; 339 } disposing(EventObject e)340 public void disposing(EventObject e) {} 341 342 } 343 344 private final TestFocusListener fListener = new TestFocusListener(); 345 346 /** 347 * Test calls the method. Then we change focus and check that listener's 348 * methods were called. <p> 349 * Has <b> OK </b> status if methods of fListener were called when 350 * corresponding events occurred. <p> 351 * The following method tests are to be completed successfully before : 352 * <ul> 353 * <li> <code> setFocus() </code>: sets the focus to the window </li> 354 * </ul> 355 */ _addFocusListener()356 public void _addFocusListener() { 357 boolean result = true ; 358 359 requiredMethod("setFocus()"); 360 oObj.addFocusListener(fListener) ; 361 362 // testing fListener.lost() 363 oObj.setFocus(); 364 waitForEventIdle(); 365 win.setFocus(); 366 waitForEventIdle(); 367 result &= fListener.lost; 368 if (!fListener.lost) { 369 log.println("Lost focus was not notified about") ; 370 } 371 372 // testing fListener.gained() 373 oObj.setFocus() ; 374 waitForEventIdle(); 375 result &= fListener.gained; 376 if (!fListener.gained) { 377 log.println("Gained focus was not notified about") ; 378 } 379 380 tRes.tested("addFocusListener()", result) ; 381 } 382 383 /** 384 * Test calls the method. Then we change focus and check that listener's 385 * methods were not called. <p> 386 * Has <b> OK </b> status if listener does not react on focus changing. <p> 387 * The following method tests are to be completed successfully before : 388 * <ul> 389 * <li> <code> addFocusListener() </code> : adds focus listener to 390 * the object </li> 391 * </ul> 392 */ _removeFocusListener()393 public void _removeFocusListener() { 394 requiredMethod("addFocusListener()"); 395 oObj.removeFocusListener(fListener); 396 fListener.init(); 397 oObj.setFocus(); 398 win.setFocus(); 399 oObj.setFocus(); 400 boolean res = !(fListener.gained || fListener.lost); 401 tRes.tested("removeFocusListener()", res); 402 } 403 404 /** 405 * A class we use to test addKeyListener() and 406 * removeKeyListener() 407 */ 408 public static class TestKeyListener implements XKeyListener { keyPressed(KeyEvent e)409 public void keyPressed(KeyEvent e) {} keyReleased(KeyEvent e)410 public void keyReleased(KeyEvent e) {} disposing(EventObject e)411 public void disposing(EventObject e) {} init()412 public void init() {} 413 } 414 415 private final TestKeyListener kListener = new TestKeyListener(); 416 417 /** 418 * Test calls the method. <p> 419 * Has <b> OK </b> status if no exceptions were thrown. <p> 420 */ _addKeyListener()421 public void _addKeyListener() { 422 oObj.addKeyListener(kListener); 423 tRes.tested("addKeyListener()", true); 424 } 425 426 /** 427 * Test calls the method. <p> 428 * Has <b> OK </b> status if no exceptions were thrown. <p> 429 * The following method tests are to be completed successfully before : 430 * <ul> 431 * <li> <code> addKeyListener() </code> : adds key listener to 432 * the object </li> 433 * </ul> 434 */ _removeKeyListener()435 public void _removeKeyListener() { 436 requiredMethod("addKeyListener()"); 437 oObj.removeKeyListener(kListener); 438 tRes.tested("removeKeyListener()", true); 439 } 440 441 /** 442 * A class we use to test addMouseListener() and 443 * removeMouseListener() 444 */ 445 public static class TestMouseListener implements XMouseListener { 446 mousePressed(MouseEvent e)447 public void mousePressed(MouseEvent e) { 448 } 449 mouseReleased(MouseEvent e)450 public void mouseReleased(MouseEvent e) { 451 } 452 mouseEntered(MouseEvent e)453 public void mouseEntered(MouseEvent e) { 454 } 455 mouseExited(MouseEvent e)456 public void mouseExited(MouseEvent e) { 457 } 458 disposing(EventObject e)459 public void disposing(EventObject e) {} 460 init()461 public void init() { 462 } 463 464 } 465 466 private final TestMouseListener mListener = new TestMouseListener(); 467 468 /** 469 * Test calls the method. <p> 470 * Has <b> OK </b> status if no exceptions were thrown. <p> 471 */ _addMouseListener()472 public void _addMouseListener() { 473 oObj.addMouseListener(mListener); 474 tRes.tested("addMouseListener()", true); 475 } 476 477 /** 478 * Test calls the method. <p> 479 * Has <b> OK </b> status if no exceptions were thrown. <p> 480 * The following method tests are to be completed successfully before : 481 * <ul> 482 * <li> <code> addMouseListener() </code> : adds mouse listener to 483 * the object</li> 484 * </ul> 485 */ _removeMouseListener()486 public void _removeMouseListener() { 487 requiredMethod("addMouseListener()"); 488 oObj.removeMouseListener(mListener); 489 tRes.tested("removeMouseListener()", true); 490 } 491 492 /** 493 * A class we use to test addMouseMotionListener() and 494 * removeMouseMotionListener() 495 */ 496 public static class TestMouseMotionListener implements XMouseMotionListener { 497 mouseDragged(MouseEvent e)498 public void mouseDragged(MouseEvent e) { 499 } 500 mouseMoved(MouseEvent e)501 public void mouseMoved(MouseEvent e) { 502 } 503 disposing(EventObject e)504 public void disposing(EventObject e) { 505 } 506 init()507 public void init() { 508 } 509 510 } 511 512 private final TestMouseMotionListener mmListener = new TestMouseMotionListener(); 513 514 /** 515 * Test calls the method. <p> 516 * Has <b> OK </b> status if no exceptions were thrown. <p> 517 */ _addMouseMotionListener()518 public void _addMouseMotionListener() { 519 oObj.addMouseMotionListener(mmListener); 520 tRes.tested("addMouseMotionListener()", true); 521 } 522 523 /** 524 * Test calls the method. <p> 525 * Has <b> OK </b> status if no exceptions were thrown. <p> 526 * The following method tests are to be completed successfully before : 527 * <ul> 528 * <li> <code> addMouseMotionListener() </code> : adds mouse motion 529 * listener to the object</li> 530 * </ul> 531 */ _removeMouseMotionListener()532 public void _removeMouseMotionListener() { 533 requiredMethod("addMouseMotionListener()"); 534 oObj.removeMouseMotionListener(mmListener); 535 tRes.tested("removeMouseMotionListener()", true); 536 } 537 538 /** 539 * A class we use to test addPaintListener() and 540 * removePaintListener() 541 */ 542 public static class TestPaintListener implements XPaintListener { 543 windowPaint(PaintEvent e)544 public void windowPaint(PaintEvent e) { 545 } 546 disposing(EventObject e)547 public void disposing(EventObject e) {} 548 init()549 public void init() { 550 } 551 552 } 553 554 private final TestPaintListener pListener = new TestPaintListener(); 555 556 /** 557 * Test calls the method. <p> 558 * Has <b> OK </b> status if no exceptions were thrown. <p> 559 */ _addPaintListener()560 public void _addPaintListener() { 561 oObj.addPaintListener(pListener); 562 tRes.tested("addPaintListener()", true); 563 } 564 565 /** 566 * Test calls the method. <p> 567 * Has <b> OK </b> status if no exceptions were thrown. <p> 568 * The following method tests are to be completed successfully before : 569 * <ul> 570 * <li> <code> addPaintListener() </code> : adds paint listener to 571 * the object </li> 572 * </ul> 573 */ _removePaintListener()574 public void _removePaintListener() { 575 requiredMethod("addPaintListener()"); 576 oObj.removePaintListener(pListener); 577 tRes.tested("removePaintListener()", true); 578 } 579 580 } 581 582