提交 250069db 编写于 作者: R rriggs

8024427: Missing java.time.chrono serialization tests

Summary: Add tests and cleanup existing serialization tests
Reviewed-by: sherman
上级 0f3ca031
......@@ -61,6 +61,7 @@
*/
package java.time.temporal;
import java.io.InvalidObjectException;
import java.io.Serializable;
import java.time.DateTimeException;
......@@ -337,6 +338,21 @@ public final class ValueRange implements Serializable {
}
}
/**
* Return the ValueRange for the serialized values.
* The values are validated according to the constraints of the {@link #of}
* factory method.
* @return the ValueRange for the serialized fields
* @throws InvalidObjectException if the serialized object has invalid values
*/
private Object readResolve() throws InvalidObjectException {
try {
return of(minSmallest, minLargest, maxSmallest, maxLargest);
} catch (IllegalArgumentException iae) {
throw new InvalidObjectException("Invalid serialized ValueRange: " + iae.getMessage());
}
}
//-----------------------------------------------------------------------
/**
* Checks if this range is equal to another range.
......
......@@ -68,6 +68,8 @@ import java.io.ObjectOutputStream;
import java.io.ObjectStreamConstants;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Formatter;
/**
* Base test class.
......@@ -131,10 +133,10 @@ public abstract class AbstractTCKTest {
assertEquals(dis.readByte(), ObjectStreamConstants.TC_NULL); // no superclasses
if (expectedBytes.length < 256) {
assertEquals(dis.readByte(), ObjectStreamConstants.TC_BLOCKDATA);
assertEquals(dis.readUnsignedByte(), expectedBytes.length);
assertEquals(dis.readUnsignedByte(), expectedBytes.length, "blockdata length incorrect");
} else {
assertEquals(dis.readByte(), ObjectStreamConstants.TC_BLOCKDATALONG);
assertEquals(dis.readInt(), expectedBytes.length);
assertEquals(dis.readInt(), expectedBytes.length, "blockdatalong length incorrect");
}
byte[] input = new byte[expectedBytes.length];
dis.readFully(input);
......@@ -162,4 +164,33 @@ public abstract class AbstractTCKTest {
}
}
/**
* Utility method to dump a byte array in a java syntax.
* @param bytes and array of bytes
* @return a string containing the bytes formatted in java syntax
*/
protected static String dumpSerialStream(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 5);
Formatter fmt = new Formatter(sb);
fmt.format(" byte[] bytes = {" );
final int linelen = 10;
for (int i = 0; i < bytes.length; i++) {
if (i % linelen == 0) {
fmt.format("%n ");
}
fmt.format(" %3d,", bytes[i] & 0xff);
if ((i % linelen) == (linelen-1) || i == bytes.length - 1) {
fmt.format(" /*");
int s = i / linelen * linelen;
int k = i % linelen;
for (int j = 0; j <= k && s + j < bytes.length; j++) {
fmt.format(" %c", bytes[s + j] & 0xff);
}
fmt.format(" */");
}
}
fmt.format("%n };%n");
return sb.toString();
}
}
......@@ -80,12 +80,6 @@ public class TCKClock_Fixed extends AbstractTCKTest {
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
private static final Instant INSTANT = LocalDateTime.of(2008, 6, 30, 11, 30, 10, 500).atZone(ZoneOffset.ofHours(2)).toInstant();
//-----------------------------------------------------------------------
public void test_isSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.fixed(INSTANT, ZoneOffset.UTC));
assertSerializable(Clock.fixed(INSTANT, PARIS));
}
//-------------------------------------------------------------------------
public void test_fixed_InstantZoneId() {
Clock test = Clock.fixed(INSTANT, PARIS);
......
......@@ -62,7 +62,6 @@ package tck.java.time;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import java.io.IOException;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
......@@ -83,11 +82,6 @@ public class TCKClock_Offset extends AbstractTCKTest {
private static final Instant INSTANT = LocalDateTime.of(2008, 6, 30, 11, 30, 10, 500).atZone(ZoneOffset.ofHours(2)).toInstant();
private static final Duration OFFSET = Duration.ofSeconds(2);
//-----------------------------------------------------------------------
public void test_isSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.offset(Clock.system(PARIS), OFFSET));
}
//-----------------------------------------------------------------------
public void test_offset_ClockDuration() {
Clock test = Clock.offset(Clock.fixed(INSTANT, PARIS), OFFSET);
......
......@@ -62,7 +62,6 @@ package tck.java.time;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
import java.io.IOException;
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
......@@ -79,13 +78,6 @@ public class TCKClock_System extends AbstractTCKTest {
private static final ZoneId MOSCOW = ZoneId.of("Europe/Moscow");
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
//-----------------------------------------------------------------------
public void test_isSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.systemUTC());
assertSerializable(Clock.systemDefaultZone());
assertSerializable(Clock.system(PARIS));
}
//-----------------------------------------------------------------------
public void test_instant() {
Clock system = Clock.systemUTC();
......
......@@ -62,7 +62,6 @@ package tck.java.time;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import java.io.IOException;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
......@@ -81,16 +80,7 @@ public class TCKClock_Tick extends AbstractTCKTest {
private static final ZoneId MOSCOW = ZoneId.of("Europe/Moscow");
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
private static final Duration AMOUNT = Duration.ofSeconds(2);
private static final ZonedDateTime ZDT = LocalDateTime.of(2008, 6, 30, 11, 30, 10, 500).atZone(ZoneOffset.ofHours(2));
private static final Instant INSTANT = ZDT.toInstant();
//-----------------------------------------------------------------------
public void test_isSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.tickSeconds(PARIS));
assertSerializable(Clock.tickMinutes(MOSCOW));
assertSerializable(Clock.tick(Clock.fixed(INSTANT, PARIS), AMOUNT));
}
//-----------------------------------------------------------------------
public void test_tick_ClockDuration_250millis() {
......
......@@ -354,4 +354,27 @@ public final class CopticDate
.append(dom < 10 ? "-0" : "-").append(dom);
return buf.toString();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof CopticDate) {
CopticDate cd = (CopticDate)obj;
if (this.prolepticYear == cd.prolepticYear &&
this.month == cd.month &&
this.day == cd.day) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
long epDay = toEpochDay();
return getChronology().hashCode() ^ ((int) (epDay ^ (epDay >>> 32)));
}
}
......@@ -320,24 +320,6 @@ public class TCKChronoZonedDateTime {
}
}
//-----------------------------------------------------------------------
// Test Serialization of ISO via chrono API
//-----------------------------------------------------------------------
@Test( dataProvider="calendars")
public void test_ChronoZonedDateTimeSerialization(Chronology chrono) throws Exception {
ZonedDateTime ref = LocalDate.of(2013, 1, 5).atTime(12, 1, 2, 3).atZone(ZoneId.of("GMT+01:23"));
ChronoZonedDateTime<?> orginal = chrono.date(ref).atTime(ref.toLocalTime()).atZone(ref.getZone());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(orginal);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
@SuppressWarnings("unchecked")
ChronoZonedDateTime<?> ser = (ChronoZonedDateTime<?>) in.readObject();
assertEquals(ser, orginal, "deserialized date is wrong");
}
//-----------------------------------------------------------------------
@Test(dataProvider="calendars")
public void test_from_TemporalAccessor(Chronology chrono) {
......
......@@ -64,7 +64,6 @@ import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.util.Locale;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
......@@ -338,20 +337,4 @@ public class TCKChronology {
Chronology chrono = Chronology.of("FooFoo");
}
//-----------------------------------------------------------------------
// serialization; serialize and check each calendar system
//-----------------------------------------------------------------------
@Test(dataProvider = "calendarNameAndType")
public void test_chronoSerializationSingleton(String id, String _calendarType) throws Exception {
Chronology original = Chronology.of(id);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(original);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
Chronology ser = (Chronology) in.readObject();
assertEquals(ser, original, "Deserialized Chronology is not correct");
}
}
......@@ -60,10 +60,6 @@ package tck.java.time.chrono;
import static org.testng.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.time.LocalDate;
import java.time.chrono.ChronoLocalDate;
import java.time.chrono.Chronology;
......@@ -78,29 +74,11 @@ import org.testng.annotations.Test;
public class TCKTestServiceLoader {
@Test
public void test_CopticServiceLoader() {
public void test_TestServiceLoader() {
Chronology chrono = Chronology.of("Coptic");
ChronoLocalDate copticDate = chrono.date(1729, 4, 27);
LocalDate ld = LocalDate.from(copticDate);
assertEquals(ld, LocalDate.of(2013, 1, 5), "CopticDate does not match LocalDate");
}
//-----------------------------------------------------------------------
// Test Serialization of Loaded Coptic Calendar
//-----------------------------------------------------------------------
@Test
public void test_ChronoSerialization() throws Exception {
Chronology chrono = Chronology.of("Coptic");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(chrono);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
@SuppressWarnings("unchecked")
Chronology ser = (Chronology) in.readObject();
assertEquals(ser, chrono, "deserialized Chronology is wrong");
}
}
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.chrono.serial;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.YEAR;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.ObjectStreamConstants;
import java.time.chrono.ChronoLocalDate;
import java.time.chrono.HijrahChronology;
import java.time.chrono.HijrahDate;
import java.time.chrono.JapaneseDate;
import java.time.chrono.JapaneseEra;
import java.time.chrono.MinguoDate;
import java.time.chrono.ThaiBuddhistDate;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test serialization of built-in chronologies.
*/
@Test
public class TCKChronoLocalDateSerialization extends AbstractTCKTest {
static final int CHRONO_TYPE = 1; // java.time.chrono.Ser.CHRONO_TYPE
static final int JAPANESE_DATE_TYPE = 4; // java.time.chrono.Ser.JAPANESE_DATE_TYPE
static final int HIJRAH_DATE_TYPE = 6; // java.time.chrono.Ser.HIJRAH_DATE_TYPE
static final int MINGUO_DATE_TYPE = 7; // java.time.chrono.Ser.MINGUO_DATE_TYPE
static final int THAIBUDDHIST_DATE_TYPE = 8; // java.time.chrono.Ser.THAIBUDDHIST_DATE_TYPE
//-----------------------------------------------------------------------
// Regular data factory for names and descriptions of available calendars
//-----------------------------------------------------------------------
@DataProvider(name = "calendars")
Object[][] data_of_calendars() {
return new Object[][]{
{JapaneseDate.of(JapaneseEra.HEISEI, 25, 01, 05), JAPANESE_DATE_TYPE},
{MinguoDate.of(102, 01, 05), MINGUO_DATE_TYPE},
{ThaiBuddhistDate.of(2556, 01, 05), THAIBUDDHIST_DATE_TYPE},
};
}
//-----------------------------------------------------------------------
// Test Serialization of Calendars
//-----------------------------------------------------------------------
@Test( dataProvider="calendars")
public void test_ChronoSerialization(ChronoLocalDate date, int dateType) throws Exception {
assertSerializable(date);
}
//-----------------------------------------------------------------------
// Test that serialization produces exact sequence of bytes
//-----------------------------------------------------------------------
@Test(dataProvider="calendars")
private void test_serialization_format(ChronoLocalDate date, int dateType) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (DataOutputStream dos = new DataOutputStream(baos) ) {
dos.writeByte(dateType);
dos.writeInt(date.get(YEAR));
dos.writeByte(date.get(MONTH_OF_YEAR));
dos.writeByte(date.get(DAY_OF_MONTH));
}
byte[] bytes = baos.toByteArray();
assertSerializedBySer(date, bytes);
}
//-----------------------------------------------------------------------
// Test HijrajDate serialization is a type, Chronology, year, month, day
//-----------------------------------------------------------------------
@Test()
public void test_hijrahSerialization_format() throws Exception {
HijrahChronology chrono = HijrahChronology.INSTANCE;
HijrahDate date = HijrahDate.of(1433, 10, 29);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// Expect the type of the HijrahDate in the stream
byte[] hijrahDateBytes = new byte[] {HIJRAH_DATE_TYPE};
// Literal reference to Hijrah-Umalqura Chronology
byte[] hijrahChronoBytes = new byte[] {
115, 113, 0, 126, 0, 0, /* p w \u0001 \u0006 s q \u0000 ~ \u0000 \u0000 */
119, 18, 1, 0, 15, 72, 105, 106, 114, 97, /* w \u0012 \u0001 \u0000 \u000f H i j r a */
104, 45, 117, 109, 97, 108, 113, 117, 114, 97, /* h - u m a l q u r a */
120, /* \u001d x */
};
// Build the sequence that represents the data in the stream
baos = new ByteArrayOutputStream();
try (DataOutputStream dos = new DataOutputStream(baos) ) {
dos.writeByte(ObjectStreamConstants.TC_BLOCKDATA);
dos.writeByte(6); // 6 bytes follow
dos.writeInt(date.get(YEAR));
dos.writeByte(date.get(MONTH_OF_YEAR));
dos.writeByte(date.get(DAY_OF_MONTH));
dos.writeByte(ObjectStreamConstants.TC_ENDBLOCKDATA);
}
byte[] dateBytes = baos.toByteArray();
assertSerializedBySer(date, hijrahDateBytes, hijrahChronoBytes, dateBytes);
}
}
......@@ -59,21 +59,23 @@ package tck.java.time.chrono.serial;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.chrono.*;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.Chronology;
import java.time.chrono.HijrahChronology;
import java.time.chrono.IsoChronology;
import java.time.chrono.JapaneseChronology;
import java.time.chrono.MinguoChronology;
import java.time.chrono.ThaiBuddhistChronology;
import static org.testng.Assert.assertEquals;
import tck.java.time.AbstractTCKTest;
/**
* Test assertions that must be true for all built-in chronologies.
* Test serialization of ChronoLocalDateTime for all built-in chronologies.
*/
@Test
public class TCKChronoLocalDateTime {
public class TCKChronoLocalDateTimeSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
// regular data factory for available calendars
......@@ -89,22 +91,13 @@ public class TCKChronoLocalDateTime {
}
//-----------------------------------------------------------------------
// Test Serialization ZonedDateTime for each Chronology
// Test Serialization of ChronoLocalDateTime
//-----------------------------------------------------------------------
@Test( dataProvider="calendars")
@Test(dataProvider="calendars")
public void test_ChronoLocalDateTimeSerialization(Chronology chrono) throws Exception {
LocalDateTime ref = LocalDate.of(2013, 1, 5).atTime(12, 1, 2, 3);
ChronoLocalDateTime<?> orginal = chrono.date(ref).atTime(ref.toLocalTime());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(orginal);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
ChronoLocalDateTime<?> ser = (ChronoLocalDateTime<?>) in.readObject();
assertEquals(ser, orginal, "deserialized date is wrong");
ChronoLocalDateTime<?> original = chrono.date(ref).atTime(ref.toLocalTime());
assertSerializable(original);
}
//-----------------------------------------------------------------------
}
......@@ -56,23 +56,25 @@
*/
package tck.java.time.chrono.serial;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.ChronoZonedDateTime;
import java.time.chrono.Chronology;
import java.time.chrono.HijrahChronology;
import java.time.chrono.IsoChronology;
import java.time.chrono.JapaneseChronology;
import java.time.chrono.MinguoChronology;
import java.time.chrono.ThaiBuddhistChronology;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.time.LocalDate;
import java.time.chrono.*;
import static org.testng.Assert.assertEquals;
import tck.java.time.AbstractTCKTest;
/**
* Test assertions that must be true for all built-in chronologies.
*/
@Test
public class TCKChronoLocalDate {
public class TCKChronoZonedDateTimeSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
// regular data factory for names and descriptions of available calendars
......@@ -84,28 +86,18 @@ public class TCKChronoLocalDate {
{IsoChronology.INSTANCE},
{JapaneseChronology.INSTANCE},
{MinguoChronology.INSTANCE},
{ThaiBuddhistChronology.INSTANCE}};
{ThaiBuddhistChronology.INSTANCE},
};
}
//-----------------------------------------------------------------------
// Test Serialization of Calendars
// Test Serialization of ISO via chrono API
//-----------------------------------------------------------------------
@Test( dataProvider="calendars")
public void test_ChronoSerialization(Chronology chrono) throws Exception {
LocalDate ref = LocalDate.of(2013, 1, 5);
ChronoLocalDate orginal = chrono.date(ref);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(orginal);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
@SuppressWarnings("unchecked")
ChronoLocalDate ser = (ChronoLocalDate) in.readObject();
assertEquals(ser, orginal, "deserialized date is wrong");
public void test_ChronoZonedDateTimeSerialization(Chronology chrono) throws Exception {
ZonedDateTime ref = LocalDate.of(2013, 1, 5).atTime(12, 1, 2, 3).atZone(ZoneId.of("GMT+01:23"));
ChronoZonedDateTime<?> original = chrono.date(ref).atTime(ref.toLocalTime()).atZone(ref.getZone());
assertSerializable(original);
}
//-----------------------------------------------------------------------
}
......@@ -56,13 +56,9 @@
*/
package tck.java.time.chrono.serial;
import static org.testng.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.io.DataOutputStream;
import java.time.chrono.Chronology;
import java.time.chrono.HijrahChronology;
import java.time.chrono.IsoChronology;
......@@ -73,11 +69,15 @@ import java.time.chrono.ThaiBuddhistChronology;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
@Test
public class TCKChronologySerialization {
public class TCKChronologySerialization extends AbstractTCKTest {
static final int CHRONO_TYPE = 1; // java.time.chrono.Ser.CHRONO_TYPE
//-----------------------------------------------------------------------
// regular data factory for names and descriptions of available calendars
// Regular data factory for available calendars
//-----------------------------------------------------------------------
@DataProvider(name = "calendars")
Chronology[][] data_of_calendars() {
......@@ -93,44 +93,22 @@ public class TCKChronologySerialization {
// Test Serialization of Calendars
//-----------------------------------------------------------------------
@Test(dataProvider="calendars")
public void test_ChronoSerialization(Chronology chrono) throws Exception {
System.out.printf(" ChronoSerialization: %s%n", chrono);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(chrono);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
@SuppressWarnings("unchecked")
Chronology ser = (Chronology) in.readObject();
assertEquals(ser, chrono, "deserialized Chronology is wrong");
public void test_chronoSerialization(Chronology chrono) throws Exception {
assertSerializable(chrono);
}
/**
* Utility method to dump a byte array in a java syntax.
* @param bytes and array of bytes
* @param os the outputstream to receive the output.
*/
static void dumpSerialStream(byte[] bytes, PrintStream os) {
os.printf(" byte[] bytes = {" );
final int linelen = 10;
for (int i = 0; i < bytes.length; i++) {
if (i % linelen == 0) {
os.printf("%n ");
}
os.printf(" %3d,", bytes[i] & 0xff);
if ((i % linelen) == (linelen-1) || i == bytes.length - 1) {
os.printf(" /*");
int s = i / linelen * linelen;
int k = i % linelen;
for (int j = 0; j <= k && s + j < bytes.length; j++) {
os.printf(" %c", bytes[s + j] & 0xff);
}
os.printf(" */");
}
//-----------------------------------------------------------------------
// Test that serialization produces exact sequence of bytes
//-----------------------------------------------------------------------
@Test(dataProvider="calendars")
private void test_serializationBytes(Chronology chrono) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (DataOutputStream dos = new DataOutputStream(baos) ) {
dos.writeByte(CHRONO_TYPE);
dos.writeUTF(chrono.getId());
}
os.printf("%n };%n");
byte[] bytes = baos.toByteArray();
assertSerializedBySer(chrono, bytes);
}
}
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file:
*
* Copyright (c) 2011-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.chrono.serial;
import java.io.IOException;
import java.time.chrono.ChronoLocalDate;
import java.time.chrono.Chronology;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Tests the serialization of ChronoLocalDate using a CopticDate.
*/
@Test
public class TCKCopticSerialization extends AbstractTCKTest {
@Test
public void test_eraSerialization() throws IOException, ClassNotFoundException {
Chronology chrono = Chronology.of("Coptic");
ChronoLocalDate copticDate = chrono.date(1729, 4, 27);
assertSerializable(copticDate);
}
}
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file:
*
* Copyright (c) 2011-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.chrono.serial;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.YEAR;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.time.chrono.ChronoLocalDate;
import java.time.chrono.Era;
import java.time.chrono.HijrahEra;
import java.time.chrono.IsoEra;
import java.time.chrono.JapaneseEra;
import java.time.chrono.MinguoEra;
import java.time.chrono.ThaiBuddhistEra;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Tests the built-in Eras are serializable.
* Note that the serialized form of IsoEra, MinguoEra, ThaiBuddhistEra,
* and HijrahEra are defined and provided by Enum.
* The serialized form of these types are not tested, only that they are
* serializable.
*/
@Test
public class TCKEraSerialization extends AbstractTCKTest {
static final int JAPANESE_ERA_TYPE = 5; // java.time.chrono.Ser.JAPANESE_ERA
//-----------------------------------------------------------------------
// Regular data factory for the available Eras
//-----------------------------------------------------------------------
@DataProvider(name = "Eras")
Era[][] data_of_calendars() {
return new Era[][] {
{HijrahEra.AH},
{IsoEra.BCE},
{IsoEra.CE},
{MinguoEra.BEFORE_ROC},
{MinguoEra.ROC},
{ThaiBuddhistEra.BEFORE_BE},
{ThaiBuddhistEra.BE},
};
}
@Test(dataProvider="Eras")
public void test_eraSerialization(Era era) throws IOException, ClassNotFoundException {
assertSerializableSame(era);
}
//-----------------------------------------------------------------------
// Test JapaneseEra serialization produces exact sequence of bytes
//-----------------------------------------------------------------------
@Test
private void test_JapaneseErasSerialization() throws Exception {
for (JapaneseEra era : JapaneseEra.values()) {
assertSerializableSame(era);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (DataOutputStream dos = new DataOutputStream(baos) ) {
dos.writeByte(JAPANESE_ERA_TYPE);
dos.writeByte(era.getValue());
}
byte[] bytes = baos.toByteArray();
assertSerializedBySer(era, bytes);
}
}
}
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file:
*
* Copyright (c) 2008-2012 Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.serial;
import java.io.IOException;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test system and offset clocks serialization.
*/
@Test
public class TCKClockSerialization extends AbstractTCKTest {
private static final ZoneId MOSCOW = ZoneId.of("Europe/Moscow");
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
private static final Duration AMOUNT = Duration.ofSeconds(2);
private static final ZonedDateTime ZDT = LocalDateTime.of(2008, 6, 30, 11, 30, 10, 500).atZone(ZoneOffset.ofHours(2));
private static final Instant INSTANT = ZDT.toInstant();
//-----------------------------------------------------------------------
public void test_systemClockSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.systemUTC());
assertSerializable(Clock.systemDefaultZone());
assertSerializable(Clock.system(PARIS));
}
//-----------------------------------------------------------------------
public void test_offsetClockSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.offset(Clock.system(PARIS), AMOUNT));
}
//-----------------------------------------------------------------------
public void test_tickClockSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.tickSeconds(PARIS));
assertSerializable(Clock.tickMinutes(MOSCOW));
assertSerializable(Clock.tick(Clock.fixed(INSTANT, PARIS), AMOUNT));
}
//-----------------------------------------------------------------------
public void test_fixedClockSerializable() throws IOException, ClassNotFoundException {
assertSerializable(Clock.fixed(INSTANT, ZoneOffset.UTC));
assertSerializable(Clock.fixed(INSTANT, PARIS));
}
}
......@@ -59,18 +59,28 @@
*/
package tck.java.time.serial;
import static org.testng.Assert.assertTrue;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.Serializable;
import java.time.Duration;
/**
* Test Duration.
* Test Duration serialization.
*/
@Test
public class TCKDuration extends AbstractTCKTest {
public class TCKDurationSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@Test
public void test_interfaces() {
assertTrue(Serializable.class.isAssignableFrom(Duration.class));
assertTrue(Comparable.class.isAssignableFrom(Duration.class));
}
//-----------------------------------------------------------------------
@Test
......@@ -92,4 +102,12 @@ public class TCKDuration extends AbstractTCKTest {
assertSerializedBySer(Duration.ofSeconds(654321, 123456789), bytes);
}
//-----------------------------------------------------------------------
// serialization
//-----------------------------------------------------------------------
@Test
public void test_deserializationSingleton() throws Exception {
assertSerializableSame(Duration.ZERO);
}
}
......@@ -68,10 +68,10 @@ import java.io.DataOutputStream;
import java.time.Instant;
/**
* Test Instant.
* Test Instant serialization.
*/
@Test
public class TCKInstant extends AbstractTCKTest {
public class TCKInstantSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@Test
......
......@@ -68,10 +68,10 @@ import java.io.DataOutputStream;
import java.time.LocalDate;
/**
* Test LocalDate.
* Test LocalDate serialization.
*/
@Test
public class TCKLocalDate extends AbstractTCKTest {
public class TCKLocalDateSerialization extends AbstractTCKTest {
private LocalDate TEST_2007_07_15;
......@@ -102,6 +102,4 @@ public class TCKLocalDate extends AbstractTCKTest {
assertSerializedBySer(LocalDate.of(2012, 9, 16), bytes);
}
//-----------------------------------------------------------------------
}
......@@ -67,10 +67,10 @@ import java.io.DataOutputStream;
import java.time.LocalDateTime;
/**
* Test LocalDateTime.
* Test serialization of LocalDateTime.
*/
@Test
public class TCKLocalDateTime extends AbstractTCKTest {
public class TCKLocalDateTimeSerialization extends AbstractTCKTest {
private LocalDateTime TEST_2007_07_15_12_30_40_987654321 = LocalDateTime.of(2007, 7, 15, 12, 30, 40, 987654321);
......@@ -99,6 +99,4 @@ public class TCKLocalDateTime extends AbstractTCKTest {
assertSerializedBySer(LocalDateTime.of(2012, 9, 16, 22, 17, 59, 459_000_000), bytes);
}
}
......@@ -68,10 +68,10 @@ import java.io.DataOutputStream;
import java.time.LocalTime;
/**
* Test LocalTime.
* Test LocalTime serialization.
*/
@Test
public class TCKLocalTime extends AbstractTCKTest {
public class TCKLocalTimeSerialization extends AbstractTCKTest {
private LocalTime TEST_12_30_40_987654321;
......
......@@ -69,10 +69,10 @@ import java.io.IOException;
import java.time.MonthDay;
/**
* Test MonthDay.
* Test MonthDay serialization.
*/
@Test
public class TCKMonthDay extends AbstractTCKTest {
public class TCKMonthDaySerialization extends AbstractTCKTest {
private MonthDay TEST_07_15;
......@@ -81,8 +81,6 @@ public class TCKMonthDay extends AbstractTCKTest {
TEST_07_15 = MonthDay.of(7, 15);
}
//-----------------------------------------------------------------------
@Test
public void test_serialization() throws ClassNotFoundException, IOException {
......@@ -101,7 +99,4 @@ public class TCKMonthDay extends AbstractTCKTest {
assertSerializedBySer(MonthDay.of(9, 16), bytes);
}
//-----------------------------------------------------------------------
}
......@@ -70,10 +70,10 @@ import java.time.OffsetDateTime;
import java.time.ZoneOffset;
/**
* Test OffsetDateTime.
* Test OffsetDateTime serialization.
*/
@Test
public class TCKOffsetDateTime extends AbstractTCKTest {
public class TCKOffsetDateTimeSerialization extends AbstractTCKTest {
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
private OffsetDateTime TEST_2008_6_30_11_30_59_000000500;
......@@ -83,9 +83,6 @@ public class TCKOffsetDateTime extends AbstractTCKTest {
TEST_2008_6_30_11_30_59_000000500 = OffsetDateTime.of(2008, 6, 30, 11, 30, 59, 500, OFFSET_PONE);
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
@Test
public void test_serialization() throws Exception {
......
......@@ -69,10 +69,10 @@ import java.time.OffsetTime;
import java.time.ZoneOffset;
/**
* Test OffsetTime.
* Test OffsetTime serialization.
*/
@Test
public class TCKOffsetTime extends AbstractTCKTest {
public class TCKOffsetTimeSerialization extends AbstractTCKTest {
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
private OffsetTime TEST_11_30_59_500_PONE;
......
......@@ -65,10 +65,10 @@ import tck.java.time.AbstractTCKTest;
import java.time.Period;
/**
* Test Period.
* Test serialization of Period.
*/
@Test
public class TCKPeriod extends AbstractTCKTest {
public class TCKPeriodSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@Test
......@@ -78,5 +78,4 @@ public class TCKPeriod extends AbstractTCKTest {
assertSerializable(Period.of(1, 2, 3));
}
}
......@@ -69,10 +69,10 @@ import java.io.IOException;
import java.time.YearMonth;
/**
* Test YearMonth.
* Test serialization of YearMonth.
*/
@Test
public class TCKYearMonth extends AbstractTCKTest {
public class TCKYearMonthSerialization extends AbstractTCKTest {
private YearMonth TEST_2008_06;
......@@ -100,7 +100,4 @@ public class TCKYearMonth extends AbstractTCKTest {
assertSerializedBySer(YearMonth.of(2012, 9), bytes);
}
//-----------------------------------------------------------------------
}
......@@ -67,10 +67,10 @@ import java.io.DataOutputStream;
import java.time.Year;
/**
* Test Year.
* Test Year serialization.
*/
@Test
public class TCKYear extends AbstractTCKTest {
public class TCKYearSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@Test
......
......@@ -73,10 +73,10 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
/**
* Test ZoneId.
* Test serialization of ZoneId.
*/
@Test
public class TCKZoneId extends AbstractTCKTest {
public class TCKZoneIdSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@Test
......
......@@ -67,10 +67,10 @@ import java.io.DataOutputStream;
import java.time.ZoneOffset;
/**
* Test ZoneOffset.
* Test serialization of ZoneOffset.
*/
@Test
public class TCKZoneOffset extends AbstractTCKTest {
public class TCKZoneOffsetSerialization extends AbstractTCKTest {
......
......@@ -72,10 +72,10 @@ import java.time.ZoneOffset;
import java.time.ZonedDateTime;
/**
* Test ZonedDateTime.
* Test serialization of ZonedDateTime.
*/
@Test
public class TCKZonedDateTime extends AbstractTCKTest {
public class TCKZonedDateTimeSerialization extends AbstractTCKTest {
private static final ZoneOffset OFFSET_0100 = ZoneOffset.ofHours(1);
private static final ZoneId ZONE_0100 = OFFSET_0100;
......@@ -139,5 +139,4 @@ public class TCKZonedDateTime extends AbstractTCKTest {
assertSerializedBySer(zdt, bytes);
}
}
......@@ -76,7 +76,7 @@ import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test.
* Test Julian Fields.
*/
@Test
public class TCKJulianFields extends AbstractTCKTest {
......@@ -86,16 +86,6 @@ public class TCKJulianFields extends AbstractTCKTest {
private static final LocalDate NOV12_1945 = LocalDate.of(1945, 11, 12);
private static final LocalDate JAN01_0001 = LocalDate.of(1, 1, 1);
//-----------------------------------------------------------------------
@DataProvider(name="julian_fields")
Object[][] julian_samples() {
return new Object[][] {
{JulianFields.JULIAN_DAY},
{JulianFields.MODIFIED_JULIAN_DAY},
{JulianFields.RATA_DIE},
};
}
@DataProvider(name="samples")
Object[][] data_samples() {
return new Object[][] {
......@@ -122,11 +112,6 @@ public class TCKJulianFields extends AbstractTCKTest {
}
//-----------------------------------------------------------------------
@Test(dataProvider="julian_fields")
public void test_serializable(TemporalField field) throws IOException, ClassNotFoundException {
assertSerializable(field);
}
public void test_basics() {
assertEquals(JulianFields.JULIAN_DAY.isDateBased(), true);
assertEquals(JulianFields.JULIAN_DAY.isTimeBased(), false);
......
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.temporal.serial;
import static java.time.temporal.ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH;
import static java.time.temporal.ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR;
import static java.time.temporal.ChronoField.ALIGNED_WEEK_OF_MONTH;
import static java.time.temporal.ChronoField.ALIGNED_WEEK_OF_YEAR;
import static java.time.temporal.ChronoField.AMPM_OF_DAY;
import static java.time.temporal.ChronoField.CLOCK_HOUR_OF_AMPM;
import static java.time.temporal.ChronoField.CLOCK_HOUR_OF_DAY;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.DAY_OF_WEEK;
import static java.time.temporal.ChronoField.DAY_OF_YEAR;
import static java.time.temporal.ChronoField.EPOCH_DAY;
import static java.time.temporal.ChronoField.HOUR_OF_AMPM;
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
import static java.time.temporal.ChronoField.MICRO_OF_DAY;
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
import static java.time.temporal.ChronoField.MILLI_OF_DAY;
import static java.time.temporal.ChronoField.MILLI_OF_SECOND;
import static java.time.temporal.ChronoField.MINUTE_OF_DAY;
import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.NANO_OF_DAY;
import static java.time.temporal.ChronoField.NANO_OF_SECOND;
import static java.time.temporal.ChronoField.PROLEPTIC_MONTH;
import static java.time.temporal.ChronoField.SECOND_OF_DAY;
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
import static java.time.temporal.ChronoField.YEAR;
import static java.time.temporal.ChronoField.YEAR_OF_ERA;
import static java.time.temporal.ChronoField.ERA;
import java.io.IOException;
import java.time.temporal.ChronoField;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test serialization of ChronoField.
*/
@Test
public class TCKChronoFieldSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
// List of Fields
//-----------------------------------------------------------------------
@DataProvider(name="fieldBased")
Object[][] data_fieldBased() {
return new Object[][] {
{DAY_OF_WEEK},
{ALIGNED_DAY_OF_WEEK_IN_MONTH},
{ALIGNED_DAY_OF_WEEK_IN_YEAR},
{DAY_OF_MONTH},
{DAY_OF_YEAR},
{EPOCH_DAY},
{ALIGNED_WEEK_OF_MONTH},
{ALIGNED_WEEK_OF_YEAR},
{MONTH_OF_YEAR},
{PROLEPTIC_MONTH},
{YEAR_OF_ERA},
{YEAR},
{ERA},
{AMPM_OF_DAY},
{CLOCK_HOUR_OF_DAY},
{HOUR_OF_DAY},
{CLOCK_HOUR_OF_AMPM},
{HOUR_OF_AMPM},
{MINUTE_OF_DAY},
{MINUTE_OF_HOUR},
{SECOND_OF_DAY},
{SECOND_OF_MINUTE},
{MILLI_OF_DAY},
{MILLI_OF_SECOND},
{MICRO_OF_DAY},
{MICRO_OF_SECOND},
{NANO_OF_DAY},
{NANO_OF_SECOND},
};
}
@Test(dataProvider = "fieldBased")
public void test_fieldSerializable(ChronoField field) throws IOException, ClassNotFoundException {
assertSerializableSame(field);
}
}
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.temporal.serial;
import static java.time.temporal.ChronoUnit.CENTURIES;
import static java.time.temporal.ChronoUnit.DAYS;
import static java.time.temporal.ChronoUnit.DECADES;
import static java.time.temporal.ChronoUnit.ERAS;
import static java.time.temporal.ChronoUnit.FOREVER;
import static java.time.temporal.ChronoUnit.HALF_DAYS;
import static java.time.temporal.ChronoUnit.HOURS;
import static java.time.temporal.ChronoUnit.MICROS;
import static java.time.temporal.ChronoUnit.MILLENNIA;
import static java.time.temporal.ChronoUnit.MILLIS;
import static java.time.temporal.ChronoUnit.MINUTES;
import static java.time.temporal.ChronoUnit.MONTHS;
import static java.time.temporal.ChronoUnit.NANOS;
import static java.time.temporal.ChronoUnit.SECONDS;
import static java.time.temporal.ChronoUnit.WEEKS;
import static java.time.temporal.ChronoUnit.YEARS;
import java.io.IOException;
import java.time.temporal.ChronoUnit;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test.
*/
@Test
public class TCKChronoUnitSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
// ChronoUnits
//-----------------------------------------------------------------------
@DataProvider(name="chronoUnit")
Object[][] data_chronoUnit() {
return new Object[][] {
{FOREVER},
{ERAS},
{MILLENNIA},
{CENTURIES},
{DECADES},
{YEARS},
{MONTHS},
{WEEKS},
{DAYS},
{HALF_DAYS},
{HOURS},
{MINUTES},
{SECONDS},
{MICROS},
{MILLIS},
{NANOS},
};
}
@Test(dataProvider = "chronoUnit")
public void test_unitType(ChronoUnit unit) throws IOException, ClassNotFoundException {
assertSerializableSame(unit);
}
}
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file:
*
* Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.temporal.serial;
import java.io.IOException;
import java.time.temporal.JulianFields;
import java.time.temporal.TemporalField;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test serialization of JulianFields
*/
@Test
public class TCKJulianFieldsSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@DataProvider(name="julian_fields")
Object[][] julian_samples() {
return new Object[][] {
{JulianFields.JULIAN_DAY},
{JulianFields.MODIFIED_JULIAN_DAY},
{JulianFields.RATA_DIE},
};
}
//-----------------------------------------------------------------------
@Test(dataProvider="julian_fields")
public void test_serializable(TemporalField field) throws IOException, ClassNotFoundException {
assertSerializable(field);
}
}
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file:
*
* Copyright (c) 2009-2012, Stephen Colebourne & Michael Nascimento Santos
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of JSR-310 nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tck.java.time.temporal.serial;
import static org.testng.Assert.assertEquals;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.time.temporal.ValueRange;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test serialization of ValueRange.
*/
@Test
public class TCKValueRangeSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
// Serialization
//-----------------------------------------------------------------------
public void test_serialization() throws Exception {
ValueRange range = ValueRange.of(1, 2, 3, 4);
assertSerializable(range);
}
/**
* Verify Serialized bytes of a ValueRange.
* @throws IOException if thrown during serialization is an unexpected test tailure
*/
public void test_valueRangeSerialized() throws IOException {
byte[] expected = {
(byte)172, (byte)237, 0, 5, 115, 114, 0, 29, 106, 97, /* \u00ac \u00ed \u0000 \u0005 s r \u0000 \u001d j a */
118, 97, 46, 116, 105, 109, 101, 46, 116, 101, /* v a . t i m e . t e */
109, 112, 111, 114, 97, 108, 46, 86, 97, 108, /* m p o r a l . V a l */
117, 101, 82, 97, 110, 103, 101, (byte)154, 113, (byte)169, /* u e R a n g e \u009a q \u00a9 */
86, (byte)242, (byte)205, 90, (byte)184, 2, 0, 4, 74, 0, /* V \u00f2 \u00cd Z \u00b8 \u0002 \u0000 \u0004 J \u0000 */
10, 109, 97, 120, 76, 97, 114, 103, 101, 115, /* m a x L a r g e s */
116, 74, 0, 11, 109, 97, 120, 83, 109, 97, /* t J \u0000 \u000b m a x S m a */
108, 108, 101, 115, 116, 74, 0, 10, 109, 105,/* l l e s t J \u0000 m i */
110, 76, 97, 114, 103, 101, 115, 116, 74, 0, /* n L a r g e s t J \u0000 */
11, 109, 105, 110, 83, 109, 97, 108, 108, 101, /* \u000b m i n S m a l l e */
115, 116, 120, 112, 0, 0, 0, 0, 0, 0, /* s t x p \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 */
0, 40, 0, 0, 0, 0, 0, 0, 0, 30, /* \u0000 ( \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u001e */
0, 0, 0, 0, 0, 0, 0, 20, 0, 0, /* \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0000 \u0014 \u0000 \u0000 */
0, 0, 0, 0, 0, 10, /* \u0000 \u0000 \u0000 \u0000 \u0000 */
};
ValueRange range = ValueRange.of(10, 20, 30, 40);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos) ) {
oos.writeObject(range);
byte[] actual = baos.toByteArray();
assertEquals(actual, expected, "Serialized bytes incorrect");
}
}
}
......@@ -65,10 +65,10 @@ import java.time.DayOfWeek;
import java.time.temporal.WeekFields;
/**
* Test WeekFields.
* Test serialization of WeekFields.
*/
@Test
public class TCKWeekFields extends AbstractTCKTest {
public class TCKWeekFieldsSerialization extends AbstractTCKTest {
//-----------------------------------------------------------------------
@Test(dataProvider="weekFields")
......
......@@ -127,7 +127,6 @@ public class TCKZoneOffsetTransition extends AbstractTCKTest {
assertEquals(test.getOffsetBefore(), OFFSET_0200);
assertEquals(test.getOffsetAfter(), OFFSET_0300);
assertEquals(test.getDuration(), Duration.of(1, HOURS));
assertSerializable(test);
}
@Test
......@@ -143,7 +142,6 @@ public class TCKZoneOffsetTransition extends AbstractTCKTest {
assertEquals(test.getOffsetBefore(), OFFSET_0300);
assertEquals(test.getOffsetAfter(), OFFSET_0200);
assertEquals(test.getDuration(), Duration.of(-1, HOURS));
assertSerializable(test);
}
......
......@@ -173,7 +173,6 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
assertEquals(test.getStandardOffset(), OFFSET_0200);
assertEquals(test.getOffsetBefore(), OFFSET_0200);
assertEquals(test.getOffsetAfter(), OFFSET_0300);
assertSerializable(test);
}
@Test
......@@ -190,7 +189,6 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
assertEquals(test.getStandardOffset(), OFFSET_0200);
assertEquals(test.getOffsetBefore(), OFFSET_0200);
assertEquals(test.getOffsetAfter(), OFFSET_0300);
assertSerializable(test);
}
@Test
......@@ -207,7 +205,6 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
assertEquals(test.getStandardOffset(), OFFSET_0200);
assertEquals(test.getOffsetBefore(), OFFSET_0200);
assertEquals(test.getOffsetAfter(), OFFSET_0300);
assertSerializable(test);
}
......
......@@ -72,10 +72,10 @@ import java.time.zone.ZoneRules;
import static org.testng.Assert.assertEquals;
/**
* Test ZoneRules for fixed offset time-zones.
* Test serialization of ZoneRules for fixed offset time-zones.
*/
@Test
public class TCKFixedZoneRules {
public class TCKFixedZoneRulesSerialization {
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2);
......
......@@ -59,10 +59,7 @@
*/
package tck.java.time.zone.serial;
import static org.testng.Assert.assertEquals;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneOffset;
......@@ -73,17 +70,19 @@ import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
/**
* Test ZoneOffsetTransitionRule.
* Test ZoneOffsetTransitionRule serialization.
*/
@Test
public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
public class TCKZoneOffsetTransitionRuleSerialization extends AbstractTCKTest {
private static final LocalTime TIME_0100 = LocalTime.of(1, 0);
private static final ZoneOffset OFFSET_0200 = ZoneOffset.ofHours(2);
private static final ZoneOffset OFFSET_0300 = ZoneOffset.ofHours(3);
//-----------------------------------------------------------------------
// Test serialization
//-----------------------------------------------------------------------
@Test
public void test_serialization_unusualOffsets() throws Exception {
ZoneOffsetTransitionRule test = ZoneOffsetTransitionRule.of(
......@@ -110,5 +109,28 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
assertSerializable(test);
}
@Test
public void test_serialization_floatingWeek() throws Exception {
ZoneOffsetTransitionRule test = ZoneOffsetTransitionRule.of(
Month.MARCH, 20, DayOfWeek.SUNDAY, TIME_0100, false, TimeDefinition.WALL,
OFFSET_0200, OFFSET_0200, OFFSET_0300);
assertSerializable(test);
}
@Test
public void test_serialization_floatingWeekBackwards() throws Exception {
ZoneOffsetTransitionRule test = ZoneOffsetTransitionRule.of(
Month.MARCH, -1, DayOfWeek.SUNDAY, TIME_0100, false, TimeDefinition.WALL,
OFFSET_0200, OFFSET_0200, OFFSET_0300);
assertSerializable(test);
}
@Test
public void test_serialization_fixedDate() throws Exception {
ZoneOffsetTransitionRule test = ZoneOffsetTransitionRule.of(
Month.MARCH, 20, null, TIME_0100, false, TimeDefinition.WALL,
OFFSET_0200, OFFSET_0200, OFFSET_0300);
assertSerializable(test);
}
}
......@@ -59,6 +59,9 @@
*/
package tck.java.time.zone.serial;
import static java.time.temporal.ChronoUnit.HOURS;
import java.time.Duration;
import org.testng.annotations.Test;
import tck.java.time.AbstractTCKTest;
......@@ -68,10 +71,13 @@ import java.time.ZoneOffset;
import java.time.zone.ZoneOffsetTransition;
/**
* Test ZoneOffsetTransition.
* Test serialization of ZoneOffsetTransition.
*/
@Test
public class TCKZoneOffsetTransition extends AbstractTCKTest {
public class TCKZoneOffsetTransitionSerialization extends AbstractTCKTest {
private static final ZoneOffset OFFSET_0200 = ZoneOffset.ofHours(2);
private static final ZoneOffset OFFSET_0300 = ZoneOffset.ofHours(3);
//-----------------------------------------------------------------------
@Test
......@@ -88,4 +94,20 @@ public class TCKZoneOffsetTransition extends AbstractTCKTest {
assertSerializable(test);
}
@Test
public void test_serialization_gap() throws Exception {
LocalDateTime before = LocalDateTime.of(2010, 3, 31, 1, 0);
LocalDateTime after = LocalDateTime.of(2010, 3, 31, 2, 0);
ZoneOffsetTransition test = ZoneOffsetTransition.of(before, OFFSET_0200, OFFSET_0300);
assertSerializable(test);
}
@Test
public void test_serialization_overlap() throws Exception {
LocalDateTime before = LocalDateTime.of(2010, 10, 31, 1, 0);
LocalDateTime after = LocalDateTime.of(2010, 10, 31, 0, 0);
ZoneOffsetTransition test = ZoneOffsetTransition.of(before, OFFSET_0300, OFFSET_0200);
assertSerializable(test);
}
}
......@@ -71,10 +71,10 @@ import java.time.zone.ZoneRules;
import static org.testng.Assert.assertEquals;
/**
* Test ZoneRules.
* Test serialization of ZoneRules.
*/
@Test
public class TCKZoneRules {
public class TCKZoneRulesSerialization {
public void test_serialization_loaded() throws Exception {
assertSerialization(europeLondon());
......
......@@ -63,11 +63,6 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
......@@ -87,27 +82,6 @@ public abstract class AbstractTest {
return true;
}
protected static void assertSerializable(Object o) throws IOException, ClassNotFoundException {
Object deserialisedObject = writeThenRead(o);
assertEquals(deserialisedObject, o);
}
protected static void assertSerializableAndSame(Object o) throws IOException, ClassNotFoundException {
Object deserialisedObject = writeThenRead(o);
assertSame(deserialisedObject, o);
}
private static Object writeThenRead(Object o) throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream oos = new ObjectOutputStream(baos) ) {
oos.writeObject(o);
}
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()))) {
return ois.readObject();
}
}
protected static void assertImmutable(Class<?> cls) {
assertTrue(Modifier.isPublic(cls.getModifiers()));
assertTrue(Modifier.isFinal(cls.getModifiers()));
......
......@@ -63,11 +63,6 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.time.Duration;
import org.testng.annotations.Test;
......@@ -84,29 +79,6 @@ public class TestDuration extends AbstractTest {
assertImmutable(Duration.class);
}
//-----------------------------------------------------------------------
@Test
public void test_interfaces() {
assertTrue(Serializable.class.isAssignableFrom(Duration.class));
assertTrue(Comparable.class.isAssignableFrom(Duration.class));
}
//-----------------------------------------------------------------------
// serialization
//-----------------------------------------------------------------------
@Test
public void test_deserializationSingleton() throws Exception {
Duration orginal = Duration.ZERO;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(orginal);
out.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bais);
Duration ser = (Duration) in.readObject();
assertSame(ser, Duration.ZERO);
}
@Test
public void plus_zeroReturnsThis() {
Duration t = Duration.ofSeconds(-1);
......
......@@ -87,19 +87,6 @@ public class TestDateTimeValueRange extends AbstractTest {
assertImmutable(ValueRange.class);
}
//-----------------------------------------------------------------------
// Serialization
//-----------------------------------------------------------------------
public void test_serialization() throws Exception {
Object obj = ValueRange.of(1, 2, 3, 4);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
assertEquals(ois.readObject(), obj);
}
//-----------------------------------------------------------------------
// of(long,long)
//-----------------------------------------------------------------------
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册