001: /**
002: * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
003: */package test.net.sourceforge.pmd.cpd;
004:
005: import static org.junit.Assert.assertEquals;
006: import static org.junit.Assert.fail;
007: import net.sourceforge.pmd.cpd.Match;
008: import net.sourceforge.pmd.cpd.Renderer;
009: import net.sourceforge.pmd.cpd.TokenEntry;
010: import net.sourceforge.pmd.cpd.XMLRenderer;
011:
012: import org.junit.Test;
013: import org.w3c.dom.Document;
014: import org.w3c.dom.Node;
015: import org.w3c.dom.NodeList;
016:
017: import java.io.ByteArrayInputStream;
018: import java.util.ArrayList;
019: import java.util.List;
020:
021: import javax.xml.parsers.DocumentBuilderFactory;
022:
023: /**
024: * @author Philippe T'Seyen
025: */
026: public class XMLRendererTest {
027:
028: @Test
029: public void test_no_dupes() {
030: Renderer renderer = new XMLRenderer();
031: List<Match> list = new ArrayList<Match>();
032: String report = renderer.render(list.iterator());
033: try {
034: Document doc = DocumentBuilderFactory.newInstance()
035: .newDocumentBuilder()
036: .parse(new ByteArrayInputStream(report.getBytes()));
037: NodeList nodes = doc.getChildNodes();
038: Node n = nodes.item(0);
039: assertEquals("pmd-cpd", n.getNodeName());
040: assertEquals(0, doc.getElementsByTagName("duplication")
041: .getLength());
042: } catch (Exception e) {
043: e.printStackTrace();
044: fail(e.getMessage());
045: }
046: }
047:
048: @Test
049: public void test_one_dupe() {
050: Renderer renderer = new XMLRenderer();
051: List<Match> list = new ArrayList<Match>();
052: Match match = new Match(75, new TokenEntry("public",
053: "/var/Foo.java", 48), new TokenEntry("stuff",
054: "/var/Foo.java", 73));
055: match.setLineCount(6);
056: match.setSourceCodeSlice("code fragment");
057: list.add(match);
058: String report = renderer.render(list.iterator());
059: try {
060: Document doc = DocumentBuilderFactory.newInstance()
061: .newDocumentBuilder()
062: .parse(new ByteArrayInputStream(report.getBytes()));
063: NodeList dupes = doc.getElementsByTagName("duplication");
064: assertEquals(1, dupes.getLength());
065: Node file = dupes.item(0).getFirstChild();
066: while (file != null
067: && file.getNodeType() != Node.ELEMENT_NODE) {
068: file = file.getNextSibling();
069: }
070: assertEquals("48", file.getAttributes()
071: .getNamedItem("line").getNodeValue());
072: assertEquals("/var/Foo.java", file.getAttributes()
073: .getNamedItem("path").getNodeValue());
074:
075: file = file.getNextSibling();
076: while (file != null
077: && file.getNodeType() != Node.ELEMENT_NODE) {
078: file = file.getNextSibling();
079: }
080: assertEquals("73", file.getAttributes()
081: .getNamedItem("line").getNodeValue());
082:
083: assertEquals(1, doc.getElementsByTagName("codefragment")
084: .getLength());
085: Node actualCode = doc.getElementsByTagName("codefragment")
086: .item(0).getFirstChild().getNextSibling();
087: assertEquals("\ncode fragment\n", actualCode.getNodeValue());
088: } catch (Exception e) {
089: e.printStackTrace();
090: fail(e.getMessage());
091: }
092: }
093:
094: @Test
095: public void testRender_MultipleMatch() {
096: Renderer renderer = new XMLRenderer();
097: List<Match> list = new ArrayList<Match>();
098: Match match1 = new Match(75, new TokenEntry("public",
099: "/var/Foo.java", 48), new TokenEntry("void",
100: "/var/Foo.java", 73));
101: match1.setLineCount(6);
102: match1.setSourceCodeSlice("code fragment");
103: Match match2 = new Match(76, new TokenEntry("void",
104: "/var/Foo2.java", 49), new TokenEntry("stuff",
105: "/var/Foo2.java", 74));
106: match2.setLineCount(7);
107: match2.setSourceCodeSlice("code fragment 2");
108: list.add(match1);
109: list.add(match2);
110: String report = renderer.render(list.iterator());
111: try {
112: Document doc = DocumentBuilderFactory.newInstance()
113: .newDocumentBuilder()
114: .parse(new ByteArrayInputStream(report.getBytes()));
115: assertEquals(2, doc.getElementsByTagName("duplication")
116: .getLength());
117: assertEquals(4, doc.getElementsByTagName("file")
118: .getLength());
119: } catch (Exception e) {
120: e.printStackTrace();
121: fail(e.getMessage());
122: }
123: }
124:
125: public static junit.framework.Test suite() {
126: return new junit.framework.JUnit4TestAdapter(
127: XMLRendererTest.class);
128: }
129: }
|