diff options
author | Narayan Kamath <narayan@google.com> | 2015-01-02 11:08:32 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-01-02 11:08:34 +0000 |
commit | 7d286deeff7a2ba63d3981408654f527f7831ee3 (patch) | |
tree | 12cabe4324cb7164d8d4e4b302783222d5cc96e1 | |
parent | f891c7deeeeb20ef5b7217634365a2ed48c50050 (diff) | |
parent | 77ef2926d20998349254632052228bd456f82ed4 (diff) | |
download | libcore-7d286deeff7a2ba63d3981408654f527f7831ee3.zip libcore-7d286deeff7a2ba63d3981408654f527f7831ee3.tar.gz libcore-7d286deeff7a2ba63d3981408654f527f7831ee3.tar.bz2 |
Merge "Fix documentation for Calendar#clone."
-rw-r--r-- | luni/src/main/java/java/util/Calendar.java | 4 | ||||
-rw-r--r-- | luni/src/test/java/libcore/java/util/CalendarTest.java | 72 |
2 files changed, 75 insertions, 1 deletions
diff --git a/luni/src/main/java/java/util/Calendar.java b/luni/src/main/java/java/util/Calendar.java index fc4cef6..6057547 100644 --- a/luni/src/main/java/java/util/Calendar.java +++ b/luni/src/main/java/java/util/Calendar.java @@ -810,7 +810,9 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca } /** - * Returns a shallow copy of this {@code Calendar} with the same properties. + * Returns a partially deep copy of this {@code Calendar}; all fields from + * from the {@code Calendar} class are cloned (deep copy) but fields from + * subclasses aren't (shallow copy). */ @Override public Object clone() { diff --git a/luni/src/test/java/libcore/java/util/CalendarTest.java b/luni/src/test/java/libcore/java/util/CalendarTest.java index e0e1a35..2e13ad8 100644 --- a/luni/src/test/java/libcore/java/util/CalendarTest.java +++ b/luni/src/test/java/libcore/java/util/CalendarTest.java @@ -263,4 +263,76 @@ public class CalendarTest extends junit.framework.TestCase { b.setTime(d); assertEquals(a, b); } + + public void testCloneMakesDeepCopyOfCalendarFields() { + FakeCalendar c = new FakeCalendar(); + FakeCalendar c2 = (FakeCalendar) c.clone(); + + assertFalse(c.getTimeZone() == c2.getTimeZone()); + assertEquals(c.getTimeZone(), c2.getTimeZone()); + + // The default clone() implementation makes a deep copy of calendar + // fields... + assertFalse(c.getCalenderFields() == c2.getCalenderFields()); + // ,,, and a shallow copy of subclass fields. + assertSame(c.getSubclassFields(), c2.getSubclassFields()); + } + + public static class FakeCalendar extends Calendar { + + private int[] subclassFields; + + public FakeCalendar() { + super(TimeZone.getDefault(), Locale.getDefault()); + subclassFields = new int[12]; + } + + public int[] getCalenderFields() { + return fields; + } + + public int[] getSubclassFields() { + return subclassFields; + } + + @Override + public void add(int field, int value) { + + } + + @Override + protected void computeFields() { + + } + + @Override + protected void computeTime() { + + } + + @Override + public int getGreatestMinimum(int field) { + return 0; + } + + @Override + public int getLeastMaximum(int field) { + return 0; + } + + @Override + public int getMaximum(int field) { + return 0; + } + + @Override + public int getMinimum(int field) { + return 0; + } + + @Override + public void roll(int field, boolean increment) { + + } + } } |