1 /*
   2  * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /**
  25  * @test
  26  * @bug 6609750
  27  * @summary Make sure that SimpleDateFormat.format() formats years correctly.
  28  */
  29 import java.text.*;
  30 import java.util.*;
  31 
  32 public class Bug6609750 {
  33 
  34     public static void main(String[] args) {
  35         boolean error = false;
  36 
  37         Locale defaultLocale = Locale.getDefault();
  38         Locale.setDefault(Locale.US);
  39 
  40         Date[] dates = {
  41             new Date(9-1900,     Calendar.JUNE, 12),
  42             new Date(99-1900,    Calendar.JUNE, 12),
  43             new Date(999-1900,   Calendar.JUNE, 12),
  44             new Date(2009-1900,  Calendar.JUNE, 12),
  45             new Date(30009-1900, Calendar.JUNE, 12),
  46         };
  47 
  48         String[] patterns = {
  49            "y", "yy", "yyy", "yyyy", "yyyyy", "yyyyyy"
  50         };
  51         String[][] expectedResults = {
  52            {"9",     "09", "009",   "0009",  "00009", "000009"},
  53            {"99",    "99", "099",   "0099",  "00099", "000099"},
  54            {"999",   "99", "999",   "0999",  "00999", "000999"},
  55            {"2009",  "09", "2009",  "2009",  "02009", "002009"},
  56            {"30009", "09", "30009", "30009", "30009", "030009"},
  57         };
  58 
  59         SimpleDateFormat sdf = new SimpleDateFormat();
  60         for (int dateNo = 0; dateNo < dates.length; dateNo++) {
  61             Date date = dates[dateNo];
  62             for (int patternNo = 0; patternNo < patterns.length; patternNo++) {
  63                 sdf.applyPattern(patterns[patternNo]);
  64                 String got = sdf.format(date);
  65                 if (!expectedResults[dateNo][patternNo].equals(got)) {
  66                     error = true;
  67                     System.err.println("Failed: Unexpected format result: " +
  68                         "Expected: \"" + expectedResults[dateNo][patternNo] +
  69                         "\", Got: \"" + got + "\" for date " + date +
  70                         " with pattern \"" + patterns[patternNo] + "\"");
  71                 }
  72             }
  73         }
  74 
  75         Locale.setDefault(defaultLocale);
  76         if (error) {
  77             throw new RuntimeException("SimpleDateFormat.format() error.");
  78         };
  79     }
  80 
  81 }