File: Bug4185816Test.java

package info (click to toggle)
openjdk-11 11.0.4%2B11-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 757,028 kB
  • sloc: java: 5,016,041; xml: 1,191,974; cpp: 934,731; ansic: 555,697; sh: 24,299; objc: 12,703; python: 3,602; asm: 3,415; makefile: 2,772; awk: 351; sed: 172; perl: 114; jsp: 24; csh: 3
file content (135 lines) | stat: -rw-r--r-- 5,074 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
 * @test
 * @bug 4185816
 * @library /java/text/testlib
 * @build Bug4185816Test IntlTest HexDumpReader
 * @run main Bug4185816Test
 * @summary test that MessageFormat invariants are preserved across serialization
 */
/*
 *
 *
 * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
 *
 * Portions copyright (c) 2007 Sun Microsystems, Inc.
 * All Rights Reserved.
 *
 * The original version of this source code and documentation
 * is copyrighted and owned by Taligent, Inc., a wholly-owned
 * subsidiary of IBM. These materials are provided under terms
 * of a License Agreement between Taligent and Sun. This technology
 * is protected by multiple US and International patents.
 *
 * This notice and attribution to Taligent may not be removed.
 * Taligent is a registered trademark of Taligent, Inc.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */

import java.util.*;
import java.io.*;
import java.text.ChoiceFormat;
import java.text.MessageFormat;

/**
 *  A Locale can never contains language codes of he, yi or id.
 */
public class Bug4185816Test extends IntlTest {
    private static final String FILE_NAME = "Bug4185816.ser";
    private static final String CORRUPT_FILE_NAME = "Bug4185816Corrupt.ser";

    public static void main(String[] args) throws Exception {
        if (args.length == 1 && args[0].equals("prepTest")) {
            prepTest();
        } else {
            new Bug4185816Test().run(args);
        }
    }

    public void testIt() throws Exception {
        Exception e = checkStreaming(FILE_NAME);
        if (e != null) {
            errln("MessageFormat did not stream in valid stream: "+e);
            e.printStackTrace();
        }
        e = checkStreaming(CORRUPT_FILE_NAME);
        if (!(e instanceof InvalidObjectException)) {
            errln("MessageFormat did NOT detect corrupt stream: "+e);
            e.printStackTrace();
        }
    }

    public Exception checkStreaming(final String fileName) {
        try {
            final InputStream is = HexDumpReader.getStreamFromHexDump(fileName + ".txt");
            final ObjectInputStream in = new ObjectInputStream(is);
            final MessageFormat form = (MessageFormat)in.readObject();
            final Object[] testArgs = {12373L, "MyDisk"};
            final String result = form.format(testArgs);
            in.close();
        } catch (Exception e) {
            return e;
        }
        return null;
    }

    /**
     * Create a data file for this test.  The data file must be corrupted by hand.
     */
    private static void prepTest() {
        writeFormatToFile(FILE_NAME);
        writeFormatToFile(CORRUPT_FILE_NAME);
    }

    private static void writeFormatToFile(final String name) {
        try {
            ObjectOutputStream out = new ObjectOutputStream(
                    new FileOutputStream(name));

            MessageFormat fmt = new MessageFormat("The disk \"{1}\" contains {0}.");
            double[] filelimits = {0,1,2};
            String[] filepart = {"no files","one file","{0,number} files"};
            ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
            fmt.setFormat(1,fileform); // NOT zero, see below

            out.writeObject(fmt);
            out.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}