| package org.testng.xml; |
| |
| import org.testng.collections.Lists; |
| import org.testng.internal.PackageUtils; |
| import org.testng.internal.Utils; |
| import org.testng.reporters.XMLStringBuffer; |
| |
| import java.io.IOException; |
| import java.io.Serializable; |
| import java.util.List; |
| import java.util.Properties; |
| |
| /** |
| * This class describes the tag <package> in testng.xml. |
| * |
| * @author Cedric |
| * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a> |
| */ |
| public class XmlPackage implements Serializable { |
| /** |
| * |
| */ |
| private static final long serialVersionUID = 1996341670354923204L; |
| private String m_name; |
| private List<String> m_include = Lists.newArrayList(); |
| private List<String> m_exclude = Lists.newArrayList(); |
| private List<XmlClass> m_xmlClasses= null; |
| |
| public XmlPackage() { |
| } |
| |
| // For YAML |
| public XmlPackage(String name) { |
| m_name = name; |
| } |
| |
| /** |
| * @return the exclude |
| */ |
| public List<String> getExclude() { |
| return m_exclude; |
| } |
| |
| /** |
| * @param exclude the exclude to set |
| */ |
| public void setExclude(List<String> exclude) { |
| m_exclude = exclude; |
| } |
| |
| /** |
| * @return the include |
| */ |
| public List<String> getInclude() { |
| return m_include; |
| } |
| |
| /** |
| * @param include the include to set |
| */ |
| public void setInclude(List<String> include) { |
| m_include = include; |
| } |
| |
| /** |
| * @return the name |
| */ |
| public String getName() { |
| return m_name; |
| } |
| |
| /** |
| * @param name the name to set |
| */ |
| public void setName(String name) { |
| m_name = name; |
| } |
| |
| public List<XmlClass> getXmlClasses() { |
| if(null == m_xmlClasses) { |
| m_xmlClasses= initializeXmlClasses(); |
| } |
| |
| return m_xmlClasses; |
| } |
| |
| private List<XmlClass> initializeXmlClasses() { |
| List<XmlClass> result= Lists.newArrayList(); |
| try { |
| String[] classes = PackageUtils.findClassesInPackage(m_name, m_include, m_exclude); |
| |
| int index = 0; |
| for(String className: classes) { |
| result.add(new XmlClass(className, index++, false /* don't load classes */)); |
| } |
| } |
| catch(IOException ioex) { |
| Utils.log("XmlPackage", 1, ioex.getMessage()); |
| } |
| |
| return result; |
| } |
| |
| public Object toXml(String indent) { |
| XMLStringBuffer xsb = new XMLStringBuffer(indent); |
| Properties p = new Properties(); |
| p.setProperty("name", getName()); |
| |
| if (getInclude().isEmpty() && getExclude().isEmpty()) { |
| xsb.addEmptyElement("package", p); |
| } else { |
| xsb.push("package", p); |
| |
| for (String m : getInclude()) { |
| Properties includeProp= new Properties(); |
| includeProp.setProperty("name", m); |
| xsb.addEmptyElement("include", includeProp); |
| } |
| for (String m: getExclude()) { |
| Properties excludeProp= new Properties(); |
| excludeProp.setProperty("name", m); |
| xsb.addEmptyElement("exclude", excludeProp); |
| } |
| |
| xsb.pop("package"); |
| } |
| |
| return xsb.toXML(); |
| } |
| |
| @Override |
| public int hashCode() { |
| final int prime = 31; |
| int result = 1; |
| result = prime * result + ((m_exclude == null) ? 0 : m_exclude.hashCode()); |
| result = prime * result + ((m_include == null) ? 0 : m_include.hashCode()); |
| result = prime * result + ((m_name == null) ? 0 : m_name.hashCode()); |
| result = prime * result |
| + ((m_xmlClasses == null) ? 0 : m_xmlClasses.hashCode()); |
| return result; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (this == obj) |
| return true; |
| if (obj == null) |
| return XmlSuite.f(); |
| if (getClass() != obj.getClass()) |
| return XmlSuite.f(); |
| XmlPackage other = (XmlPackage) obj; |
| if (m_exclude == null) { |
| if (other.m_exclude != null) |
| return XmlSuite.f(); |
| } else if (!m_exclude.equals(other.m_exclude)) |
| return XmlSuite.f(); |
| if (m_include == null) { |
| if (other.m_include != null) |
| return XmlSuite.f(); |
| } else if (!m_include.equals(other.m_include)) |
| return XmlSuite.f(); |
| if (m_name == null) { |
| if (other.m_name != null) |
| return XmlSuite.f(); |
| } else if (!m_name.equals(other.m_name)) |
| return XmlSuite.f(); |
| if (m_xmlClasses == null) { |
| if (other.m_xmlClasses != null) |
| return XmlSuite.f(); |
| } else if (!m_xmlClasses.equals(other.m_xmlClasses)) |
| return XmlSuite.f(); |
| return true; |
| } |
| |
| } |