1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.support;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Support class to verify that the methods of
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ObjectInputStream.GetField} handle default values correctly.
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Important:</strong> The test method
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code test_defaultedLjava_lang_String()} in
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code tests.api.java.io.ObjectInputStreamGetFieldTest} depends on a
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reference file which can be generated with
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code tests.util.FieldTestFileGenerator}. However, the default mechanism of
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code GetField} only works if the fields that are supposed to be read have
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not been written to the file. This can only be accomplished if the fields do
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * not exist (are not declared) when writing an instance of this class.
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Therefore, when executing {@code tests.util.FieldTestFileGenerator}, the
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contents of this class have to be commented out.
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p>
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Support_GetPutFieldsDefaulted implements Serializable {
42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = 1L;
44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public ObjectInputStream.GetField getField;
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public ObjectOutputStream.PutField putField;
47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean booleanValue = false;
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public byte byteValue = 0;
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public char charValue = 0;
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public double doubleValue = 0.0;
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public float floatValue = 0.0f;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public long longValue = 0;
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int intValue = 0;
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public short shortValue = 0;
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public SimpleClass objectValue = null;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class SimpleClass implements Serializable {
59f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 1L;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private int a;
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private String b;
63f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public SimpleClass(int aValue, String bValue) {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            a = aValue;
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            b = bValue;
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getA() {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return a;
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getB() {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return b;
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean equals(Object obj) {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (obj == null || obj.getClass() != this.getClass()) {
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SimpleClass other = (SimpleClass) obj;
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return (a == other.getA() && b.equals(other.getB()));
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
86f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void initTestValues() {
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        booleanValue = true;
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byteValue = (byte) 0x0b;
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        charValue = 'D';
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        doubleValue = 523452.4532;
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        floatValue = 298.54f;
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        longValue = 1234567890l;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        intValue = 999999;
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        objectValue = new SimpleClass(1965, "Hello Jupiter");
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        shortValue = 4321;
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object obj) {
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (obj == null || obj.getClass() != this.getClass()) {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_GetPutFieldsDefaulted other = (Support_GetPutFieldsDefaulted) obj;
105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        return (booleanValue == other.booleanValue &&
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                byteValue == other.byteValue &&
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                charValue == other.charValue &&
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                doubleValue == other.doubleValue &&
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                floatValue == other.floatValue &&
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                longValue == other.longValue &&
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                intValue == other.intValue &&
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                objectValue.equals(other.objectValue) &&
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                shortValue == other.shortValue
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                );
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
116f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void readObject(ObjectInputStream ois) throws Exception {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        getField = ois.readFields();
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        booleanValue = getField.get("booleanValue", true);
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byteValue = getField.get("byteValue", (byte) 0x0b);
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        charValue = getField.get("charValue", (char) 'D');
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        doubleValue = getField.get("doubleValue", 523452.4532);
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        floatValue = getField.get("floatValue", 298.54f);
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        longValue = getField.get("longValue", (long) 1234567890l);
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        intValue = getField.get("intValue", 999999);
126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        objectValue = (Support_GetPutFieldsDefaulted.SimpleClass)
127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                       getField.get("objectValue",
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                    new SimpleClass(1965, "Hello Jupiter"));
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        shortValue = getField.get("shortValue", (short) 4321);
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
131f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void writeObject(ObjectOutputStream oos) throws IOException {
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        putField = oos.putFields();
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Do not put anything into putField so that the get methods
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // will have to use default values.
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        oos.writeFields();
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
138f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
140