blob: 25b7417579faacecc43fe25cb4980939c44e1119 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package tests.support;
import java.io.Serializable;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
/**
* Support class to verify that the methods of
* {@code ObjectInputStream.GetField} handle default values correctly.
* <p>
* <strong>Important:</strong> The test method
* {@code test_defaultedLjava_lang_String()} in
* {@code tests.api.java.io.ObjectInputStreamGetFieldTest} depends on a
* reference file which can be generated with
* {@code tests.util.FieldTestFileGenerator}. However, the default mechanism of
* {@code GetField} only works if the fields that are supposed to be read have
* not been written to the file. This can only be accomplished if the fields do
* not exist (are not declared) when writing an instance of this class.
* Therefore, when executing {@code tests.util.FieldTestFileGenerator}, the
* contents of this class have to be commented out.
* </p>
*/
public class Support_GetPutFieldsDefaulted implements Serializable {
private static final long serialVersionUID = 1L;
public ObjectInputStream.GetField getField;
public ObjectOutputStream.PutField putField;
public boolean booleanValue = false;
public byte byteValue = 0;
public char charValue = 0;
public double doubleValue = 0.0;
public float floatValue = 0.0f;
public long longValue = 0;
public int intValue = 0;
public short shortValue = 0;
public SimpleClass objectValue = null;
class SimpleClass implements Serializable {
private static final long serialVersionUID = 1L;
private int a;
private String b;
public SimpleClass(int aValue, String bValue) {
a = aValue;
b = bValue;
}
public int getA() {
return a;
}
public String getB() {
return b;
}
public boolean equals(Object obj) {
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
SimpleClass other = (SimpleClass) obj;
return (a == other.getA() && b.equals(other.getB()));
}
}
public void initTestValues() {
booleanValue = true;
byteValue = (byte) 0x0b;
charValue = 'D';
doubleValue = 523452.4532;
floatValue = 298.54f;
longValue = 1234567890l;
intValue = 999999;
objectValue = new SimpleClass(1965, "Hello Jupiter");
shortValue = 4321;
}
public boolean equals(Object obj) {
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
Support_GetPutFieldsDefaulted other = (Support_GetPutFieldsDefaulted) obj;
return (booleanValue == other.booleanValue &&
byteValue == other.byteValue &&
charValue == other.charValue &&
doubleValue == other.doubleValue &&
floatValue == other.floatValue &&
longValue == other.longValue &&
intValue == other.intValue &&
objectValue.equals(other.objectValue) &&
shortValue == other.shortValue
);
}
private void readObject(ObjectInputStream ois) throws Exception {
getField = ois.readFields();
booleanValue = getField.get("booleanValue", true);
byteValue = getField.get("byteValue", (byte) 0x0b);
charValue = getField.get("charValue", (char) 'D');
doubleValue = getField.get("doubleValue", 523452.4532);
floatValue = getField.get("floatValue", 298.54f);
longValue = getField.get("longValue", (long) 1234567890l);
intValue = getField.get("intValue", 999999);
objectValue = (Support_GetPutFieldsDefaulted.SimpleClass)
getField.get("objectValue",
new SimpleClass(1965, "Hello Jupiter"));
shortValue = getField.get("shortValue", (short) 4321);
}
private void writeObject(ObjectOutputStream oos) throws IOException {
putField = oos.putFields();
// Do not put anything into putField so that the get methods
// will have to use default values.
oos.writeFields();
}
}