< prev index next >
test/javax/xml/jaxp/unittest/parsers/Bug8003147Test.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 21,40 ****
* questions.
*/
/*
* @test
- * @modules java.xml/com.sun.org.apache.bcel.internal.classfile
- * java.xml/com.sun.org.apache.bcel.internal.generic
* @bug 8003147
* @summary Test port fix for BCEL bug 39695.
*/
import java.io.FileOutputStream;
! import java.util.ArrayList;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.sun.org.apache.bcel.internal.classfile.ClassParser;
import com.sun.org.apache.bcel.internal.classfile.ConstantClass;
import com.sun.org.apache.bcel.internal.classfile.ConstantPool;
--- 21,43 ----
* questions.
*/
/*
* @test
* @bug 8003147
* @summary Test port fix for BCEL bug 39695.
*/
+ package parsers;
+
import java.io.FileOutputStream;
! import java.io.FilePermission;
!
! import jaxp.library.JAXPTestUtilities;
import org.testng.Assert;
+ import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import com.sun.org.apache.bcel.internal.classfile.ClassParser;
import com.sun.org.apache.bcel.internal.classfile.ConstantClass;
import com.sun.org.apache.bcel.internal.classfile.ConstantPool;
*** 42,61 ****
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.ClassGen;
import com.sun.org.apache.bcel.internal.generic.MethodGen;
public class Bug8003147Test {
@Test
public void test() throws Exception {
! String classfile = getClass().getResource("Bug8003147Test.class").getPath();
JavaClass jc = new ClassParser(classfile).parse();
// rename class
ConstantPool cp = jc.getConstantPool();
int cpIndex = ((ConstantClass) cp.getConstant(jc.getClassNameIndex())).getNameIndex();
! cp.setConstant(cpIndex, new ConstantUtf8("Bug8003147TestPrime"));
ClassGen gen = new ClassGen(jc);
Method[] methods = jc.getMethods();
int index;
for (index = 0; index < methods.length; index++) {
if (methods[index].getName().equals("doSomething")) {
--- 45,71 ----
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.ClassGen;
import com.sun.org.apache.bcel.internal.generic.MethodGen;
+ @Listeners({ jaxp.library.FilePolicy.class, jaxp.library.InternalAPIPolicy.class })
public class Bug8003147Test {
@Test
public void test() throws Exception {
! // Note: com.sun.org.apache.bcel.internal.classfile.JavaClass doesn't
! // support InvokeDynamic, so can't use lambda, also can't use string1 +
! // string2, because javac will generate a dynamic call where invoking
! // string1.concat(string2), so create a separate Bug8003147TestClass
! JAXPTestUtilities.tryRunWithTmpPermission(() -> {
! String classfile = System.getProperty("test.classes") + "/parsers/Bug8003147TestClass.class";
JavaClass jc = new ClassParser(classfile).parse();
+
// rename class
ConstantPool cp = jc.getConstantPool();
int cpIndex = ((ConstantClass) cp.getConstant(jc.getClassNameIndex())).getNameIndex();
! cp.setConstant(cpIndex, new ConstantUtf8("parsers/Bug8003147TestClassPrime"));
ClassGen gen = new ClassGen(jc);
Method[] methods = jc.getMethods();
int index;
for (index = 0; index < methods.length; index++) {
if (methods[index].getName().equals("doSomething")) {
*** 63,81 ****
}
}
Method m = methods[index];
MethodGen mg = new MethodGen(m, gen.getClassName(), gen.getConstantPool());
gen.replaceMethod(m, mg.getMethod());
! String path = classfile.replace("Bug8003147Test", "Bug8003147TestPrime");
gen.getJavaClass().dump(new FileOutputStream(path));
try {
! Class.forName("Bug8003147TestPrime");
} catch (ClassFormatError cfe) {
cfe.printStackTrace();
Assert.fail("modified version of class does not pass verification");
}
! }
!
! public void doSomething(double d, ArrayList<Integer> list) {
}
}
--- 73,89 ----
}
}
Method m = methods[index];
MethodGen mg = new MethodGen(m, gen.getClassName(), gen.getConstantPool());
gen.replaceMethod(m, mg.getMethod());
! String path = classfile.replace("Bug8003147TestClass", "Bug8003147TestClassPrime");
gen.getJavaClass().dump(new FileOutputStream(path));
try {
! Class.forName("parsers.Bug8003147TestClassPrime");
} catch (ClassFormatError cfe) {
cfe.printStackTrace();
Assert.fail("modified version of class does not pass verification");
}
! }, new FilePermission(System.getProperty("test.classes") + "/-", "read, write"));
}
}
< prev index next >