| package org.testng.xml; |
| |
| import org.testng.TestNGException; |
| import org.testng.reporters.XMLStringBuffer; |
| import org.testng.xml.dom.OnElement; |
| |
| import java.util.Properties; |
| |
| /** |
| * This class describes the tag <method-selector> in testng.xml. |
| * |
| * Created on Sep 26, 2005 |
| * @author cbeust |
| * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a> |
| */ |
| public class XmlMethodSelector { |
| // Either this: |
| private String m_className; |
| private int m_priority; |
| |
| // Or that: |
| private XmlScript m_script = new XmlScript(); |
| |
| // For YAML |
| public void setClassName(String s) { |
| m_className = s; |
| } |
| |
| public String getClassName() { |
| return m_className; |
| } |
| |
| // For YAML |
| @OnElement(tag = "selector-class", attributes = { "name", "priority" }) |
| public void setElement(String name, String priority) { |
| setName(name); |
| setPriority(Integer.parseInt(priority)); |
| } |
| |
| public void setName(String name) { |
| m_className = name; |
| } |
| |
| public void setScript(XmlScript script) { |
| m_script = script; |
| } |
| |
| /** |
| * @return Returns the expression. |
| */ |
| public String getExpression() { |
| return m_script.getScript(); |
| } |
| |
| /** |
| * @param expression The expression to set. |
| */ |
| public void setExpression(String expression) { |
| m_script.setScript(expression); |
| } |
| |
| /** |
| * @return Returns the language. |
| */ |
| public String getLanguage() { |
| return m_script.getLanguage(); |
| } |
| |
| /** |
| * @param language The language to set. |
| */ |
| // @OnElement(tag = "script", attributes = "language") |
| public void setLanguage(String language) { |
| m_script.setLanguage(language); |
| // m_language = language; |
| } |
| |
| public int getPriority() { |
| return m_priority; |
| } |
| |
| public void setPriority(int priority) { |
| m_priority = priority; |
| } |
| |
| private void ppp(String s) { |
| System.out.println("[XmlMethodSelector] " + s); |
| } |
| |
| public String toXml(String indent) { |
| XMLStringBuffer xsb = new XMLStringBuffer(indent); |
| |
| xsb.push("method-selector"); |
| |
| if (null != m_className) { |
| Properties clsProp = new Properties(); |
| clsProp.setProperty("name", getClassName()); |
| if(getPriority() != -1) { |
| clsProp.setProperty("priority", String.valueOf(getPriority())); |
| } |
| xsb.addEmptyElement("selector-class", clsProp); |
| } |
| else if (getLanguage() != null) { |
| Properties scriptProp = new Properties(); |
| scriptProp.setProperty("language", getLanguage()); |
| xsb.push("script", scriptProp); |
| xsb.addCDATA(getExpression()); |
| xsb.pop("script"); |
| } |
| else { |
| throw new TestNGException("Invalid Method Selector: found neither class name nor language"); |
| } |
| |
| xsb.pop("method-selector"); |
| |
| return xsb.toXML(); |
| } |
| |
| @Override |
| public int hashCode() { |
| final int prime = 31; |
| int result = 1; |
| result = prime * result |
| + ((m_className == null) ? 0 : m_className.hashCode()); |
| result = prime * result |
| + ((getExpression() == null) ? 0 : getExpression().hashCode()); |
| result = prime * result |
| + ((getLanguage() == null) ? 0 : getLanguage().hashCode()); |
| result = prime * result + m_priority; |
| 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(); |
| XmlMethodSelector other = (XmlMethodSelector) obj; |
| if (m_className == null) { |
| if (other.m_className != null) |
| return XmlSuite.f(); |
| } else if (!m_className.equals(other.m_className)) |
| return XmlSuite.f(); |
| if (getExpression() == null) { |
| if (other.getExpression() != null) |
| return XmlSuite.f(); |
| } else if (!getExpression().equals(other.getExpression())) |
| return XmlSuite.f(); |
| if (getLanguage() == null) { |
| if (other.getLanguage() != null) |
| return XmlSuite.f(); |
| } else if (!getLanguage().equals(other.getLanguage())) |
| return XmlSuite.f(); |
| if (m_priority != other.m_priority) |
| return XmlSuite.f(); |
| return true; |
| } |
| } |