1 4 package test.net.sourceforge.pmd.cpd; 5 6 import junit.framework.TestCase; 7 import net.sourceforge.pmd.cpd.Match; 8 import net.sourceforge.pmd.cpd.Renderer; 9 import net.sourceforge.pmd.cpd.TokenEntry; 10 import net.sourceforge.pmd.cpd.XMLRenderer; 11 import org.w3c.dom.Document ; 12 import org.w3c.dom.Node ; 13 import org.w3c.dom.NodeList ; 14 15 import javax.xml.parsers.DocumentBuilderFactory ; 16 import java.io.ByteArrayInputStream ; 17 import java.util.ArrayList ; 18 import java.util.List ; 19 20 23 public class XMLRendererTest extends TestCase { 24 public void test_no_dupes() { 25 Renderer renderer = new XMLRenderer(); 26 List list = new ArrayList (); 27 String report = renderer.render(list.iterator()); 28 try { 29 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream (report.getBytes())); 30 NodeList nodes = doc.getChildNodes(); 31 Node n = nodes.item(0); 32 assertEquals("pmd-cpd", n.getNodeName()); 33 assertEquals(0, doc.getElementsByTagName("duplication").getLength()); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 fail(e.getMessage()); 37 } 38 } 39 40 public void test_one_dupe() { 41 Renderer renderer = new XMLRenderer(); 42 List list = new ArrayList (); 43 Match match = new Match(75, new TokenEntry("public", "/var/Foo.java", 48), new TokenEntry("stuff", "/var/Foo.java", 73)); 44 match.setLineCount(6); 45 match.setSourceCodeSlice("code fragment"); 46 list.add(match); 47 String report = renderer.render(list.iterator()); 48 try { 49 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream (report.getBytes())); 50 NodeList dupes = doc.getElementsByTagName("duplication"); 51 assertEquals(1, dupes.getLength()); 52 Node file = dupes.item(0).getFirstChild(); 53 while (file != null && file.getNodeType() != Node.ELEMENT_NODE) { 54 file = file.getNextSibling(); 55 } 56 assertEquals("48", file.getAttributes().getNamedItem("line").getNodeValue()); 57 assertEquals("/var/Foo.java", file.getAttributes().getNamedItem("path").getNodeValue()); 58 59 file = file.getNextSibling(); 60 while (file != null && file.getNodeType() != Node.ELEMENT_NODE) { 61 file = file.getNextSibling(); 62 } 63 assertEquals("73", file.getAttributes().getNamedItem("line").getNodeValue()); 64 65 assertEquals(1, doc.getElementsByTagName("codefragment").getLength()); 66 Node actualCode = doc.getElementsByTagName("codefragment").item(0).getFirstChild().getNextSibling(); 67 assertEquals("\ncode fragment\n", actualCode.getNodeValue()); 68 } catch (Exception e) { 69 e.printStackTrace(); 70 fail(e.getMessage()); 71 } 72 } 73 74 public void testRender_MultipleMatch() { 75 Renderer renderer = new XMLRenderer(); 76 List list = new ArrayList (); 77 Match match1 = new Match(75, new TokenEntry("public", "/var/Foo.java", 48), new TokenEntry("void", "/var/Foo.java", 73)); 78 match1.setLineCount(6); 79 match1.setSourceCodeSlice("code fragment"); 80 Match match2 = new Match(76, new TokenEntry("void", "/var/Foo2.java", 49), new TokenEntry("stuff", "/var/Foo2.java", 74)); 81 match2.setLineCount(7); 82 match2.setSourceCodeSlice("code fragment 2"); 83 list.add(match1); 84 list.add(match2); 85 String report = renderer.render(list.iterator()); 86 try { 87 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream (report.getBytes())); 88 assertEquals(2, doc.getElementsByTagName("duplication").getLength()); 89 assertEquals(4, doc.getElementsByTagName("file").getLength()); 90 } catch (Exception e) { 91 e.printStackTrace(); 92 fail(e.getMessage()); 93 } 94 } 95 } 96 97 | Popular Tags |