diff options
Diffstat (limited to 'vid-automation/src/main/java/vid/automation/reportportal')
-rw-r--r-- | vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java b/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java new file mode 100644 index 000000000..6daa6d604 --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java @@ -0,0 +1,147 @@ +package vid.automation.reportportal; + +import static org.apache.commons.beanutils.MethodUtils.invokeStaticMethod; + +import org.apache.commons.proxy.ProxyFactory; +import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory; +import org.apache.commons.proxy.invoker.NullInvoker; +import org.openqa.selenium.WebDriver; +import org.testng.IExecutionListener; +import org.testng.ISuite; +import org.testng.ISuiteListener; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.internal.IResultListener2; + +/** + * Loads and delegates to ReportPortalListener. When class not found -- yields no-op object, and no side-effect. + */ +public class ReportPortalListenerDelegator implements IExecutionListener, ISuiteListener, IResultListener2 { + + private static final String CLASSNAME_REPORT_PORTAL_LISTENER = "com.att.automation.common.report_portal_integration.listeners.ReportPortalListener"; + private static final String CLASSNAME_WEB_DRIVER_SCREENSHOTS_PROVIDER = "com.att.automation.common.report_portal_integration.screenshots.WebDriverScreenshotsProvider"; + + private static final Object instance = createReportPortalListener(); + + private final IExecutionListener iExecutionListener; + private final ISuiteListener iSuiteListener; + private final IResultListener2 iResultListener2; + + public ReportPortalListenerDelegator() { + iExecutionListener = ((IExecutionListener) instance); + iSuiteListener = ((ISuiteListener) instance); + iResultListener2 = ((IResultListener2) instance); + } + + public static void setScreenShotsWebDriver(WebDriver driver) { + try { + invokeStaticMethod(instance.getClass(), "setScreenShotsProvider", createScreenshotsProvider(driver)); + } catch (ClassNotFoundException e) { + // if class not found, don't bother + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + + @Override + public void beforeConfiguration(ITestResult tr) { + iResultListener2.beforeConfiguration(tr); + } + + @Override + public void onConfigurationSuccess(ITestResult itr) { + iResultListener2.onConfigurationSuccess(itr); + } + + @Override + public void onConfigurationFailure(ITestResult itr) { + iResultListener2.onConfigurationFailure(itr); + } + + @Override + public void onConfigurationSkip(ITestResult itr) { + iResultListener2.onConfigurationSkip(itr); + } + + @Override + public void onExecutionStart() { + iExecutionListener.onExecutionStart(); + } + + @Override + public void onExecutionFinish() { + iExecutionListener.onExecutionFinish(); + } + + @Override + public void onStart(ISuite suite) { + iSuiteListener.onStart(suite); + + } + + @Override + public void onFinish(ISuite suite) { + iSuiteListener.onFinish(suite); + } + + @Override + public void onTestStart(ITestResult result) { + iResultListener2.onTestStart(result); + } + + @Override + public void onTestSuccess(ITestResult result) { + iResultListener2.onTestSuccess(result); + } + + @Override + public void onTestFailure(ITestResult result) { + iResultListener2.onTestFailure(result); + } + + @Override + public void onTestSkipped(ITestResult result) { + iResultListener2.onTestSkipped(result); + } + + @Override + public void onTestFailedButWithinSuccessPercentage(ITestResult result) { + iResultListener2.onTestFailedButWithinSuccessPercentage(result); + } + + @Override + public void onStart(ITestContext context) { + iResultListener2.onStart(context); + } + + @Override + public void onFinish(ITestContext context) { + iResultListener2.onFinish(context); + } + + + private static Object createReportPortalListener() { + try { + final Class<?> classToLoad = Class.forName(CLASSNAME_REPORT_PORTAL_LISTENER, + true, ReportPortalListenerDelegator.class.getClassLoader()); + return classToLoad.getConstructor().newInstance(); + } catch (ClassNotFoundException e) { + // Fallback to NullInvoker + final Class[] classes = {IExecutionListener.class, ISuiteListener.class, IResultListener2.class}; + final ProxyFactory proxyFactory = new JavassistProxyFactory(); + + return proxyFactory.createInvokerProxy(new NullInvoker(), classes); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + private static Object createScreenshotsProvider(WebDriver driver) throws ReflectiveOperationException { + Class<?> classToLoad = Class.forName(CLASSNAME_WEB_DRIVER_SCREENSHOTS_PROVIDER, + true, driver.getClass().getClassLoader()); + + return classToLoad.getDeclaredConstructor(WebDriver.class).newInstance(driver); + } + +} |