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

Some of Charset.availableCharsets() does not contain itself

XMLWordPrintable

    • b03
    • generic
    • generic
    • Verified

      FULL PRODUCT VERSION :
      java version "1.8.0_102"
      Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Linux, version 3.2.0-99-generic-pae
      Mac OS X, version 10.8.5

      A DESCRIPTION OF THE PROBLEM :
      The following charsets returned by Charset.availableCharsets() does not contain itself
      CESU-8
      UTF-32
      UTF-32BE
      UTF-32LE
      x-eucJP-Open
      x-JISAutoDetect
      X-UTF-32BE-BOM
      X-UTF-32LE-BOM

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Charset(CESU-8).contains(Charset(CESU-8)) returns true
      Charset(UTF-32).contains(Charset(UTF-32)) returns true
      Charset(UTF-32BE).contains(Charset(UTF-32BE)) returns true
      Charset(UTF-32LE).contains(Charset(UTF-32LE)) returns true
      Charset(x-eucJP-Open).contains(Charset(x-eucJP-Open)) returns true
      Charset(x-JISAutoDetect).contains(Charset(x-JISAutoDetect)) returns true
      Charset(X-UTF-32BE-BOM).contains(Charset(X-UTF-32BE-BOM)) returns true
      Charset(X-UTF-32LE-BOM).contains(Charset(X-UTF-32LE-BOM)) returns true
      ACTUAL -
      Charset(CESU-8).contains(Charset(CESU-8)) returns false
      Charset(UTF-32).contains(Charset(UTF-32)) returns false
      Charset(UTF-32BE).contains(Charset(UTF-32BE)) returns false
      Charset(UTF-32LE).contains(Charset(UTF-32LE)) returns false
      Charset(x-eucJP-Open).contains(Charset(x-eucJP-Open)) returns false
      Charset(x-JISAutoDetect).contains(Charset(x-JISAutoDetect)) returns false
      Charset(X-UTF-32BE-BOM).contains(Charset(X-UTF-32BE-BOM)) returns false
      Charset(X-UTF-32LE-BOM).contains(Charset(X-UTF-32LE-BOM)) returns false

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.util.Map;
      import java.nio.charset.Charset;

      /**
       * Each charset from all available charsets must contains itself.
       */

      public class ContainsTest {


          public int callSystemGC = 1;


          public static void main(String[] args) {

              boolean failed = false;

              for (Map.Entry<String, Charset> entry : Charset.availableCharsets().entrySet()) {
                  String name = entry.getKey();
                  Charset charset = entry.getValue();
                  boolean contains = charset.contains(charset);

                  if (!contains) {
                      System.out.println("Charset(" + charset.name() + ").contains(Charset(" + charset.name()
                              + ")) returns " + contains);
                      failed = true;
                  }
              }
              if (failed)
                  throw new RuntimeException("Charset.contains(itself) returns false for some charsets");
              return;
          }
      }

      ---------- END SOURCE ----------

            naoto Naoto Sato
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: