1 /*
   2  * Copyright (c) 2014, 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. Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package javafx.scene.control.test.cell;
  26 
  27 import client.test.Smoke;
  28 import com.sun.javafx.scene.control.LabeledText;
  29 import java.util.Map;
  30 import javafx.collections.FXCollections;
  31 import javafx.collections.ObservableList;
  32 import javafx.scene.Node;
  33 import javafx.scene.control.TableCell;
  34 import javafx.scene.control.TableView;
  35 import javafx.scene.control.TextField;
  36 import javafx.scene.control.test.cellapps.CellsApp.CellType;
  37 import javafx.scene.control.test.cellapps.CellsApp.DataItem;
  38 import javafx.scene.control.test.cellapps.TableCellsApp;
  39 import org.jemmy.action.GetAction;
  40 import org.jemmy.control.Wrap;
  41 import org.jemmy.env.Timeout;
  42 import org.jemmy.fx.ByID;
  43 import org.jemmy.fx.Root;
  44 import org.jemmy.interfaces.*;
  45 import org.jemmy.lookup.Lookup;
  46 import org.jemmy.lookup.LookupCriteria;
  47 import org.jemmy.timing.State;
  48 import org.jemmy.timing.Waiter;
  49 import org.junit.Before;
  50 import org.junit.BeforeClass;
  51 import org.junit.Test;
  52 import org.junit.runner.RunWith;
  53 import test.javaclient.shared.FilteredTestRunner;
  54 
  55 @RunWith(FilteredTestRunner.class)
  56 public class TableCellsTest extends TreeTableCellsTest {
  57 
  58     @BeforeClass
  59     public static void setUpClass() throws Exception {
  60         TableCellsApp.main(null);
  61     }
  62 
  63     @Before
  64     @Override
  65     public void tableSetUpClass() throws Exception {
  66         updateWraps();
  67         testedControl = parent.lookup(TableView.class, new ByID<TableView>(TableCellsApp.TABLE_VIEW_ID)).wrap();
  68         cellID = TableCellsApp.TABLE_EDIT_ID;
  69         choiceID = TableCellsApp.TABLE_FACTORY_CHOICE_ID;
  70     }
  71 
  72     @Override
  73     protected Wrap select(final String data) {
  74         Wrap wrap = testedControl.as(Table.class, DataItem.class).lookup(new LookupCriteria<DataItem>() {
  75             public boolean check(DataItem tableData) {
  76                 return tableData.toString().contains(data);
  77             }
  78         }).wrap();
  79         wrap.mouse().click();
  80         return wrap;
  81     }
  82 
  83     /**
  84      * Content of tableView can be stored
  85      */
  86     @Smoke
  87     @Test(timeout = 300000)
  88     public void MapCellFactoryTest() {
  89         doFactoryChange(CellType.MapValue);
  90         testedControl = parent.lookup(TableView.class, new ByID<TableView>(TableCellsApp.TABLE_VIEW_ID)).wrap();
  91         Lookup lookup = testedControl.as(Parent.class, Node.class).lookup(new LookupCriteria<Node>() {
  92             public boolean check(Node cntrl) {
  93                 if ((cntrl instanceof LabeledText) && (((LabeledText) cntrl).getText().equals(TableCellsApp.ContentOfMaps.get(0)))) {
  94                     return true;
  95                 }
  96                 return false;
  97             }
  98         });
  99         lookup.wrap(0).mouse().click();
 100         lookup.wrap(0).mouse().click();
 101         Lookup lookupOfTextField = testedControl.as(Parent.class, Node.class).lookup(new LookupCriteria<Node>() {
 102             public boolean check(Node cntrl) {
 103                 if (cntrl instanceof TextField) {
 104                     return true;
 105                 }
 106                 return false;
 107             }
 108         });
 109         Wrap<? extends TextField> wrap = ((Wrap<? extends TextField>) lookupOfTextField.wrap(0));
 110         wrap.keyboard().pushKey(Keyboard.KeyboardButtons.HOME);
 111         wrap.keyboard().pushKey(Keyboard.KeyboardButtons.END, Keyboard.KeyboardModifiers.SHIFT_DOWN_MASK);
 112         wrap.keyboard().pushKey(Keyboard.KeyboardButtons.DELETE);
 113 
 114         final String newValue = "NewValue";
 115         wrap.as(Text.class).type(newValue);
 116         wrap.keyboard().pushKey(Keyboard.KeyboardButtons.ENTER);
 117         new Waiter(new Timeout("", 2000)).ensureState(new State() {
 118             public Object reached() {
 119                 if (new GetAction<String>() {
 120                     @Override
 121                     public void run(Object... os) throws Exception {
 122                         setResult(((Map<String, String>) ((TableView) testedControl.getControl()).getItems().get(0)).get(TableCellsApp.Column1MapKey));
 123                     }
 124                 }.dispatch(Root.ROOT.getEnvironment()).equals(newValue)) {
 125                     return true;
 126                 } else {
 127                     return null;
 128                 }
 129             }
 130         });
 131 
 132         new Waiter(new Timeout("", 2000)).ensureState(new State() {
 133             public Object reached() {
 134                 final Wrap<? extends TableCell> tableCell = javafx.scene.control.test.tableview.TestBaseCommon.getCellWrap(testedControl, 0, 0);
 135                 if (new GetAction<String>() {
 136                     @Override
 137                     public void run(Object... os) throws Exception {
 138                         setResult((String) tableCell.getControl().getItem());
 139                     }
 140                 }.dispatch(Root.ROOT.getEnvironment()).equals(newValue)) {
 141                     return true;
 142                 } else {
 143                     return null;
 144                 }
 145             }
 146         });
 147     }
 148 
 149     @Override
 150     protected ObservableList<DataItem> getCurrentProgramValues() {
 151         return new GetAction<ObservableList<DataItem>>() {
 152             @Override
 153             public void run(Object... os) throws Exception {
 154                 setResult(FXCollections.observableArrayList(((TableView) testedControl.getControl()).getItems()));
 155             }
 156         }.dispatch(testedControl.getEnvironment());
 157     }
 158 }