Hi Fernando,

Ah - I see the keypoint is the:
  39  * @clean org.w3c.dom.*
OK, I missed that. Then I agree - ignore my previous comments.

Maybe the explanations below should be added to the test in some
comment to help future maintainers (and reviewers).

best regards,

-- daniel


On 08/05/2020 18:19, Fernando Guallini wrote:
Hi Daniel and Alan,
@compile/module=java.xml was my first try, but for the nature of this test, it didn't work. The reason is that the original shell test does the following:
- Compiles it’s own version of Node and Document interfaces
- Compiles DocumentImpl patching java.xml with those 2 interfaces
- Executes the AbstractMethodErrorTest patching the java.xml module *only with DocumentImpl* patch(not including Document and Node)

It does that by keeping the patches output in different folders. That’s important otherwise AbstractMethodErrorTest doesn’t compile, because it references some methods not declared in its custom interfaces, and it seems to be coded this way to reproduce the original bug. That is also the reason why I added the *@clean* command to remove Document and Node *before* running the test.

But when using *@compile/module=java.xml*, under the hood, JTREG generates a folder named “patches/java.xml/..” including all the compiled classes under it. Unfortunately, the temporary interfaces can’t be removed because *@clean* does not know how to resolve the path "/patches/java.xml/..”.

To sum up, this test creates a temporary java.xml patch that needs to be ignored after compiling *DocumentImpl. *I am using —patch-module because it’s more flexible than @compile/module
*
*
Hope I explained myself!


On 8 May 2020, at 15:49, Daniel Fuchs <daniel.fu...@oracle.com <mailto:daniel.fu...@oracle.com>> wrote:

On 08/05/2020 15:40, Alan Bateman wrote:
  31 /*
  32  * @test
  33  * @bug 8035437
  34  * @summary Tests that java.lang.AbstractMethodError is not thrown when
  35  * serializing improper version of DocumentImpl class.
  36  * @library /test/lib
      * @modules javax.xml/org.w3c.dom
      *          javax.xml/com.sun.org.apache.xerces.internal.dom
  40  * @run main/othervm --patch-module java.xml=${test.class.path} AbstractMethodErrorTest
  41  */

(not 100% sure the @modules is even needed)
I wouldn't expect to need --patch-module here. Instead maybe it could be changed to use @compile/module=java.xml ... and jtreg should compile and run the overrides "as if" they are in the java.xml module. There are a couple of examples of this in the test suite that might help get this going. No need for javax.xml/org.w3c.dom as that package is already exported.

Right. Copy paste error. The --patch-module shouldn't be needed
anywhere. Good point about @compile - the main class
AbstractMethodErrorTest is not in the patched module, so
the patched classes may not get compiled if you don't force
their compilation.

Thanks for the correction Alan!

-- daniel


Reply via email to