Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix StandaloneTests specific for Java 8 #3416

Merged
merged 4 commits into from
Sep 10, 2023

Commits on Aug 6, 2023

  1. Drop misleading messages in StandaloneTests

    Test `execute()` in StandaloneTests asserts matching of lines between
    expected standard output and actual output lines.  It also passes the
    same actual lines (but in a `String` form) as a message to method
    assertLinesMatch, which takes three arguments.  Same situation for
    standard error.
    
    Drop this confusing argument from the two calls to assertLinesMatch and
    let class `AssertLinesMatch` construct the error message for us.
    rybak committed Aug 6, 2023
    Configuration menu
    Copy the full SHA
    4d51cd6 View commit details
    Browse the repository at this point in the history
  2. Unify messages about exit codes in StandaloneTests

    Some tests in StandaloneTests provide concatenation of standard output
    and standard error as a message for the assertion about exit code, while
    other tests provide only standard output.  Some use method
    de.sormuras.bartholdy.Result#getOutput while others use method
    de.sormuras.bartholdy.Result#getOutputLines.
    
    Unify these approaches by replacing the messages with a supplier that
    gives a) a human-readable message about exit codes, and b) both standard
    output and standard error.
    rybak committed Aug 6, 2023
    Configuration menu
    Copy the full SHA
    3f2590d View commit details
    Browse the repository at this point in the history
  3. Run StandaloneTests for Java 8 under Java 8

    Problem
    -------
    Tests that claim by their name to run on Java 8 don't actually run on
    Java 8.  This can be clear from the output for tests that add option
    `--show-version` to the arguments and _don't_ fail -- they all print the
    version for the current JDK.
    
    The tool `java` of JDK 8 does _not_ have the option `--show-version`.
    The actual option that exists in JDK 8 has fewer hyphens, as per
    documentation of Java 8 [1]:
    
        -showversion
    
        Displays version information and continues execution of the application.
        This option is equivalent to the `-version` option except that the latter
        instructs the JVM to exit after displaying version information.
    
    And when I actually run Java 8 binary with the incorrect option
    `--show-version` used by the affected tests, I get:
    
        $ /usr/lib/jvm/java-8-openjdk-amd64/bin/java --show-version
        Unrecognized option: --show-version
        Error: Could not create the Java Virtual Machine.
        Error: A fatal exception has occurred. Program will exit.
    
    The option `--show-version` was only added in Java 9 [2].
    
    Explanation
    -----------
    In actuality, the tests are being run on whatever the current JDK is.
    These tests create an instance of class `de.sormuras.bartholdy.tool.Java`,
    which importantly has the following method:
    
        @OverRide
        public Path getHome() {
          return Bartholdy.currentJdkHome();
        }
    
    When the `bartholdy` library creates the process, class `AbstractTool`
    does the following:
    
        protected Path createPathToProgram() {
          return getHome().resolve("bin").resolve(getProgram());
        }
    
    The string `"java"` returned from method `getProgram` of class `Java`
    gets resolved against `Bartholdy.currentJdkHome()`.
    
    As far as I can tell, the library doesn't promise to look up the `java`
    binary in the `JAVA_HOME` supplied in the environment.  In fact, just
    before consuming library user's environment, method `run()` of class
    `de.sormuras.bartholdy.tool.AbstractTool` puts the current JDK as
    `JAVA_HOME` into the environment to correspond to the behavior of class
    `de.sormuras.bartholdy.tool.Java` described above:
    
        builder.environment().put("JAVA_HOME", Bartholdy.currentJdkHome().toString());
    
    The issue has been present since commit [3] where these tests were
    introduced.
    
    Fix
    ---
    Fix affected tests to run them under actual Java 8 by overriding method
    `de.sormuras.bartholdy.tool.Java#getHome`.  Replace erroneous option
    `--show-version` with `-showversion`.
    
    To make tests executeOnJava8() and executeOnJava8SelectPackage() see the
    class files, update test compile() to use option `--release 8`.  Because
    compiling to release 8 is deprecated, add a linter option to disable the
    warning to make compile() pass.
    
    Because option `-showversion` of Java 8 behaves slightly differently to
    option `--show-version` of later versions of Java, prepare two new files
    for expected stdout and stderr: expected-out-java8.txt and
    expected-err-java8.txt, which are similar to existing files
    expected-out.txt and expected-err.txt, but have different layout of
    fastforward lines "JAVA VERSION" and "TREE".
    
    Footnotes
    ---------
    [1] "Java Platform, Standard Edition Tools Reference", "java"
        https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
        https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
    [2] https://docs.oracle.com/javase/9/tools/java.htm
    
        > `--show-version` or `-showversion`
        >
        > Displays version information and continues execution of the application.
        > This option is equivalent to the `-version` option except that the latter
        > instructs the JVM to exit after displaying version information.
    [3] c62cd6a (Fix package path computation in `ClasspathScanner`,
        2021-05-12) from junit-team#2613
    rybak committed Aug 6, 2023
    Configuration menu
    Copy the full SHA
    3fad8c6 View commit details
    Browse the repository at this point in the history

Commits on Sep 10, 2023

  1. Configuration menu
    Copy the full SHA
    060f2c4 View commit details
    Browse the repository at this point in the history