Path: blob/master/test/jdk/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java
41152 views
/*1* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24@test25@key headful26@bug 646354527@summary Tests javax.swing.LayoutFocusTraversalPolicy functionality.28@author anton.tarasov, oleg.sukhodolsky: area=awt.focus29@library ../../regtesthelpers30@build AbstractPolicyTest31@run main LayoutFTPTest32*/3334import java.awt.*;35import javax.swing.*;36import java.awt.event.*;37import java.util.*;38import test.java.awt.regtesthelpers.AbstractPolicyTest;3940/*4142Below are some notes about changes in SortingFocusTraversalPolicy behaviour.4344container(root) [...] - focus traversal cycle with the <container> as the root.45container(provider) [...] - focus traversal cycle with the <container> as the provider.46container(..)(focusable) [...] - <container> is implicitly set focusable.47comp[unfocusable] - <comp> is set unfocusable.4849501. frame [ container(root)(focusable) [...] ]5152- getComponentAfter(<frame>, <container>) returns <container>.5354If <container> is the default component to focus in its own cycle. * NO CHANGE *5556573. frame [ comp1 container(root)(focusable) [ comp2 ] comp3 ]5859- getComponentBefore(<frame>, <comp3>) returns <comp2>. ** BEHAVIOUR CHANGE **6061Previously <container> would be returned. This was a bug as it62wasn't according to the spec.6364- getComponentBefore(<container>, <comp2>) returns <container>. * NO CHANGE *6566- getComponentBefore(<frame>, <container>) returns <comp1>. * NO CHANGE *6768- getComponentBefore(<container>, <container>) returns <comp2>. * NO CHANGE *6970714. frame [ container(provider) [...] comp ]7273- getComponentAfter(<frame>, <container>) returns <container>'s default. ** BEHAVIOUR CHANGE. SPEC ADDITION **7475Previously <comp> would be returned. Not specified in the spec.7677- getComponentBefore(<frame>, <comp>) returns <container>'s last. ** SPEC CHANGE **7879The spec says (incorrectly) that default should be returned.8081825. frame [ container(provider)(focusable) [...] comp2 ]8384- getComponentBefore(<frame>, <comp2>) returns <container>'s last. ** BEHAVIOUR CHANGE. SPEC ADDITION **8586Previously <container> would be returned. Not specified in the spec.8788896. frame [ comp1 container(root) [...] comp2 ]9091- getComponentAfter(<frame>, <comp1>) returns <container>'s default. ** BEHAVIOUR CHANGE. SPEC ADDITION **9293Previously <comp2> would be returned. It's just the fix for 6240842.94Not specified in the spec.9596977. frame [ comp1 container(root) [...] comp2(unfocusable) comp3 ]9899- getComponentBefore(<frame>, <comp3>) returns <container>'s default. ** BEHAVIOUR CHANGE **100101Previously <comp1> would be returned. This was a bug, because102in case if <comp2> is focusable getComponentBefore(<frame>, <comp2>) would103return <container>'s default.104105*/106107public class LayoutFTPTest {108final int TESTS_NUMBER = 11;109110public static void main(String[] args) {111LayoutFTPTest app = new LayoutFTPTest();112app.start();113}114115public void start() {116try {117Class clazz = null;118AbstractPolicyTest test = null;119120for (int i = 1; i <= TESTS_NUMBER; i++) {121clazz = Class.forName("PolicyTest" + i);122if (clazz != null) {123test = (AbstractPolicyTest)clazz.newInstance();124System.out.print("Test " + i + " is in progress...");125test.testIt();126System.out.println(" passed.");127}128}129} catch (RuntimeException rte) {130throw rte;131} catch (Exception e) {132throw new RuntimeException("Error: unexpected exception cought!", e);133}134}135}136137/*138* frame [ container1 [...] container2 [...] container3 [...] ]139* - verifies simple configuration.140*/141class PolicyTest1 extends AbstractPolicyTest {142protected Frame createFrame() {143JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));144jframe.setLayout(new GridLayout(3, 1));145146for (int i = 0; i < 3; i++) {147Container cont = (Container) registerComponent("jpanel" + i, new JPanel());148for (int j = 0; j < 3; j++) {149cont.add(registerComponent("btn " + (j + i*100), new JButton("jbutton")));150}151jframe.add(cont);152}153return jframe;154}155156protected void customizeHierarchy() {157((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());158}159160protected Map<String, String> getForwardOrder() {161Map<String, String> order = new HashMap<String, String>();162order.put("btn 0", "btn 1");163order.put("btn 1", "btn 2");164order.put("btn 2", "btn 100");165order.put("btn 100", "btn 101");166order.put("btn 101", "btn 102");167order.put("btn 102", "btn 200");168order.put("btn 200", "btn 201");169order.put("btn 201", "btn 202");170order.put("btn 202", "btn 0");171order.put("jpanel0", "btn 0");172order.put("jpanel1", "btn 100");173order.put("jpanel2", "btn 200");174order.put("jframe", "btn 0");175return order;176}177178protected Map<String, String> getBackwardOrder() {179Map<String, String> order = new HashMap<String, String>();180order.put("btn 0", "btn 202");181order.put("btn 1", "btn 0");182order.put("btn 2", "btn 1");183order.put("btn 100", "btn 2");184order.put("btn 101", "btn 100");185order.put("btn 102", "btn 101");186order.put("btn 200", "btn 102");187order.put("btn 201", "btn 200");188order.put("btn 202", "btn 201");189order.put("jpanel0", "btn 202");190order.put("jpanel1", "btn 2");191order.put("jpanel2", "btn 102");192order.put("jframe", "btn 202");193return order;194}195196protected String[] getContainersToTest() {197return new String[] {"jframe"};198}199200protected String getDefaultComp(String focusCycleRoot_id) {201return "btn 0";202}203204protected String getFirstComp(String focusCycleRoot_id) {205return "btn 0";206}207208protected String getLastComp(String focusCycleRoot_id) {209return "btn 202";210}211}212213/*214* frame [ comp container(provider) [...] comp ]215* - transfering focus through a provider.216*/217class PolicyTest2 extends AbstractPolicyTest {218219protected Frame createFrame() {220JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));221jframe.setLayout(new FlowLayout());222223jframe.add(registerComponent("btn 1", new JButton("jbutton")));224225Container cont = (Container)registerComponent("jpanel", new JPanel());226cont.add(registerComponent("btn 2", new JButton("jbutton")));227cont.add(registerComponent("btn 3", new JButton("jbutton")));228jframe.add(cont);229230jframe.add(registerComponent("btn 4", new JButton("jbutton")));231232return jframe;233}234235protected void customizeHierarchy() {236((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());237((Container)getComponent("jpanel")).setFocusTraversalPolicyProvider(true);238}239240protected Map<String, String> getForwardOrder() {241Map<String, String> order = new HashMap<String, String>();242order.put("jframe", "btn 1");243order.put("btn 1", "btn 2");244order.put("btn 2", "btn 3");245order.put("btn 3", "btn 4");246order.put("btn 4", "btn 1");247order.put("jpanel", "btn 2");248return order;249}250251protected Map<String, String> getBackwardOrder() {252Map<String, String> order = new HashMap<String, String>();253order.put("btn 4", "btn 3");254order.put("btn 3", "btn 2");255order.put("btn 2", "btn 1");256order.put("btn 1", "btn 4");257return order;258}259260protected String[] getContainersToTest() {261return new String[] {"jframe", "jpanel"};262}263264protected String getDefaultComp(String focusCycleRoot_id) {265if ("jframe".equals(focusCycleRoot_id)) {266return "btn 1";267} else if ("jpanel".equals(focusCycleRoot_id)) {268return "btn 2";269}270return null;271}272273protected String getFirstComp(String focusCycleRoot_id) {274return getDefaultComp(focusCycleRoot_id);275}276277protected String getLastComp(String focusCycleRoot_id) {278if ("jframe".equals(focusCycleRoot_id)) {279return "btn 4";280} else if ("jpanel".equals(focusCycleRoot_id)) {281return "btn 3";282}283return null;284}285}286287/*288* frame [ comp container(root) [...] comp ]289* - transfering focus through a root (includes the case reported in the CR 6240842).290*/291class PolicyTest3 extends AbstractPolicyTest {292293protected Frame createFrame() {294JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));295jframe.setLayout(new FlowLayout());296297jframe.add(registerComponent("btn 1", new JButton("jbutton")));298299Container cont = (Container)registerComponent("jpanel", new JPanel());300cont.add(registerComponent("btn 2", new JButton("jbutton")));301cont.add(registerComponent("btn 3", new JButton("jbutton")));302jframe.add(cont);303304jframe.add(registerComponent("btn 4", new JButton("jbutton")));305306return jframe;307}308309protected void customizeHierarchy() {310((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());311((Container)getComponent("jpanel")).setFocusCycleRoot(true);312}313314protected Map<String, String> getForwardOrder() {315Map<String, String> order = new HashMap<String, String>();316order.put("jframe", "btn 1");317order.put("btn 1", "btn 2");318order.put("btn 2", "btn 3");319order.put("btn 3", "btn 2");320order.put("btn 4", "btn 1");321order.put("jpanel", "btn 2");322return order;323}324325protected Map<String, String> getBackwardOrder() {326Map<String, String> order = new HashMap<String, String>();327order.put("btn 4", "btn 2");328order.put("btn 3", "btn 2");329order.put("btn 2", "btn 3");330order.put("btn 1", "btn 4");331return order;332}333334protected String[] getContainersToTest() {335return new String[] {"jframe", "jpanel"};336}337338protected String getDefaultComp(String focusCycleRoot_id) {339if ("jframe".equals(focusCycleRoot_id)) {340return "btn 1";341} else if ("jpanel".equals(focusCycleRoot_id)) {342return "btn 2";343}344return null;345}346347protected String getFirstComp(String focusCycleRoot_id) {348return getDefaultComp(focusCycleRoot_id);349}350351protected String getLastComp(String focusCycleRoot_id) {352if ("jframe".equals(focusCycleRoot_id)) {353return "btn 4";354} else if ("jpanel".equals(focusCycleRoot_id)) {355return "btn 3";356}357return null;358}359}360361/*362* frame [ container(provider) [...] comp1(unfocusable) comp2 ]363* - getComponentBefore(<frame>, <comp2>) should return <container>'s last.364*/365class PolicyTest4 extends AbstractPolicyTest {366367protected Frame createFrame() {368JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));369jframe.setLayout(new FlowLayout());370371Container cont = (Container)registerComponent("jpanel", new JPanel());372cont.add(registerComponent("btn 1", new JButton("jbutton")));373cont.add(registerComponent("btn 2", new JButton("jbutton")));374jframe.add(cont);375376jframe.add(registerComponent("btn 3", new JButton("jbutton")));377jframe.add(registerComponent("btn 4", new JButton("jbutton")));378379return jframe;380}381382protected void customizeHierarchy() {383((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());384((Container)getComponent("jpanel")).setFocusTraversalPolicyProvider(true);385((JButton)getComponent("btn 3")).setFocusable(false);386}387388protected Map<String, String> getBackwardOrder() {389Map<String, String> order = new HashMap<String, String>();390order.put("btn 4", "btn 2");391order.put("btn 2", "btn 1");392order.put("btn 1", "btn 4");393return order;394}395396// no testing397protected Map<String, String> getForwardOrder() {398return null;399}400protected String[] getContainersToTest() {401return null;402}403protected String getDefaultComp(String focusCycleRoot_id) {404return null;405}406protected String getFirstComp(String focusCycleRoot_id) {407return null;408}409protected String getLastComp(String focusCycleRoot_id) {410return null;411}412}413414/*415* frame [ container(root) [...] comp1(unfocusable) comp2 ]416* - getComponentBefore(<frame>, <comp2>) should return <container>'s default.417*/418class PolicyTest5 extends AbstractPolicyTest {419420protected Frame createFrame() {421JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));422jframe.setLayout(new FlowLayout());423424Container cont = (Container)registerComponent("jpanel", new JPanel());425cont.add(registerComponent("btn 1", new JButton("jbutton")));426cont.add(registerComponent("btn 2", new JButton("jbutton")));427jframe.add(cont);428429jframe.add(registerComponent("btn 3", new JButton("jbutton")));430jframe.add(registerComponent("btn 4", new JButton("jbutton")));431432return jframe;433}434435protected void customizeHierarchy() {436((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());437((Container)getComponent("jpanel")).setFocusCycleRoot(true);438((JButton)getComponent("btn 3")).setFocusable(false);439}440441protected Map<String, String> getBackwardOrder() {442Map<String, String> order = new HashMap<String, String>();443order.put("btn 4", "btn 1");444order.put("btn 2", "btn 1");445order.put("btn 1", "btn 2");446return order;447}448449// no testing450protected Map<String, String> getForwardOrder() {451return null;452}453protected String[] getContainersToTest() {454return null;455}456protected String getDefaultComp(String focusCycleRoot_id) {457return null;458}459protected String getFirstComp(String focusCycleRoot_id) {460return null;461}462protected String getLastComp(String focusCycleRoot_id) {463return null;464}465}466467/*468* frame [ comp container(provider)(focusable) [...] comp ]469* - transfering focus through a focusable provider.470*/471class PolicyTest6 extends AbstractPolicyTest {472473protected Frame createFrame() {474JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));475jframe.setLayout(new FlowLayout());476477jframe.add(registerComponent("btn 1", new JButton("jbutton")));478479Container cont = (Container)registerComponent("jpanel", new JPanel());480cont.add(registerComponent("btn 2", new JButton("jbutton")));481cont.add(registerComponent("btn 3", new JButton("jbutton")));482jframe.add(cont);483484jframe.add(registerComponent("btn 4", new JButton("jbutton")));485486return jframe;487}488489protected void customizeHierarchy() {490((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());491((Container)getComponent("jpanel")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {492public Component getDefaultComponent(Container aContainer) {493return getComponent("btn 2");494}495});496((Container)getComponent("jpanel")).setFocusTraversalPolicyProvider(true);497((Container)getComponent("jpanel")).setFocusable(true);498}499500protected Map<String, String> getForwardOrder() {501Map<String, String> order = new HashMap<String, String>();502order.put("jframe", "btn 1");503order.put("btn 1", "jpanel");504order.put("btn 2", "btn 3");505order.put("btn 3", "btn 4");506order.put("btn 4", "btn 1");507order.put("jpanel", "btn 2");508return order;509}510511protected Map<String, String> getBackwardOrder() {512Map<String, String> order = new HashMap<String, String>();513order.put("btn 4", "btn 3");514order.put("btn 3", "btn 2");515order.put("btn 2", "jpanel");516order.put("btn 1", "btn 4");517order.put("jpanel", "btn 1");518return order;519}520521protected String[] getContainersToTest() {522return new String[] {"jpanel"};523}524525protected String getDefaultComp(String focusCycleRoot_id) {526return "btn 2";527}528529protected String getFirstComp(String focusCycleRoot_id) {530return "jpanel";531}532533protected String getLastComp(String focusCycleRoot_id) {534return "btn 3";535}536}537538/*539* frame [ comp container(root)(focusable) [...] comp ]540* - transfering focus through a focusable root.541*/542class PolicyTest7 extends AbstractPolicyTest {543544protected Frame createFrame() {545JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));546jframe.setLayout(new FlowLayout());547548jframe.add(registerComponent("btn 1", new JButton("jbutton")));549550Container cont = (Container)registerComponent("jpanel", new JPanel());551cont.add(registerComponent("btn 2", new JButton("jbutton")));552cont.add(registerComponent("btn 3", new JButton("jbutton")));553jframe.add(cont);554555jframe.add(registerComponent("btn 4", new JButton("jbutton")));556557return jframe;558}559560protected void customizeHierarchy() {561((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());562((Container)getComponent("jpanel")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {563public Component getDefaultComponent(Container aContainer) {564return getComponent("btn 2");565}566});567((Container)getComponent("jpanel")).setFocusCycleRoot(true);568((Container)getComponent("jpanel")).setFocusable(true);569}570571protected Map<String, String> getForwardOrder() {572Map<String, String> order = new HashMap<String, String>();573order.put("jframe", "btn 1");574order.put("btn 1", "jpanel");575order.put("btn 2", "btn 3");576order.put("btn 3", "jpanel");577order.put("btn 4", "btn 1");578order.put("jpanel", "btn 2");579return order;580}581582protected Map<String, String> getBackwardOrder() {583Map<String, String> order = new HashMap<String, String>();584order.put("btn 4", "btn 2");585order.put("btn 3", "btn 2");586order.put("btn 2", "jpanel");587order.put("btn 1", "btn 4");588order.put("jpanel", "btn 1");589return order;590}591592protected String[] getContainersToTest() {593return new String[] {"jpanel"};594}595596protected String getDefaultComp(String focusCycleRoot_id) {597return "btn 2";598}599600protected String getFirstComp(String focusCycleRoot_id) {601return "jpanel";602}603604protected String getLastComp(String focusCycleRoot_id) {605return "btn 3";606}607}608609/*610* frame [ comp1 comp2 container1(provider) [...] container2(root) [...] ]611* - verifies a case when a provider is followed by a root.612*/613class PolicyTest8 extends AbstractPolicyTest {614615protected Frame createFrame() {616JFrame jframe = (JFrame) registerComponent("frame", new JFrame("Test Frame"));617jframe.setLayout(new FlowLayout());618619jframe.add(registerComponent("btn-1", new JButton("jbutton")));620jframe.add(registerComponent("btn-2", new JButton("jbutton")));621622Container cont1 = (Container)registerComponent("panel-1", new JPanel());623cont1.add(registerComponent("btn-3", new JButton("jbutton")));624cont1.add(registerComponent("btn-4", new JButton("jbutton")));625cont1.add(registerComponent("btn-5", new JButton("jbutton")));626627Container cont2 = (Container)registerComponent("panel-2", new JPanel());628cont2.add(registerComponent("btn-6", new JButton("jbutton")));629cont2.add(registerComponent("btn-7", new JButton("jbutton")));630cont2.add(registerComponent("btn-8", new JButton("jbutton")));631632jframe.add(cont1);633jframe.add(cont2);634635return jframe;636}637638protected void customizeHierarchy() {639((Container)getComponent("panel-1")).setFocusTraversalPolicyProvider(true);640((Container)getComponent("panel-1")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {641public Component getDefaultComponent(Container aContainer) {642return getComponent("btn-4");643}644});645646((Container)getComponent("panel-2")).setFocusCycleRoot(true);647((Container)getComponent("panel-2")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {648public Component getDefaultComponent(Container aContainer) {649return getComponent("btn-7");650}651});652}653654protected Map<String, String> getForwardOrder() {655Map<String, String> order = new HashMap<String, String>();656order.put("frame", "btn-1");657order.put("btn-1", "btn-2");658order.put("btn-2", "btn-4");659order.put("btn-3", "btn-4");660order.put("btn-4", "btn-5");661order.put("btn-5", "btn-7");662order.put("btn-6", "btn-7");663order.put("btn-7", "btn-8");664order.put("btn-8", "btn-6");665order.put("panel-1", "btn-4");666order.put("panel-2", "btn-7");667return order;668}669670protected Map<String, String> getBackwardOrder() {671Map<String, String> order = new HashMap<String, String>();672order.put("btn-1", "btn-5");673order.put("btn-2", "btn-1");674order.put("btn-3", "btn-2");675order.put("btn-4", "btn-3");676order.put("btn-5", "btn-4");677order.put("btn-6", "btn-8");678order.put("btn-7", "btn-6");679order.put("btn-8", "btn-7");680return order;681}682683protected String[] getContainersToTest() {684return new String[] {"frame", "panel-1", "panel-2"};685}686687protected String getDefaultComp(String focusCycleRoot_id) {688if ("frame".equals(focusCycleRoot_id)) {689return "btn-1";690} else if ("panel-1".equals(focusCycleRoot_id)) {691return "btn-4";692} else if ("panel-2".equals(focusCycleRoot_id)) {693return "btn-7";694}695return null;696}697698protected String getFirstComp(String focusCycleRoot_id) {699if ("frame".equals(focusCycleRoot_id)) {700return "btn-1";701} else if ("panel-1".equals(focusCycleRoot_id)) {702return "btn-3";703} else if ("panel-2".equals(focusCycleRoot_id)) {704return "btn-6";705}706return null;707}708709protected String getLastComp(String focusCycleRoot_id) {710if ("frame".equals(focusCycleRoot_id)) {711return "btn-5";712} else if ("panel-1".equals(focusCycleRoot_id)) {713return "btn-5";714} else if ("panel-2".equals(focusCycleRoot_id)) {715return "btn-8";716}717return null;718}719}720721/*722* frame [ comp1 comp2 container1(root) [...] container2(provider) [...] ]723* - verifies a case when a root is followed by a provider.724*/725class PolicyTest9 extends AbstractPolicyTest {726727protected Frame createFrame() {728JFrame jframe = (JFrame) registerComponent("frame", new JFrame("Test Frame"));729jframe.setLayout(new FlowLayout());730731jframe.add(registerComponent("btn-1", new JButton("jbutton")));732jframe.add(registerComponent("btn-2", new JButton("jbutton")));733734Container cont1 = (Container)registerComponent("panel-1", new JPanel());735cont1.add(registerComponent("btn-3", new JButton("jbutton")));736cont1.add(registerComponent("btn-4", new JButton("jbutton")));737cont1.add(registerComponent("btn-5", new JButton("jbutton")));738739Container cont2 = (Container)registerComponent("panel-2", new JPanel());740cont2.add(registerComponent("btn-6", new JButton("jbutton")));741cont2.add(registerComponent("btn-7", new JButton("jbutton")));742cont2.add(registerComponent("btn-8", new JButton("jbutton")));743744jframe.add(cont1);745jframe.add(cont2);746747return jframe;748}749750protected void customizeHierarchy() {751((Container)getComponent("panel-1")).setFocusCycleRoot(true);752((Container)getComponent("panel-1")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {753public Component getDefaultComponent(Container aContainer) {754return getComponent("btn-4");755}756});757758((Container)getComponent("panel-2")).setFocusTraversalPolicyProvider(true);759((Container)getComponent("panel-2")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {760public Component getDefaultComponent(Container aContainer) {761return getComponent("btn-7");762}763});764}765766protected Map<String, String> getForwardOrder() {767Map<String, String> order = new HashMap<String, String>();768order.put("frame", "btn-1");769order.put("btn-1", "btn-2");770order.put("btn-2", "btn-4");771order.put("btn-3", "btn-4");772order.put("btn-4", "btn-5");773order.put("btn-5", "btn-3");774order.put("btn-6", "btn-7");775order.put("btn-7", "btn-8");776order.put("btn-8", "btn-1");777order.put("panel-1", "btn-4");778order.put("panel-2", "btn-7");779return order;780}781782protected Map<String, String> getBackwardOrder() {783Map<String, String> order = new HashMap<String, String>();784order.put("btn-1", "btn-8");785order.put("btn-2", "btn-1");786order.put("btn-3", "btn-5");787order.put("btn-4", "btn-3");788order.put("btn-5", "btn-4");789order.put("btn-6", "btn-4");790order.put("btn-7", "btn-6");791order.put("btn-8", "btn-7");792return order;793}794795protected String[] getContainersToTest() {796return new String[] {"frame", "panel-1", "panel-2"};797}798799protected String getDefaultComp(String focusCycleRoot_id) {800if ("frame".equals(focusCycleRoot_id)) {801return "btn-1";802} else if ("panel-1".equals(focusCycleRoot_id)) {803return "btn-4";804} else if ("panel-2".equals(focusCycleRoot_id)) {805return "btn-7";806}807return null;808}809810protected String getFirstComp(String focusCycleRoot_id) {811if ("frame".equals(focusCycleRoot_id)) {812return "btn-1";813} else if ("panel-1".equals(focusCycleRoot_id)) {814return "btn-3";815} else if ("panel-2".equals(focusCycleRoot_id)) {816return "btn-6";817}818return null;819}820821protected String getLastComp(String focusCycleRoot_id) {822if ("frame".equals(focusCycleRoot_id)) {823return "btn-8";824} else if ("panel-1".equals(focusCycleRoot_id)) {825return "btn-5";826} else if ("panel-2".equals(focusCycleRoot_id)) {827return "btn-8";828}829return null;830}831}832833/*834* frame [ container0 [...] container1(root) [ comp1 comp2 container2(provider) [...] ] ]835* - verifies a case when a provider is nested in a root.836*/837class PolicyTest10 extends AbstractPolicyTest {838839protected Frame createFrame() {840JFrame jframe = (JFrame) registerComponent("frame", new JFrame("Test Frame"));841jframe.setLayout(new GridLayout(2, 1));842843Container cont0 = new JPanel();844cont0.add(registerComponent("btn-1", new JButton("jbutton")));845cont0.add(registerComponent("btn-2", new JButton("jbutton")));846847Container cont1 = (Container)registerComponent("panel-1", new JPanel());848cont1.add(registerComponent("btn-3", new JButton("jbutton")));849cont1.add(registerComponent("btn-4", new JButton("jbutton")));850851Container cont2 = (Container)registerComponent("panel-2", new JPanel());852cont2.add(registerComponent("btn-5", new JButton("jbutton")));853cont2.add(registerComponent("btn-6", new JButton("jbutton")));854855cont1.add(cont2);856jframe.add(cont0);857jframe.add(cont1);858859return jframe;860}861862protected void customizeHierarchy() {863((Container)getComponent("panel-1")).setFocusCycleRoot(true);864((Container)getComponent("panel-1")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {865public Component getDefaultComponent(Container aContainer) {866return getComponent("panel-2");867}868});869((Container)getComponent("panel-2")).setFocusTraversalPolicyProvider(true);870((Container)getComponent("panel-2")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());871}872873protected Map<String, String> getForwardOrder() {874Map<String, String> order = new HashMap<String, String>();875order.put("frame", "btn-1");876order.put("btn-1", "btn-2");877order.put("btn-2", "panel-2");878order.put("btn-3", "btn-4");879order.put("btn-4", "btn-5");880order.put("btn-5", "btn-6");881order.put("btn-6", "btn-3");882order.put("panel-1", "panel-2");883order.put("panel-2", "btn-5");884return order;885}886887protected Map<String, String> getBackwardOrder() {888Map<String, String> order = new HashMap<String, String>();889order.put("btn-1", "btn-2");890order.put("btn-2", "btn-1");891order.put("btn-3", "btn-6");892order.put("btn-4", "btn-3");893order.put("btn-5", "btn-4");894order.put("btn-6", "btn-5");895return order;896}897898protected String[] getContainersToTest() {899return new String[] {"frame", "panel-1", "panel-2"};900}901902protected String getDefaultComp(String focusCycleRoot_id) {903if ("frame".equals(focusCycleRoot_id)) {904return "btn-1";905} else if ("panel-1".equals(focusCycleRoot_id)) {906return "panel-2";907} else if ("panel-2".equals(focusCycleRoot_id)) {908return "btn-5";909}910return null;911}912913protected String getFirstComp(String focusCycleRoot_id) {914if ("frame".equals(focusCycleRoot_id)) {915return "btn-1";916} else if ("panel-1".equals(focusCycleRoot_id)) {917return "btn-3";918} else if ("panel-2".equals(focusCycleRoot_id)) {919return "btn-5";920}921return null;922}923924protected String getLastComp(String focusCycleRoot_id) {925if ("frame".equals(focusCycleRoot_id)) {926return "btn-2";927} else {928return "btn-6";929}930}931}932933/*934* frame [ container(root) [...] comp ]935* - getDefaultComponent(<frame>) should implicitly down-cycle into the <container>.936* - getFirstComponent(<frame>) should implicitly down-cycle into the <container>.937*/938class PolicyTest11 extends AbstractPolicyTest {939protected Frame createFrame() {940JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));941jframe.setLayout(new FlowLayout());942943Container cont = (Container)registerComponent("jpanel", new JPanel());944cont.add(registerComponent("btn-1", new JButton("jbutton")));945cont.add(registerComponent("btn-2", new JButton("jbutton")));946947jframe.add(cont);948jframe.add(registerComponent("btn-3", new JButton("jbutton")));949950return jframe;951}952953protected void customizeHierarchy() {954((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());955((Container)getComponent("jpanel")).setFocusCycleRoot(true);956}957958protected Map<String, String> getForwardOrder() {959Map<String, String> order = new HashMap<String, String>();960order.put("jframe", "btn-1");961order.put("btn-1", "btn-2");962order.put("btn-2", "btn-1");963order.put("btn-3", "btn-1");964return order;965}966967protected Map<String, String> getBackwardOrder() {968Map<String, String> order = new HashMap<String, String>();969order.put("btn-3", "btn-1");970order.put("btn-2", "btn-1");971order.put("btn-1", "btn-2");972order.put("jframe", "btn-3");973return order;974}975976protected String[] getContainersToTest() {977return new String[] {"jframe"};978}979980protected String getDefaultComp(String focusCycleRoot_id) {981return "btn-1";982}983984protected String getFirstComp(String focusCycleRoot_id) {985return "btn-1";986}987988protected String getLastComp(String focusCycleRoot_id) {989return "btn-3";990}991}992993994