All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tatools.sunshine.testng.LoadableTestNGSuite Maven / Gradle / Ivy

There is a newer version: 0.7.0
Show newest version
package org.tatools.sunshine.testng;

import org.tatools.sunshine.core.*;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;

import java.io.IOException;

/**
 * The {@link LoadableTestNGSuite} class represents a TestNG suite prepared from the Java classes. The suite has to
 * be saved as a TestNG XML file.
 *
 * @author Dmytro Serdiuk ([email protected])
 * @version $Id: 7380ea2f9ee0245a70cd48f3c117996e8bafd768 $
 * @since 0.1
 */
@SuppressWarnings("WeakerAccess")
public final class LoadableTestNGSuite implements TestNGSuite {

    private static final String SUNSHINE_SUITE = "Sunshine suite";
    private final String name;
    private final SunshineSuite artifacts;
    private final File suiteXml;

    /**
     * Construct the new instance. The {@value #SUNSHINE_SUITE} is used as a name of the suite via wrapping of
     * {@link #LoadableTestNGSuite(String, Condition)}.
     *
     * @param filter the filter to be used to select desired tests
     * @see #LoadableTestNGSuite(String, Condition)
     */
    public LoadableTestNGSuite(Condition filter) {
        this(SUNSHINE_SUITE, filter);
    }

    /**
     * Construct the new instance. All tests will be loaded from the classpath.
     *
     * @param suiteName the name of the suite
     * @param filter    the filter to be used to select desired tests
     */
    public LoadableTestNGSuite(String suiteName, Condition filter) {
        this(suiteName, new FileSystemOfClasspathClasses(), filter);
    }

    /**
     * Construct the new instance. The {@value #SUNSHINE_SUITE} is used as a name of the suite via wrapping of
     * {@link #LoadableTestNGSuite(String, FileSystem, Condition)}.
     *
     * @param fileSystem the place with the tests
     * @param filter     the filter to be used to select desired tests
     * @see #LoadableTestNGSuite(String, FileSystem, Condition)
     */
    public LoadableTestNGSuite(FileSystem fileSystem, Condition filter) {
        this(SUNSHINE_SUITE, fileSystem, filter);
    }

    /**
     * Construct the new instance. All filtered tests will be printed to {@link System#out}.
     * 

The TestNG XML file will be saved to the default temporary folder.

* * @param suiteName the name of the suite * @param fileSystem the place with the tests * @param filter the filter to be used to select desired tests */ public LoadableTestNGSuite(String suiteName, FileSystem fileSystem, Condition filter) { this(suiteName, new SunshineSuitePrintable(new SunshineSuiteFilterable(new SuiteFromFileSystem(fileSystem), filter))); } /** * Construct the new instance. The {@value #SUNSHINE_SUITE} is used as a name of the suite via wrapping of * {@link #LoadableTestNGSuite(String, SunshineSuite)}. * * @param suite the tests to be used * @see #LoadableTestNGSuite(String, SunshineSuite) */ public LoadableTestNGSuite(SunshineSuite suite) { this(SUNSHINE_SUITE, suite); } /** * Construct the new instance. *

The TestNG XML file will be saved to the temporary directory named "./sunshine-generated-suites".

* * @param suiteName the name of the suite * @param suite the tests to be used */ public LoadableTestNGSuite(String suiteName, SunshineSuite suite) { this(suiteName, suite, new DirectoryWithAutomaticCreation( new DirectoryWithAutomaticDeletion( new DirectorySafe("./sunshine-generated-suites") ) ) ); } /** * Construct the new instance. The {@value #SUNSHINE_SUITE} is used as a name of the suite via wrapping of * {@link #LoadableTestNGSuite(String, FileSystem, String, Condition)}. * * @param fileSystem the place with the tests * @param xmlSuiteDirectory the place to store suite file * @param filter the filter to be used to select desired tests * @see #LoadableTestNGSuite(String, FileSystem, String, Condition) */ public LoadableTestNGSuite(FileSystem fileSystem, String xmlSuiteDirectory, Condition filter) { this(SUNSHINE_SUITE, fileSystem, xmlSuiteDirectory, filter); } /** * Construct the new instance. If suite's directory ({@code xmlSuiteDirectory}) doesn't exist, it will be created * automatically. * * @param suiteName the name of the suite * @param fileSystem the place with the tests * @param xmlSuiteDirectory the place to store suite file * @param filter the filter to be used to select desired tests */ public LoadableTestNGSuite(String suiteName, FileSystem fileSystem, String xmlSuiteDirectory, Condition filter) { this(suiteName, fileSystem, new DirectoryWithAutomaticCreation(new DirectorySafe(new DirectoryBase(xmlSuiteDirectory))), filter ); } /** * Construct the new instance. The {@value #SUNSHINE_SUITE} is used as a name of the suite via wrapping of * {@link #LoadableTestNGSuite(String, FileSystem, Directory, Condition)}. * * @param fileSystem the place with the tests * @param xmlSuiteDirectory the place to store suite file * @param filter the filter to be used to select desired tests * @see #LoadableTestNGSuite(String, FileSystem, Directory, Condition) */ public LoadableTestNGSuite(FileSystem fileSystem, Directory xmlSuiteDirectory, Condition filter) { this(SUNSHINE_SUITE, fileSystem, xmlSuiteDirectory, filter); } /** * Construct the new instance. All filtered tests will be printed to {@link System#out}. * * @param suiteName the name of the suite * @param fileSystem the place with the tests * @param xmlSuiteDirectory the place to store suite file * @param filter the filter to be used to select desired tests */ public LoadableTestNGSuite(String suiteName, FileSystem fileSystem, Directory xmlSuiteDirectory, Condition filter) { this(suiteName, new SunshineSuitePrintable(new SunshineSuiteFilterable(new SuiteFromFileSystem(fileSystem), filter)), xmlSuiteDirectory ); } /** * Construct the new instance. The {@value #SUNSHINE_SUITE} is used as a name of the suite via wrapping of * {@link #LoadableTestNGSuite(String, SunshineSuite, Directory)}. * * @param suite the tests to be used * @param xmlSuiteDirectory the directory to store suite file * @see #LoadableTestNGSuite(String, SunshineSuite, Directory) */ public LoadableTestNGSuite(SunshineSuite suite, Directory xmlSuiteDirectory) { this(SUNSHINE_SUITE, suite, xmlSuiteDirectory); } /** * Construct the new instance. "sunshine-suite.xml" is used as a name for XML suite file. * * @param suiteName the name of the suite * @param suite the tests to be used * @param xmlSuiteDirectory the directory to store suite file */ public LoadableTestNGSuite(String suiteName, SunshineSuite suite, Directory xmlSuiteDirectory) { this(suiteName, suite, new FileBase(xmlSuiteDirectory, "sunshine-suite.xml")); } /** * Construct the new instance. * * @param suiteName the name of the suite * @param suite the suite * @param xmlFileName the name of TestNG XML file */ public LoadableTestNGSuite(String suiteName, SunshineSuite suite, File xmlFileName) { this.name = suiteName; this.artifacts = suite; this.suiteXml = xmlFileName; } @Override public File tests() throws SuiteException { XmlSuite xmlSuite = new XmlSuite(); xmlSuite.setName(this.name); try { for (SunshineTest sunshineTest : this.artifacts.tests()) { XmlTest test = new TestNGTest(sunshineTest).object(); test.setSuite(xmlSuite); xmlSuite.addTest(test); } this.suiteXml.write(xmlSuite.toXml()); return this.suiteXml; } catch (TestException | IOException e) { throw new SuiteException(e); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy