Harmony
  1. Harmony
  2. HARMONY-829

[classlib][io] unexpected result for java.io.File.compareTo(File) method

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Classlib
    • Labels:
      None

      Description

      The Harmony method java.io.File.compareTo(File) returns positive value while RI returns negative.

      ================= test.java ====================
      import java.io.*;

      public class test {
      public static void main (String[] args)

      { File f1 = new File("01", ""); File f2 = new File("0", ""); System.out.println("f1.getPath() = " + f1.getPath() + ", f2.getPath() = " + f2.getPath()); System.out.println("f2.compareTo(f1) = " + f2.compareTo(f1) + ", f1.compareTo(f2) = " + f1.compareTo(f2)); }

      }
      ============================================

      Output:
      C:\tmp\tmp17>C:\jrockit-jdk1.5.0-windows-ia32\bin\java.exe -showversion test
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      BEA WebLogic JRockit(R) (build dra-38972-20041208-2001-win-ia32, R25.0.0-75, GC: System optimized over throughput (initial strategy singleparpar))

      f1.getPath() = 01, f2.getPath() = 0
      f2.compareTo(f1) = -1, f1.compareTo(f2) = 1

      C:\tmp\tmp17>C:\harmony\trunk_0427\deploy\jdk\jre\bin\java.exe -showversion test
      java version 1.5 (subset)

      (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
      f1.getPath() = 01\, f2.getPath() = 0\
      f2.compareTo(f1) = 43, f1.compareTo(f2) = -43

      1. FileTest.patch
        0.7 kB
        Vladimir Ivanov
      2. patch-829.patch
        2 kB
        Ilya Okomin
      3. FileTest.patch
        1 kB
        Ilya Okomin
      4. Harmony-829-test.patch
        1 kB
        Ilya Okomin
      5. Harmony-829.patch
        1 kB
        Ilya Okomin

        Activity

        Hide
        Vladimir Ivanov added a comment -

        unit test

        Show
        Vladimir Ivanov added a comment - unit test
        Hide
        Alexey Petrenko added a comment -

        Small investigation shown that the problem is not in the File.compareTo method but in File.getPath method which returns different path in this case.

        As we can see from your output RI returns "01" and "0" as paths, but Harmony returns "01\" and "0\". String.compareTo and String.CompareToIgnoreCase methods returns the same results for this string on RI and Harmony.

        So the only way to fix this bug is to fix File.getPath method.

        Show
        Alexey Petrenko added a comment - Small investigation shown that the problem is not in the File.compareTo method but in File.getPath method which returns different path in this case. As we can see from your output RI returns "01" and "0" as paths, but Harmony returns "01\" and "0\". String.compareTo and String.CompareToIgnoreCase methods returns the same results for this string on RI and Harmony. So the only way to fix this bug is to fix File.getPath method.
        Hide
        Ilya Okomin added a comment -

        Please, try this patch.

        Show
        Ilya Okomin added a comment - Please, try this patch.
        Hide
        Ilya Okomin added a comment -

        I've updated regression test to cover this issue.

        Show
        Ilya Okomin added a comment - I've updated regression test to cover this issue.
        Hide
        Alexey Petrenko added a comment -

        Ilya,
        sources are changed and I can not apply your fix. Can you please adjust it?

        Show
        Alexey Petrenko added a comment - Ilya, sources are changed and I can not apply your fix. Can you please adjust it?
        Hide
        Ilya Okomin added a comment -

        Alexey, thanks for looking into my patch!
        I've updated patch and test to the latest repository version. Please try them!

        Show
        Ilya Okomin added a comment - Alexey, thanks for looking into my patch! I've updated patch and test to the latest repository version. Please try them!
        Hide
        Alexey Petrenko added a comment -

        I've applied the patch.
        Ilya, please check that it's OK.

        Show
        Alexey Petrenko added a comment - I've applied the patch. Ilya, please check that it's OK.
        Hide
        Vladimir Ivanov added a comment -

        verified, thanks

        Show
        Vladimir Ivanov added a comment - verified, thanks
        Hide
        Ilya Okomin added a comment -

        Alexey, thanks for applying my patch.
        Everything works as expected.

        Show
        Ilya Okomin added a comment - Alexey, thanks for applying my patch. Everything works as expected.

          People

          • Assignee:
            Alexey Petrenko
            Reporter:
            Vladimir Ivanov
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development