< prev index next >
test/javax/xml/jaxp/unittest/parsers/Bug8003147Test.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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,20 +21,23 @@
* 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.
*/
+package parsers;
+
import java.io.FileOutputStream;
-import java.util.ArrayList;
+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,20 +45,27 @@
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 {
- String classfile = getClass().getResource("Bug8003147Test.class").getPath();
+ // 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("Bug8003147TestPrime"));
+ 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,19 +73,17 @@
}
}
Method m = methods[index];
MethodGen mg = new MethodGen(m, gen.getClassName(), gen.getConstantPool());
gen.replaceMethod(m, mg.getMethod());
- String path = classfile.replace("Bug8003147Test", "Bug8003147TestPrime");
+ String path = classfile.replace("Bug8003147TestClass", "Bug8003147TestClassPrime");
gen.getJavaClass().dump(new FileOutputStream(path));
try {
- Class.forName("Bug8003147TestPrime");
+ Class.forName("parsers.Bug8003147TestClassPrime");
} catch (ClassFormatError cfe) {
cfe.printStackTrace();
Assert.fail("modified version of class does not pass verification");
}
- }
-
- public void doSomething(double d, ArrayList<Integer> list) {
+ }, new FilePermission(System.getProperty("test.classes") + "/-", "read, write"));
}
}
< prev index next >