/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat and individual contributors
* by the @authors tag. See the copyright.txt 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.
*
* @authors Andrew Dinn
*/
package org.jboss.byteman.tests.javaops;
import org.jboss.byteman.tests.Test;
/**
* Test to ensure array operations compute as expected
*/
public class TestArray extends Test
{
public TestArray()
{
super(TestArray.class.getCanonicalName());
}
static int[] iarray;
static Object[][] oarray;
static int runNumber = 0;
public void test()
{
iarray = new int[1];
oarray = new Object[1][1];
// oarray[0][0] = new Object();
oarray[0][0] = null;
Object[] ores;
try {
log("calling TestArray.triggerMethod1");
ores = triggerMethod1(iarray, oarray);
log("called TestArray.triggerMethod1 : result == " + ores);
} catch (Exception e) {
log(e);
}
checkOutput(true);
runNumber++;
oarray[0] = new Object[2];
oarray[0][0] = oarray[0][1] = "hello";
try {
log("calling TestArray.triggerMethod2");
triggerMethod2(iarray, oarray);
log("called TestArray.triggerMethod2 : oarray[0][1] == " + oarray[0][1]);
} catch (Exception e) {
log(e);
}
checkOutput(true);
}
public Object[] triggerMethod1(int[] iarray, Object[][] oarray)
{
log("inside TestArray.triggerMethod1");
return null;
}
public void triggerMethod2(int[] iarray, Object[][] oarray)
{
log("inside TestArray.triggerMethod2");
}
@Override
public String getExpected() {
if (runNumber == 0) {
// rule uses
// nested : Object[][] = { new Object[] { "foo" } , new Object[] { "bar" } }
Object[][] nested = new Object[2][1];
nested[0][0] = "foo";
nested[1][0] = "bar";
// rule uses
// nested2 : Object[][] = { { "foo" }, { "bar" } }
Object[][] nested2 = new Object[2][1];
nested2[0][0] = "foo";
nested2[1][0] = "bar";
// rule uses
// nested2 = new Object[][][] { { { 1 } }, { { 2 } }, { {}, {} }, { } };
// construct a similar value to check the output
Object[][] nested2a = new Object[4][];
Object[][] first = new Object[1][];
Object[][] second = new Object[1][];
Object[][] third = new Object[2][];
Object[][] fourth = new Object[0][];
nested2a[0] = first;
nested2a[1] = second;
nested2a[2] = third;
nested2a[3] = fourth;
first[0] = new Object[1];
first[0][0] = 1;
second[0] = new Object[1];
second[0][0] = 2;
third[0] = new Object[0];
third[1] = new Object[0];
fourth = new Object[0][0];
logExpected("calling TestArray.triggerMethod1");
logExpected("inside TestArray.triggerMethod1");
logExpected("triggerMethod1 : iarray[0] == " + iarray[0]);
logExpected("triggerMethod1 : oarray[0][0] == " + oarray[0][0]);
logExpected("triggerMethod1 : iarray2[0] == " + 1);
logExpected("triggerMethod1 : oarray2[1] == " + iarray);
logExpected("triggerMethod1 : oarray3[0][0] == " + iarray[0]);
logExpected("triggerMethod1 : mtarray1.length == " + 0);
logExpected("triggerMethod1 : mtarray2.length == " + 0);
logExpected("triggerMethod1 : nested.length == " + nested.length);
logExpected("triggerMethod1 : nested[0].length == " + nested[0].length);
logExpected("triggerMethod1 : nested[1].length == " + nested[1].length);
logExpected("triggerMethod1 : nested[0][0] == " + nested[0][0]);
logExpected("triggerMethod1 : nested[1][0] == " + nested[1][0]);
logExpected("triggerMethod1 : nested2.length == " + nested2.length);
logExpected("triggerMethod1 : nested2[0].length == " + nested2[0].length);
logExpected("triggerMethod1 : nested2[1].length == " + nested2[1].length);
logExpected("triggerMethod1 : nested2[0][0] == " + nested2[0][0]);
logExpected("triggerMethod1 : nested2[1][0] == " + nested2[1][0]);
// after assignment
logExpected("triggerMethod1 : nested2.length == " + nested2a.length);
logExpected("triggerMethod1 : nested2[0].length == " + nested2a[0].length);
logExpected("triggerMethod1 : nested2[1].length == " + nested2a[1].length);
logExpected("triggerMethod1 : nested2[2].length == " + nested2a[2].length);
logExpected("triggerMethod1 : nested2[3].length == " + nested2a[3].length);
logExpected("called TestArray.triggerMethod1 : result == " + oarray[0]);
} else {
logExpected("calling TestArray.triggerMethod2");
logExpected("inside TestArray.triggerMethod2");
logExpected("triggerMethod2 : iarray.length == " + 1);
logExpected("triggerMethod2 : oarray[0].length == " + 2);
logExpected("triggerMethod2 : oarray[0][1] == hello");
logExpected("called TestArray.triggerMethod2 : oarray[0][1] == goodbye");
}
return super.getExpected();
}
}