1package org.testng.internal;
2
3import org.testng.IClass;
4import org.testng.IRetryAnalyzer;
5import org.testng.ITestClass;
6import org.testng.ITestNGMethod;
7import org.testng.collections.Lists;
8import org.testng.xml.XmlTest;
9
10import java.lang.reflect.Method;
11import java.util.Collections;
12import java.util.List;
13import java.util.Map;
14
15public class ClonedMethod implements ITestNGMethod {
16  private static final long serialVersionUID = 1L;
17
18  private ITestNGMethod m_method;
19  transient private Method m_javaMethod;
20  private String m_id;
21  private int m_currentInvocationCount;
22  private long m_date;
23
24  private List<Integer> m_invocationNumbers = Lists.newArrayList();
25  private List<Integer> m_failedInvocationNumbers = Lists.newArrayList();
26
27  public ClonedMethod(ITestNGMethod method, Method javaMethod) {
28    m_method = method;
29    m_javaMethod = javaMethod;
30  }
31
32  @Override
33  public void addMethodDependedUpon(String methodName) {
34    // nop
35  }
36
37  @Override
38  public boolean canRunFromClass(IClass testClass) {
39    return m_method.canRunFromClass(testClass);
40  }
41
42  @Override
43  public String[] getAfterGroups() {
44    return m_method.getAfterGroups();
45  }
46
47  @Override
48  public String[] getBeforeGroups() {
49    return m_method.getBeforeGroups();
50  }
51
52  @Override
53  public int getCurrentInvocationCount() {
54    return m_currentInvocationCount;
55  }
56
57  @Override
58  public long getDate() {
59    return m_method.getDate();
60  }
61
62  @Override
63  public String getDescription() {
64    return "";
65  }
66
67  @Override
68  public void setDescription(String description) {
69    m_method.setDescription(description);
70  }
71
72  @Override
73  public boolean getEnabled() {
74    return true;
75  }
76
77  @Override
78  public String[] getGroups() {
79    return m_method.getGroups();
80  }
81
82  @Override
83  public String[] getGroupsDependedUpon() {
84    return new String[0];
85  }
86
87  @Override
88  public String getId() {
89    return m_id;
90  }
91
92  @Override
93  public long[] getInstanceHashCodes() {
94    return m_method.getInstanceHashCodes();
95  }
96
97  @Override
98  public Object[] getInstances() {
99    return m_method.getInstances();
100  }
101
102  @Override
103  public Object getInstance() {
104    return m_method.getInstance();
105  }
106
107  @Override
108  public int getInvocationCount() {
109    return 1;
110  }
111
112  @Override
113  public int getTotalInvocationCount() {
114    return 1;
115  }
116
117  @Override
118  public long getInvocationTimeOut() {
119    return m_method.getInvocationTimeOut();
120  }
121
122  @Override
123  public Method getMethod() {
124    return m_javaMethod;
125  }
126
127  @Override
128  public String getMethodName() {
129    return m_javaMethod.getName();
130  }
131
132  @Override
133  public String[] getMethodsDependedUpon() {
134    return new String[0];
135  }
136
137  @Override
138  public String getMissingGroup() {
139    return null;
140  }
141
142  @Override
143  public int getParameterInvocationCount() {
144    return 1;
145  }
146
147  @Override
148  public Class getRealClass() {
149    return m_javaMethod.getClass();
150  }
151
152  @Override
153  public IRetryAnalyzer getRetryAnalyzer() {
154    return m_method.getRetryAnalyzer();
155  }
156
157  @Override
158  public int getSuccessPercentage() {
159    return 100;
160  }
161
162  @Override
163  public ITestClass getTestClass() {
164    return m_method.getTestClass();
165  }
166
167  @Override
168  public int getThreadPoolSize() {
169    return m_method.getThreadPoolSize();
170  }
171
172  @Override
173  public long getTimeOut() {
174    return m_method.getTimeOut();
175  }
176
177  @Override
178  public void setTimeOut(long timeOut) {
179    m_method.setTimeOut(timeOut);
180  }
181
182  @Override
183  public boolean ignoreMissingDependencies() {
184    return false;
185  }
186
187  @Override
188  public void incrementCurrentInvocationCount() {
189    m_currentInvocationCount++;
190  }
191
192  @Override
193  public boolean isAfterClassConfiguration() {
194    return false;
195  }
196
197  @Override
198  public boolean isAfterGroupsConfiguration() {
199    return false;
200  }
201
202  @Override
203  public boolean isAfterMethodConfiguration() {
204    return false;
205  }
206
207  @Override
208  public boolean isAfterSuiteConfiguration() {
209    return false;
210  }
211
212  @Override
213  public boolean isAfterTestConfiguration() {
214    return false;
215  }
216
217  @Override
218  public boolean isAlwaysRun() {
219    return false;
220  }
221
222  @Override
223  public boolean isBeforeClassConfiguration() {
224    return false;
225  }
226
227  @Override
228  public boolean isBeforeGroupsConfiguration() {
229    return false;
230  }
231
232  @Override
233  public boolean isBeforeMethodConfiguration() {
234    return false;
235  }
236
237  @Override
238  public boolean isBeforeSuiteConfiguration() {
239    return false;
240  }
241
242  @Override
243  public boolean isBeforeTestConfiguration() {
244    return false;
245  }
246
247  @Override
248  public boolean isTest() {
249    return true;
250  }
251
252  @Override
253  public void setDate(long date) {
254    m_date = date;
255  }
256
257  @Override
258  public void setId(String id) {
259    m_id = id;
260  }
261
262  @Override
263  public void setIgnoreMissingDependencies(boolean ignore) {
264  }
265
266  @Override
267  public void setInvocationCount(int count) {
268  }
269
270  @Override
271  public void setMissingGroup(String group) {
272  }
273
274  @Override
275  public void setParameterInvocationCount(int n) {
276  }
277
278  @Override
279  public void setRetryAnalyzer(IRetryAnalyzer retryAnalyzer) {
280  }
281
282  @Override
283  public void setSkipFailedInvocations(boolean skip) {
284  }
285
286  @Override
287  public void setTestClass(ITestClass cls) {
288  }
289
290  @Override
291  public void setThreadPoolSize(int threadPoolSize) {
292  }
293
294  @Override
295  public boolean skipFailedInvocations() {
296    return false;
297  }
298
299  @Override
300  public int compareTo(Object o) {
301    int result = -2;
302    Class<?> thisClass = getRealClass();
303    Class<?> otherClass = ((ITestNGMethod) o).getRealClass();
304    if (thisClass.isAssignableFrom(otherClass)) {
305      result = -1;
306    } else if (otherClass.isAssignableFrom(thisClass)) {
307      result = 1;
308    } else if (equals(o)) {
309      result = 0;
310    }
311
312    return result;
313  }
314
315  @Override
316  public ClonedMethod clone() {
317    return new ClonedMethod(m_method, m_javaMethod);
318  }
319
320  @Override
321  public String toString() {
322    Method m = getMethod();
323    String cls = m.getDeclaringClass().getName();
324    StringBuffer result = new StringBuffer(cls + "." + m.getName() + "(");
325    int i = 0;
326    for (Class<?> p : m.getParameterTypes()) {
327      if (i++ > 0) {
328        result.append(", ");
329      }
330      result.append(p.getName());
331    }
332    result.append(")");
333
334    return result.toString();
335  }
336
337  @Override
338  public List<Integer> getInvocationNumbers() {
339    return m_invocationNumbers;
340  }
341
342  @Override
343  public void setInvocationNumbers(List<Integer> count) {
344    m_invocationNumbers = count;
345  }
346
347  @Override
348  public List<Integer> getFailedInvocationNumbers() {
349    return m_failedInvocationNumbers;
350  }
351
352  @Override
353  public void addFailedInvocationNumber(int number) {
354    m_failedInvocationNumbers.add(number);
355  }
356
357  @Override
358  public int getPriority() {
359    return m_method.getPriority();
360  }
361
362  @Override
363  public void setPriority(int priority) {
364    // ignored
365  }
366
367  @Override
368  public XmlTest getXmlTest() {
369    return m_method.getXmlTest();
370  }
371
372  @Override
373  public ConstructorOrMethod getConstructorOrMethod() {
374    return null;
375  }
376
377  @Override
378  public Map<String, String> findMethodParameters(XmlTest test) {
379    return Collections.emptyMap();
380  }
381}
382