/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.impl; import java.util.ArrayList; import java.util.List; import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52; import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52; import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableView; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.GuidedDecisionTableUiCell; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.ModelSynchronizer; import org.drools.workbench.screens.guided.rule.client.editor.RuleAttributeWidget; import org.junit.Test; import org.uberfire.ext.wires.core.grids.client.model.GridRow; import static org.junit.Assert.*; public class RowSynchronizerTest extends BaseSynchronizerTest { @Test public void testAppend() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); assertEquals( 1, model.getData().size() ); assertEquals( 1, uiModel.getRowCount() ); assertEquals( GuidedDecisionTableView.ROW_HEIGHT, uiModel.getRow( 0 ).getHeight(), 0.0 ); } @Test public void testInsert() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.insertRow( 0 ); assertEquals( 2, model.getData().size() ); assertEquals( 2, uiModel.getRowCount() ); assertEquals( GuidedDecisionTableView.ROW_HEIGHT, uiModel.getRow( 0 ).getHeight(), 0.0 ); assertEquals( GuidedDecisionTableView.ROW_HEIGHT, uiModel.getRow( 1 ).getHeight(), 0.0 ); } @Test public void testDeleteUnmergedData() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.deleteRow( 0 ); assertEquals( 0, model.getData().size() ); assertEquals( 0, uiModel.getRowCount() ); } @Test public void testDeleteMergedData_Block() throws ModelSynchronizer.MoveColumnVetoException { uiModel.setMerged( true ); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); uiModel.setCell( 0, 1, new GuidedDecisionTableUiCell<String>( "a" ) ); uiModel.setCell( 1, 1, new GuidedDecisionTableUiCell<String>( "a" ) ); uiModel.setCell( 2, 1, new GuidedDecisionTableUiCell<String>( "b" ) ); uiModel.collapseCell( 0, 1 ); modelSynchronizer.deleteRow( 0 ); assertEquals( 1, model.getData().size() ); assertEquals( 1, uiModel.getRowCount() ); } @Test public void testDeleteMergedData_WholeBlock() throws ModelSynchronizer.MoveColumnVetoException { uiModel.setMerged( true ); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); uiModel.setCell( 0, 1, new GuidedDecisionTableUiCell<String>( "a" ) ); uiModel.setCell( 1, 1, new GuidedDecisionTableUiCell<String>( "a" ) ); uiModel.setCell( 2, 1, new GuidedDecisionTableUiCell<String>( "a" ) ); uiModel.collapseCell( 0, 1 ); modelSynchronizer.deleteRow( 0 ); assertEquals( 0, model.getData().size() ); assertEquals( 0, uiModel.getRowCount() ); } @Test public void testMoveRowMoveUpTopBlock() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); final List<DTCellValue52> row0 = model.getData().get( 0 ); final List<DTCellValue52> row1 = model.getData().get( 1 ); final List<DTCellValue52> row2 = model.getData().get( 2 ); uiModel.moveRowsTo( 0, new ArrayList<GridRow>() {{ add( uiRow2 ); }} ); assertEquals( uiRow2, uiModel.getRow( 0 ) ); assertEquals( uiRow0, uiModel.getRow( 1 ) ); assertEquals( uiRow1, uiModel.getRow( 2 ) ); assertEquals( row2, model.getData().get( 0 ) ); assertEquals( row0, model.getData().get( 1 ) ); assertEquals( row1, model.getData().get( 2 ) ); } @Test public void testMoveRowMoveUpMidBlock() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); final List<DTCellValue52> row0 = model.getData().get( 0 ); final List<DTCellValue52> row1 = model.getData().get( 1 ); final List<DTCellValue52> row2 = model.getData().get( 2 ); uiModel.moveRowsTo( 1, new ArrayList<GridRow>() {{ add( uiRow2 ); }} ); assertEquals( uiRow0, uiModel.getRow( 0 ) ); assertEquals( uiRow2, uiModel.getRow( 1 ) ); assertEquals( uiRow1, uiModel.getRow( 2 ) ); assertEquals( row0, model.getData().get( 0 ) ); assertEquals( row2, model.getData().get( 1 ) ); assertEquals( row1, model.getData().get( 2 ) ); } @Test public void testMoveRowsMoveUp() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); final List<DTCellValue52> row0 = model.getData().get( 0 ); final List<DTCellValue52> row1 = model.getData().get( 1 ); final List<DTCellValue52> row2 = model.getData().get( 2 ); uiModel.moveRowsTo( 0, new ArrayList<GridRow>() {{ add( uiRow1 ); add( uiRow2 ); }} ); assertEquals( uiRow1, uiModel.getRow( 0 ) ); assertEquals( uiRow2, uiModel.getRow( 1 ) ); assertEquals( uiRow0, uiModel.getRow( 2 ) ); assertEquals( row1, model.getData().get( 0 ) ); assertEquals( row2, model.getData().get( 1 ) ); assertEquals( row0, model.getData().get( 2 ) ); } @Test public void testMoveRowMoveDownEndBlock() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); final List<DTCellValue52> row0 = model.getData().get( 0 ); final List<DTCellValue52> row1 = model.getData().get( 1 ); final List<DTCellValue52> row2 = model.getData().get( 2 ); uiModel.moveRowsTo( 2, new ArrayList<GridRow>() {{ add( uiRow0 ); }} ); assertEquals( uiRow1, uiModel.getRow( 0 ) ); assertEquals( uiRow2, uiModel.getRow( 1 ) ); assertEquals( uiRow0, uiModel.getRow( 2 ) ); assertEquals( row1, model.getData().get( 0 ) ); assertEquals( row2, model.getData().get( 1 ) ); assertEquals( row0, model.getData().get( 2 ) ); } @Test public void testMoveRowMoveDownMidBlock() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); final List<DTCellValue52> row0 = model.getData().get( 0 ); final List<DTCellValue52> row1 = model.getData().get( 1 ); final List<DTCellValue52> row2 = model.getData().get( 2 ); uiModel.moveRowsTo( 1, new ArrayList<GridRow>() {{ add( uiRow0 ); }} ); assertEquals( uiRow1, uiModel.getRow( 0 ) ); assertEquals( uiRow0, uiModel.getRow( 1 ) ); assertEquals( uiRow2, uiModel.getRow( 2 ) ); assertEquals( row1, model.getData().get( 0 ) ); assertEquals( row0, model.getData().get( 1 ) ); assertEquals( row2, model.getData().get( 2 ) ); } @Test public void testMoveRowsMoveDown() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); final List<DTCellValue52> row0 = model.getData().get( 0 ); final List<DTCellValue52> row1 = model.getData().get( 1 ); final List<DTCellValue52> row2 = model.getData().get( 2 ); uiModel.moveRowsTo( 2, new ArrayList<GridRow>() {{ add( uiRow0 ); add( uiRow1 ); }} ); assertEquals( uiRow2, uiModel.getRow( 0 ) ); assertEquals( uiRow0, uiModel.getRow( 1 ) ); assertEquals( uiRow1, uiModel.getRow( 2 ) ); assertEquals( row2, model.getData().get( 0 ) ); assertEquals( row0, model.getData().get( 1 ) ); assertEquals( row1, model.getData().get( 2 ) ); } @Test public void testAppendRowNumbers() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); assertEquals( 1, uiModel.getRow( 0 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 2, uiModel.getRow( 1 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 1, model.getData().get( 0 ).get( 0 ).getNumericValue() ); assertEquals( 2, model.getData().get( 1 ).get( 0 ).getNumericValue() ); } @Test public void testInsertRowNumbers() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.insertRow( 0 ); assertEquals( 1, uiModel.getRow( 0 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 2, uiModel.getRow( 1 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 1, model.getData().get( 0 ).get( 0 ).getNumericValue() ); assertEquals( 2, model.getData().get( 1 ).get( 0 ).getNumericValue() ); } @Test public void testDeleteRowNumbers() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.deleteRow( 0 ); assertEquals( 1, uiModel.getRow( 0 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 1, model.getData().get( 0 ).get( 0 ).getNumericValue() ); } @Test public void testMoveRowsMoveDownCheckRowNumbers() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow0 = uiModel.getRow( 0 ); final GridRow uiRow1 = uiModel.getRow( 1 ); uiModel.moveRowsTo( 2, new ArrayList<GridRow>() {{ add( uiRow0 ); add( uiRow1 ); }} ); assertEquals( 1, uiModel.getRow( 0 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 2, uiModel.getRow( 1 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 3, uiModel.getRow( 2 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 1, model.getData().get( 0 ).get( 0 ).getNumericValue() ); assertEquals( 2, model.getData().get( 1 ).get( 0 ).getNumericValue() ); assertEquals( 3, model.getData().get( 2 ).get( 0 ).getNumericValue() ); } @Test public void testMoveRowsMoveUpCheckRowNumbers() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final GridRow uiRow1 = uiModel.getRow( 1 ); final GridRow uiRow2 = uiModel.getRow( 2 ); uiModel.moveRowsTo( 0, new ArrayList<GridRow>() {{ add( uiRow1 ); add( uiRow2 ); }} ); assertEquals( 1, uiModel.getRow( 0 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 2, uiModel.getRow( 1 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 3, uiModel.getRow( 2 ).getCells().get( 0 ).getValue().getValue() ); assertEquals( 1, model.getData().get( 0 ).get( 0 ).getNumericValue() ); assertEquals( 2, model.getData().get( 1 ).get( 0 ).getNumericValue() ); assertEquals( 3, model.getData().get( 2 ).get( 0 ).getNumericValue() ); } @Test public void checkBooleanDefaultValueTrue() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = new AttributeCol52(); column.setAttribute( RuleAttributeWidget.ENABLED_ATTR ); column.setDefaultValue( new DTCellValue52( true ) ); modelSynchronizer.appendColumn( column ); modelSynchronizer.appendRow(); assertTrue( (Boolean) uiModel.getRow( 0 ).getCells().get( 2 ).getValue().getValue() ); assertTrue( model.getData().get( 0 ).get( 2 ).getBooleanValue() ); } @Test public void checkBooleanDefaultValueFalse() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = new AttributeCol52(); column.setAttribute( RuleAttributeWidget.ENABLED_ATTR ); column.setDefaultValue( new DTCellValue52( false ) ); modelSynchronizer.appendColumn( column ); modelSynchronizer.appendRow(); assertFalse( (Boolean) uiModel.getRow( 0 ).getCells().get( 2 ).getValue().getValue() ); assertFalse( model.getData().get( 0 ).get( 2 ).getBooleanValue() ); } @Test public void checkBooleanDefaultValueNotSet() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = new AttributeCol52(); column.setAttribute( RuleAttributeWidget.ENABLED_ATTR ); modelSynchronizer.appendColumn( column ); modelSynchronizer.appendRow(); assertFalse( (Boolean) uiModel.getRow( 0 ).getCells().get( 2 ).getValue().getValue() ); assertFalse( model.getData().get( 0 ).get( 2 ).getBooleanValue() ); } }