1 /* 2 * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 @test 26 @bug 6463545 27 @summary Tests java.awt.DefaultFocusTraversalPolicy functionality. 28 @author anton.tarasov area=awt.focus 29 @library ../../regtesthelpers 30 @build AbstractPolicyTest 31 @run main DefaultFTPTest 32 */ 33 34 import java.awt.*; 35 import java.awt.event.*; 36 import java.util.*; 37 import test.java.awt.regtesthelpers.AbstractPolicyTest; 38 39 /* 40 41 Below are some notes about changes in DefaultFocusTraversalPolicy behaviour. 42 43 container(root) [...] - focus traversal cycle with the <container> as the root. 44 container(provider) [...] - focus traversal cycle with the <container> as the provider. 45 container(..)(focusable) [...] - <container> is implicitly set focusable. 46 comp[unfocusable] - <comp> is set unfocusable. 47 48 49 1. frame [ container(root)(focusable) [...] ] 50 51 - getComponentAfter(<frame>, <container>) returns <container>. 52 53 If <container> is the default component to focus in its own cycle. * NO CHANGE * 54 55 56 3. frame [ comp1 container(root)(focusable) [ comp2 ] comp3 ] 57 58 - getComponentBefore(<frame>, <comp3>) returns <comp2>. ** BEHAVIOUR CHANGE ** 59 60 Previously <container> would be returned. This was a bug as it 61 wasn't according to the spec. 62 63 - getComponentBefore(<container>, <comp2>) returns <container>. * NO CHANGE * 64 65 - getComponentBefore(<frame>, <container>) returns <comp1>. * NO CHANGE * 66 67 - getComponentBefore(<container>, <container>) returns <comp2>. * NO CHANGE * 68 69 70 4. frame [ container(provider) [...] comp ] 71 72 - getComponentAfter(<frame>, <container>) returns <container>'s default. ** BEHAVIOUR CHANGE. SPEC ADDITION ** 73 74 Previously <comp> would be returned. Not specified in the spec. 75 76 - getComponentBefore(<frame>, <comp>) returns <container>'s last. ** SPEC CHANGE ** 77 78 The spec says (incorrectly) that default should be returned. 79 80 81 5. frame [ container(provider)(focusable) [...] comp2 ] 82 83 - getComponentBefore(<frame>, <comp2>) returns <container>'s last. ** BEHAVIOUR CHANGE. SPEC ADDITION ** 84 85 Previously <container> would be returned. Not specified in the spec. 86 87 88 6. frame [ comp1 container(root) [...] comp2 ] 89 90 - getComponentAfter(<frame>, <comp1>) returns <container>'s default. ** BEHAVIOUR CHANGE. SPEC ADDITION ** 91 92 Previously <comp2> would be returned. It's just the fix for 6240842. 93 Not specified in the spec. 94 95 96 7. frame [ comp1 container(root) [...] comp2(unfocusable) comp3 ] 97 98 - getComponentBefore(<frame>, <comp3>) returns <container>'s default. ** BEHAVIOUR CHANGE ** 99 100 Previously <comp1> would be returned. This was a bug, because 101 in case if <comp2> is focusable getComponentBefore(<frame>, <comp2>) would 102 return <container>'s default. 103 104 */ 105 106 public class DefaultFTPTest { 107 final int TESTS_NUMBER = 11; 108 109 public static void main(String[] args) { 110 DefaultFTPTest app = new DefaultFTPTest(); 111 app.start(); 112 } 113 114 public void start() { 115 try { 116 Class clazz = null; 117 AbstractPolicyTest test = null; 118 119 for (int i = 1; i <= TESTS_NUMBER; i++) { 120 clazz = Class.forName("PolicyTest" + i); 121 if (clazz != null) { 122 test = (AbstractPolicyTest)clazz.newInstance(); 123 System.out.print("Test " + i + " is in progress..."); 124 test.testIt(); 125 System.out.println(" passed."); 126 } 127 } 128 } catch (RuntimeException rte) { 129 throw rte; 130 } catch (Exception e) { 131 throw new RuntimeException("Error: unexpected exception cought!", e); 132 } 133 } 134 } 135 136 /* 137 * frame [ container1 [...] container2 [...] container3 [...] ] 138 * - verifies simple configuration. 139 */ 140 class PolicyTest1 extends AbstractPolicyTest { 141 protected Frame createFrame() { 142 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 143 frame.setLayout(new GridLayout(3, 1)); 144 145 for (int i = 0; i < 3; i++) { 146 Container cont = (Container) registerComponent("panel" + i, new Panel()); 147 for (int j = 0; j < 3; j++) { 148 cont.add(registerComponent("btn " + (j + i*100), new Button("button"))); 149 } 150 frame.add(cont); 151 } 152 return frame; 153 } 154 155 protected void customizeHierarchy() { 156 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 157 } 158 159 protected Map<String, String> getForwardOrder() { 160 Map<String, String> order = new HashMap<String, String>(); 161 order.put("btn 0", "btn 1"); 162 order.put("btn 1", "btn 2"); 163 order.put("btn 2", "btn 100"); 164 order.put("btn 100", "btn 101"); 165 order.put("btn 101", "btn 102"); 166 order.put("btn 102", "btn 200"); 167 order.put("btn 200", "btn 201"); 168 order.put("btn 201", "btn 202"); 169 order.put("btn 202", "btn 0"); 170 order.put("panel0", "btn 0"); 171 order.put("panel1", "btn 100"); 172 order.put("panel2", "btn 200"); 173 order.put("frame", "btn 0"); 174 return order; 175 } 176 177 protected Map<String, String> getBackwardOrder() { 178 Map<String, String> order = new HashMap<String, String>(); 179 order.put("btn 0", "btn 202"); 180 order.put("btn 1", "btn 0"); 181 order.put("btn 2", "btn 1"); 182 order.put("btn 100", "btn 2"); 183 order.put("btn 101", "btn 100"); 184 order.put("btn 102", "btn 101"); 185 order.put("btn 200", "btn 102"); 186 order.put("btn 201", "btn 200"); 187 order.put("btn 202", "btn 201"); 188 order.put("panel0", "btn 202"); 189 order.put("panel1", "btn 2"); 190 order.put("panel2", "btn 102"); 191 order.put("frame", "btn 202"); 192 return order; 193 } 194 195 protected String[] getContainersToTest() { 196 return new String[] {"frame"}; 197 } 198 199 protected String getDefaultComp(String focusCycleRoot_id) { 200 return "btn 0"; 201 } 202 203 protected String getFirstComp(String focusCycleRoot_id) { 204 return "btn 0"; 205 } 206 207 protected String getLastComp(String focusCycleRoot_id) { 208 return "btn 202"; 209 } 210 } 211 212 /* 213 * frame [ comp container(provider) [...] comp ] 214 * - transfering focus through a provider. 215 */ 216 class PolicyTest2 extends AbstractPolicyTest { 217 218 protected Frame createFrame() { 219 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 220 frame.setLayout(new FlowLayout()); 221 222 frame.add(registerComponent("btn 1", new Button("button"))); 223 224 Container cont = (Container)registerComponent("panel", new Panel()); 225 cont.add(registerComponent("btn 2", new Button("button"))); 226 cont.add(registerComponent("btn 3", new Button("button"))); 227 frame.add(cont); 228 229 frame.add(registerComponent("btn 4", new Button("button"))); 230 231 return frame; 232 } 233 234 protected void customizeHierarchy() { 235 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 236 ((Container)getComponent("panel")).setFocusTraversalPolicyProvider(true); 237 } 238 239 protected Map<String, String> getForwardOrder() { 240 Map<String, String> order = new HashMap<String, String>(); 241 order.put("frame", "btn 1"); 242 order.put("btn 1", "btn 2"); 243 order.put("btn 2", "btn 3"); 244 order.put("btn 3", "btn 4"); 245 order.put("btn 4", "btn 1"); 246 order.put("panel", "btn 2"); 247 return order; 248 } 249 250 protected Map<String, String> getBackwardOrder() { 251 Map<String, String> order = new HashMap<String, String>(); 252 order.put("btn 4", "btn 3"); 253 order.put("btn 3", "btn 2"); 254 order.put("btn 2", "btn 1"); 255 order.put("btn 1", "btn 4"); 256 return order; 257 } 258 259 protected String[] getContainersToTest() { 260 return new String[] {"frame", "panel"}; 261 } 262 263 protected String getDefaultComp(String focusCycleRoot_id) { 264 if ("frame".equals(focusCycleRoot_id)) { 265 return "btn 1"; 266 } else if ("panel".equals(focusCycleRoot_id)) { 267 return "btn 2"; 268 } 269 return null; 270 } 271 272 protected String getFirstComp(String focusCycleRoot_id) { 273 return getDefaultComp(focusCycleRoot_id); 274 } 275 276 protected String getLastComp(String focusCycleRoot_id) { 277 if ("frame".equals(focusCycleRoot_id)) { 278 return "btn 4"; 279 } else if ("panel".equals(focusCycleRoot_id)) { 280 return "btn 3"; 281 } 282 return null; 283 } 284 } 285 286 /* 287 * frame [ comp container(root) [...] comp ] 288 * - transfering focus through a root (includes the case reported in the CR 6240842). 289 */ 290 class PolicyTest3 extends AbstractPolicyTest { 291 292 protected Frame createFrame() { 293 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 294 frame.setLayout(new FlowLayout()); 295 296 frame.add(registerComponent("btn 1", new Button("button"))); 297 298 Container cont = (Container)registerComponent("panel", new Panel()); 299 cont.add(registerComponent("btn 2", new Button("button"))); 300 cont.add(registerComponent("btn 3", new Button("button"))); 301 frame.add(cont); 302 303 frame.add(registerComponent("btn 4", new Button("button"))); 304 305 return frame; 306 } 307 308 protected void customizeHierarchy() { 309 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 310 ((Container)getComponent("panel")).setFocusCycleRoot(true); 311 } 312 313 protected Map<String, String> getForwardOrder() { 314 Map<String, String> order = new HashMap<String, String>(); 315 order.put("frame", "btn 1"); 316 order.put("btn 1", "btn 2"); 317 order.put("btn 2", "btn 3"); 318 order.put("btn 3", "btn 2"); 319 order.put("btn 4", "btn 1"); 320 order.put("panel", "btn 2"); 321 return order; 322 } 323 324 protected Map<String, String> getBackwardOrder() { 325 Map<String, String> order = new HashMap<String, String>(); 326 order.put("btn 4", "btn 2"); 327 order.put("btn 3", "btn 2"); 328 order.put("btn 2", "btn 3"); 329 order.put("btn 1", "btn 4"); 330 return order; 331 } 332 333 protected String[] getContainersToTest() { 334 return new String[] {"frame", "panel"}; 335 } 336 337 protected String getDefaultComp(String focusCycleRoot_id) { 338 if ("frame".equals(focusCycleRoot_id)) { 339 return "btn 1"; 340 } else if ("panel".equals(focusCycleRoot_id)) { 341 return "btn 2"; 342 } 343 return null; 344 } 345 346 protected String getFirstComp(String focusCycleRoot_id) { 347 return getDefaultComp(focusCycleRoot_id); 348 } 349 350 protected String getLastComp(String focusCycleRoot_id) { 351 if ("frame".equals(focusCycleRoot_id)) { 352 return "btn 4"; 353 } else if ("panel".equals(focusCycleRoot_id)) { 354 return "btn 3"; 355 } 356 return null; 357 } 358 } 359 360 /* 361 * frame [ container(provider) [...] comp1(unfocusable) comp2 ] 362 * - getComponentBefore(<frame>, <comp2>) should return <container>'s last. 363 */ 364 class PolicyTest4 extends AbstractPolicyTest { 365 366 protected Frame createFrame() { 367 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 368 frame.setLayout(new FlowLayout()); 369 370 Container cont = (Container)registerComponent("panel", new Panel()); 371 cont.add(registerComponent("btn 1", new Button("button"))); 372 cont.add(registerComponent("btn 2", new Button("button"))); 373 frame.add(cont); 374 375 frame.add(registerComponent("btn 3", new Button("button"))); 376 frame.add(registerComponent("btn 4", new Button("button"))); 377 378 return frame; 379 } 380 381 protected void customizeHierarchy() { 382 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 383 ((Container)getComponent("panel")).setFocusTraversalPolicyProvider(true); 384 ((Button)getComponent("btn 3")).setFocusable(false); 385 } 386 387 protected Map<String, String> getBackwardOrder() { 388 Map<String, String> order = new HashMap<String, String>(); 389 order.put("btn 4", "btn 2"); 390 order.put("btn 2", "btn 1"); 391 order.put("btn 1", "btn 4"); 392 return order; 393 } 394 395 // no testing 396 protected Map<String, String> getForwardOrder() { 397 return null; 398 } 399 protected String[] getContainersToTest() { 400 return null; 401 } 402 protected String getDefaultComp(String focusCycleRoot_id) { 403 return null; 404 } 405 protected String getFirstComp(String focusCycleRoot_id) { 406 return null; 407 } 408 protected String getLastComp(String focusCycleRoot_id) { 409 return null; 410 } 411 } 412 413 /* 414 * frame [ container(root) [...] comp1(unfocusable) comp2 ] 415 * - getComponentBefore(<frame>, <comp2>) should return <container>'s default. 416 */ 417 class PolicyTest5 extends AbstractPolicyTest { 418 419 protected Frame createFrame() { 420 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 421 frame.setLayout(new FlowLayout()); 422 423 Container cont = (Container)registerComponent("panel", new Panel()); 424 cont.add(registerComponent("btn 1", new Button("button"))); 425 cont.add(registerComponent("btn 2", new Button("button"))); 426 frame.add(cont); 427 428 frame.add(registerComponent("btn 3", new Button("button"))); 429 frame.add(registerComponent("btn 4", new Button("button"))); 430 431 return frame; 432 } 433 434 protected void customizeHierarchy() { 435 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 436 ((Container)getComponent("panel")).setFocusCycleRoot(true); 437 ((Button)getComponent("btn 3")).setFocusable(false); 438 } 439 440 protected Map<String, String> getBackwardOrder() { 441 Map<String, String> order = new HashMap<String, String>(); 442 order.put("btn 4", "btn 1"); 443 order.put("btn 2", "btn 1"); 444 order.put("btn 1", "btn 2"); 445 return order; 446 } 447 448 // no testing 449 protected Map<String, String> getForwardOrder() { 450 return null; 451 } 452 protected String[] getContainersToTest() { 453 return null; 454 } 455 protected String getDefaultComp(String focusCycleRoot_id) { 456 return null; 457 } 458 protected String getFirstComp(String focusCycleRoot_id) { 459 return null; 460 } 461 protected String getLastComp(String focusCycleRoot_id) { 462 return null; 463 } 464 } 465 466 /* 467 * frame [ comp container(provider)(focusable) [...] comp ] 468 * - transfering focus through a focusable provider. 469 */ 470 class PolicyTest6 extends AbstractPolicyTest { 471 472 protected Frame createFrame() { 473 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 474 frame.setLayout(new FlowLayout()); 475 476 frame.add(registerComponent("btn 1", new Button("button"))); 477 478 Container cont = (Container)registerComponent("panel", new Panel()); 479 cont.add(registerComponent("btn 2", new Button("button"))); 480 cont.add(registerComponent("btn 3", new Button("button"))); 481 frame.add(cont); 482 483 frame.add(registerComponent("btn 4", new Button("button"))); 484 485 return frame; 486 } 487 488 protected void customizeHierarchy() { 489 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 490 ((Container)getComponent("panel")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 491 public Component getDefaultComponent(Container aContainer) { 492 return getComponent("btn 2"); 493 } 494 }); 495 ((Container)getComponent("panel")).setFocusTraversalPolicyProvider(true); 496 ((Container)getComponent("panel")).setFocusable(true); 497 } 498 499 protected Map<String, String> getForwardOrder() { 500 Map<String, String> order = new HashMap<String, String>(); 501 order.put("frame", "btn 1"); 502 order.put("btn 1", "panel"); 503 order.put("btn 2", "btn 3"); 504 order.put("btn 3", "btn 4"); 505 order.put("btn 4", "btn 1"); 506 order.put("panel", "btn 2"); 507 return order; 508 } 509 510 protected Map<String, String> getBackwardOrder() { 511 Map<String, String> order = new HashMap<String, String>(); 512 order.put("btn 4", "btn 3"); 513 order.put("btn 3", "btn 2"); 514 order.put("btn 2", "panel"); 515 order.put("btn 1", "btn 4"); 516 order.put("panel", "btn 1"); 517 return order; 518 } 519 520 protected String[] getContainersToTest() { 521 return new String[] {"panel"}; 522 } 523 524 protected String getDefaultComp(String focusCycleRoot_id) { 525 return "btn 2"; 526 } 527 528 protected String getFirstComp(String focusCycleRoot_id) { 529 return "panel"; 530 } 531 532 protected String getLastComp(String focusCycleRoot_id) { 533 return "btn 3"; 534 } 535 } 536 537 /* 538 * frame [ comp container(root)(focusable) [...] comp ] 539 * - transfering focus through a focusable root. 540 */ 541 class PolicyTest7 extends AbstractPolicyTest { 542 543 protected Frame createFrame() { 544 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 545 frame.setLayout(new FlowLayout()); 546 547 frame.add(registerComponent("btn 1", new Button("button"))); 548 549 Container cont = (Container)registerComponent("panel", new Panel()); 550 cont.add(registerComponent("btn 2", new Button("button"))); 551 cont.add(registerComponent("btn 3", new Button("button"))); 552 frame.add(cont); 553 554 frame.add(registerComponent("btn 4", new Button("button"))); 555 556 return frame; 557 } 558 559 protected void customizeHierarchy() { 560 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 561 ((Container)getComponent("panel")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 562 public Component getDefaultComponent(Container aContainer) { 563 return getComponent("btn 2"); 564 } 565 }); 566 ((Container)getComponent("panel")).setFocusCycleRoot(true); 567 ((Container)getComponent("panel")).setFocusable(true); 568 } 569 570 protected Map<String, String> getForwardOrder() { 571 Map<String, String> order = new HashMap<String, String>(); 572 order.put("frame", "btn 1"); 573 order.put("btn 1", "panel"); 574 order.put("btn 2", "btn 3"); 575 order.put("btn 3", "panel"); 576 order.put("btn 4", "btn 1"); 577 order.put("panel", "btn 2"); 578 return order; 579 } 580 581 protected Map<String, String> getBackwardOrder() { 582 Map<String, String> order = new HashMap<String, String>(); 583 order.put("btn 4", "btn 2"); 584 order.put("btn 3", "btn 2"); 585 order.put("btn 2", "panel"); 586 order.put("btn 1", "btn 4"); 587 order.put("panel", "btn 1"); 588 return order; 589 } 590 591 protected String[] getContainersToTest() { 592 return new String[] {"panel"}; 593 } 594 595 protected String getDefaultComp(String focusCycleRoot_id) { 596 return "btn 2"; 597 } 598 599 protected String getFirstComp(String focusCycleRoot_id) { 600 return "panel"; 601 } 602 603 protected String getLastComp(String focusCycleRoot_id) { 604 return "btn 3"; 605 } 606 } 607 608 /* 609 * frame [ comp1 comp2 container1(provider) [...] container2(root) [...] ] 610 * - verifies a case when a provider is followed by a root. 611 */ 612 class PolicyTest8 extends AbstractPolicyTest { 613 614 protected Frame createFrame() { 615 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 616 frame.setLayout(new FlowLayout()); 617 618 frame.add(registerComponent("btn-1", new Button("button"))); 619 frame.add(registerComponent("btn-2", new Button("button"))); 620 621 Container cont1 = (Container)registerComponent("panel-1", new Panel()); 622 cont1.add(registerComponent("btn-3", new Button("button"))); 623 cont1.add(registerComponent("btn-4", new Button("button"))); 624 cont1.add(registerComponent("btn-5", new Button("button"))); 625 626 Container cont2 = (Container)registerComponent("panel-2", new Panel()); 627 cont2.add(registerComponent("btn-6", new Button("button"))); 628 cont2.add(registerComponent("btn-7", new Button("button"))); 629 cont2.add(registerComponent("btn-8", new Button("button"))); 630 631 frame.add(cont1); 632 frame.add(cont2); 633 634 return frame; 635 } 636 637 protected void customizeHierarchy() { 638 ((Container)getComponent("panel-1")).setFocusTraversalPolicyProvider(true); 639 ((Container)getComponent("panel-1")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 640 public Component getDefaultComponent(Container aContainer) { 641 return getComponent("btn-4"); 642 } 643 }); 644 645 ((Container)getComponent("panel-2")).setFocusCycleRoot(true); 646 ((Container)getComponent("panel-2")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 647 public Component getDefaultComponent(Container aContainer) { 648 return getComponent("btn-7"); 649 } 650 }); 651 } 652 653 protected Map<String, String> getForwardOrder() { 654 Map<String, String> order = new HashMap<String, String>(); 655 order.put("frame", "btn-1"); 656 order.put("btn-1", "btn-2"); 657 order.put("btn-2", "btn-4"); 658 order.put("btn-3", "btn-4"); 659 order.put("btn-4", "btn-5"); 660 order.put("btn-5", "btn-7"); 661 order.put("btn-6", "btn-7"); 662 order.put("btn-7", "btn-8"); 663 order.put("btn-8", "btn-6"); 664 order.put("panel-1", "btn-4"); 665 order.put("panel-2", "btn-7"); 666 return order; 667 } 668 669 protected Map<String, String> getBackwardOrder() { 670 Map<String, String> order = new HashMap<String, String>(); 671 order.put("btn-1", "btn-5"); 672 order.put("btn-2", "btn-1"); 673 order.put("btn-3", "btn-2"); 674 order.put("btn-4", "btn-3"); 675 order.put("btn-5", "btn-4"); 676 order.put("btn-6", "btn-8"); 677 order.put("btn-7", "btn-6"); 678 order.put("btn-8", "btn-7"); 679 return order; 680 } 681 682 protected String[] getContainersToTest() { 683 return new String[] {"frame", "panel-1", "panel-2"}; 684 } 685 686 protected String getDefaultComp(String focusCycleRoot_id) { 687 if ("frame".equals(focusCycleRoot_id)) { 688 return "btn-1"; 689 } else if ("panel-1".equals(focusCycleRoot_id)) { 690 return "btn-4"; 691 } else if ("panel-2".equals(focusCycleRoot_id)) { 692 return "btn-7"; 693 } 694 return null; 695 } 696 697 protected String getFirstComp(String focusCycleRoot_id) { 698 if ("frame".equals(focusCycleRoot_id)) { 699 return "btn-1"; 700 } else if ("panel-1".equals(focusCycleRoot_id)) { 701 return "btn-3"; 702 } else if ("panel-2".equals(focusCycleRoot_id)) { 703 return "btn-6"; 704 } 705 return null; 706 } 707 708 protected String getLastComp(String focusCycleRoot_id) { 709 if ("frame".equals(focusCycleRoot_id)) { 710 return "btn-5"; 711 } else if ("panel-1".equals(focusCycleRoot_id)) { 712 return "btn-5"; 713 } else if ("panel-2".equals(focusCycleRoot_id)) { 714 return "btn-8"; 715 } 716 return null; 717 } 718 } 719 720 /* 721 * frame [ comp1 comp2 container1(root) [...] container2(provider) [...] ] 722 * - verifies a case when a root is followed by a provider. 723 */ 724 class PolicyTest9 extends AbstractPolicyTest { 725 726 protected Frame createFrame() { 727 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 728 frame.setLayout(new FlowLayout()); 729 730 frame.add(registerComponent("btn-1", new Button("button"))); 731 frame.add(registerComponent("btn-2", new Button("button"))); 732 733 Container cont1 = (Container)registerComponent("panel-1", new Panel()); 734 cont1.add(registerComponent("btn-3", new Button("button"))); 735 cont1.add(registerComponent("btn-4", new Button("button"))); 736 cont1.add(registerComponent("btn-5", new Button("button"))); 737 738 Container cont2 = (Container)registerComponent("panel-2", new Panel()); 739 cont2.add(registerComponent("btn-6", new Button("button"))); 740 cont2.add(registerComponent("btn-7", new Button("button"))); 741 cont2.add(registerComponent("btn-8", new Button("button"))); 742 743 frame.add(cont1); 744 frame.add(cont2); 745 746 return frame; 747 } 748 749 protected void customizeHierarchy() { 750 ((Container)getComponent("panel-1")).setFocusCycleRoot(true); 751 ((Container)getComponent("panel-1")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 752 public Component getDefaultComponent(Container aContainer) { 753 return getComponent("btn-4"); 754 } 755 }); 756 757 ((Container)getComponent("panel-2")).setFocusTraversalPolicyProvider(true); 758 ((Container)getComponent("panel-2")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 759 public Component getDefaultComponent(Container aContainer) { 760 return getComponent("btn-7"); 761 } 762 }); 763 } 764 765 protected Map<String, String> getForwardOrder() { 766 Map<String, String> order = new HashMap<String, String>(); 767 order.put("frame", "btn-1"); 768 order.put("btn-1", "btn-2"); 769 order.put("btn-2", "btn-4"); 770 order.put("btn-3", "btn-4"); 771 order.put("btn-4", "btn-5"); 772 order.put("btn-5", "btn-3"); 773 order.put("btn-6", "btn-7"); 774 order.put("btn-7", "btn-8"); 775 order.put("btn-8", "btn-1"); 776 order.put("panel-1", "btn-4"); 777 order.put("panel-2", "btn-7"); 778 return order; 779 } 780 781 protected Map<String, String> getBackwardOrder() { 782 Map<String, String> order = new HashMap<String, String>(); 783 order.put("btn-1", "btn-8"); 784 order.put("btn-2", "btn-1"); 785 order.put("btn-3", "btn-5"); 786 order.put("btn-4", "btn-3"); 787 order.put("btn-5", "btn-4"); 788 order.put("btn-6", "btn-4"); 789 order.put("btn-7", "btn-6"); 790 order.put("btn-8", "btn-7"); 791 return order; 792 } 793 794 protected String[] getContainersToTest() { 795 return new String[] {"frame", "panel-1", "panel-2"}; 796 } 797 798 protected String getDefaultComp(String focusCycleRoot_id) { 799 if ("frame".equals(focusCycleRoot_id)) { 800 return "btn-1"; 801 } else if ("panel-1".equals(focusCycleRoot_id)) { 802 return "btn-4"; 803 } else if ("panel-2".equals(focusCycleRoot_id)) { 804 return "btn-7"; 805 } 806 return null; 807 } 808 809 protected String getFirstComp(String focusCycleRoot_id) { 810 if ("frame".equals(focusCycleRoot_id)) { 811 return "btn-1"; 812 } else if ("panel-1".equals(focusCycleRoot_id)) { 813 return "btn-3"; 814 } else if ("panel-2".equals(focusCycleRoot_id)) { 815 return "btn-6"; 816 } 817 return null; 818 } 819 820 protected String getLastComp(String focusCycleRoot_id) { 821 if ("frame".equals(focusCycleRoot_id)) { 822 return "btn-8"; 823 } else if ("panel-1".equals(focusCycleRoot_id)) { 824 return "btn-5"; 825 } else if ("panel-2".equals(focusCycleRoot_id)) { 826 return "btn-8"; 827 } 828 return null; 829 } 830 } 831 832 /* 833 * frame [ container0 [...] container1(root) [ comp1 comp2 container2(provider) [...] ] ] 834 * - verifies a case when a provider is nested in a root. 835 */ 836 class PolicyTest10 extends AbstractPolicyTest { 837 838 protected Frame createFrame() { 839 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 840 frame.setLayout(new GridLayout(2, 1)); 841 842 Container cont0 = new Panel(); 843 cont0.add(registerComponent("btn-1", new Button("button"))); 844 cont0.add(registerComponent("btn-2", new Button("button"))); 845 846 Container cont1 = (Container)registerComponent("panel-1", new Panel()); 847 cont1.add(registerComponent("btn-3", new Button("button"))); 848 cont1.add(registerComponent("btn-4", new Button("button"))); 849 850 Container cont2 = (Container)registerComponent("panel-2", new Panel()); 851 cont2.add(registerComponent("btn-5", new Button("button"))); 852 cont2.add(registerComponent("btn-6", new Button("button"))); 853 854 cont1.add(cont2); 855 frame.add(cont0); 856 frame.add(cont1); 857 858 return frame; 859 } 860 861 protected void customizeHierarchy() { 862 ((Container)getComponent("panel-1")).setFocusCycleRoot(true); 863 ((Container)getComponent("panel-1")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy() { 864 public Component getDefaultComponent(Container aContainer) { 865 return getComponent("panel-2"); 866 } 867 }); 868 ((Container)getComponent("panel-2")).setFocusTraversalPolicyProvider(true); 869 ((Container)getComponent("panel-2")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 870 } 871 872 protected Map<String, String> getForwardOrder() { 873 Map<String, String> order = new HashMap<String, String>(); 874 order.put("frame", "btn-1"); 875 order.put("btn-1", "btn-2"); 876 order.put("btn-2", "panel-2"); 877 order.put("btn-3", "btn-4"); 878 order.put("btn-4", "btn-5"); 879 order.put("btn-5", "btn-6"); 880 order.put("btn-6", "btn-3"); 881 order.put("panel-1", "panel-2"); 882 order.put("panel-2", "btn-5"); 883 return order; 884 } 885 886 protected Map<String, String> getBackwardOrder() { 887 Map<String, String> order = new HashMap<String, String>(); 888 order.put("btn-1", "btn-2"); 889 order.put("btn-2", "btn-1"); 890 order.put("btn-3", "btn-6"); 891 order.put("btn-4", "btn-3"); 892 order.put("btn-5", "btn-4"); 893 order.put("btn-6", "btn-5"); 894 return order; 895 } 896 897 protected String[] getContainersToTest() { 898 return new String[] {"frame", "panel-1", "panel-2"}; 899 } 900 901 protected String getDefaultComp(String focusCycleRoot_id) { 902 if ("frame".equals(focusCycleRoot_id)) { 903 return "btn-1"; 904 } else if ("panel-1".equals(focusCycleRoot_id)) { 905 return "panel-2"; 906 } else if ("panel-2".equals(focusCycleRoot_id)) { 907 return "btn-5"; 908 } 909 return null; 910 } 911 912 protected String getFirstComp(String focusCycleRoot_id) { 913 if ("frame".equals(focusCycleRoot_id)) { 914 return "btn-1"; 915 } else if ("panel-1".equals(focusCycleRoot_id)) { 916 return "btn-3"; 917 } else if ("panel-2".equals(focusCycleRoot_id)) { 918 return "btn-5"; 919 } 920 return null; 921 } 922 923 protected String getLastComp(String focusCycleRoot_id) { 924 if ("frame".equals(focusCycleRoot_id)) { 925 return "btn-2"; 926 } else { 927 return "btn-6"; 928 } 929 } 930 } 931 932 /* 933 * frame [ container(root) [...] comp ] 934 * - getDefaultComponent(<frame>) should implicitly down-cycle into the <container>. 935 * - getFirstComponent(<frame>) should implicitly down-cycle into the <container>. 936 */ 937 class PolicyTest11 extends AbstractPolicyTest { 938 protected Frame createFrame() { 939 Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame")); 940 frame.setLayout(new FlowLayout()); 941 942 Container cont = (Container)registerComponent("panel", new Panel()); 943 cont.add(registerComponent("btn-1", new Button("button"))); 944 cont.add(registerComponent("btn-2", new Button("button"))); 945 946 frame.add(cont); 947 frame.add(registerComponent("btn-3", new Button("button"))); 948 949 return frame; 950 } 951 952 protected void customizeHierarchy() { 953 ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy()); 954 ((Container)getComponent("panel")).setFocusCycleRoot(true); 955 } 956 957 protected Map<String, String> getForwardOrder() { 958 Map<String, String> order = new HashMap<String, String>(); 959 order.put("frame", "btn-1"); 960 order.put("btn-1", "btn-2"); 961 order.put("btn-2", "btn-1"); 962 order.put("btn-3", "btn-1"); 963 return order; 964 } 965 966 protected Map<String, String> getBackwardOrder() { 967 Map<String, String> order = new HashMap<String, String>(); 968 order.put("btn-3", "btn-1"); 969 order.put("btn-2", "btn-1"); 970 order.put("btn-1", "btn-2"); 971 order.put("frame", "btn-3"); 972 return order; 973 } 974 975 protected String[] getContainersToTest() { 976 return new String[] {"frame"}; 977 } 978 979 protected String getDefaultComp(String focusCycleRoot_id) { 980 return "btn-1"; 981 } 982 983 protected String getFirstComp(String focusCycleRoot_id) { 984 return "btn-1"; 985 } 986 987 protected String getLastComp(String focusCycleRoot_id) { 988 return "btn-3"; 989 } 990 }