/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.jmx.compliance.openmbean;
import junit.framework.TestCase;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.management.openmbean.ArrayType;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenDataException;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import javax.management.openmbean.TabularType;
import javax.management.openmbean.TabularDataSupport;
/**
* Array type tests.<p>
*
* @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>.
*/
public class ArrayTypeTestCase
extends TestCase
{
// Static --------------------------------------------------------------------
// Attributes ----------------------------------------------------------------
// Constructor ---------------------------------------------------------------
/**
* Construct the test
*/
public ArrayTypeTestCase(String s)
{
super(s);
}
// Tests ---------------------------------------------------------------------
public void testArrayTypeOpenType()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
assertEquals("[[[Ljava.lang.String;", arrayType.getClassName());
assertEquals("3-dimension array of java.lang.String", arrayType.getDescription());
assertEquals("[[[Ljava.lang.String;", arrayType.getTypeName());
assertTrue("Composite type should be an array", arrayType.isArray());
}
public void testGetDimension()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
assertTrue("Dimension should be 3", arrayType.getDimension() == 3);
}
public void testElementOpenType()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
assertTrue("Element OpenType should be " + SimpleType.STRING, arrayType.getElementOpenType().equals(SimpleType.STRING));
}
public void testIsValue()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
assertTrue("null is not a value of array type", arrayType.isValue(null) == false);
assertTrue("object is not a value of array type", arrayType.isValue(new Object()) == false);
String[][][] data = new String[1][2][3];
assertTrue("data should be a value of array type", arrayType.isValue(data));
String[][] data2 = new String[1][2];
assertTrue("data should not be a value of array type, wrong number of dimensions", arrayType.isValue(data2) == false);
Object[][][] data3 = new Object[1][2][3];
assertTrue("data should not be a value of array type, wrong element type", arrayType.isValue(data3) == false);
String[] itemNames = new String[] { "name1", "name2" };
String[] itemDescriptions = new String[] { "desc1", "desc2" };
OpenType[] itemTypes = new OpenType[] { SimpleType.STRING, SimpleType.INTEGER };
CompositeType compositeType = new CompositeType("typeName", "description",
itemNames, itemDescriptions, itemTypes);
Object[] itemValues = new Object[] { "string", new Integer(1) };
CompositeDataSupport cds = new CompositeDataSupport(compositeType, itemNames, itemValues);
CompositeDataSupport[][] compData1 = new CompositeDataSupport[][]
{
{ cds, null }, { cds, cds }
};
ArrayType compArrayType1 = new ArrayType(2, compositeType);
assertTrue("compData1 should be a value of array type", compArrayType1.isValue(compData1));
ArrayType compArrayType2 = new ArrayType(1, compositeType);
assertTrue("compData1 should not be a value of array type, wrong dimension", compArrayType2.isValue(compData1) == false);
CompositeType compositeType2 = new CompositeType("typeName2", "description",
itemNames, itemDescriptions, itemTypes);
ArrayType compArrayType3 = new ArrayType(2, compositeType2);
assertTrue("compData1 should not be a value of array type, wrong element type", compArrayType3.isValue(compData1) == false);
TabularType tabularType = new TabularType("typeName", "description", compositeType, new String[] { "name1" });
TabularDataSupport tds = new TabularDataSupport(tabularType);
TabularDataSupport[][] tabData1 = new TabularDataSupport[][]
{
{ tds, null }, { tds, tds }
};
ArrayType tabArrayType1 = new ArrayType(2, tabularType);
assertTrue("tabData1 should be a value of array type", tabArrayType1.isValue(tabData1));
ArrayType tabArrayType2 = new ArrayType(1, tabularType);
assertTrue("tabData1 should not be a value of array type, wrong number of dimensions", tabArrayType2.isValue(tabData1) == false);
TabularType tabularType2 = new TabularType("typeName2", "description", compositeType, new String[] { "name1" });
ArrayType tabArrayType3 = new ArrayType(2, tabularType2);
assertTrue("tabData1 should not be a value of array type, wrong element type", tabArrayType3.isValue(tabData1) == false);
}
public void testEquals()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
assertTrue("null is not an array type", arrayType.equals(null) == false);
assertTrue("object is not an array type", arrayType.equals(new Object()) == false);
assertTrue("should be equal", arrayType.equals(arrayType));
ArrayType arrayType2 = new ArrayType(3, SimpleType.STRING);
assertTrue("should be equal, even though different instances", arrayType.equals(arrayType2));
assertTrue("should be equal, even though different instances", arrayType2.equals(arrayType));
arrayType2 = new ArrayType(2, SimpleType.STRING);
assertTrue("should not be equal, wrong number of dimensions", arrayType.equals(arrayType2) == false);
assertTrue("should not be equal, wrong number of dimensions", arrayType2.equals(arrayType) == false);
arrayType2 = new ArrayType(3, SimpleType.INTEGER);
assertTrue("should not be equal, wrong element type", arrayType.equals(arrayType2) == false);
assertTrue("should not be equal, wrong element type", arrayType2.equals(arrayType) == false);
}
public void testHashCode()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
int myHashCode = 3 + SimpleType.STRING.hashCode();
assertTrue("Wrong hash code generated", myHashCode == arrayType.hashCode());
}
public void testToString()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
String toString = arrayType.toString();
assertTrue("toString() should contain the array type class name",
toString.indexOf(ArrayType.class.getName()) != -1);
assertTrue("toString() should contain the dimension",
toString.indexOf("3") != -1);
assertTrue("toString() should contain the element type",
toString.indexOf(SimpleType.STRING.toString()) != -1);
}
public void testSerialization()
throws Exception
{
ArrayType arrayType = new ArrayType(3, SimpleType.STRING);
// Serialize it
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(arrayType);
// Deserialize it
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
Object result = ois.readObject();
assertEquals(arrayType, result);
}
public void testErrors()
throws Exception
{
boolean caught = false;
try
{
new ArrayType(-1, SimpleType.STRING);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail("Excepted IllegalArgumentException for negative dimension");
caught = false;
try
{
new ArrayType(1, new ArrayType(2, SimpleType.STRING));
}
catch (OpenDataException e)
{
caught = true;
}
if (caught == false)
fail("Excepted OpenDataException for ArrayType element type");
}
public void testErrors2()
throws Exception
{
boolean caught = false;
try
{
new ArrayType(1, null);
}
catch (NullPointerException e)
{
fail("FAILS IN RI: expected IllegalArgumentException for null element type");
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail("Excepted IllegalArgumentException for null element type");
}
}