blob: ea1b7c3fff693f633d21a8b2035534722e04044e [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.api.java.io;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargetClass;
import java.io.ObjectStreamClass;
import java.io.ObjectStreamField;
import java.io.Serializable;
@TestTargetClass(ObjectStreamClass.class)
public class ObjectStreamClassTest extends junit.framework.TestCase {
static class DummyClass implements Serializable {
private static final long serialVersionUID = 999999999999999L;
long bam = 999L;
int ham = 9999;
public static long getUID() {
return serialVersionUID;
}
}
/**
* @tests java.io.ObjectStreamClass#forClass()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "forClass",
args = {}
)
public void test_forClass() {
// Test for method java.lang.Class java.io.ObjectStreamClass.forClass()
// Need to test during serialization to be sure an instance is
// returned
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
assertTrue("forClass returned an object: " + osc.forClass(), osc
.forClass().equals(DummyClass.class));
}
/**
* @tests java.io.ObjectStreamClass#getField(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getField",
args = {java.lang.String.class}
)
public void test_getFieldLjava_lang_String() {
// Test for method java.io.ObjectStreamField
// java.io.ObjectStreamClass.getField(java.lang.String)
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
assertEquals("getField did not return correct field", 'J', osc.getField("bam")
.getTypeCode());
assertNull("getField did not null for non-existent field", osc
.getField("wham"));
}
/**
* @tests java.io.ObjectStreamClass#getFields()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getFields",
args = {}
)
public void test_getFields() {
// Test for method java.io.ObjectStreamField []
// java.io.ObjectStreamClass.getFields()
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
ObjectStreamField[] osfArray = osc.getFields();
assertTrue(
"Array of fields should be of length 2 but is instead of length: "
+ osfArray.length, osfArray.length == 2);
}
/**
* @tests java.io.ObjectStreamClass#getName()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getName",
args = {}
)
public void test_getName() {
// Test for method java.lang.String java.io.ObjectStreamClass.getName()
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
assertTrue("getName returned incorrect name: " + osc.getName(), osc
.getName().equals(
"tests.api.java.io.ObjectStreamClassTest$DummyClass"));
}
/**
* @tests java.io.ObjectStreamClass#getSerialVersionUID()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getSerialVersionUID",
args = {}
)
public void test_getSerialVersionUID() {
// Test for method long java.io.ObjectStreamClass.getSerialVersionUID()
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
assertTrue("getSerialversionUID returned incorrect uid: "
+ osc.getSerialVersionUID() + " instead of "
+ DummyClass.getUID(), osc.getSerialVersionUID() == DummyClass
.getUID());
}
/**
* @tests java.io.ObjectStreamClass#lookup(java.lang.Class)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "lookup",
args = {java.lang.Class.class}
)
public void test_lookupLjava_lang_Class() {
// Test for method java.io.ObjectStreamClass
// java.io.ObjectStreamClass.lookup(java.lang.Class)
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
assertTrue("lookup returned wrong class: " + osc.getName(), osc
.getName().equals(
"tests.api.java.io.ObjectStreamClassTest$DummyClass"));
}
/**
* @tests java.io.ObjectStreamClass#toString()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "toString",
args = {}
)
public void test_toString() {
// Test for method java.lang.String java.io.ObjectStreamClass.toString()
ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
String oscString = osc.toString();
// The previous test was more specific than the spec so it was replaced
// with the test below
assertTrue("toString returned incorrect string: " + osc.toString(),
oscString.indexOf("serialVersionUID") >= 0
&& oscString.indexOf("999999999999999L") >= 0);
;
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "lookup",
args = {java.lang.Class.class}
)
public void testSerialization() {
ObjectStreamClass osc = ObjectStreamClass.lookup(ObjectStreamClass.class);
assertEquals(0, osc.getFields().length);
}
/**
* Sets up the fixture, for example, open a network connection. This method
* is called before a test is executed.
*/
protected void setUp() {
}
/**
* Tears down the fixture, for example, close a network connection. This
* method is called after a test is executed.
*/
protected void tearDown() {
}
// BEGIN android-added
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void testFooSerialVersionUid() {
assertEquals(-5887964677443030867L, Foo.serialVersionUID());
}
/**
* An arbitrary class which deliberately tickles various factors affecting
* serialVersionUID calculation.
*/
static abstract class Foo implements Cloneable, Serializable {
/** All fields except "private static|transient", which these aren't. */
private final String name = "foo";
static final long now;
/** Presence of static initializer has an affect. */
static {
now = System.currentTimeMillis();
}
/** Non-private constructors. */
Foo() {}
protected Foo(int ignored) {}
/** Non-private methods. */
synchronized static int foo() { return 0; }
static int bar() { return 0; }
abstract void tee();
protected native synchronized boolean bob();
protected synchronized void tim() {}
/** Calculates Foo's default serialVersionUID. */
static long serialVersionUID() {
return ObjectStreamClass.lookup(Foo.class).getSerialVersionUID();
}
}
public static void main(String[] args) {
System.out.println(Foo.serialVersionUID());
}
// END android-added
}