001: /***************************************************************
002: * This file is part of the [fleXive](R) project.
003: *
004: * Copyright (c) 1999-2007
005: * UCS - unique computing solutions gmbh (http://www.ucs.at)
006: * All rights reserved
007: *
008: * The [fleXive](R) project is free software; you can redistribute
009: * it and/or modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation;
011: * either version 2 of the License, or (at your option) any
012: * later version.
013: *
014: * The GNU General Public License can be found at
015: * http://www.gnu.org/copyleft/gpl.html.
016: * A copy is found in the textfile GPL.txt and important notices to the
017: * license from the author are found in LICENSE.txt distributed with
018: * these libraries.
019: *
020: * This library is distributed in the hope that it will be useful,
021: * but WITHOUT ANY WARRANTY; without even the implied warranty of
022: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023: * GNU General Public License for more details.
024: *
025: * For further information about UCS - unique computing solutions gmbh,
026: * please see the company website: http://www.ucs.at
027: *
028: * For further information about [fleXive](R), please see the
029: * project website: http://www.flexive.org
030: *
031: *
032: * This copyright notice MUST APPEAR in all copies of the file!
033: ***************************************************************/package com.flexive.tests.embedded.jsf;
034:
035: import com.flexive.faces.model.FxGridDataModel;
036: import com.flexive.faces.model.FxResultSetDataModel;
037: import com.flexive.shared.EJBLookup;
038: import com.flexive.shared.exceptions.FxAccountInUseException;
039: import com.flexive.shared.exceptions.FxApplicationException;
040: import com.flexive.shared.exceptions.FxLoginFailedException;
041: import com.flexive.shared.exceptions.FxLogoutFailedException;
042: import com.flexive.shared.search.FxResultSet;
043: import org.testng.annotations.AfterClass;
044: import org.testng.annotations.BeforeClass;
045: import org.testng.annotations.Test;
046:
047: import javax.faces.model.DataModel;
048:
049: /**
050: * Basic FxGridDataModel tests.
051: *
052: * @author Daniel Lichtenberger (daniel.lichtenberger@flexive.com), UCS - unique computing solutions gmbh (http://www.ucs.at)
053: * @version $Rev: 1 $
054: */
055: @Test(groups="jsf")
056: public class FxGridDataModelTest extends AbstractSqlQueryTest {
057: private static final int TOTALROWS = 25;
058:
059: @Override
060: @BeforeClass
061: public void beforeClass() throws FxLoginFailedException,
062: FxAccountInUseException, FxApplicationException {
063: super .beforeClass();
064: }
065:
066: @Override
067: @AfterClass
068: public void afterClass() throws FxLogoutFailedException,
069: FxApplicationException {
070: super .afterClass();
071: }
072:
073: @Test
074: public void basicGridResult() throws FxApplicationException {
075: FxResultSet result = getRows(0, 25);
076: FxResultSetDataModel resultModel = new FxResultSetDataModel(
077: result);
078: FxGridDataModel gridModel = new FxGridDataModel(resultModel, 5); // 5x5 grid
079: assert gridModel.getRowCount() == 5;
080: for (int i = 0; i < gridModel.getRowCount(); i++) {
081: gridModel.setRowIndex(i);
082: assert gridModel.isRowAvailable();
083: Object[] row = (Object[]) gridModel.getRowData();
084: assert row.length == 5;
085: for (int j = 0; j < row.length; j++) {
086: final Object[] refRow = result.getRows().get(i * 5 + j);
087: assert row[j] != null && row[j] == refRow : "Expected grid column to be equal to reference row.";
088: }
089: }
090: gridModel.setRowIndex(6);
091: assert !gridModel.isRowAvailable();
092: }
093:
094: @Test
095: public void emptyGridResult() throws FxApplicationException {
096: FxResultSet result = getRows(0, 1);
097: result.getRows().clear();
098: FxResultSetDataModel resultModel = new FxResultSetDataModel(
099: result);
100: FxGridDataModel gridModel = new FxGridDataModel(resultModel, 5); // 5x5 grid
101: assertAvailableRows(gridModel, 0, 0);
102: }
103:
104: @Test
105: public void oneHalfFullRowResult() throws FxApplicationException {
106: FxResultSet result = getRows(0, 3);
107: FxResultSetDataModel resultModel = new FxResultSetDataModel(
108: result);
109: FxGridDataModel gridModel = new FxGridDataModel(resultModel, 5); // 5x5 grid
110: assertAvailableRows(gridModel, 1, 0);
111: gridModel.setRowIndex(0);
112: assert gridModel.isRowAvailable();
113: Object[] row = (Object[]) gridModel.getRowData();
114: assert gridModel.isRowAvailable(); // assert that the backing datamodel index has not changed
115: assert row.length == 5;
116: for (int i = 0; i < 3; i++) {
117: assert row[i] != null && row[i] == result.getRows().get(i);
118: }
119: assert row[3] == null;
120: assert row[4] == null;
121: }
122:
123: @Test
124: public void lazyGridResult() throws FxApplicationException {
125: testLazyGridResult(0);
126: testLazyGridResult(10);
127: }
128:
129: private void testLazyGridResult(int startRow)
130: throws FxApplicationException {
131: FxResultSetDataModel model = new FxResultSetDataModel(EJBLookup
132: .getSearchEngine(), getSelectAllBuilder(), 0, 10);
133: FxGridDataModel gridModel = new FxGridDataModel(model, 5); // 5x2 grid (with lazy loading)
134: assertAvailableRows(gridModel, 2, startRow / 5);
135: }
136:
137: private void assertAvailableRows(DataModel model, int rows,
138: int startRow) {
139: for (int i = startRow; i < rows; i++) {
140: model.setRowIndex(startRow + i);
141: assert model.isRowAvailable() : "Row " + i
142: + " should be available in " + model;
143: }
144: //model.setRowIndex(startRow + rows);
145: //assert !model.isRowAvailable() : "No more than " + rows + " rows should be available in " + model;
146: }
147: }
|