/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package javax.faces.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.sun.faces.mock.MockResultSet;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* <p>
* Unit tests for {@link ArrayDataModel}.</p>
*/
public class ResultSetDataModelTestCase extends DataModelTestCaseBase {
// ------------------------------------------------------------ Constructors
/**
* Construct a new instance of this test case.
*
* @param name Name of the test case
*/
public ResultSetDataModelTestCase(String name) {
super(name);
}
// ------------------------------------------------------ Instance Variables
// The ResultSet passed to our ResultSetDataModel
protected MockResultSet result = null;
// ---------------------------------------------------- Overall Test Methods
// Set up instance variables required by this test case.
@Override
public void setUp() throws Exception {
beans = new BeanTestImpl[5];
for (int i = 0; i < beans.length; i++) {
beans[i] = new BeanTestImpl();
}
configure();
result = new MockResultSet(beans);
model = new ResultSetDataModel(result);
super.setUp();
}
// Return the tests included in this test case.
public static Test suite() {
return (new TestSuite(ResultSetDataModelTestCase.class));
}
// ------------------------------------------------- Individual Test Methods
// Test ((Map) getRowData()).containsKey()
public void testRowDataContainsKey() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
// Test exact match on column names
assertTrue(map.containsKey("booleanProperty"));
assertTrue(map.containsKey("booleanSecond"));
assertTrue(map.containsKey("byteProperty"));
assertTrue(map.containsKey("doubleProperty"));
assertTrue(map.containsKey("floatProperty"));
assertTrue(map.containsKey("intProperty"));
assertTrue(map.containsKey("longProperty"));
assertTrue(map.containsKey("stringProperty"));
// Test inexact match on column names
assertTrue(map.containsKey("booleanPROPERTY"));
assertTrue(map.containsKey("booleanSECOND"));
assertTrue(map.containsKey("bytePROPERTY"));
assertTrue(map.containsKey("doublePROPERTY"));
assertTrue(map.containsKey("floatPROPERTY"));
assertTrue(map.containsKey("intPROPERTY"));
assertTrue(map.containsKey("longPROPERTY"));
assertTrue(map.containsKey("stringPROPERTY"));
// Test false return on invalid column names
assertTrue(!map.containsKey("foo"));
assertTrue(!map.containsKey("FOO"));
assertTrue(!map.containsKey("bar"));
assertTrue(!map.containsKey("BAR"));
}
// Test ((Map) getRowData()).containsValue()
public void testRowDataContainsValue() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
// Test positive results
assertTrue(map.containsValue(Boolean.TRUE));
assertTrue(map.containsValue(Boolean.FALSE));
assertTrue(map.containsValue(new Byte((byte) 1)));
assertTrue(map.containsValue(new Double((double) 100.0)));
assertTrue(map.containsValue(new Float((float) 10.0)));
assertTrue(map.containsValue(new Integer((int) 1000)));
assertTrue(map.containsValue(new Long((long) 10000)));
assertTrue(map.containsValue("This is string 1"));
// Test negative results
assertTrue(!map.containsValue("foo"));
assertTrue(!map.containsValue(new Integer(654321)));
}
// Test ((Map) getRowData()).entrySet()
public void testRowDataEntrySet() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
Set set = map.entrySet();
// Test exact match postive results
assertTrue(set.contains(new TestEntry("booleanProperty",
Boolean.FALSE)));
assertTrue(set.contains(new TestEntry("booleanSecond",
Boolean.TRUE)));
assertTrue(set.contains(new TestEntry("byteProperty",
new Byte((byte) 1))));
assertTrue(set.contains(new TestEntry("doubleProperty",
new Double((double) 100.0))));
assertTrue(set.contains(new TestEntry("floatProperty",
new Float((float) 10.0))));
assertTrue(set.contains(new TestEntry("intProperty",
new Integer((int) 1000))));
assertTrue(set.contains(new TestEntry("longProperty",
new Long((long) 10000))));
assertTrue(set.contains(new TestEntry("stringProperty", "This is string 1")));
// Test exact match postive results
assertTrue(set.contains(new TestEntry("booleanPROPERTY",
Boolean.FALSE)));
assertTrue(set.contains(new TestEntry("booleanSECOND",
Boolean.TRUE)));
assertTrue(set.contains(new TestEntry("bytePROPERTY",
new Byte((byte) 1))));
assertTrue(set.contains(new TestEntry("doublePROPERTY",
new Double((double) 100.0))));
assertTrue(set.contains(new TestEntry("floatPROPERTY",
new Float((float) 10.0))));
assertTrue(set.contains(new TestEntry("intPROPERTY",
new Integer((int) 1000))));
assertTrue(set.contains(new TestEntry("longPROPERTY",
new Long((long) 10000))));
assertTrue(set.contains(new TestEntry("stringPROPERTY", "This is string 1")));
// Test negative results
assertTrue(!set.contains(new TestEntry("foo", "bar")));
assertTrue(!set.contains(new TestEntry("FOO", "bar")));
assertTrue(!set.contains(new TestEntry("baz", "bop")));
assertTrue(!set.contains(new TestEntry("BAZ", "bop")));
// Test other methods
assertTrue(!set.isEmpty());
// Test updating through the entry set
Iterator entries = set.iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
if ("stringProperty".equalsIgnoreCase((String) entry.getKey())) {
entry.setValue("This is string 1 modified");
}
}
assertEquals("This is string 1 modified",
beans[1].getStringProperty());
assertEquals("This is string 1 modified",
(String) map.get("stringProperty"));
assertEquals("This is string 1 modified",
(String) map.get("stringPROPERTY"));
result.absolute(2); // ResultSet indexing is one-relative
assertEquals("This is string 1 modified",
(String) result.getObject("stringProperty"));
}
// Test ((Map) getRowData()).get()
public void testRowDataGet() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
// Test exact match on column names
assertEquals(Boolean.FALSE,
(Boolean) map.get("booleanProperty"));
assertEquals(Boolean.TRUE,
(Boolean) map.get("booleanSecond"));
assertEquals(new Byte((byte) 1),
(Byte) map.get("byteProperty"));
assertEquals(new Double((double) 100.0),
(Double) map.get("doubleProperty"));
assertEquals(new Float((float) 10.0),
(Float) map.get("floatProperty"));
assertEquals(new Integer((int) 1000),
(Integer) map.get("intProperty"));
assertEquals(new Long((long) 10000),
(Long) map.get("longProperty"));
assertEquals("This is string 1",
(String) map.get("stringProperty"));
// Test inexact match on column names
assertEquals(Boolean.FALSE,
(Boolean) map.get("booleanPROPERTY"));
assertEquals(Boolean.TRUE,
(Boolean) map.get("booleanSECOND"));
assertEquals(new Byte((byte) 1),
(Byte) map.get("bytePROPERTY"));
assertEquals(new Double((double) 100.0),
(Double) map.get("doublePROPERTY"));
assertEquals(new Float((float) 10.0),
(Float) map.get("floatPROPERTY"));
assertEquals(new Integer((int) 1000),
(Integer) map.get("intPROPERTY"));
assertEquals(new Long((long) 10000),
(Long) map.get("longPROPERTY"));
assertEquals("This is string 1",
(String) map.get("stringPROPERTY"));
// Test null return on non-existent column names
assertNull(map.get("foo"));
assertNull(map.get("FOO"));
assertNull(map.get("bar"));
assertNull(map.get("bar"));
}
// Test ((Map) getRowData()).keySet()
public void testRowDataKeySet() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
Set set = map.keySet();
// Test exact match postive results
assertTrue(set.contains("booleanProperty"));
assertTrue(set.contains("booleanSecond"));
assertTrue(set.contains("byteProperty"));
assertTrue(set.contains("doubleProperty"));
assertTrue(set.contains("floatProperty"));
assertTrue(set.contains("intProperty"));
assertTrue(set.contains("longProperty"));
assertTrue(set.contains("stringProperty"));
// Test inexact match positive results
assertTrue(set.contains("booleanPROPERTY"));
assertTrue(set.contains("booleanSECOND"));
assertTrue(set.contains("bytePROPERTY"));
assertTrue(set.contains("doublePROPERTY"));
assertTrue(set.contains("floatPROPERTY"));
assertTrue(set.contains("intPROPERTY"));
assertTrue(set.contains("longPROPERTY"));
assertTrue(set.contains("stringPROPERTY"));
// Test negative results
assertTrue(!set.contains("foo"));
assertTrue(!set.contains("FOO"));
assertTrue(!set.contains("bar"));
assertTrue(!set.contains("BAR"));
// Test other methods
assertTrue(!set.isEmpty());
}
// Test ((Map) getRowData()).put()
public void testRowDataPut() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
}
// Test unsupported operations on ((Map) getRowData())
public void testRowDataUnsupported() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
// clear()
try {
map.clear();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
// entrySet()
Set entrySet = map.entrySet();
try {
entrySet.add(new TestEntry("foo", "bar"));
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
List mapEntries = new ArrayList();
mapEntries.add(new TestEntry("foo", "bar"));
mapEntries.add(new TestEntry("baz", "bop"));
try {
entrySet.addAll(mapEntries);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
entrySet.clear();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
Iterator iterator = entrySet.iterator();
iterator.next();
iterator.remove();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
entrySet.remove(new TestEntry("foo", "bar"));
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
entrySet.removeAll(mapEntries);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
entrySet.retainAll(mapEntries);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
// keySet()
Set keySet = map.keySet();
try {
keySet.add("foo");
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
List mapKeys = new ArrayList();
mapKeys.add("foo");
mapKeys.add("bar");
try {
keySet.addAll(mapKeys);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
keySet.clear();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
Iterator iterator = keySet.iterator();
iterator.next();
iterator.remove();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
keySet.remove(new TestEntry("foo", "bar"));
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
keySet.removeAll(mapKeys);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
keySet.retainAll(mapKeys);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
// remove()
try {
map.remove("foo");
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
// values()
Collection values = map.values();
try {
values.add("foo");
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
List list = new ArrayList();
list.add("foo");
list.add("bar");
try {
values.addAll(list);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
values.clear();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
Iterator iterator = values.iterator();
iterator.next();
iterator.remove();
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
values.remove("foo");
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
values.removeAll(list);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
try {
values.retainAll(list);
fail("Should have thrown UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
// Expected result
}
}
// Test ((Map) getRowData()).values()
public void testRowDataValues() throws Exception {
// Position to row 1 and retrieve the corresponding Map
model.setRowIndex(1);
assertTrue(model.isRowAvailable());
Object data = model.getRowData();
assertNotNull(data);
assertTrue(data instanceof Map);
Map map = (Map) data;
Collection values = map.values();
// Test positive results
assertTrue(values.contains(Boolean.TRUE));
assertTrue(values.contains(Boolean.FALSE));
assertTrue(values.contains(new Byte((byte) 1)));
assertTrue(values.contains(new Double((double) 100.0)));
assertTrue(values.contains(new Float((float) 10.0)));
assertTrue(values.contains(new Integer((int) 1000)));
assertTrue(values.contains(new Long((long) 10000)));
assertTrue(values.contains("This is string 1"));
// Test negative results
assertTrue(!values.contains("foo"));
assertTrue(!values.contains(new Integer(654321)));
// Test other methods
assertTrue(!values.isEmpty());
}
// ------------------------------------------------------- Protected Methods
@Override
protected BeanTestImpl data() throws Exception {
Object data = model.getRowData();
assertTrue(data instanceof Map);
BeanTestImpl bean = new BeanTestImpl();
Map map = (Map) data;
bean.setBooleanProperty(((Boolean) map.get("booleanProperty")).booleanValue());
bean.setBooleanSecond(((Boolean) map.get("booleanSecond")).booleanValue());
bean.setByteProperty(((Byte) map.get("byteProperty")).byteValue());
bean.setDoubleProperty(((Double) map.get("doubleProperty")).doubleValue());
bean.setFloatProperty(((Float) map.get("floatProperty")).floatValue());
bean.setIntProperty(((Integer) map.get("intProperty")).intValue());
bean.setLongProperty(((Long) map.get("longProperty")).longValue());
bean.setNullProperty((String) map.get("nullProperty"));
bean.setShortProperty(((Short) map.get("shortProperty")).shortValue());
bean.setStringProperty((String) map.get("stringProperty"));
bean.setWriteOnlyProperty((String) map.get("writeOnlyPropertyValue"));
return (bean);
}
class TestEntry implements Map.Entry {
public TestEntry(Object key, Object value) {
this.key = key;
this.value = value;
}
private Object key;
private Object value;
@Override
public Object getKey() {
return key;
}
@Override
public Object getValue() {
return value;
}
@Override
public Object setValue(Object value) {
Object previous = this.value;
this.value = value;
return previous;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Map.Entry)) {
return (false);
}
Map.Entry e = (Map.Entry) o;
return (key == null
? e.getKey() == null : key.equals(e.getKey()))
&& (value == null
? e.getValue() == null : value.equals(e.getValue()));
}
}
}