org.testng.ITestContext

Here are the examples of the java api org.testng.ITestContext taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

302 Examples 7

19 Source : TestListener.java
with Apache License 2.0
from yahoo

@Override
public void onFinish(ITestContext context) {
}

19 Source : TestListener.java
with Apache License 2.0
from yahoo

@Override
public void onStart(ITestContext context) {
}

19 Source : FailureRecordingListener.java
with GNU General Public License v2.0
from xgdsmileboy

public void onStart(ITestContext context) {
}

19 Source : FailureRecordingListener.java
with GNU General Public License v2.0
from xgdsmileboy

public void onFinish(ITestContext context) {
}

19 Source : RdbmsHaStrategyTest.java
with Apache License 2.0
from wso2-attic

@AfterClreplaced
public void teardown(ITestContext context) throws Exception {
    brokerNodeOne.shutdown();
    brokerNodeTwo.shutdown();
}

19 Source : Axis2ServerTestExtension.java
with Apache License 2.0
from wso2

@Override
public void onFinish(ITestContext iTestContext) {
}

19 Source : Axis2ServerTestExtension.java
with Apache License 2.0
from wso2

@Override
public void onStart(ITestContext iTestContext) {
}

19 Source : TestLoggingListener.java
with Apache License 2.0
from wso2

public void onFinish(ITestContext iTestContext) {
}

19 Source : TestLoggingListener.java
with Apache License 2.0
from wso2

public void onStart(ITestContext iTestContext) {
}

19 Source : DailyBuildReport.java
with GNU Lesser General Public License v3.0
from vision-consensus

@Override
public void onStart(ITestContext context) {
    reportPath = "Daily_Build_Report";
    StringBuilder sb = new StringBuilder("3.Stest report:  ");
    String res = sb.toString();
    try {
        Files.write((Paths.get(reportPath)), res.getBytes("utf-8"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

19 Source : TrackingTestNGTestListener.java
with MIT License
from Vip-Augus

@Override
public void onStart(ITestContext testContext) {
}

19 Source : TrackingTestNGTestListener.java
with MIT License
from Vip-Augus

@Override
public void onFinish(ITestContext testContext) {
    this.failedConfigurationsCount += testContext.getFailedConfigurations().size();
}

19 Source : AbstractTest.java
with GNU Lesser General Public License v3.0
from TIBCOSoftware

/**
 * @author Teodor Danciu ([email protected])
 */
public abstract clreplaced AbstractTest {

    private static final Log log = LogFactory.getLog(AbstractTest.clreplaced);

    private static final String TEST = "TEST";

    private ITestContext testContext;

    private JasperReportsContext jasperReportsContext;

    @BeforeClreplaced
    public void init(ITestContext ctx) throws JRException, IOException {
        testContext = ctx;
        jasperReportsContext = new SimpleJasperReportsContext();
    }

    @Test(dataProvider = "testArgs")
    public void testReport(String folderName, String fileNamePrefix, String referenceFileNamePrefix) throws JRException, NoSuchAlgorithmException, IOException {
        runReport(folderName, fileNamePrefix, referenceFileNamePrefix);
    }

    protected Object[][] runReportArgs(String folderName, String fileNamePrefix, int maxFileNumber) {
        return runReportArgs(folderName, fileNamePrefix, fileNamePrefix, maxFileNumber);
    }

    protected Object[][] runReportArgs(String folderName, String fileNamePrefix, String referenceFileNamePrefix, int maxFileNumber) {
        List<Object[]> args = new ArrayList<>(maxFileNumber);
        for (int i = 1; i <= maxFileNumber; i++) {
            args.add(new Object[] { folderName, folderName + "/" + fileNamePrefix + "." + i + ".jrxml", folderName + "/" + referenceFileNamePrefix + "." + i });
        }
        return args.toArray(new Object[args.size()][]);
    }

    protected void runReport(String folderName, String jrxmlFileName, String referenceFileNamePrefix) throws JRException, IOException, NoSuchAlgorithmException, FileNotFoundException {
        JasperFillManager fillManager = JasperFillManager.getInstance(getJasperReportsContext());
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put(JRParameter.REPORT_LOCALE, Locale.US);
        params.put(JRParameter.REPORT_TIME_ZONE, TimeZone.getTimeZone("GMT"));
        params.put(TEST, this);
        log.debug("Running report " + jrxmlFileName);
        try {
            JasperReport report = compileReport(jrxmlFileName);
            if (report != null) {
                JasperPrint print = fillManager.fill(report, params);
                replacedert !print.getPages().isEmpty();
                String exportDigest = getExportDigest(referenceFileNamePrefix, print);
                log.debug("Plain report got " + exportDigest);
                boolean digestMatch = false;
                String referenceExportDigest = getDigestFromFile(referenceFileNamePrefix + "." + getExportFileExtension() + ".sha");
                if (exportDigest.equals(referenceExportDigest)) {
                    digestMatch = true;
                } else {
                    // fallback to account for JDK differences
                    referenceExportDigest = getDigestFromFile(referenceFileNamePrefix + ".2." + getExportFileExtension() + ".sha");
                    if (referenceExportDigest != null) {
                        digestMatch = exportDigest.equals(referenceExportDigest);
                    }
                }
                replacedert digestMatch;
            }
        } catch (replacedertionError e) {
            throw e;
        } catch (Throwable t) {
            String referenceErrorDigest = getDigestFromFile(referenceFileNamePrefix + ".err.sha");
            if (referenceErrorDigest == null) {
                log.error("Report " + jrxmlFileName + " failed", t);
                // we don't have a reference error, it's an unexpected exception
                throw t;
            }
            String errorDigest = errExportDigest(t);
            replacedert errorDigest.equals(referenceErrorDigest);
        }
    }

    protected JasperReportsContext getJasperReportsContext() {
        return jasperReportsContext;
    }

    protected void setJasperReportsContext(JasperReportsContext jasperReportsContext) {
        this.jasperReportsContext = jasperReportsContext;
    }

    /**
     * This method is used for compiling subreports.
     */
    public JasperReport compileReport(String jrxmlFileName) throws JRException, IOException {
        JasperReport jasperReport = null;
        InputStream jrxmlInput = JRLoader.getResourceInputStream(jrxmlFileName);
        if (jrxmlInput != null) {
            JasperDesign design;
            try {
                design = JRXmlLoader.load(jrxmlInput);
            } finally {
                jrxmlInput.close();
            }
            jasperReport = JasperCompileManager.compileReport(design);
        }
        return jasperReport;
    }

    protected JasperReport compileReport(File jrxmlFile) throws JRException, IOException {
        JasperDesign design = JRXmlLoader.load(jrxmlFile);
        return JasperCompileManager.compileReport(design);
    }

    protected String getDigestFromFile(String fileName) throws JRException {
        URL resourceURL = JRResourcesUtil.findClreplacedLoaderResource(fileName, null);
        if (resourceURL == null) {
            log.debug("did not find resource " + fileName);
            return null;
        }
        byte[] bytes = JRLoader.loadBytes(resourceURL);
        String digest = null;
        try {
            digest = new String(bytes, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new JRException(e);
        }
        log.debug("Reference report digest is " + digest + " for " + fileName);
        return digest;
    }

    protected String getExportDigest(String referenceFileNamePrefix, JasperPrint print) throws NoSuchAlgorithmException, FileNotFoundException, JRException, IOException {
        File outputFile = new File(new File(testContext.getOutputDirectory()), referenceFileNamePrefix + "." + getExportFileExtension());
        File outputDir = outputFile.getParentFile();
        if (!outputDir.exists()) {
            outputDir.mkdirs();
        }
        log.debug("XML export output at " + outputFile.getAbsolutePath());
        MessageDigest digest = MessageDigest.getInstance("SHA-1");
        FileOutputStream output = new FileOutputStream(outputFile);
        try {
            DigestOutputStream out = new DigestOutputStream(output, digest);
            export(print, out);
        } finally {
            output.close();
        }
        String digestSha = toDigestString(digest);
        File outputShaFile = new File(new File(testContext.getOutputDirectory()), referenceFileNamePrefix + "." + getExportFileExtension() + ".sha");
        OutputStreamWriter shaWriter = new OutputStreamWriter(new FileOutputStream(outputShaFile), "UTF-8");
        try {
            shaWriter.write(digestSha);
        } finally {
            shaWriter.close();
        }
        return digestSha;
    }

    protected String errExportDigest(Throwable t) throws NoSuchAlgorithmException, FileNotFoundException, JRException, IOException {
        File outputFile = createTmpOutputFile("err");
        log.debug("Error stack trace at " + outputFile.getAbsolutePath());
        MessageDigest digest = MessageDigest.getInstance("SHA-1");
        FileOutputStream output = new FileOutputStream(outputFile);
        OutputStreamWriter osw = null;
        try {
            DigestOutputStream out = new DigestOutputStream(output, digest);
            // PrintStream ps = new PrintStream(out);
            // t.printStackTrace(ps);
            osw = new OutputStreamWriter(out, "UTF-8");
            osw.write(String.valueOf(t.getMessage()));
        } finally {
            osw.close();
            output.close();
        }
        return toDigestString(digest);
    }

    protected String toDigestString(MessageDigest digest) {
        byte[] digestBytes = digest.digest();
        StringBuilder digestString = new StringBuilder(digestBytes.length * 2);
        for (byte b : digestBytes) {
            digestString.append(String.format("%02x", b));
        }
        return digestString.toString();
    }

    protected File createTmpOutputFile(String fileExtension) throws IOException {
        String outputDirPath = System.getProperty("outputDir");
        File outputFile;
        if (outputDirPath == null) {
            outputFile = File.createTempFile("jr_tests_", "." + fileExtension);
        } else {
            File outputDir = new File(outputDirPath);
            outputFile = File.createTempFile("jr_tests_", "." + fileExtension, outputDir);
        }
        outputFile.deleteOnExit();
        return outputFile;
    }

    protected abstract void export(JasperPrint print, OutputStream out) throws JRException, IOException;

    protected abstract String getExportFileExtension();
}

19 Source : TransferMoneyFunctionalTest.java
with Apache License 2.0
from terracotta-bank

@BeforeClreplaced(alwaysRun = true)
public void doLogin(ITestContext ctx) {
    System.out.println("Logging in b4 trying to transfer money");
    login("john.coltraine", "j0hn");
}

19 Source : AbstractEmbeddedTomcatTest.java
with Apache License 2.0
from terracotta-bank

@BeforeTest(alwaysRun = true)
public void start(ITestContext ctx) throws Exception {
    if ("docker".equals(ctx.getName())) {
        docker().startContainer();
    } else {
        context = tomcat.startContainer();
    }
}

19 Source : AbstractEmbeddedTomcatSeleniumTest.java
with Apache License 2.0
from terracotta-bank

@BeforeTest(alwaysRun = true)
public void startProxy(ITestContext ctx) {
    proxy.start(ctx);
}

19 Source : AbstractEmbeddedTomcatSeleniumTest.java
with Apache License 2.0
from terracotta-bank

@BeforeTest(groups = "filesystem")
public void startClamav(ITestContext ctx) throws Exception {
    if ("docker".equals(ctx.getName())) {
        docker().startClamav();
    }
}

19 Source : ProxySupport.java
with Apache License 2.0
from terracotta-bank

public void start(ITestContext ctx) {
    start(ctx.getName());
}

19 Source : TestReorderInterceptor.java
with GNU General Public License v2.0
from Tencent

@Override
public List<IMethodInstance> intercept(final List<IMethodInstance> methods, final ITestContext context) {
    Collections.sort(methods, new Comparator<IMethodInstance>() {

        @Override
        public int compare(final IMethodInstance mi1, final IMethodInstance mi2) {
            // get test instances to order the tests.
            final Object o1 = mi1.getInstance();
            final Object o2 = mi2.getInstance();
            if (o1 instanceof ITest && o2 instanceof ITest) {
                return ((ITest) o1).getTestName().compareTo(((ITest) o2).getTestName());
            }
            // something else, don't care about the order
            return 0;
        }
    });
    return methods;
}

19 Source : InjectedArgsDataSupplierTests.java
with Apache License 2.0
from sskorol

@DataSupplier
public String getContextMetaData(final ITestContext context) {
    return context.getCurrentXmlTest().getName();
}

19 Source : InvokedMethodNameListener.java
with Apache License 2.0
from sskorol

@Override
public void onFinish(final ITestContext context) {
}

19 Source : InvokedMethodNameListener.java
with Apache License 2.0
from sskorol

@Override
public void onStart(final ITestContext context) {
}

19 Source : ExtentReportListener.java
with Apache License 2.0
from sergiomartins8

@Override
public void onFinish(ITestContext iTestContext) {
    logger().debug(iTestContext.getName() + " finished");
    ExtentManager.getInstance().flush();
    ExtentTestReport.removeTest();
}

19 Source : ListenerChain.java
with Apache License 2.0
from sbabcoc

/**
 * [IMethodInterceptor]
 * Invoked to enable alteration of the list of test methods that TestNG is about to run.
 *
 * @param methods list of test methods.
 * @param context test context.
 * @return the list of test methods to run.
 */
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
    synchronized (methodInterceptors) {
        for (IMethodInterceptor interceptor : methodInterceptors) {
            methods = interceptor.intercept(methods, context);
        }
    }
    return methods;
}

19 Source : ListenerChain.java
with Apache License 2.0
from sbabcoc

/**
 * [ITestListener]
 * Invoked after all the tests have run and all their
 * Configuration methods have been called.
 *
 * @param context context for the test run
 */
@Override
public void onFinish(ITestContext context) {
    synchronized (testListeners) {
        for (ITestListener testListener : testListeners) {
            testListener.onFinish(context);
        }
    }
}

19 Source : ArtifactCollector.java
with Apache License 2.0
from sbabcoc

@Override
public void onFinish(ITestContext context) {
// nothing to do here
}

19 Source : ArtifactCollector.java
with Apache License 2.0
from sbabcoc

@Override
public void onStart(ITestContext context) {
// nothing to do here
}

19 Source : PlatformInterceptor.java
with Apache License 2.0
from sbabcoc

/**
 * Get the target platform for the specified test context
 * <p>
 * <b>NOTE</b>: If the context name doesn't match a standard target platform name, the CONTEXT_PLATFORM setting is
 * used. If the CONTEXT_PLATFORM setting doesn't match a standard target platform name, this method returns 'null'
 * as the platform.
 *
 * @param context test context
 * @return target platform for the specified context
 */
private static String getContextPlatform(ITestContext context) {
    String platform = context.getCurrentXmlTest().getParameter(SeleniumSettings.CONTEXT_PLATFORM.key());
    if (platform == null) {
        platform = SeleniumConfig.getConfig().getContextPlatform();
    }
    return platform;
}

19 Source : DriverListener.java
with Apache License 2.0
from sbabcoc

/**
 * Perform post-suite processing:
 * <ul>
 *     <li>If a Selenium Grid node process was spawned, shut it down.</li>
 *     <li>If a Selenium Grid hub process was spawned, shut it down.</li>
 * </ul>
 *
 * @param testContext execution context for the test suite that just finished
 */
@Override
public void onFinish(final ITestContext testContext) {
    DriverManager.onFinish();
}

19 Source : DriverListener.java
with Apache License 2.0
from sbabcoc

/**
 * {@inheritDoc}
 */
@Override
public void onStart(final ITestContext testContext) {
// no pre-run processing
}

19 Source : AbstractIntegrationTest.java
with Apache License 2.0
from rico-projects

@BeforeClreplaced
public void setDataProviderThreadCount(ITestContext context) {
    context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(1);
}

19 Source : ItemTreeUtils.java
with Apache License 2.0
from reportportal

public static TesreplacedemTree.ItemTreeKey createKey(ITestContext testContext) {
    return TesreplacedemTree.ItemTreeKey.of(testContext.getName());
}

19 Source : ItemTreeUtils.java
with Apache License 2.0
from reportportal

public static Optional<TesreplacedemTree.TesreplacedemLeaf> retrieveLeaf(ITestContext testContext, TesreplacedemTree tesreplacedemTree) {
    Optional<TesreplacedemTree.TesreplacedemLeaf> suiteLeaf = retrieveLeaf(testContext.getSuite(), tesreplacedemTree);
    return suiteLeaf.map(leaf -> leaf.getChildItems().get(createKey(testContext)));
}

19 Source : CustomDataProvider.java
with MIT License
from qmetry

@DataProvider(name = "dp-with-testngmethod-contex")
public Object[][] dataProviderForBDD(ITestNGMethod method, ITestContext contex) {
    Map<Object, Object> m = Maps.newHashMap();
    m.put("method", method.getMethodName());
    m.put("contex", contex.getName());
    return new Object[][] { { m } };
}

19 Source : AbstractTestCase.java
with MIT License
from qmetry

@AfterMethod(alwaysRun = true)
final public void afterMethod(ITestContext testContext, ITestResult tr) {
    tearDownPrrallelThreads(testContext, "m");
}

19 Source : AbstractTestCase.java
with MIT License
from qmetry

private void tearDownPrrallelThreads(ITestContext testContext, String type) {
    String useSingleSeleniumInstance = ConfigurationManager.getBundle().getString("selenium.singletone", "t");
    // match with first char only so m or method or methods is fine
    if (useSingleSeleniumInstance.toUpperCase().startsWith(type.substring(0, 1).toUpperCase()) || type.equalsIgnoreCase("tests")) {
        if (getTestBase() != null) {
            getTestBase().tearDown();
        }
    }
}

19 Source : AbstractTestCase.java
with MIT License
from qmetry

@AfterGroups(alwaysRun = true)
final public void afterGroup(ITestContext testContext) {
    tearDownPrrallelThreads(testContext, "groups");
}

19 Source : AbstractTestCase.java
with MIT License
from qmetry

@AfterTest(alwaysRun = true)
final public void afterTest(ITestContext testContext) {
    tearDownPrrallelThreads(testContext, "tests");
}

19 Source : TestNGTestCase.java
with MIT License
from qmetry

/**
 * @author Chirag Jayswal
 */
public abstract clreplaced TestNGTestCase extends Validator {

    protected final Log logger;

    protected ITestContext context;

    public TestNGTestCase() {
        logger = LogFactoryImpl.getLog(this.getClreplaced());
    }

    @BeforeGroups(alwaysRun = true)
    @BeforeClreplaced(alwaysRun = true)
    final public void setup(ITestContext context) {
        ConfigurationManager.getBundle().addProperty(ApplicationProperties.CURRENT_TEST_CONTEXT.key, context);
        this.context = context;
    }

    @BeforeSuite(alwaysRun = true)
    final public void setupSuit(ITestContext context) {
        this.context = context;
        ConfigurationManager.getBundle().addProperty(ApplicationProperties.CURRENT_TEST_CONTEXT.key, context);
        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>(context.getSuite().getXmlSuite().getParameters());
        ConfigurationManager.addAll(params);
    }

    @BeforeTest(alwaysRun = true)
    final public void setupTest(ITestContext context) {
        ConfigurationManager.getBundle().addProperty(ApplicationProperties.CURRENT_TEST_CONTEXT.key, context);
        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>(context.getCurrentXmlTest().getAllParameters());
        ConfigurationManager.addAll(params);
        this.context = context;
    }

    @BeforeMethod(alwaysRun = true)
    final public void setupMethod(Method m, ITestContext context) {
        ConfigurationManager.getBundle().addProperty(ApplicationProperties.CURRENT_TEST_CONTEXT.key, context);
        this.context = context;
    }

    /* #359 Termination will impact if there are multiple suites. It is already taken care with shutdown hook.
	@AfterSuite(alwaysRun = true)
	final public void afterSuit(ITestContext testContext) {
		TestBaseProvider.instance().stopAll();
		ResultUpdator.awaitTermination();
	}*/
    public PropertyUtil getProps() {
        return ConfigurationManager.getBundle();
    }
}

19 Source : TestNGTestCase.java
with MIT License
from qmetry

@BeforeMethod(alwaysRun = true)
final public void setupMethod(Method m, ITestContext context) {
    ConfigurationManager.getBundle().addProperty(ApplicationProperties.CURRENT_TEST_CONTEXT.key, context);
    this.context = context;
}

19 Source : ReporterUtil.java
with MIT License
from qmetry

private static String getTestName(ITestContext context) {
    if (context == null) {
        context = (ITestContext) ConfigurationManager.getBundle().getObject(ApplicationProperties.CURRENT_TEST_CONTEXT.key);
    }
    return getTestName(context.getCurrentXmlTest());
}

19 Source : ReporterUtil.java
with MIT License
from qmetry

private static int getFailCnt(ITestContext context) {
    if ((context != null) && (context.getFailedTests() != null)) {
        if (context.getFailedTests().getAllResults() != null) {
            return context.getFailedTests().getAllResults().size();
        }
        return context.getFailedTests().size();
    }
    return 0;
}

19 Source : ReporterUtil.java
with MIT License
from qmetry

private static int getFailWithPreplacedPerCnt(ITestContext context) {
    if ((context != null) && (context.getFailedButWithinSuccessPercentageTests() != null)) {
        if (context.getFailedButWithinSuccessPercentageTests().getAllResults() != null) {
            return context.getFailedButWithinSuccessPercentageTests().getAllResults().size();
        }
        return context.getFailedButWithinSuccessPercentageTests().size();
    }
    return 0;
}

19 Source : ReporterUtil.java
with MIT License
from qmetry

private static int getTotal(ITestContext context) {
    return (context == null) || (null == context.getAllTestMethods()) ? 0 : context.getAllTestMethods().length;
}

19 Source : ReporterUtil.java
with MIT License
from qmetry

private static String getClreplacedDir(ITestContext context, ITestResult result) {
    String testName = getTestName(context);
    return ApplicationProperties.JSON_REPORT_DIR.getStringVal() + "/" + testName + "/" + getTestClreplacedName(result);
}

19 Source : ReporterUtil.java
with MIT License
from qmetry

/**
 * should be called on test method completion
 *
 * @param context
 * @param result
 */
public static void createMethodResult(ITestContext context, ITestResult result, List<LoggingBean> logs, List<CheckpointResultBean> checkpoints) {
    try {
        String dir = getClreplacedDir(context, result);
        MethodResult methodResult = new MethodResult();
        methodResult.setSeleniumLog(logs);
        methodResult.setCheckPoints(checkpoints);
        methodResult.setThrowable(result.getThrowable());
        updateOverview(context, result);
        // StringUtil.toreplacedleCaseIdentifier(getMethodName(result));
        String fileName = getMethodIdentifier(result);
        String methodResultFile = dir + "/" + fileName;
        File f = new File(methodResultFile + ".json");
        if (f.exists()) {
            // if file already exists then it will append some random
            // character as suffix
            String suffix = "_" + indexer.incrementAndGet();
            fileName += suffix;
            // add updated file name as 'resultFileName' key in metaData
            methodResultFile = dir + "/" + fileName;
            result.setAttribute(QAF_TEST_IDENTIFIER, fileName);
            updateClreplacedMetaInfo(context, result, fileName);
        } else {
            updateClreplacedMetaInfo(context, result, fileName);
        }
        writeJsonObjectToFile(methodResultFile + ".json", methodResult);
    } catch (Exception e) {
        logger.warn(e.getMessage(), e);
    }
}

19 Source : QAFTestNGListener.java
with MIT License
from qmetry

public void afterInvocation(final IInvokedMethod method, final ITestResult tr, final ITestContext context) {
    logger.debug("afterInvocation: " + method.getTestMethod().getMethodName() + " - " + method.getTestMethod().getConstructorOrMethod().getDeclaringClreplaced().getName() + " is test:" + method.isTestMethod());
    // if (method.isTestMethod()) {
    processResult(tr, context);
    // }
    logger.debug("afterInvocation: Done");
}

19 Source : QAFTestNGListener.java
with MIT License
from qmetry

public void onStart(ITestContext testContext) {
}

19 Source : QAFTestNGListener.java
with MIT License
from qmetry

public List<IMethodInstance> intercept(List<IMethodInstance> lst, ITestContext context) {
    logger.debug("Method Order interceptor called");
    String order = context.getCurrentXmlTest().getParameter("groupOrder");
    MethodPriorityComparator comparator = new MethodPriorityComparator(order);
    Collections.sort(lst, comparator);
    return lst;
}

19 Source : QAFTestNGListener.java
with MIT License
from qmetry

public void onFinish(ITestContext testContext) {
    logger.debug("onfinish testcntext: start");
}

See More Examples