diff options
Diffstat (limited to 'src/test/java/org/apache/bcel/verifier/tests/TestArrayAccess02Creator.java')
-rw-r--r-- | src/test/java/org/apache/bcel/verifier/tests/TestArrayAccess02Creator.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/test/java/org/apache/bcel/verifier/tests/TestArrayAccess02Creator.java b/src/test/java/org/apache/bcel/verifier/tests/TestArrayAccess02Creator.java new file mode 100644 index 00000000..5442121b --- /dev/null +++ b/src/test/java/org/apache/bcel/verifier/tests/TestArrayAccess02Creator.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.commons.bcel6.verifier.tests; + +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.commons.bcel6.Const; +import org.apache.commons.bcel6.generic.ClassGen; +import org.apache.commons.bcel6.generic.ConstantPoolGen; +import org.apache.commons.bcel6.generic.InstructionConst; +import org.apache.commons.bcel6.generic.InstructionFactory; +import org.apache.commons.bcel6.generic.InstructionHandle; +import org.apache.commons.bcel6.generic.InstructionList; +import org.apache.commons.bcel6.generic.MethodGen; +import org.apache.commons.bcel6.generic.ObjectType; +import org.apache.commons.bcel6.generic.PUSH; +import org.apache.commons.bcel6.generic.Type; +import org.junit.Assert; + +public class TestArrayAccess02Creator extends TestCreator { + private final InstructionFactory _factory; + private final ConstantPoolGen _cp; + private final ClassGen _cg; + + public TestArrayAccess02Creator() { + _cg = new ClassGen(TEST_PACKAGE+".TestArrayAccess02", "java.lang.Object", "TestArrayAccess02.java", + Const.ACC_PUBLIC | Const.ACC_SUPER, new String[] { }); + + _cp = _cg.getConstantPool(); + _factory = new InstructionFactory(_cg, _cp); + } + + @Override +public void create(final OutputStream out) throws IOException { + createMethod_0(); + createMethod_1(); + _cg.getJavaClass().dump(out); + } + + private void createMethod_0() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(Const.ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", + TEST_PACKAGE+".TestArrayAccess02", il, _cp); + + InstructionHandle ih_0 = il.append(InstructionFactory.createLoad(Type.OBJECT, 0)); + Assert.assertNotNull(ih_0); // TODO why is this not used + il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Const.INVOKESPECIAL)); + InstructionHandle ih_4 = il.append(InstructionFactory.createReturn(Type.VOID)); + Assert.assertNotNull(ih_4); // TODO why is this not used + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } + + private void createMethod_1() { + InstructionList il = new InstructionList(); + MethodGen method = new MethodGen(Const.ACC_PUBLIC | Const.ACC_STATIC, Type.VOID, Type.NO_ARGS, new String[] { }, + "test", TEST_PACKAGE+".TestArrayAccess02", il, _cp); + + InstructionHandle ih_0 = il.append(new PUSH(_cp, 1)); + Assert.assertNotNull(ih_0); // TODO why is this not used + il.append(_factory.createNewArray(new ObjectType(TEST_PACKAGE+".TestArrayAccess02"), (short) 1)); + il.append(InstructionFactory.createStore(Type.OBJECT, 0)); + InstructionHandle ih_5 = il.append(new PUSH(_cp, 1)); + Assert.assertNotNull(ih_5); // TODO why is this not used + il.append(_factory.createNewArray(Type.STRING, (short) 1)); + il.append(InstructionFactory.createStore(Type.OBJECT, 1)); + InstructionHandle ih_10 = il.append(InstructionFactory.createLoad(Type.OBJECT, 1)); + Assert.assertNotNull(ih_10); // TODO why is this not used + il.append(new PUSH(_cp, 0)); + il.append(_factory.createNew(TEST_PACKAGE+".TestArrayAccess02")); + il.append(InstructionConst.DUP); + il.append(_factory.createInvoke(TEST_PACKAGE+".TestArrayAccess02", "<init>", Type.VOID, Type.NO_ARGS, Const.INVOKESPECIAL)); + il.append(InstructionConst.AASTORE); + InstructionHandle ih_20 = il.append(InstructionFactory.createReturn(Type.VOID)); + Assert.assertNotNull(ih_20); // TODO why is this not used + method.setMaxStack(); + method.setMaxLocals(); + _cg.addMethod(method.getMethod()); + il.dispose(); + } +} |