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;
|
package java.time.temporal;
|
||||||
|
|
||||||
|
import java.io.InvalidObjectException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.DateTimeException;
|
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.
|
* Checks if this range is equal to another range.
|
||||||
|
@ -68,6 +68,8 @@ import java.io.ObjectOutputStream;
|
|||||||
import java.io.ObjectStreamConstants;
|
import java.io.ObjectStreamConstants;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Formatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base test class.
|
* Base test class.
|
||||||
@ -131,10 +133,10 @@ public abstract class AbstractTCKTest {
|
|||||||
assertEquals(dis.readByte(), ObjectStreamConstants.TC_NULL); // no superclasses
|
assertEquals(dis.readByte(), ObjectStreamConstants.TC_NULL); // no superclasses
|
||||||
if (expectedBytes.length < 256) {
|
if (expectedBytes.length < 256) {
|
||||||
assertEquals(dis.readByte(), ObjectStreamConstants.TC_BLOCKDATA);
|
assertEquals(dis.readByte(), ObjectStreamConstants.TC_BLOCKDATA);
|
||||||
assertEquals(dis.readUnsignedByte(), expectedBytes.length);
|
assertEquals(dis.readUnsignedByte(), expectedBytes.length, "blockdata length incorrect");
|
||||||
} else {
|
} else {
|
||||||
assertEquals(dis.readByte(), ObjectStreamConstants.TC_BLOCKDATALONG);
|
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];
|
byte[] input = new byte[expectedBytes.length];
|
||||||
dis.readFully(input);
|
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 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();
|
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() {
|
public void test_fixed_InstantZoneId() {
|
||||||
Clock test = Clock.fixed(INSTANT, PARIS);
|
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.assertEquals;
|
||||||
import static org.testng.Assert.assertSame;
|
import static org.testng.Assert.assertSame;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
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 Instant INSTANT = LocalDateTime.of(2008, 6, 30, 11, 30, 10, 500).atZone(ZoneOffset.ofHours(2)).toInstant();
|
||||||
private static final Duration OFFSET = Duration.ofSeconds(2);
|
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() {
|
public void test_offset_ClockDuration() {
|
||||||
Clock test = Clock.offset(Clock.fixed(INSTANT, PARIS), OFFSET);
|
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.assertEquals;
|
||||||
import static org.testng.Assert.fail;
|
import static org.testng.Assert.fail;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.ZoneId;
|
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 MOSCOW = ZoneId.of("Europe/Moscow");
|
||||||
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
|
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() {
|
public void test_instant() {
|
||||||
Clock system = Clock.systemUTC();
|
Clock system = Clock.systemUTC();
|
||||||
|
@ -62,7 +62,6 @@ package tck.java.time;
|
|||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertSame;
|
import static org.testng.Assert.assertSame;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
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 MOSCOW = ZoneId.of("Europe/Moscow");
|
||||||
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
|
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 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() {
|
public void test_tick_ClockDuration_250millis() {
|
||||||
|
@ -354,4 +354,27 @@ public final class CopticDate
|
|||||||
.append(dom < 10 ? "-0" : "-").append(dom);
|
.append(dom < 10 ? "-0" : "-").append(dom);
|
||||||
return buf.toString();
|
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")
|
@Test(dataProvider="calendars")
|
||||||
public void test_from_TemporalAccessor(Chronology chrono) {
|
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.assertSame;
|
||||||
import static org.testng.Assert.assertTrue;
|
import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
@ -338,20 +337,4 @@ public class TCKChronology {
|
|||||||
Chronology chrono = Chronology.of("FooFoo");
|
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 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.LocalDate;
|
||||||
import java.time.chrono.ChronoLocalDate;
|
import java.time.chrono.ChronoLocalDate;
|
||||||
import java.time.chrono.Chronology;
|
import java.time.chrono.Chronology;
|
||||||
@ -78,29 +74,11 @@ import org.testng.annotations.Test;
|
|||||||
public class TCKTestServiceLoader {
|
public class TCKTestServiceLoader {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test_CopticServiceLoader() {
|
public void test_TestServiceLoader() {
|
||||||
Chronology chrono = Chronology.of("Coptic");
|
Chronology chrono = Chronology.of("Coptic");
|
||||||
ChronoLocalDate copticDate = chrono.date(1729, 4, 27);
|
ChronoLocalDate copticDate = chrono.date(1729, 4, 27);
|
||||||
LocalDate ld = LocalDate.from(copticDate);
|
LocalDate ld = LocalDate.from(copticDate);
|
||||||
assertEquals(ld, LocalDate.of(2013, 1, 5), "CopticDate does not match LocalDate");
|
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.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
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.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
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
|
@Test
|
||||||
public class TCKChronoLocalDateTime {
|
public class TCKChronoLocalDateTimeSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// regular data factory for available calendars
|
// 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 {
|
public void test_ChronoLocalDateTimeSerialization(Chronology chrono) throws Exception {
|
||||||
LocalDateTime ref = LocalDate.of(2013, 1, 5).atTime(12, 1, 2, 3);
|
LocalDateTime ref = LocalDate.of(2013, 1, 5).atTime(12, 1, 2, 3);
|
||||||
ChronoLocalDateTime<?> orginal = chrono.date(ref).atTime(ref.toLocalTime());
|
ChronoLocalDateTime<?> original = chrono.date(ref).atTime(ref.toLocalTime());
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
assertSerializable(original);
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
}
|
}
|
@ -56,23 +56,25 @@
|
|||||||
*/
|
*/
|
||||||
package tck.java.time.chrono.serial;
|
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.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
import tck.java.time.AbstractTCKTest;
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test assertions that must be true for all built-in chronologies.
|
* Test assertions that must be true for all built-in chronologies.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKChronoLocalDate {
|
public class TCKChronoZonedDateTimeSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// regular data factory for names and descriptions of available calendars
|
// regular data factory for names and descriptions of available calendars
|
||||||
@ -84,28 +86,18 @@ public class TCKChronoLocalDate {
|
|||||||
{IsoChronology.INSTANCE},
|
{IsoChronology.INSTANCE},
|
||||||
{JapaneseChronology.INSTANCE},
|
{JapaneseChronology.INSTANCE},
|
||||||
{MinguoChronology.INSTANCE},
|
{MinguoChronology.INSTANCE},
|
||||||
{ThaiBuddhistChronology.INSTANCE}};
|
{ThaiBuddhistChronology.INSTANCE},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// Test Serialization of Calendars
|
// Test Serialization of ISO via chrono API
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test( dataProvider="calendars")
|
@Test( dataProvider="calendars")
|
||||||
public void test_ChronoSerialization(Chronology chrono) throws Exception {
|
public void test_ChronoZonedDateTimeSerialization(Chronology chrono) throws Exception {
|
||||||
LocalDate ref = LocalDate.of(2013, 1, 5);
|
ZonedDateTime ref = LocalDate.of(2013, 1, 5).atTime(12, 1, 2, 3).atZone(ZoneId.of("GMT+01:23"));
|
||||||
ChronoLocalDate orginal = chrono.date(ref);
|
ChronoZonedDateTime<?> original = chrono.date(ref).atTime(ref.toLocalTime()).atZone(ref.getZone());
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
assertSerializable(original);
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
}
|
}
|
@ -56,13 +56,9 @@
|
|||||||
*/
|
*/
|
||||||
package tck.java.time.chrono.serial;
|
package tck.java.time.chrono.serial;
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.time.chrono.Chronology;
|
import java.time.chrono.Chronology;
|
||||||
import java.time.chrono.HijrahChronology;
|
import java.time.chrono.HijrahChronology;
|
||||||
import java.time.chrono.IsoChronology;
|
import java.time.chrono.IsoChronology;
|
||||||
@ -73,11 +69,15 @@ import java.time.chrono.ThaiBuddhistChronology;
|
|||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import tck.java.time.AbstractTCKTest;
|
||||||
|
|
||||||
@Test
|
@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")
|
@DataProvider(name = "calendars")
|
||||||
Chronology[][] data_of_calendars() {
|
Chronology[][] data_of_calendars() {
|
||||||
@ -93,44 +93,22 @@ public class TCKChronologySerialization {
|
|||||||
// Test Serialization of Calendars
|
// Test Serialization of Calendars
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test(dataProvider="calendars")
|
@Test(dataProvider="calendars")
|
||||||
public void test_ChronoSerialization(Chronology chrono) throws Exception {
|
public void test_chronoSerialization(Chronology chrono) throws Exception {
|
||||||
System.out.printf(" ChronoSerialization: %s%n", chrono);
|
assertSerializable(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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//-----------------------------------------------------------------------
|
||||||
* Utility method to dump a byte array in a java syntax.
|
// Test that serialization produces exact sequence of bytes
|
||||||
* @param bytes and array of bytes
|
//-----------------------------------------------------------------------
|
||||||
* @param os the outputstream to receive the output.
|
@Test(dataProvider="calendars")
|
||||||
*/
|
private void test_serializationBytes(Chronology chrono) throws Exception {
|
||||||
static void dumpSerialStream(byte[] bytes, PrintStream os) {
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
os.printf(" byte[] bytes = {" );
|
try (DataOutputStream dos = new DataOutputStream(baos) ) {
|
||||||
final int linelen = 10;
|
dos.writeByte(CHRONO_TYPE);
|
||||||
for (int i = 0; i < bytes.length; i++) {
|
dos.writeUTF(chrono.getId());
|
||||||
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(" */");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
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;
|
package tck.java.time.serial;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
import tck.java.time.AbstractTCKTest;
|
import tck.java.time.AbstractTCKTest;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test Duration.
|
* Test Duration serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@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
|
@Test
|
||||||
@ -92,4 +102,12 @@ public class TCKDuration extends AbstractTCKTest {
|
|||||||
assertSerializedBySer(Duration.ofSeconds(654321, 123456789), bytes);
|
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;
|
import java.time.Instant;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test Instant.
|
* Test Instant serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKInstant extends AbstractTCKTest {
|
public class TCKInstantSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
@ -68,10 +68,10 @@ import java.io.DataOutputStream;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test LocalDate.
|
* Test LocalDate serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKLocalDate extends AbstractTCKTest {
|
public class TCKLocalDateSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private LocalDate TEST_2007_07_15;
|
private LocalDate TEST_2007_07_15;
|
||||||
|
|
||||||
@ -102,6 +102,4 @@ public class TCKLocalDate extends AbstractTCKTest {
|
|||||||
assertSerializedBySer(LocalDate.of(2012, 9, 16), bytes);
|
assertSerializedBySer(LocalDate.of(2012, 9, 16), bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
}
|
}
|
@ -67,10 +67,10 @@ import java.io.DataOutputStream;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test LocalDateTime.
|
* Test serialization of LocalDateTime.
|
||||||
*/
|
*/
|
||||||
@Test
|
@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);
|
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);
|
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;
|
import java.time.LocalTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test LocalTime.
|
* Test LocalTime serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKLocalTime extends AbstractTCKTest {
|
public class TCKLocalTimeSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
|
|
||||||
private LocalTime TEST_12_30_40_987654321;
|
private LocalTime TEST_12_30_40_987654321;
|
@ -69,10 +69,10 @@ import java.io.IOException;
|
|||||||
import java.time.MonthDay;
|
import java.time.MonthDay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test MonthDay.
|
* Test MonthDay serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKMonthDay extends AbstractTCKTest {
|
public class TCKMonthDaySerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private MonthDay TEST_07_15;
|
private MonthDay TEST_07_15;
|
||||||
|
|
||||||
@ -81,8 +81,6 @@ public class TCKMonthDay extends AbstractTCKTest {
|
|||||||
TEST_07_15 = MonthDay.of(7, 15);
|
TEST_07_15 = MonthDay.of(7, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
||||||
public void test_serialization() throws ClassNotFoundException, IOException {
|
public void test_serialization() throws ClassNotFoundException, IOException {
|
||||||
@ -101,7 +99,4 @@ public class TCKMonthDay extends AbstractTCKTest {
|
|||||||
assertSerializedBySer(MonthDay.of(9, 16), bytes);
|
assertSerializedBySer(MonthDay.of(9, 16), bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -70,10 +70,10 @@ import java.time.OffsetDateTime;
|
|||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test OffsetDateTime.
|
* Test OffsetDateTime serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKOffsetDateTime extends AbstractTCKTest {
|
public class TCKOffsetDateTimeSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
|
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
|
||||||
private OffsetDateTime TEST_2008_6_30_11_30_59_000000500;
|
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_2008_6_30_11_30_59_000000500 = OffsetDateTime.of(2008, 6, 30, 11, 30, 59, 500, OFFSET_PONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
||||||
public void test_serialization() throws Exception {
|
public void test_serialization() throws Exception {
|
@ -69,10 +69,10 @@ import java.time.OffsetTime;
|
|||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test OffsetTime.
|
* Test OffsetTime serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKOffsetTime extends AbstractTCKTest {
|
public class TCKOffsetTimeSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
|
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
|
||||||
private OffsetTime TEST_11_30_59_500_PONE;
|
private OffsetTime TEST_11_30_59_500_PONE;
|
@ -65,10 +65,10 @@ import tck.java.time.AbstractTCKTest;
|
|||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test Period.
|
* Test serialization of Period.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKPeriod extends AbstractTCKTest {
|
public class TCKPeriodSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
||||||
@ -78,5 +78,4 @@ public class TCKPeriod extends AbstractTCKTest {
|
|||||||
assertSerializable(Period.of(1, 2, 3));
|
assertSerializable(Period.of(1, 2, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -69,10 +69,10 @@ import java.io.IOException;
|
|||||||
import java.time.YearMonth;
|
import java.time.YearMonth;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test YearMonth.
|
* Test serialization of YearMonth.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKYearMonth extends AbstractTCKTest {
|
public class TCKYearMonthSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private YearMonth TEST_2008_06;
|
private YearMonth TEST_2008_06;
|
||||||
|
|
||||||
@ -100,7 +100,4 @@ public class TCKYearMonth extends AbstractTCKTest {
|
|||||||
assertSerializedBySer(YearMonth.of(2012, 9), bytes);
|
assertSerializedBySer(YearMonth.of(2012, 9), bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -67,10 +67,10 @@ import java.io.DataOutputStream;
|
|||||||
import java.time.Year;
|
import java.time.Year;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test Year.
|
* Test Year serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKYear extends AbstractTCKTest {
|
public class TCKYearSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
@ -73,10 +73,10 @@ import static org.testng.Assert.assertEquals;
|
|||||||
import static org.testng.Assert.fail;
|
import static org.testng.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZoneId.
|
* Test serialization of ZoneId.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKZoneId extends AbstractTCKTest {
|
public class TCKZoneIdSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
@ -67,10 +67,10 @@ import java.io.DataOutputStream;
|
|||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZoneOffset.
|
* Test serialization of ZoneOffset.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKZoneOffset extends AbstractTCKTest {
|
public class TCKZoneOffsetSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -72,10 +72,10 @@ import java.time.ZoneOffset;
|
|||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZonedDateTime.
|
* Test serialization of ZonedDateTime.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKZonedDateTime extends AbstractTCKTest {
|
public class TCKZonedDateTimeSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private static final ZoneOffset OFFSET_0100 = ZoneOffset.ofHours(1);
|
private static final ZoneOffset OFFSET_0100 = ZoneOffset.ofHours(1);
|
||||||
private static final ZoneId ZONE_0100 = OFFSET_0100;
|
private static final ZoneId ZONE_0100 = OFFSET_0100;
|
||||||
@ -139,5 +139,4 @@ public class TCKZonedDateTime extends AbstractTCKTest {
|
|||||||
assertSerializedBySer(zdt, bytes);
|
assertSerializedBySer(zdt, bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -76,7 +76,7 @@ import org.testng.annotations.Test;
|
|||||||
import tck.java.time.AbstractTCKTest;
|
import tck.java.time.AbstractTCKTest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test.
|
* Test Julian Fields.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKJulianFields extends AbstractTCKTest {
|
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 NOV12_1945 = LocalDate.of(1945, 11, 12);
|
||||||
private static final LocalDate JAN01_0001 = LocalDate.of(1, 1, 1);
|
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")
|
@DataProvider(name="samples")
|
||||||
Object[][] data_samples() {
|
Object[][] data_samples() {
|
||||||
return new Object[][] {
|
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() {
|
public void test_basics() {
|
||||||
assertEquals(JulianFields.JULIAN_DAY.isDateBased(), true);
|
assertEquals(JulianFields.JULIAN_DAY.isDateBased(), true);
|
||||||
assertEquals(JulianFields.JULIAN_DAY.isTimeBased(), false);
|
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;
|
import java.time.temporal.WeekFields;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test WeekFields.
|
* Test serialization of WeekFields.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKWeekFields extends AbstractTCKTest {
|
public class TCKWeekFieldsSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
@Test(dataProvider="weekFields")
|
@Test(dataProvider="weekFields")
|
@ -127,7 +127,6 @@ public class TCKZoneOffsetTransition extends AbstractTCKTest {
|
|||||||
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
||||||
assertEquals(test.getDuration(), Duration.of(1, HOURS));
|
assertEquals(test.getDuration(), Duration.of(1, HOURS));
|
||||||
assertSerializable(test);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -143,7 +142,6 @@ public class TCKZoneOffsetTransition extends AbstractTCKTest {
|
|||||||
assertEquals(test.getOffsetBefore(), OFFSET_0300);
|
assertEquals(test.getOffsetBefore(), OFFSET_0300);
|
||||||
assertEquals(test.getOffsetAfter(), OFFSET_0200);
|
assertEquals(test.getOffsetAfter(), OFFSET_0200);
|
||||||
assertEquals(test.getDuration(), Duration.of(-1, HOURS));
|
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.getStandardOffset(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
||||||
assertSerializable(test);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -190,7 +189,6 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
|
|||||||
assertEquals(test.getStandardOffset(), OFFSET_0200);
|
assertEquals(test.getStandardOffset(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
||||||
assertSerializable(test);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -207,7 +205,6 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
|
|||||||
assertEquals(test.getStandardOffset(), OFFSET_0200);
|
assertEquals(test.getStandardOffset(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
assertEquals(test.getOffsetBefore(), OFFSET_0200);
|
||||||
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
assertEquals(test.getOffsetAfter(), OFFSET_0300);
|
||||||
assertSerializable(test);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,10 +72,10 @@ import java.time.zone.ZoneRules;
|
|||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZoneRules for fixed offset time-zones.
|
* Test serialization of ZoneRules for fixed offset time-zones.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKFixedZoneRules {
|
public class TCKFixedZoneRulesSerialization {
|
||||||
|
|
||||||
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
|
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
|
||||||
private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2);
|
private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2);
|
@ -59,10 +59,7 @@
|
|||||||
*/
|
*/
|
||||||
package tck.java.time.zone.serial;
|
package tck.java.time.zone.serial;
|
||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.time.DayOfWeek;
|
import java.time.DayOfWeek;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.Month;
|
import java.time.Month;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
@ -73,17 +70,19 @@ import org.testng.annotations.Test;
|
|||||||
import tck.java.time.AbstractTCKTest;
|
import tck.java.time.AbstractTCKTest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZoneOffsetTransitionRule.
|
* Test ZoneOffsetTransitionRule serialization.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
|
public class TCKZoneOffsetTransitionRuleSerialization extends AbstractTCKTest {
|
||||||
|
|
||||||
private static final LocalTime TIME_0100 = LocalTime.of(1, 0);
|
private static final LocalTime TIME_0100 = LocalTime.of(1, 0);
|
||||||
private static final ZoneOffset OFFSET_0200 = ZoneOffset.ofHours(2);
|
private static final ZoneOffset OFFSET_0200 = ZoneOffset.ofHours(2);
|
||||||
private static final ZoneOffset OFFSET_0300 = ZoneOffset.ofHours(3);
|
private static final ZoneOffset OFFSET_0300 = ZoneOffset.ofHours(3);
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Test serialization
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
@Test
|
@Test
|
||||||
public void test_serialization_unusualOffsets() throws Exception {
|
public void test_serialization_unusualOffsets() throws Exception {
|
||||||
ZoneOffsetTransitionRule test = ZoneOffsetTransitionRule.of(
|
ZoneOffsetTransitionRule test = ZoneOffsetTransitionRule.of(
|
||||||
@ -110,5 +109,28 @@ public class TCKZoneOffsetTransitionRule extends AbstractTCKTest {
|
|||||||
assertSerializable(test);
|
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;
|
package tck.java.time.zone.serial;
|
||||||
|
|
||||||
|
import static java.time.temporal.ChronoUnit.HOURS;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
import tck.java.time.AbstractTCKTest;
|
import tck.java.time.AbstractTCKTest;
|
||||||
|
|
||||||
@ -68,10 +71,13 @@ import java.time.ZoneOffset;
|
|||||||
import java.time.zone.ZoneOffsetTransition;
|
import java.time.zone.ZoneOffsetTransition;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZoneOffsetTransition.
|
* Test serialization of ZoneOffsetTransition.
|
||||||
*/
|
*/
|
||||||
@Test
|
@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
|
@Test
|
||||||
@ -88,4 +94,20 @@ public class TCKZoneOffsetTransition extends AbstractTCKTest {
|
|||||||
assertSerializable(test);
|
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;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test ZoneRules.
|
* Test serialization of ZoneRules.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TCKZoneRules {
|
public class TCKZoneRulesSerialization {
|
||||||
|
|
||||||
public void test_serialization_loaded() throws Exception {
|
public void test_serialization_loaded() throws Exception {
|
||||||
assertSerialization(europeLondon());
|
assertSerialization(europeLondon());
|
@ -63,11 +63,6 @@ import static org.testng.Assert.assertEquals;
|
|||||||
import static org.testng.Assert.assertSame;
|
import static org.testng.Assert.assertSame;
|
||||||
import static org.testng.Assert.assertTrue;
|
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.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
@ -87,27 +82,6 @@ public abstract class AbstractTest {
|
|||||||
return true;
|
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) {
|
protected static void assertImmutable(Class<?> cls) {
|
||||||
assertTrue(Modifier.isPublic(cls.getModifiers()));
|
assertTrue(Modifier.isPublic(cls.getModifiers()));
|
||||||
assertTrue(Modifier.isFinal(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.assertSame;
|
||||||
import static org.testng.Assert.assertTrue;
|
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 java.time.Duration;
|
||||||
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
@ -84,29 +79,6 @@ public class TestDuration extends AbstractTest {
|
|||||||
assertImmutable(Duration.class);
|
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
|
@Test
|
||||||
public void plus_zeroReturnsThis() {
|
public void plus_zeroReturnsThis() {
|
||||||
Duration t = Duration.ofSeconds(-1);
|
Duration t = Duration.ofSeconds(-1);
|
||||||
|
@ -87,19 +87,6 @@ public class TestDateTimeValueRange extends AbstractTest {
|
|||||||
assertImmutable(ValueRange.class);
|
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)
|
// of(long,long)
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user