    1   /*
    2    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
    3    *
    4    * This software is open source.
    5    * See the bottom of this file for the licence.
    6    */
    7
    8   package org.dom4j;
    9
    10  import junit.textui.TestRunner;
    11
    12  import java.util.List;
    13
    14  /***
    15   * A test harness to test the copy() methods on Element
    16   *
    17   * @author <a href="mailto:james.strachan@metastuff.com">James Strachan </a>
    18   * @version $Revision: 1.3 $
    19   */
    20  public class CopyTest extends AbstractTestCase {
    21      public static void main(String[] args) {
    22          TestRunner.run(CopyTest.class);
    23      }
    24
    25      // Test case(s)
    26      // -------------------------------------------------------------------------
    27      public void testRoot() throws Exception {
    28          document.setName("doc1");
    29
    30          Element root = document.getRootElement();
    31          List authors = root.elements("author");
    32
    33          assertTrue("Should be at least 2 authors", authors.size() == 2);
    34
    35          Element author1 = (Element) authors.get(0);
    36          Element author2 = (Element) authors.get(1);
    37
    38          testCopy(root);
    39          testCopy(author1);
    40          testCopy(author2);
    41      }
    42
    43      protected void testCopy(Element element) throws Exception {
    44          assertTrue("Not null", element != null);
    45
    46          int attributeCount = element.attributeCount();
    47          int nodeCount = element.nodeCount();
    48
    49          Element copy = element.createCopy();
    50
    51          assertEquals("Node size not equal after copy", element.nodeCount(),
    52                  nodeCount);
    53          assertTrue("Same attribute size after copy",
    54                  element.attributeCount() == attributeCount);
    55
    56          assertTrue("Copy has same node size", copy.nodeCount() == nodeCount);
    57          assertTrue("Copy has same attribute size",
    58                  copy.attributeCount() == attributeCount);
    59
    60          for (int i = 0; i < attributeCount; i++) {
    61              Attribute attr1 = element.attribute(i);
    62              Attribute attr2 = copy.attribute(i);
    63
    64              assertTrue("Attribute: " + i + " name is equal", attr1.getName()
    65                      .equals(attr2.getName()));
    66              assertTrue("Attribute: " + i + " value is equal", attr1.getValue()
    67                      .equals(attr2.getValue()));
    68          }
    69
    70          for (int i = 0; i < nodeCount; i++) {
    71              Node node1 = element.node(i);
    72              Node node2 = copy.node(i);
    73
    74              assertTrue("Node: " + i + " type is equal",
    75                      node1.getNodeType() == node2.getNodeType());
    76              assertTrue("Node: " + i + " value is equal", node1.getText()
    77                      .equals(node2.getText()));
    78          }
    79      }
    80  }
    81
    82  /*
    83   * Redistribution and use of this software and associated documentation
    84   * ("Software"), with or without modification, are permitted provided that the
    85   * following conditions are met:
    86   *
    87   * 1. Redistributions of source code must retain copyright statements and
    88   * notices. Redistributions must also contain a copy of this document.
    89   *
    90   * 2. Redistributions in binary form must reproduce the above copyright notice,
    91   * this list of conditions and the following disclaimer in the documentation
    92   * and/or other materials provided with the distribution.
    93   *
    94   * 3. The name "DOM4J" must not be used to endorse or promote products derived
    95   * from this Software without prior written permission of MetaStuff, Ltd. For
    96   * written permission, please contact dom4j-info@metastuff.com.
    97   *
    98   * 4. Products derived from this Software may not be called "DOM4J" nor may
    99   * "DOM4J" appear in their names without prior written permission of MetaStuff,
    100  * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
    101  *
    102  * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
    103  *
    104  * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
    105  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    106  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    107  * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
    108  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    109  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    110  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    111  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    112  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    113  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    114  * POSSIBILITY OF SUCH DAMAGE.
    115  *
    116  * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
    117  */