Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8191131

Nashorn test comparator breaks comparator contract

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 10
    • 10
    • core-libs
    • b32
    • generic
    • generic

      The comparator used in TestReorderInterceptor to sort nashorn tests does not fulfill the contract required by the Comparator.compare method. It returns 0 if any argument is not an ITest, which would require that arguments return the same sign when compared to a third object.

      This wasn't a problem so far, but some recent change (eithern in our test suite or in the JDK) triggers the code when running 'ant test':

      -test-security:
         [testng] [TestNG] Running:
         [testng] Ant suite
         [testng]
         [testng] Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
         [testng] at java.base/java.util.TimSort.mergeHi(TimSort.java:899)
         [testng] at java.base/java.util.TimSort.mergeAt(TimSort.java:516)
         [testng] at java.base/java.util.TimSort.mergeForceCollapse(TimSort.java:457)
         [testng] at java.base/java.util.TimSort.sort(TimSort.java:254)
         [testng] at java.base/java.util.Arrays.sort(Arrays.java:1440)
         [testng] at java.base/java.util.Arrays$ArrayList.sort(Arrays.java:4404)
         [testng] at java.base/java.util.Collections.sort(Collections.java:175)
         [testng] at jdk.nashorn.internal.test.framework.TestReorderInterceptor.intercept(TestReorderInterceptor.java:42)
         [testng] at org.testng.TestRunner.intercept(TestRunner.java:787)
         [testng] at org.testng.TestRunner.privateRun(TestRunner.java:734)
         [testng] at org.testng.TestRunner.run(TestRunner.java:617)
         [testng] at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
         [testng] at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
         [testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
         [testng] at org.testng.SuiteRunner.run(SuiteRunner.java:240)
         [testng] at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
         [testng] at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
         [testng] at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
         [testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
         [testng] at org.testng.TestNG.run(TestNG.java:1031)
         [testng] at org.testng.TestNG.privateMain(TestNG.java:1338)
         [testng] at org.testng.TestNG.main(TestNG.java:1307)

            hannesw Hannes Wallnoefer
            hannesw Hannes Wallnoefer
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: