1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package libcore.java.io;
19
20import java.io.ObjectStreamClass;
21import java.io.ObjectStreamField;
22import java.io.Serializable;
23
24public class OldObjectStreamFieldTest extends junit.framework.TestCase {
25
26    static class DummyClass implements Serializable {
27        private static final long serialVersionUID = 999999999999998L;
28
29        boolean bField = true;
30        char cField = 'c';
31        double dField = 424242.4242;
32        float fField = 24.12F;
33        int iField = 1965;
34        long lField = 9999999L;
35        short sField = 42;
36
37        long bam = 999L;
38
39        int ham = 9999;
40
41        int sam = 8888;
42
43        Object hola = new Object();
44
45        public static long getUID() {
46            return serialVersionUID;
47        }
48    }
49
50    class MyObjectStreamField extends ObjectStreamField {
51        public MyObjectStreamField(String name, Class<?> cl) {
52            super(name, cl);
53        }
54
55        public void setOffset(int newValue) {
56            super.setOffset(newValue);
57        }
58    }
59
60    ObjectStreamClass osc;
61
62    ObjectStreamField hamField;
63
64    ObjectStreamField samField;
65
66    ObjectStreamField bamField;
67
68    ObjectStreamField holaField;
69
70    public void test_ConstructorLjava_lang_StringLjava_lang_Class() {
71        ObjectStreamField osf = new ObjectStreamField("aField", int.class);
72        assertTrue("Test 1: Name member not set correctly.",
73                   osf.getName().equals("aField"));
74        assertTrue("Test 2: Type member not set correctly.",
75                   osf.getType().equals(int.class));
76
77        // Repeat the tests with a different object to make sure
78        // that we have not tested against default values.
79        osf = new ObjectStreamField("anotherField", String.class);
80        assertTrue("Test 3: Name member not set correctly.",
81                   osf.getName().equals("anotherField"));
82        assertTrue("Test 4: Type member not set correctly.",
83                   osf.getType().equals(String.class));
84
85        // Invalid argument tests.
86        try {
87            osf = new ObjectStreamField(null, boolean.class);
88            fail("Test 5: NullPointerException expected.");
89        } catch (NullPointerException e) {
90            // Expected.
91        }
92        try {
93            osf = new ObjectStreamField("thisField", null);
94            fail("Test 6: NullPointerException expected.");
95        } catch (NullPointerException e) {
96            // Expected.
97        }
98    }
99
100    public void test_ConstructorLjava_lang_StringLjava_lang_ClassB() {
101        ObjectStreamField osf = new ObjectStreamField("aField", int.class, false);
102        assertTrue("Test 1: Name member not set correctly.",
103                   osf.getName().equals("aField"));
104        assertTrue("Test 2: Type member not set correctly.",
105                   osf.getType().equals(int.class));
106        assertFalse("Test 3: Unshared member not set correctly.",
107                    osf.isUnshared());
108
109        // Repeat the tests with a different object to make sure
110        // that we have not tested against default values.
111        osf = new ObjectStreamField("anotherField", String.class, true);
112        assertTrue("Test 4: Name member not set correctly.",
113                   osf.getName().equals("anotherField"));
114        assertTrue("Test 5: Type member not set correctly.",
115                   osf.getType().equals(String.class));
116        assertTrue("Test 6: Unshared member not set correctly.",
117                   osf.isUnshared());
118
119        // Invalid argument tests.
120        try {
121            osf = new ObjectStreamField(null, boolean.class);
122            fail("Test 7: NullPointerException expected.");
123        } catch (NullPointerException e) {
124            // Expected.
125        }
126        try {
127            osf = new ObjectStreamField("thisField", null);
128            fail("Test 8: NullPointerException expected.");
129        } catch (NullPointerException e) {
130            // Expected.
131        }
132    }
133
134
135    public void test_getOffset() {
136        ObjectStreamField[] osfArray;
137        osfArray = osc.getFields();
138        int[] expectedOffsets = {0, 1, 9, 11, 19, 23, 27, 31, 39, 41, 0};
139
140        assertTrue("getOffset() did not return reasonable values.", osfArray[0]
141                .getOffset() != osfArray[1].getOffset());
142
143        for (int i = 0; i < expectedOffsets.length; i++) {
144            assertEquals(String.format("Unexpected value for osfArray[%d].getOffset(): ", i),
145                    expectedOffsets[i], osfArray[i].getOffset());
146
147        }
148    }
149
150    public void test_setOffsetI() {
151        MyObjectStreamField f = new MyObjectStreamField("aField", int.class);
152        f.setOffset(42);
153        assertEquals("Test 1: Unexpected offset value.", 42, f.getOffset());
154        f.setOffset(2008);
155        assertEquals("Test 2: Unexpected offset value.", 2008, f.getOffset());
156    }
157
158    public void test_isPrimitive() {
159        // Test for method int java.io.ObjectStreamField.getOffset()
160        ObjectStreamField[] osfArray;
161        osfArray = osc.getFields();
162
163        for (int i = 0; i < (osfArray.length - 1); i++) {
164            assertTrue(String.format("osfArray[%d].isPrimitive() should return true.", i),
165                       osfArray[i].isPrimitive());
166        }
167        assertFalse(String.format("osfArray[%d].isPrimitive() should return false.",
168                                  osfArray.length - 1),
169                    osfArray[(osfArray.length - 1)].isPrimitive());
170    }
171
172    protected void setUp() {
173        osc = ObjectStreamClass.lookup(DummyClass.class);
174        bamField = osc.getField("bam");
175        samField = osc.getField("sam");
176        hamField = osc.getField("ham");
177        holaField = osc.getField("hola");
178    }
179}
180