Текстовое представление содержимого TableView

В целях тестирования (с использованием JemmyFX) я хочу проверить, правильно ли отформатирован контент TableView. Например: один столбец имеет тип Double и фабрика ячеек была применена, чтобы показать число в процентах: 20%,

Как я могу проверить это, когда значение 0.2dклетка показывает как 20%?

В идеале я ищу что-то вроде этого:

TableColumn<VatInvoice, Double> percentVat = ...
assertEquals(percentVat.getTextualRepresentation(), "20%");

Примечание: я пытался использовать TableCell напрямую, как показано ниже, но getText() возвращает ноль:

TableCell<VatInvoice, Double> tc = percentVat.getCellFactory().call(percentVat);
tc.itemProperty().set(0.2);
assertEquals(tc.getText(), "20%"); //tc.getText() is null

2 ответа

Решение

Лучшее, что я нашел до сих пор, используя JemmyFX, это следующее:

public String getCellDataAsText(TableViewDock table, int row, int column) {
    final TableCellItemDock dock = new TableCellItemDock(table.asTable(), row, column);
    return dock.wrap().waitState(new State<String>() {
        @Override public String reached() {
            return dock.wrap().cellWrap().getControl().getText();
        }
    });
}

Вы можете попробовать отредактировать фабрику ячеек.

tc.setCellFactory(new Callback<TableColumn, TableCell>(){
    @Override
    public TableCell call(TableColumn param){
         return new TableCell(){
             @Override
             public void updateItem(Object item, boolean isEmpty){
                 //...logic to format the text
                 assertEquals(getText(), "20%");
             }
         };
    }
});
Другие вопросы по тегам