changeset 3993:4745de498683

More javafx.scene.control.cell unit tests.
author jgiles
date Mon, 17 Jun 2013 15:03:39 +1200
parents 8064c39125c9
children 00820f6d9333 39ed875879a8
files javafx-ui-controls/src/javafx/scene/control/cell/ChoiceBoxListCell.java javafx-ui-controls/src/javafx/scene/control/cell/ChoiceBoxTreeCell.java javafx-ui-controls/src/javafx/scene/control/cell/ComboBoxListCell.java javafx-ui-controls/src/javafx/scene/control/cell/ComboBoxTreeCell.java javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxListCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxTableCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxTreeCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxTreeTableCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxListCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxTableCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxTreeCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxTreeTableCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ProgressBarTableCellTest.java javafx-ui-controls/test/javafx/scene/control/cell/ProgressBarTreeTableCellTest.java
diffstat 14 files changed, 3168 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/javafx-ui-controls/src/javafx/scene/control/cell/ChoiceBoxListCell.java	Mon Jun 17 08:39:03 2013 +1200
+++ b/javafx-ui-controls/src/javafx/scene/control/cell/ChoiceBoxListCell.java	Mon Jun 17 15:03:39 2013 +1200
@@ -295,8 +295,11 @@
         choiceBox.getSelectionModel().select(getItem());
         
         super.startEdit();
-        setText(null);
-        setGraphic(choiceBox);
+
+        if (isEditing()) {
+            setText(null);
+            setGraphic(choiceBox);
+        }
     }
 
     /** {@inheritDoc} */
--- a/javafx-ui-controls/src/javafx/scene/control/cell/ChoiceBoxTreeCell.java	Mon Jun 17 08:39:03 2013 +1200
+++ b/javafx-ui-controls/src/javafx/scene/control/cell/ChoiceBoxTreeCell.java	Mon Jun 17 15:03:39 2013 +1200
@@ -293,6 +293,12 @@
         if (! isEditable() || ! getTreeView().isEditable()) {
             return;
         }
+
+        TreeItem<T> treeItem = getTreeItem();
+        if (treeItem == null) {
+            return;
+        }
+
         if (choiceBox == null) {
             choiceBox = createChoiceBox(this, items);
         }
@@ -300,17 +306,20 @@
             hbox = new HBox(CellUtils.TREE_VIEW_HBOX_GRAPHIC_PADDING);
         }
         
-        choiceBox.getSelectionModel().select(getTreeItem().getValue());
+        choiceBox.getSelectionModel().select(treeItem.getValue());
         
         super.startEdit();
-        setText(null);
-        
-        Node graphic = getTreeItemGraphic();
-        if (graphic != null) {
-            hbox.getChildren().setAll(graphic, choiceBox);
-            setGraphic(hbox);
-        } else {
-            setGraphic(choiceBox);
+
+        if (isEditing()) {
+            setText(null);
+
+            Node graphic = getTreeItemGraphic();
+            if (graphic != null) {
+                hbox.getChildren().setAll(graphic, choiceBox);
+                setGraphic(hbox);
+            } else {
+                setGraphic(choiceBox);
+            }
         }
     }
 
--- a/javafx-ui-controls/src/javafx/scene/control/cell/ComboBoxListCell.java	Mon Jun 17 08:39:03 2013 +1200
+++ b/javafx-ui-controls/src/javafx/scene/control/cell/ComboBoxListCell.java	Mon Jun 17 15:03:39 2013 +1200
@@ -323,8 +323,11 @@
         comboBox.getSelectionModel().select(getItem());
         
         super.startEdit();
-        setText(null);
-        setGraphic(comboBox);
+
+        if (isEditing()) {
+            setText(null);
+            setGraphic(comboBox);
+        }
     }
 
     /** {@inheritDoc} */
--- a/javafx-ui-controls/src/javafx/scene/control/cell/ComboBoxTreeCell.java	Mon Jun 17 08:39:03 2013 +1200
+++ b/javafx-ui-controls/src/javafx/scene/control/cell/ComboBoxTreeCell.java	Mon Jun 17 15:03:39 2013 +1200
@@ -320,6 +320,12 @@
         if (! isEditable() || ! getTreeView().isEditable()) {
             return;
         }
+
+        TreeItem<T> treeItem = getTreeItem();
+        if (treeItem == null) {
+            return;
+        }
+
         if (comboBox == null) {
             comboBox = createComboBox(this, items, getConverter());
             comboBox.editableProperty().bind(comboBoxEditableProperty());
@@ -328,17 +334,20 @@
             hbox = new HBox(CellUtils.TREE_VIEW_HBOX_GRAPHIC_PADDING);
         }
         
-        comboBox.getSelectionModel().select(getTreeItem().getValue());
+        comboBox.getSelectionModel().select(treeItem.getValue());
         
         super.startEdit();
-        setText(null);
-        
-        Node graphic = CellUtils.getGraphic(getTreeItem());
-        if (graphic != null) {
-            hbox.getChildren().setAll(graphic, comboBox);
-            setGraphic(hbox);
-        } else {
-            setGraphic(comboBox);
+
+        if (isEditing()) {
+            setText(null);
+
+            Node graphic = CellUtils.getGraphic(treeItem);
+            if (graphic != null) {
+                hbox.getChildren().setAll(graphic, comboBox);
+                setGraphic(hbox);
+            } else {
+                setGraphic(comboBox);
+            }
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxListCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.ListCell;
+import javafx.scene.control.ListView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ChoiceBoxListCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<ListView<T>, ListCell<T>> forListView(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forListView_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forListView_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView();
+        
+        ListView<String> listView = new ListView<>();
+        ChoiceBoxListCell<String> cell = (ChoiceBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forListView_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView();
+        
+        ListView<String> listView = new ListView<>();
+        ChoiceBoxListCell<String> cell = (ChoiceBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<ListView<T>, ListCell<T>> forListView(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forListView_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forListView_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forListView_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView(items);
+
+        ListView<String> listView = new ListView<>();
+        ChoiceBoxListCell<String> cell = (ChoiceBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forListView_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<ListView<String>, ListCell<String>> cellFactory = ChoiceBoxListCell.forListView(items);
+
+        ListView<String> listView = new ListView<>();
+        ChoiceBoxListCell<String> cell = (ChoiceBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        assertTrue(cell.getStyleClass().contains("choice-box-list-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("choice-box-list-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+    /**************************************************************************
+     *
+     * editing tests
+     *
+     **************************************************************************/
+
+    // --- is Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsFalse_isEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(false);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateListView(listView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isEmpty() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_isEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateListView(listView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.setEditable(true);
+        cell.updateListView(listView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    // --- is Not Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsFalse_isNotEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(false);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isNotEmpty() {
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_isNotEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.setEditable(true);
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    // --- cancel edit
+    @Test public void test_cancelEdit() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+
+        cell.cancelEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxTableCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ChoiceBoxTableCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<TableColumn<T>, TableCell<T>> forTableColumn(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn();
+        
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ChoiceBoxTableCell<String,String> cell = (ChoiceBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn();
+
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ChoiceBoxTableCell<String,String> cell = (ChoiceBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TableColumn<T>, TableCell<T>> forTableColumn(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forTableColumn_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTableColumn_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTableColumn_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn(items);
+
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ChoiceBoxTableCell<String,String> cell = (ChoiceBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTableColumn_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ChoiceBoxTableCell.forTableColumn(items);
+
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ChoiceBoxTableCell<String,String> cell = (ChoiceBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        assertTrue(cell.getStyleClass().contains("choice-box-table-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("choice-box-table-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ChoiceBoxTableCell<Object, Object> cell = new ChoiceBoxTableCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+//    /**************************************************************************
+//     *
+//     * editing tests
+//     *
+//     **************************************************************************/
+//
+//    // --- is Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isEmpty() {
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    // --- is Not Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isNotEmpty() {
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    // --- cancel edit
+//    @Test public void test_cancelEdit() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTableCell<Object> cell = new ChoiceBoxTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//
+//        cell.cancelEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxTreeCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,349 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TreeCell;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ChoiceBoxTreeCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<TreeView<T>, TreeCell<T>> forTreeView(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTreeView_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTreeView_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView();
+        
+        TreeView<String> treeView = new TreeView<>();
+        ChoiceBoxTreeCell<String> cell = (ChoiceBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeView_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView();
+        
+        TreeView<String> treeView = new TreeView<>();
+        ChoiceBoxTreeCell<String> cell = (ChoiceBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TreeView<T>, TreeCell<T>> forTreeView(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forTreeView_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeView_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeView_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView(items);
+
+        TreeView<String> treeView = new TreeView<>();
+        ChoiceBoxTreeCell<String> cell = (ChoiceBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeView_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ChoiceBoxTreeCell.forTreeView(items);
+
+        TreeView<String> treeView = new TreeView<>();
+        ChoiceBoxTreeCell<String> cell = (ChoiceBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        assertTrue(cell.getStyleClass().contains("choice-box-tree-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("choice-box-tree-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+    /**************************************************************************
+     *
+     * editing tests
+     *
+     **************************************************************************/
+
+    // --- is Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsFalse_isEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(false);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_treeViewIsNull_isEmpty() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_isEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(true);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(true);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.setEditable(true);
+        cell.updateTreeView(treeView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    // --- is Not Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsFalse_isNotEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(false);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_treeViewIsNull_isNotEmpty() {
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_isNotEmpty() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+        cell.updateIndex(0);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.setEditable(true);
+        cell.updateTreeView(treeView);
+        cell.updateIndex(0);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    // --- cancel edit
+    @Test public void test_cancelEdit() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+
+        cell.updateIndex(0);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+
+        cell.cancelEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ChoiceBoxTreeTableCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableColumn;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ChoiceBoxTreeTableCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<TreeTableColumn<T>, TreeTableCell<T>> forTreeTableColumn(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn();
+        
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ChoiceBoxTreeTableCell<String,String> cell = (ChoiceBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn();
+
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ChoiceBoxTreeTableCell<String,String> cell = (ChoiceBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TreeTableColumn<T>, TreeTableCell<T>> forTreeTableColumn(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn(items);
+
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ChoiceBoxTreeTableCell<String,String> cell = (ChoiceBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ChoiceBoxTreeTableCell.forTreeTableColumn(items);
+
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ChoiceBoxTreeTableCell<String,String> cell = (ChoiceBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        assertTrue(cell.getStyleClass().contains("choice-box-tree-table-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("choice-box-tree-table-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ChoiceBoxTreeTableCell<Object, Object> cell = new ChoiceBoxTreeTableCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+//    /**************************************************************************
+//     *
+//     * editing tests
+//     *
+//     **************************************************************************/
+//
+//    // --- is Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isEmpty() {
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    // --- is Not Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isNotEmpty() {
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    // --- cancel edit
+//    @Test public void test_cancelEdit() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ChoiceBoxTreeTableCell<Object> cell = new ChoiceBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//
+//        cell.cancelEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxListCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.ListCell;
+import javafx.scene.control.ListView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ComboBoxListCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<ListView<T>, ListCell<T>> forListView(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forListView_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forListView_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView();
+        
+        ListView<String> listView = new ListView<>();
+        ComboBoxListCell<String> cell = (ComboBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forListView_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView();
+        
+        ListView<String> listView = new ListView<>();
+        ComboBoxListCell<String> cell = (ComboBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<ListView<T>, ListCell<T>> forListView(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forListView_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forListView_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forListView_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView(items);
+
+        ListView<String> listView = new ListView<>();
+        ComboBoxListCell<String> cell = (ComboBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forListView_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<ListView<String>, ListCell<String>> cellFactory = ComboBoxListCell.forListView(items);
+
+        ListView<String> listView = new ListView<>();
+        ComboBoxListCell<String> cell = (ComboBoxListCell<String>)cellFactory.call(listView);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        assertTrue(cell.getStyleClass().contains("combo-box-list-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("combo-box-list-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+    /**************************************************************************
+     *
+     * editing tests
+     *
+     **************************************************************************/
+
+    // --- is Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsFalse_isEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(false);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateListView(listView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isEmpty() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_isEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateListView(listView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.setEditable(true);
+        cell.updateListView(listView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    // --- is Not Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsFalse_isNotEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(false);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isNotEmpty() {
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_isNotEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.setEditable(true);
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    // --- cancel edit
+    @Test public void test_cancelEdit() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+
+        cell.cancelEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxTableCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,345 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ComboBoxTableCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<TableColumn<T>, TableCell<T>> forTableColumn(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn();
+        
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ComboBoxTableCell<String,String> cell = (ComboBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn();
+
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ComboBoxTableCell<String,String> cell = (ComboBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TableColumn<T>, TableCell<T>> forTableColumn(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forTableColumn_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTableColumn_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTableColumn_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn(items);
+
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ComboBoxTableCell<String,String> cell = (ComboBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTableColumn_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TableColumn<String,String>, TableCell<String,String>> cellFactory = ComboBoxTableCell.forTableColumn(items);
+
+        TableColumn<String,String> tableColumn = new TableColumn<>();
+        ComboBoxTableCell<String,String> cell = (ComboBoxTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        assertTrue(cell.getStyleClass().contains("combo-box-table-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("combo-box-table-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ComboBoxTableCell<Object, Object> cell = new ComboBoxTableCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+//    /**************************************************************************
+//     *
+//     * editing tests
+//     *
+//     **************************************************************************/
+//
+//    // --- is Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isEmpty() {
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    // --- is Not Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isNotEmpty() {
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    // --- cancel edit
+//    @Test public void test_cancelEdit() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTableCell<Object> cell = new ComboBoxTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//
+//        cell.cancelEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxTreeCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,349 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TreeCell;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ComboBoxTreeCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<TreeView<T>, TreeCell<T>> forTreeView(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTreeView_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTreeView_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView();
+        
+        TreeView<String> treeView = new TreeView<>();
+        ComboBoxTreeCell<String> cell = (ComboBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeView_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView();
+        
+        TreeView<String> treeView = new TreeView<>();
+        ComboBoxTreeCell<String> cell = (ComboBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TreeView<T>, TreeCell<T>> forTreeView(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forTreeView_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeView_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeView_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView(items);
+
+        TreeView<String> treeView = new TreeView<>();
+        ComboBoxTreeCell<String> cell = (ComboBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeView_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeView<String>, TreeCell<String>> cellFactory = ComboBoxTreeCell.forTreeView(items);
+
+        TreeView<String> treeView = new TreeView<>();
+        ComboBoxTreeCell<String> cell = (ComboBoxTreeCell<String>)cellFactory.call(treeView);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        assertTrue(cell.getStyleClass().contains("combo-box-tree-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("combo-box-tree-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+    /**************************************************************************
+     *
+     * editing tests
+     *
+     **************************************************************************/
+
+    // --- is Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsFalse_isEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(false);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_treeViewIsNull_isEmpty() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_isEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(true);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(true);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.setEditable(true);
+        cell.updateTreeView(treeView);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    // --- is Not Empty
+    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(false);
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsFalse_isNotEmpty() {
+        TreeView treeView = new TreeView();
+        treeView.setEditable(false);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+        cell.updateItem("TEST", false);
+
+        cell.startEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void test_startEdit_cellEditableIsTrue_treeViewIsNull_isNotEmpty() {
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateItem("TEST", false);
+        cell.setEditable(true);
+        cell.startEdit();
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_isNotEmpty() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+        cell.updateIndex(0);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    @Test public void test_startEdit_treeViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.setEditable(true);
+        cell.updateTreeView(treeView);
+        cell.updateIndex(0);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+    }
+
+    // --- cancel edit
+    @Test public void test_cancelEdit() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+
+        cell.updateIndex(0);
+
+        cell.startEdit();
+        assertTrue(cell.isEditing());
+        assertNotNull(cell.getGraphic());
+
+        cell.cancelEdit();
+        assertFalse(cell.isEditing());
+        assertNull(cell.getGraphic());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ComboBoxTreeTableCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableColumn;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ComboBoxTreeTableCellTest {
+    
+    private StringConverter<Object> converter;
+    
+    @Before public void setup() {
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    /**************************************************************************
+     * 
+     * Test for public static Callback<TreeTableColumn<T>, TreeTableCell<T>> forTreeTableColumn(T... items)
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellFactoryIsNotNull() {
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellFactoryCreatesCells() {
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn();
+        
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ComboBoxTreeTableCell<String,String> cell = (ComboBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellHasNonNullStringConverter() {
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn();
+
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ComboBoxTreeTableCell<String,String> cell = (ComboBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TreeTableColumn<T>, TreeTableCell<T>> forTreeTableColumn(
+     *       final ObservableList<T> items)
+     * 
+     **************************************************************************/
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureSuccessWhenItemsIsNull() {
+        ObservableList<String> items = null;
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureCellFactoryIsNotNull() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn(items);
+        assertNotNull(cellFactory);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureCellFactoryCreatesCells() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn(items);
+
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ComboBoxTreeTableCell<String,String> cell = (ComboBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    @Test public void testStatic_forTreeTableColumn_items_ensureCellHasNonNullStringConverter() {
+        ObservableList<String> items = FXCollections.emptyObservableList();
+        Callback<TreeTableColumn<String,String>, TreeTableCell<String,String>> cellFactory = ComboBoxTreeTableCell.forTreeTableColumn(items);
+
+        TreeTableColumn<String,String> tableColumn = new TreeTableColumn<>();
+        ComboBoxTreeTableCell<String,String> cell = (ComboBoxTreeTableCell<String,String>)cellFactory.call(tableColumn);
+        assertNotNull(cell.getConverter());
+    }
+
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    @Test public void testConstructor_noArgs_defaultStringConverterIsNotNull() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        assertTrue(cell.getStyleClass().contains("combo-box-tree-table-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsNull() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for one-arg constructor
+     * 
+     **************************************************************************/
+    
+    @Test public void testConstructor_converter_defaultStringConverterIsNotNull() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>(converter);
+        assertNotNull(cell.getConverter());
+    }
+    
+    @Test public void testConstructor_converter_defaultStyleClass() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>(converter);
+        assertTrue(cell.getStyleClass().contains("combo-box-tree-table-cell"));
+    }
+    
+    @Test public void testConstructor_converter_defaultGraphicIsACheckBox() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>(converter);
+        assertNull(cell.getGraphic());
+    }
+    
+    
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        cell.updateItem("TEST", true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nullConverter() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        cell.setConverter(null);
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("TEST", cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_textIsNotNull_nonNullConverter() {
+        ComboBoxTreeTableCell<Object, Object> cell = new ComboBoxTreeTableCell<>();
+        cell.setConverter(
+                new StringConverter<Object>() {
+                    @Override public Object fromString(String string) {
+                        return null;
+                    }
+
+                    @Override public String toString(Object object) {
+                        return "CONVERTED";
+                    }
+                });
+        cell.updateItem("TEST", false);
+        assertNotNull(cell.getText());
+        assertEquals("CONVERTED", cell.getText());
+    }
+
+
+//    /**************************************************************************
+//     *
+//     * editing tests
+//     *
+//     **************************************************************************/
+//
+//    // --- is Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isEmpty() {
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isEmpty() {
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    // --- is Not Empty
+//    @Test public void test_startEdit_cellEditableIsFalse_isNotEmpty() {
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(false);
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsFalse_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(false);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+//
+//    @Test(expected = NullPointerException.class)
+//    public void test_startEdit_cellEditableIsTrue_listViewIsNull_isNotEmpty() {
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateItem("TEST", false);
+//        cell.setEditable(true);
+//        cell.startEdit();
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    @Test public void test_startEdit_listViewEditableIsTrue_cellEditableIsTrue_isNotEmpty() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.setEditable(true);
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//    }
+//
+//    // --- cancel edit
+//    @Test public void test_cancelEdit() {
+//        TableView listView = new TableView();
+//        listView.setEditable(true);
+//        ComboBoxTreeTableCell<Object> cell = new ComboBoxTreeTableCell<>();
+//        cell.updateTableView(listView);
+//        cell.updateItem("TEST", false);
+//
+//        cell.startEdit();
+//        assertTrue(cell.isEditing());
+//        assertNotNull(cell.getGraphic());
+//
+//        cell.cancelEdit();
+//        assertFalse(cell.isEditing());
+//        assertNull(cell.getGraphic());
+//    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ProgressBarTableCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.ProgressBar;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ProgressBarTableCellTest {
+    
+    private SimpleBooleanProperty booleanProperty;
+    private Callback<Integer, ObservableValue<Boolean>> callback;
+    private StringConverter<Object> converter;
+    private TableView<Object> tableView;
+    private TableColumn<Object, Object> tableColumn;
+    
+    @Before public void setup() {
+        tableView = new TableView<>();
+        tableColumn = new TableColumn<>();
+        booleanProperty = new SimpleBooleanProperty(false);
+        callback = new Callback<Integer, ObservableValue<Boolean>>() {
+            public ObservableValue<Boolean> call(Integer param) {
+                return booleanProperty;
+            }
+        };
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+            
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    private void setTableViewAndTableColumn(TableCell cell) {
+        cell.updateTableView(tableView);
+        cell.updateTableColumn(tableColumn);
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TableColumn<S,Double>, TableCell<T,Double>> forTableColumn()
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellFactoryIsNotNull() {
+        assertFalse(booleanProperty.get());
+        Callback<TableColumn<Object, Double>, TableCell<Object, Double>> cellFactory = ProgressBarTableCell.forTableColumn();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTableColumn_noArgs_ensureCellFactoryCreatesCells() {
+        assertFalse(booleanProperty.get());
+        Callback<TableColumn<Object, Double>, TableCell<Object, Double>> cellFactory = ProgressBarTableCell.forTableColumn();
+        
+        TableColumn tableColumn = new TableColumn<>();
+        ProgressBarTableCell<Object> cell = (ProgressBarTableCell<Object>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ProgressBarTableCell<Object> cell = new ProgressBarTableCell<>();
+        assertTrue(cell.getStyleClass().contains("progress-bar-table-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsAProgressBar() {
+        ProgressBarTableCell<Object> cell = new ProgressBarTableCell<>();
+        assertTrue(cell.getGraphic() instanceof ProgressBar);
+    }
+
+
+
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ProgressBarTableCell<Object> cell = new ProgressBarTableCell<>();
+        cell.updateItem(0.5, true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ProgressBarTableCell<Object> cell = new ProgressBarTableCell<>();
+        cell.updateItem(0.5, true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_graphicIsNotNull() {
+        ProgressBarTableCell<Object> cell = new ProgressBarTableCell<>();
+        setTableViewAndTableColumn(cell);
+        cell.updateItem(0.5, false);
+        assertNotNull(cell.getGraphic());
+        assertTrue(cell.getGraphic() instanceof ProgressBar);
+    }
+    
+
+    
+//    /**************************************************************************
+//     * 
+//     * test checkbox selection state is bound
+//     * 
+//     **************************************************************************/
+//    
+//    @Test public void test_booleanPropertyChangeUpdatesCheckBoxSelection() {
+//        ProgressBarTableCell<Object, Object> cell = new ProgressBarTableCell<>(callback);
+//        setTableViewAndTableColumn(cell);
+//        cell.updateItem("TEST", false);
+//        CheckBox cb = (CheckBox)cell.getGraphic();
+//        
+//        assertFalse(cb.isSelected());
+//        booleanProperty.set(true);
+//        assertTrue(cb.isScaleShape());
+//
+//        booleanProperty.set(false);
+//        assertFalse(cb.isSelected());
+//    }
+//    
+//    @Test public void test_checkBoxSelectionUpdatesBooleanProperty() {
+//        ProgressBarTableCell<Object, Object> cell = new ProgressBarTableCell<>(callback);
+//        setTableViewAndTableColumn(cell);
+//        cell.updateItem("TEST", false);
+//        CheckBox cb = (CheckBox)cell.getGraphic();
+//        
+//        assertFalse(booleanProperty.get());
+//        cb.setSelected(true);
+//        assertTrue(booleanProperty.get());
+//
+//        cb.setSelected(false);
+//        assertFalse(booleanProperty.get());
+//    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/test/javafx/scene/control/cell/ProgressBarTreeTableCellTest.java	Mon Jun 17 15:03:39 2013 +1200
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javafx.scene.control.cell;
+
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.ProgressBar;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TreeTableView;
+import javafx.util.Callback;
+import javafx.util.StringConverter;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class ProgressBarTreeTableCellTest {
+    
+    private SimpleBooleanProperty booleanProperty;
+    private Callback<Integer, ObservableValue<Boolean>> callback;
+    private StringConverter<Object> converter;
+    private TreeTableView<Object> tableView;
+    private TreeTableColumn<Object, Object> tableColumn;
+    
+    @Before public void setup() {
+        tableView = new TreeTableView<>();
+        tableColumn = new TreeTableColumn<>();
+        booleanProperty = new SimpleBooleanProperty(false);
+        callback = new Callback<Integer, ObservableValue<Boolean>>() {
+            public ObservableValue<Boolean> call(Integer param) {
+                return booleanProperty;
+            }
+        };
+        converter = new StringConverter<Object>() {
+            @Override public String toString(Object object) {
+                return null;
+            }
+            
+            @Override public Object fromString(String string) {
+                return null;
+            }
+        };
+    }
+    
+    private void setTableViewAndTreeTableColumn(TreeTableCell cell) {
+        cell.updateTreeTableView(tableView);
+        cell.updateTreeTableColumn(tableColumn);
+    }
+    
+    
+    
+    /**************************************************************************
+     * 
+     * Test for public static <T> Callback<TreeTableColumn<S,Double>, TreeTableCell<T,Double>> forTreeTableColumn()
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellFactoryIsNotNull() {
+        assertFalse(booleanProperty.get());
+        Callback<TreeTableColumn<Object, Double>, TreeTableCell<Object, Double>> cellFactory = ProgressBarTreeTableCell.forTreeTableColumn();
+        assertNotNull(cellFactory);
+    }
+    
+    @Test public void testStatic_forTreeTableColumn_noArgs_ensureCellFactoryCreatesCells() {
+        assertFalse(booleanProperty.get());
+        Callback<TreeTableColumn<Object, Double>, TreeTableCell<Object, Double>> cellFactory = ProgressBarTreeTableCell.forTreeTableColumn();
+        
+        TreeTableColumn tableColumn = new TreeTableColumn<>();
+        ProgressBarTreeTableCell<Object> cell = (ProgressBarTreeTableCell<Object>)cellFactory.call(tableColumn);
+        assertNotNull(cell);
+    }
+
+    
+    /**************************************************************************
+     * 
+     * Constructor tests for default constructor
+     * 
+     **************************************************************************/
+
+    
+    @Test public void testConstructor_noArgs_defaultStyleClass() {
+        ProgressBarTreeTableCell<Object> cell = new ProgressBarTreeTableCell<>();
+        assertTrue(cell.getStyleClass().contains("progress-bar-tree-table-cell"));
+    }
+    
+    @Test public void testConstructor_noArgs_defaultGraphicIsAProgressBar() {
+        ProgressBarTreeTableCell<Object> cell = new ProgressBarTreeTableCell<>();
+        assertTrue(cell.getGraphic() instanceof ProgressBar);
+    }
+
+
+
+    /**************************************************************************
+     * 
+     * updateItem tests
+     * 
+     **************************************************************************/
+
+    @Test public void test_updateItem_isEmpty_graphicIsNull() {
+        ProgressBarTreeTableCell<Object> cell = new ProgressBarTreeTableCell<>();
+        cell.updateItem(0.5, true);
+        assertNull(cell.getGraphic());
+    }
+    
+    @Test public void test_updateItem_isEmpty_textIsNull() {
+        ProgressBarTreeTableCell<Object> cell = new ProgressBarTreeTableCell<>();
+        cell.updateItem(0.5, true);
+        assertNull(cell.getText());
+    }
+    
+    @Test public void test_updateItem_isNotEmpty_graphicIsNotNull() {
+        ProgressBarTreeTableCell<Object> cell = new ProgressBarTreeTableCell<>();
+        setTableViewAndTreeTableColumn(cell);
+        cell.updateItem(0.5, false);
+        assertNotNull(cell.getGraphic());
+        assertTrue(cell.getGraphic() instanceof ProgressBar);
+    }
+    
+
+    
+//    /**************************************************************************
+//     * 
+//     * test checkbox selection state is bound
+//     * 
+//     **************************************************************************/
+//    
+//    @Test public void test_booleanPropertyChangeUpdatesCheckBoxSelection() {
+//        ProgressBarTreeTableCell<Object, Object> cell = new ProgressBarTreeTableCell<>(callback);
+//        setTableViewAndTreeTableColumn(cell);
+//        cell.updateItem("TEST", false);
+//        CheckBox cb = (CheckBox)cell.getGraphic();
+//        
+//        assertFalse(cb.isSelected());
+//        booleanProperty.set(true);
+//        assertTrue(cb.isScaleShape());
+//
+//        booleanProperty.set(false);
+//        assertFalse(cb.isSelected());
+//    }
+//    
+//    @Test public void test_checkBoxSelectionUpdatesBooleanProperty() {
+//        ProgressBarTreeTableCell<Object, Object> cell = new ProgressBarTreeTableCell<>(callback);
+//        setTableViewAndTreeTableColumn(cell);
+//        cell.updateItem("TEST", false);
+//        CheckBox cb = (CheckBox)cell.getGraphic();
+//        
+//        assertFalse(booleanProperty.get());
+//        cb.setSelected(true);
+//        assertTrue(booleanProperty.get());
+//
+//        cb.setSelected(false);
+//        assertFalse(booleanProperty.get());
+//    }
+}