1/*
2 * Copyright (c) 2008, 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/* @test
25 * @bug 4913702
26 * @summary validates canEncode(char c) method for sun.nio.cs.Shift_JIS
27 * @modules jdk.charsets
28 */
29
30
31import java.nio.*;
32import java.nio.charset.*;
33
34public class SJISCanEncode {
35    private Charset cs;
36    private CharsetEncoder encoder;
37
38    private void canEncodeTest(char inputChar,
39                               boolean expectedResult)
40                               throws Exception {
41        String msg = "err: Shift_JIS canEncode() return value ";
42
43        if (encoder.canEncode(inputChar) != expectedResult) {
44            throw new Exception(msg + !(expectedResult) +
45                ": "  + Integer.toHexString((int)inputChar));
46        }
47    }
48
49    public static void main(String[] args) throws Exception {
50        SJISCanEncode test = new SJISCanEncode();
51        test.cs = Charset.forName("SJIS");
52        test.encoder = test.cs.newEncoder();
53
54        // us-ascii (mappable by Shift_JIS)
55        test.canEncodeTest('\u0001', true);
56
57        // Halfwidth Katakana
58        test.canEncodeTest('\uFF01', true);
59
60        // CJK ideograph
61        test.canEncodeTest('\u4E9C', true);
62
63        //Hiragana
64        test.canEncodeTest('\u3041', true);
65        // fullwidth Katakana
66        test.canEncodeTest('\u30A1', true);
67
68        // U+0080 should be unmappable
69        // U+4000 is a BMP character not covered by Shift_JISe
70
71        test.canEncodeTest('\u0080', false);
72        test.canEncodeTest('\u4000', false);
73    }
74}
75