1 /*
2  * Copyright (c) 2003, 2016, 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  * @library /java/text/testlib
27  * @summary test Supplementary Character Collation
28  */
29 
30 import java.text.Collator;
31 import java.text.RuleBasedCollator;
32 
33 // Quick dummy program for printing out test results
34 public class SurrogatesTest extends CollatorTest {
35 
main(String[] args)36     public static void main(String[] args) throws Exception {
37         new SurrogatesTest().run(args);
38     }
39 
40     /*
41      * Data for TestPrimary()
42      */
43     private static final String[] primarySourceData = {
44         "A\ud800\udc04BCD"
45     };
46 
47     private static final String[] primaryTargetData = {
48         "A\ud800\udc05BCD"
49     };
50 
51     private static final int[] primaryResults = {
52          0
53     };
54 
55     /*
56      * Data for TestTertiary()
57      */
58     private static final String[] tertiarySourceData = {
59         "ABCD",
60         "ABCD",
61         "A\ud800\udc00CD",
62         "WXYZ",
63         "WXYZ",
64         "AFEM",
65         "FGM",
66         "BB",
67         "BB"
68     };
69 
70     private static final String[] tertiaryTargetData = {
71         "A\ud800\udc00CD",
72         "AB\ud800\udc00D",
73         "A\ud800\udc01CD",
74         "W\ud800\udc0aYZ",
75         "W\ud800\udc0bYZ",
76         "A\ud800\udc08M",
77         "\ud800\udc08M",
78         "\ud800\udc04\ud800\udc02",
79         "\ud800\udc04\ud800\udc05"
80     };
81 
82     private static final int[] tertiaryResults = {
83         -1,  1,  1,  1, -1, -1, -1, -1,  1
84     };
85 
TestPrimary()86     public void TestPrimary() {
87         doTest(myCollation, Collator.PRIMARY,
88                primarySourceData, primaryTargetData, primaryResults);
89     }
90 
TestTertiary()91     public void TestTertiary() {
92         doTest(myCollation, Collator.TERTIARY,
93                tertiarySourceData, tertiaryTargetData, tertiaryResults);
94     }
95 
getCollator()96     private Collator getCollator() {
97         RuleBasedCollator base = (RuleBasedCollator)Collator.getInstance();
98         String rule = base.getRules();
99         try {
100             return new RuleBasedCollator(rule
101                                      + "&B < \ud800\udc01 < \ud800\udc00"
102                                      + ", \ud800\udc02, \ud800\udc03"
103                                      + "; \ud800\udc04, \ud800\udc05"
104                                      + "< \ud800\udc06 < \ud800\udc07"
105                                      + "&FE < \ud800\udc08"
106                                      + "&PE, \ud800\udc09"
107                                      + "&Z < \ud800\udc0a < \ud800\udc0b < \ud800\udc0c"
108                                      + "&\ud800\udc0a < x, X"
109                                      + "&A < \ud800\udc04\ud800\udc05");
110         } catch (Exception e) {
111             errln("Failed to create new RulebasedCollator object");
112             return null;
113         }
114     }
115 
116     private Collator myCollation = getCollator();
117 }
118