Initial import
[jpf-core.git] / src / tests / gov / nasa / jpf / test / java / io / ObjectStreamTest.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf.test.java.io;
20
21 import gov.nasa.jpf.util.test.TestJPF;
22
23 import java.io.File;
24 import java.io.FileInputStream;
25 import java.io.FileOutputStream;
26 import java.io.ObjectInputStream;
27 import java.io.ObjectOutputStream;
28 import java.io.Serializable;
29
30 import org.junit.Test;
31
32 /**
33  * regression test for object streams
34  */
35 public class ObjectStreamTest extends TestJPF {
36
37   static class X implements Serializable {
38     String q = "the ultimate question";
39     Y a = new Y(-42);
40
41     @Override
42         public String toString() {
43       return "X{q=\""+q+"\",a="+a+'}';
44     }
45   }
46
47   static class Y implements Serializable {
48     static final long serialVersionUID = -42;
49
50     boolean z = true;
51     byte b = 42;
52     char c = '!';
53     short s = 42;
54     int i;
55     long l = 42000;
56     float f = 42.0f;
57     double d = 4.2e5;
58
59     Y (int answer){
60       i = answer;
61     }
62
63     @Override
64         public String toString() {
65       return "Y{z="+z+",b="+b+",c="+c+",s="+s+",i="+i+",l="+l+",f="+f+",d="+d+ '}';
66     }
67   }
68
69   @Test
70   public void testSimpleReadbackOk () {
71     String fname = "tmp.ser";
72
73     if (!isJPFRun()){
74       try {
75         X x = new X();
76         FileOutputStream fos = new FileOutputStream(fname);
77         ObjectOutputStream oos = new ObjectOutputStream(fos);
78         oos.writeObject(x);
79         oos.close();
80       } catch (Throwable t){
81         fail("serialization failed: " + t);
82       }
83     }
84
85     if (verifyNoPropertyViolation()){
86       try {
87         FileInputStream fis = new FileInputStream(fname);
88         ObjectInputStream ois = new ObjectInputStream(fis);
89         Object o = ois.readObject();
90         ois.close();
91
92         System.out.println(o);
93
94         assert o instanceof X : "wrong object type: " + o.getClass().getName();
95         X x = (X) o;
96         assert x.a.i == -42;
97       } catch (Throwable t){
98         //t.printStackTrace();
99         fail("serialization readback failed: " + t);
100       }
101
102       File f = new File(fname);
103       f.delete();
104     }
105   }
106
107 }