• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 /*
27  * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
28  *
29  * All rights reserved.
30  *
31  * Redistribution and use in source and binary forms, with or without
32  * modification, are permitted provided that the following conditions are met:
33  *
34  *  * Redistributions of source code must retain the above copyright notice,
35  *    this list of conditions and the following disclaimer.
36  *
37  *  * Redistributions in binary form must reproduce the above copyright notice,
38  *    this list of conditions and the following disclaimer in the documentation
39  *    and/or other materials provided with the distribution.
40  *
41  *  * Neither the name of JSR-310 nor the names of its contributors
42  *    may be used to endorse or promote products derived from this software
43  *    without specific prior written permission.
44  *
45  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
46  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
47  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
48  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
49  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
50  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
51  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
52  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
53  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
54  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
55  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56  */
57 package tck.java.time.temporal.serial;
58 
59 import static org.testng.Assert.assertEquals;
60 import static org.testng.Assert.fail;
61 
62 import java.io.ByteArrayInputStream;
63 import java.io.ByteArrayOutputStream;
64 import org.testng.annotations.DataProvider;
65 import org.testng.annotations.Test;
66 import tck.java.time.AbstractTCKTest;
67 
68 import java.io.IOException;
69 import java.io.ObjectInputStream;
70 import java.io.ObjectOutputStream;
71 import java.time.DayOfWeek;
72 import java.time.temporal.WeekFields;
73 import java.util.Arrays;
74 
75 /**
76  * Test serialization of WeekFields.
77  */
78 @Test
79 public class TCKWeekFieldsSerialization extends AbstractTCKTest {
80 
81     //-----------------------------------------------------------------------
82     @Test(dataProvider="weekFields")
test_serializable_singleton(DayOfWeek firstDayOfWeek, int minDays)83     public void test_serializable_singleton(DayOfWeek firstDayOfWeek, int minDays) throws IOException, ClassNotFoundException {
84         WeekFields weekDef = WeekFields.of(firstDayOfWeek, minDays);
85         assertSerializableSame(weekDef);  // spec state singleton
86     }
87 
88     //-----------------------------------------------------------------------
89     @DataProvider(name="weekFields")
data_weekFields()90     Object[][] data_weekFields() {
91         Object[][] objects = new Object[49][];
92         int i = 0;
93         for (DayOfWeek firstDayOfWeek : DayOfWeek.values()) {
94             for (int minDays = 1; minDays <= 7; minDays++) {
95                 objects[i++] = new Object[] {firstDayOfWeek, minDays};
96             }
97         }
98         return objects;
99     }
100 
101     @Test
test_invalid_serialform()102     public void test_invalid_serialform() throws Exception {
103         WeekFields wf = WeekFields.of(DayOfWeek.MONDAY, 7);
104         ByteArrayOutputStream baos = new ByteArrayOutputStream(64);
105         ObjectOutputStream out = new ObjectOutputStream(baos);
106         out.writeObject(wf);
107         byte[] template = baos.toByteArray();
108 
109         // (minimalDays = 5) {
110         byte[] good1 = {0, 0, 0, 5};
111         byte[] val = Arrays.copyOf(template, template.length);
112         System.arraycopy(good1, 0, val, 105, good1.length);
113         try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(val))) {
114             Object o = in.readObject();
115             assertEquals(o, WeekFields.of(DayOfWeek.MONDAY, 5), "Should be MONDAY, min = 5");
116         } catch (Exception ioe) {
117             fail("Unexpected exception " + ioe);
118         }
119 
120         // (minimalDays < 1) {
121         byte[] bad1 = {0, 0, 0, 0};
122         val = Arrays.copyOf(template, template.length);
123         System.arraycopy(bad1, 0, val, 105, bad1.length);
124         try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(val))) {
125             in.readObject();
126             fail("Invalid minimalDays < 1 " + WeekFields.class.getName());
127         } catch (Exception ioe) {
128             // Expected exception
129         }
130 
131         // (minimalDays > 7) {
132         byte[] bad2 = {0, 0, 0, 8};
133         val = Arrays.copyOf(template, template.length);
134         System.arraycopy(bad2, 0, val, 105, bad2.length);
135         try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(val))) {
136             in.readObject();
137             fail("Invalid minimalDays > 7 " + WeekFields.class.getName());
138         } catch (Exception ioe) {
139             // Expected exception
140         }
141 
142         // (StartDay = null) {
143         byte[] bad3 = {0x70};
144         val = Arrays.copyOf(template, 110);
145         System.arraycopy(bad3, 0, val, 105 + 4, bad3.length);
146         try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(val))) {
147             in.readObject();
148             fail("Invalid startDay == null " + WeekFields.class.getName());
149         } catch (Exception ioe) {
150             // Expected exception
151         }
152 
153     }
154 
155 }
156