8024427: Missing java.time.chrono serialization tests
Add tests and cleanup existing serialization tests Reviewed-by: sherman
This commit is contained in:
parent
a4b39faa4f
commit
1e581e11ea
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,164 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,135 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* 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);
|
||||
|
@ -0,0 +1,145 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,122 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
/*
|
||||
* 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)
|
||||
//-----------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user