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