1c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beustpackage org.testng.internal; 2c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust 3fa27df3c9ee8e5a47d9a12b5a95cb4fbb16f6273Cédric Beustimport org.testng.IMethodInstance; 4c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beustimport org.testng.ITestNGMethod; 554a1dff85605912356caf3c3bcc4f73e80fd1311Cédric Beustimport org.testng.collections.Objects; 6cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beustimport org.testng.xml.XmlClass; 7cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beustimport org.testng.xml.XmlInclude; 8cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beustimport org.testng.xml.XmlTest; 9c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust 10fa27df3c9ee8e5a47d9a12b5a95cb4fbb16f6273Cédric Beustimport java.util.Comparator; 11cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beustimport java.util.List; 12fa27df3c9ee8e5a47d9a12b5a95cb4fbb16f6273Cédric Beust 13fa27df3c9ee8e5a47d9a12b5a95cb4fbb16f6273Cédric Beustpublic class MethodInstance implements IMethodInstance { 14c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust private ITestNGMethod m_method; 15c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust 16eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust public MethodInstance(ITestNGMethod method) { 17c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust m_method = method; 18c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust } 19c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust 200f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin @Override 21c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust public ITestNGMethod getMethod() { 22c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust return m_method; 23c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust } 24c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust 250f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin @Override 26c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust public Object[] getInstances() { 27eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust return new Object[] { getInstance() }; 28eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust } 29eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust 30eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust @Override 31eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust public Object getInstance() { 32eb2b9ac857aad415986677a51513d47e91eb7c8dCédric Beust return m_method.getInstance(); 33c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust } 340f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin 350f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin @Override 3622cd01e5318bf341707b95b17f4ffc3790e3f215Cédric Beust public String toString() { 3754a1dff85605912356caf3c3bcc4f73e80fd1311Cédric Beust return Objects.toStringHelper(getClass()) 3854a1dff85605912356caf3c3bcc4f73e80fd1311Cédric Beust .add("method", m_method) 3954a1dff85605912356caf3c3bcc4f73e80fd1311Cédric Beust .add("instance", getInstance()) 4054a1dff85605912356caf3c3bcc4f73e80fd1311Cédric Beust .toString(); 4122cd01e5318bf341707b95b17f4ffc3790e3f215Cédric Beust } 4268be32860bc8a1564b550c286b1c1316950c01eathe.mindstorm 43682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust 440f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin public static final Comparator<IMethodInstance> SORT_BY_INDEX 45fa27df3c9ee8e5a47d9a12b5a95cb4fbb16f6273Cédric Beust = new Comparator<IMethodInstance>() { 460f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin @Override 47fa27df3c9ee8e5a47d9a12b5a95cb4fbb16f6273Cédric Beust public int compare(IMethodInstance o1, IMethodInstance o2) { 48cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust // If the two methods are in different <test> 49cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust XmlTest test1 = o1.getMethod().getTestClass().getXmlTest(); 50cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust XmlTest test2 = o2.getMethod().getTestClass().getXmlTest(); 51cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust 52cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust // If the two methods are not in the same <test>, we can't compare them 53cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust if (! test1.getName().equals(test2.getName())) { 54cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust return 0; 55cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust } 56cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust 57cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust int result = 0; 58cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust 59cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust // If the two methods are in the same <class>, compare them by their method 60cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust // index, otherwise compare them with their class index. 61cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust XmlClass class1 = o1.getMethod().getTestClass().getXmlClass(); 62cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust XmlClass class2 = o2.getMethod().getTestClass().getXmlClass(); 63cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust 64ff0127f4352c413f2036f0072e18ecfd0cc34b81Cédric Beust // This can happen if these classes came from a @Factory, in which case, they 65ff0127f4352c413f2036f0072e18ecfd0cc34b81Cédric Beust // don't have an associated XmlClass 66e4607e48367c274c373f3a022add3c7ca0b3e04email@andreaskluth.net if (class1 == null || class2 == null) { 67e4607e48367c274c373f3a022add3c7ca0b3e04email@andreaskluth.net if (class1 != null) return -1; 68e4607e48367c274c373f3a022add3c7ca0b3e04email@andreaskluth.net if (class2 != null) return 1; 69e4607e48367c274c373f3a022add3c7ca0b3e04email@andreaskluth.net return 0; 70e4607e48367c274c373f3a022add3c7ca0b3e04email@andreaskluth.net } 71ff0127f4352c413f2036f0072e18ecfd0cc34b81Cédric Beust 72cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust if (! class1.getName().equals(class2.getName())) { 73cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust int index1 = class1.getIndex(); 74cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust int index2 = class2.getIndex(); 75cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust result = index1 - index2; 76cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust } 77cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust else { 78cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust XmlInclude include1 = 79cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust findXmlInclude(class1.getIncludedMethods(), o1.getMethod().getMethodName()); 80cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust XmlInclude include2 = 81cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust findXmlInclude(class2.getIncludedMethods(), o2.getMethod().getMethodName()); 82cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust if (include1 != null && include2 != null) { 83cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust result = include1.getIndex() - include2.getIndex(); 84cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust } 85cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust } 8668be32860bc8a1564b550c286b1c1316950c01eathe.mindstorm 8768be32860bc8a1564b550c286b1c1316950c01eathe.mindstorm return result; 8868be32860bc8a1564b550c286b1c1316950c01eathe.mindstorm } 89cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust 90cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust private XmlInclude findXmlInclude(List<XmlInclude> includedMethods, String methodName) { 91cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust for (XmlInclude xi : includedMethods) { 920f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin if (xi.getName().equals(methodName)) { 930f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin return xi; 940f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin } 95cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust } 96cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust return null; 97cf753a79f1b41890174042aad9bec6d50618fd27Cédric Beust } 9868be32860bc8a1564b550c286b1c1316950c01eathe.mindstorm }; 9968be32860bc8a1564b550c286b1c1316950c01eathe.mindstorm 1000f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin// public static final Comparator<IMethodInstance> SORT_BY_CLASS 101682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// = new Comparator<IMethodInstance>() { 102682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// public int compare(IMethodInstance o1, IMethodInstance o2) { 103682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// int result= o1.getMethod().getTestClass().getName() 104682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// .compareTo(o2.getMethod().getTestClass().getName()); 105682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// return result; 106682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// } 107682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust// }; 108682629c7059fca8adc2cc2eacdb2d372d7a28c3dCédric Beust 109c215923051def2e7024aee03ca8508faeaf5adc7Cédric Beust} 110