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;
}
}