1 package org.testng.xml; 2 3 import java.io.IOException; 4 import java.io.Serializable; 5 import java.util.List; 6 import java.util.Properties; 7 8 import org.testng.collections.Lists; 9 import org.testng.internal.PackageUtils; 10 import org.testng.internal.Utils; 11 import org.testng.reporters.XMLStringBuffer; 12 13 /** 14 * This class describes the tag <package> in testng.xml. 15 * 16 * @author Cedric 17 * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a> 18 */ 19 public class XmlPackage implements Serializable { 20 /** 21 * 22 */ 23 private static final long serialVersionUID = 1996341670354923204L; 24 private String m_name; 25 private List<String> m_include = Lists.newArrayList(); 26 private List<String> m_exclude = Lists.newArrayList(); 27 private List<XmlClass> m_xmlClasses= null; 28 XmlPackage()29 public XmlPackage() { 30 } 31 32 // For YAML XmlPackage(String name)33 public XmlPackage(String name) { 34 m_name = name; 35 } 36 37 /** 38 * @return the exclude 39 */ getExclude()40 public List<String> getExclude() { 41 return m_exclude; 42 } 43 44 /** 45 * @param exclude the exclude to set 46 */ setExclude(List<String> exclude)47 public void setExclude(List<String> exclude) { 48 m_exclude = exclude; 49 } 50 51 /** 52 * @return the include 53 */ getInclude()54 public List<String> getInclude() { 55 return m_include; 56 } 57 58 /** 59 * @param include the include to set 60 */ setInclude(List<String> include)61 public void setInclude(List<String> include) { 62 m_include = include; 63 } 64 65 /** 66 * @return the name 67 */ getName()68 public String getName() { 69 return m_name; 70 } 71 72 /** 73 * @param name the name to set 74 */ setName(String name)75 public void setName(String name) { 76 m_name = name; 77 } 78 getXmlClasses()79 public List<XmlClass> getXmlClasses() { 80 if(null == m_xmlClasses) { 81 m_xmlClasses= initializeXmlClasses(); 82 } 83 84 return m_xmlClasses; 85 } 86 initializeXmlClasses()87 private List<XmlClass> initializeXmlClasses() { 88 List<XmlClass> result= Lists.newArrayList(); 89 try { 90 String[] classes = PackageUtils.findClassesInPackage(m_name, m_include, m_exclude); 91 92 int index = 0; 93 for(String className: classes) { 94 result.add(new XmlClass(className, index++, false /* don't load classes */)); 95 } 96 } 97 catch(IOException ioex) { 98 Utils.log("XmlPackage", 1, ioex.getMessage()); 99 } 100 101 return result; 102 } 103 toXml(String indent)104 public String toXml(String indent) { 105 XMLStringBuffer xsb = new XMLStringBuffer(indent); 106 Properties p = new Properties(); 107 p.setProperty("name", getName()); 108 109 if (getInclude().isEmpty() && getExclude().isEmpty()) { 110 xsb.addEmptyElement("package", p); 111 } else { 112 xsb.push("package", p); 113 114 for (String m : getInclude()) { 115 Properties includeProp= new Properties(); 116 includeProp.setProperty("name", m); 117 xsb.addEmptyElement("include", includeProp); 118 } 119 for (String m: getExclude()) { 120 Properties excludeProp= new Properties(); 121 excludeProp.setProperty("name", m); 122 xsb.addEmptyElement("exclude", excludeProp); 123 } 124 125 xsb.pop("package"); 126 } 127 128 return xsb.toXML(); 129 } 130 131 @Override hashCode()132 public int hashCode() { 133 final int prime = 31; 134 int result = 1; 135 result = prime * result + ((m_exclude == null) ? 0 : m_exclude.hashCode()); 136 result = prime * result + ((m_include == null) ? 0 : m_include.hashCode()); 137 result = prime * result + ((m_name == null) ? 0 : m_name.hashCode()); 138 result = prime * result 139 + ((m_xmlClasses == null) ? 0 : m_xmlClasses.hashCode()); 140 return result; 141 } 142 143 @Override equals(Object obj)144 public boolean equals(Object obj) { 145 if (this == obj) 146 return true; 147 if (obj == null) 148 return XmlSuite.f(); 149 if (getClass() != obj.getClass()) 150 return XmlSuite.f(); 151 XmlPackage other = (XmlPackage) obj; 152 if (m_exclude == null) { 153 if (other.m_exclude != null) 154 return XmlSuite.f(); 155 } else if (!m_exclude.equals(other.m_exclude)) 156 return XmlSuite.f(); 157 if (m_include == null) { 158 if (other.m_include != null) 159 return XmlSuite.f(); 160 } else if (!m_include.equals(other.m_include)) 161 return XmlSuite.f(); 162 if (m_name == null) { 163 if (other.m_name != null) 164 return XmlSuite.f(); 165 } else if (!m_name.equals(other.m_name)) 166 return XmlSuite.f(); 167 if (m_xmlClasses == null) { 168 if (other.m_xmlClasses != null) 169 return XmlSuite.f(); 170 } else if (!m_xmlClasses.equals(other.m_xmlClasses)) 171 return XmlSuite.f(); 172 return true; 173 } 174 175 } 176