summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2015-01-02 11:08:32 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-01-02 11:08:34 +0000
commit7d286deeff7a2ba63d3981408654f527f7831ee3 (patch)
tree12cabe4324cb7164d8d4e4b302783222d5cc96e1
parentf891c7deeeeb20ef5b7217634365a2ed48c50050 (diff)
parent77ef2926d20998349254632052228bd456f82ed4 (diff)
downloadlibcore-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.java4
-rw-r--r--luni/src/test/java/libcore/java/util/CalendarTest.java72
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) {
+
+ }
+ }
}