1336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustpackage org.testng.xml; 2336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust 3e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beustimport org.testng.TestNGException; 4336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustimport org.testng.reporters.XMLStringBuffer; 53dbf8e37229e25f8914dd85757ab8fbeec56aeacCédric Beustimport org.testng.xml.dom.OnElement; 6336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust 7f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beustimport java.util.Properties; 8f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beust 9336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust/** 10336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * This class describes the tag <method-selector> in testng.xml. 110f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin * 12336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * Created on Sep 26, 2005 13336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @author cbeust 14336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a> 15336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust */ 16336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beustpublic class XmlMethodSelector { 17336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust // Either this: 18336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust private String m_className; 19336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust private int m_priority; 200f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 21336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust // Or that: 227a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust private XmlScript m_script = new XmlScript(); 230f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 24d84bc064a317bfb8f82d9808175fae2b342a4db8Cédric Beust // For YAML 25d84bc064a317bfb8f82d9808175fae2b342a4db8Cédric Beust public void setClassName(String s) { 26d84bc064a317bfb8f82d9808175fae2b342a4db8Cédric Beust m_className = s; 27d84bc064a317bfb8f82d9808175fae2b342a4db8Cédric Beust } 28d84bc064a317bfb8f82d9808175fae2b342a4db8Cédric Beust 29336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public String getClassName() { 30336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust return m_className; 31336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 32f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beust 33f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beust // For YAML 347a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust @OnElement(tag = "selector-class", attributes = { "name", "priority" }) 357a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust public void setElement(String name, String priority) { 36f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beust setName(name); 377a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust setPriority(Integer.parseInt(priority)); 38f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beust } 39f3ba8fb2363626ec1bc5c9641b2a507fe923d5d1Cédric Beust 40336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public void setName(String name) { 41336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust m_className = name; 42336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 430f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 447a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust public void setScript(XmlScript script) { 457a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust m_script = script; 467a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust } 477a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust 48336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust /** 49336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @return Returns the expression. 50336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust */ 51336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public String getExpression() { 527a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust return m_script.getScript(); 53336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 540f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 55336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust /** 56336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @param expression The expression to set. 57336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust */ 58336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public void setExpression(String expression) { 597a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust m_script.setScript(expression); 60336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 610f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 62336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust /** 63336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @return Returns the language. 64336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust */ 65336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public String getLanguage() { 667a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust return m_script.getLanguage(); 67336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 680f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 69336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust /** 70336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust * @param language The language to set. 71336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust */ 727a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust// @OnElement(tag = "script", attributes = "language") 73336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public void setLanguage(String language) { 747a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust m_script.setLanguage(language); 757a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust// m_language = language; 76336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 770f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 78336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public int getPriority() { 79336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust return m_priority; 80336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 810f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 82336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public void setPriority(int priority) { 83336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust m_priority = priority; 84336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 850f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 86e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust private void ppp(String s) { 87e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust System.out.println("[XmlMethodSelector] " + s); 88e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust } 890f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 90336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust public String toXml(String indent) { 91336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust XMLStringBuffer xsb = new XMLStringBuffer(indent); 92336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust 93336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust xsb.push("method-selector"); 940f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 95e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust if (null != m_className) { 96336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust Properties clsProp = new Properties(); 97336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust clsProp.setProperty("name", getClassName()); 98336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust if(getPriority() != -1) { 99336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust clsProp.setProperty("priority", String.valueOf(getPriority())); 100336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 101336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust xsb.addEmptyElement("selector-class", clsProp); 102336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 103e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust else if (getLanguage() != null) { 104336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust Properties scriptProp = new Properties(); 105336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust scriptProp.setProperty("language", getLanguage()); 106336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust xsb.push("script", scriptProp); 107336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust xsb.addCDATA(getExpression()); 108336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust xsb.pop("script"); 109336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 110e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust else { 111e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust throw new TestNGException("Invalid Method Selector: found neither class name nor language"); 112e58af1ddece98c14592d1fde0ec75ed2b304be4dCédric Beust } 1130f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 114336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust xsb.pop("method-selector"); 115336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust 116336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust return xsb.toXML(); 117336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust } 118c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust 119c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust @Override 120c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust public int hashCode() { 121c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust final int prime = 31; 122c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust int result = 1; 123c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust result = prime * result 124c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust + ((m_className == null) ? 0 : m_className.hashCode()); 125c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust result = prime * result 1267a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust + ((getExpression() == null) ? 0 : getExpression().hashCode()); 127c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust result = prime * result 1287a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust + ((getLanguage() == null) ? 0 : getLanguage().hashCode()); 129c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust result = prime * result + m_priority; 130c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return result; 131c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust } 132c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust 133c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust @Override 134c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust public boolean equals(Object obj) { 135c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust if (this == obj) 136c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return true; 137c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust if (obj == null) 138c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 139c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust if (getClass() != obj.getClass()) 140c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 141c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust XmlMethodSelector other = (XmlMethodSelector) obj; 142c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust if (m_className == null) { 143c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust if (other.m_className != null) 144c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 145c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust } else if (!m_className.equals(other.m_className)) 146c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 1477a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust if (getExpression() == null) { 1487a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust if (other.getExpression() != null) 149c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 1507a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust } else if (!getExpression().equals(other.getExpression())) 151c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 1527a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust if (getLanguage() == null) { 1537a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust if (other.getLanguage() != null) 154c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 1557a080568c67272b4c9615f8205cebb6c39893b65Cédric Beust } else if (!getLanguage().equals(other.getLanguage())) 156c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 157c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust if (m_priority != other.m_priority) 158c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return XmlSuite.f(); 159c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust return true; 160c055119f5c9b001961eaa89cb8eaef169100a22cCédric Beust } 161336f0ef401e9f564b8dc99d601ac80e8891ac2c1Cédric Beust} 162