/* Copyright (C) 2001 Eric Blake This file is part of Mauve. Mauve is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. Mauve 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 for more details. You should have received a copy of the GNU General Public License along with Mauve; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Tags: JDK1.0 package gnu.testlet.wonka.lang.Object; import gnu.testlet.Testlet; import gnu.testlet.TestHarness; /** * This class tests that the default Object.clone does not invoke a * constructor, and that it creates a new object of the same class. * Classes that override clone(), however, are permitted to change this * behavior. * * This class also tests that array.clone behaves correctly. */ public final class clone implements Testlet, Cloneable { private static int count = 0; private int prim = 42; private Object obj = this; private Testlet test = this; private float[] array = {}; public clone() { count++; } public void test (TestHarness harness) { int my_count = count; clone copy = null; try { copy = (clone) clone(); } catch (CloneNotSupportedException cnse) { harness.fail("clone should pass on Cloneable object"); } harness.check(copy != this, "clone built distinct object"); harness.check(copy instanceof clone, "clone built same class - 1"); harness.check(copy.getClass() == clone.class, "clone built same class - 2"); harness.check(count == my_count, "clone called no constructor"); harness.check(copy.prim == 42, "primitive field cloned correctly"); harness.check(copy.obj == this, "object field cloned correctly"); harness.check(copy.test == this, "interface field cloned correctly"); harness.check(copy.array == array, "array field cloned correctly"); int[] iarray = { 1, 2 }; int[] icopy = (int[]) iarray.clone(); Object[] oarray = { new Object() }; Object[] ocopy = (Object[]) oarray.clone(); harness.check(iarray != icopy, "cloned arrays are distinct - 1"); harness.check(oarray != ocopy, "cloned arrays are distinct - 2"); harness.check(iarray.length == icopy.length, "cloned arrays have same length - 1"); harness.check(oarray.length == ocopy.length, "cloned arrays have same length - 2"); harness.check(iarray.getClass() == icopy.getClass(), "cloned arrays have same type - 1"); harness.check(oarray.getClass() == ocopy.getClass(), "cloned arrays have same type - 2"); harness.check(iarray.getClass().getComponentType() == icopy.getClass().getComponentType(), "cloned arrays have same component type - 1"); harness.check(oarray.getClass().getComponentType() == ocopy.getClass().getComponentType(), "cloned arrays have same component type - 2"); harness.check(iarray[0] == icopy[0], "cloned contents are same - 1"); harness.check(iarray[1] == icopy[1], "cloned contents are same - 2"); harness.check(oarray[0] == ocopy[0], "cloned contents are same - 3"); } }