1 /*
2  * Copyright (c) 2010, 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 7003643
27  * @summary Make sure MessageFormat.toPattern produces correct quoting. (SPI part is tested in PluggableLocale tests.)
28  * @key randomness
29  */
30 
31 package test.java.text.Format.MessageFormat;
32 
33 import java.text.*;
34 import java.util.*;
35 
36 public class Bug7003643 {
37     private static final int N = 5;
38 
39     private static final String[] elements = {
40         "'{'", "'{", "{", "''", "}", "a", "'",
41     };
42 
main(String[] args)43     public static void main(String[] args) {
44         Random rand = new Random();
45         int count = 0;
46         int max = (int) (Math.pow((double)elements.length, (double)N)/0.52);
47         while (count < max) {
48             // Create a random pattern. If the produced pattern is
49             // valid, then proceed with the round-trip testing.
50             StringBuilder sb = new StringBuilder();
51             for (int i = 0; i < N; i++) {
52                 sb.append(elements[rand.nextInt(elements.length)]);
53             }
54             String pattern = sb.toString();
55             MessageFormat mf = null;
56             try {
57                 mf = new MessageFormat(pattern);
58             } catch (IllegalArgumentException e) {
59                 // bad pattern data
60             }
61             if (mf == null) {
62                 continue;
63             }
64             count++;
65             String res1 = MessageFormat.format(pattern, 123);
66             String toPattern = mf.toPattern();
67             String res2 = MessageFormat.format(toPattern, 123);
68             if (!res1.equals(res2)) {
69                 String s = String.format("Failed%n      pattern=\"%s\"  =>  result=\"%s\"%n"
70                                          + "  toPattern()=\"%s\"  =>  result=\"%s\"%n",
71                                          pattern, res1, toPattern, res2);
72                 throw new RuntimeException(s);
73             }
74         }
75     }
76 }
77