Best Spectrum code snippet using com.greghaskins.spectrum.internal.configuration.ConfiguredBlock
Source:Configure.java
...3import com.greghaskins.spectrum.internal.configuration.BlockFocused;4import com.greghaskins.spectrum.internal.configuration.BlockIgnore;5import com.greghaskins.spectrum.internal.configuration.BlockTagging;6import com.greghaskins.spectrum.internal.configuration.BlockTimeout;7import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;8import com.greghaskins.spectrum.internal.configuration.ExcludeTags;9import com.greghaskins.spectrum.internal.configuration.IncludeTags;10import com.greghaskins.spectrum.internal.junit.Rules;11import java.time.Duration;12import java.util.concurrent.TimeUnit;13import java.util.function.Supplier;14public interface Configure {15 String EXCLUDE_TAGS_PROPERTY = "spectrum.exclude.tags";16 String INCLUDE_TAGS_PROPERTY = "spectrum.include.tags";17 /**18 * Surround a {@link Block} with the {@code with} statement to add19 * configuration and metadata to it. E.g. <code>with(tags("foo"), () -> {})</code>.<br>20 * Note: configuration metadata can be chained using the21 * {@link BlockConfigurationChain#and(BlockConfigurationChain)} method. E.g.22 * <code>with(tags("foo").and(ignore()), () -> {})</code>23 *24 * @param configuration the chainable block configuration25 * @param block the enclosed block26 * @return a wrapped block with the given configuration27 * @see #ignore(String)28 * @see #ignore()29 * @see #focus()30 * @see #tags(String...)31 * @see #timeout(Duration)32 */33 static Block with(final BlockConfigurationChain configuration, final Block block) {34 return ConfiguredBlock.with(configuration.getBlockConfiguration(), block);35 }36 /**37 * Mark a block as ignored by surrounding it with the ignore method.38 *39 * @param why explanation of why this block is being ignored40 * @param block the block to ignore41 * @return a wrapped block which will be ignored42 */43 static Block ignore(final String why, final Block block) {44 return with(ignore(why), block);45 }46 /**47 * Mark a block as ignored by surrounding it with the ignore method.48 *...
Source:ConfiguredBlock.java
2import com.greghaskins.spectrum.Block;3/**4 * A block with configuration data applied to it.5 */6public class ConfiguredBlock implements Block {7 private final BlockConfiguration blockConfiguration;8 private final Block innerBlock;9 /**10 * Surround a {@link Block} with the {@code with} statement to add preconditions and metadata to it.11 * E.g. <code>with(tags("foo"), () -> {})</code>12 * @param blockConfiguration the precondition object - see the factory methods in13 * {@link BlockConfiguration}14 * @param block the enclosed block15 * @return a PreconditionBlock to use16 */17 public static ConfiguredBlock with(final BlockConfiguration blockConfiguration,18 final Block block) {19 BlockConfiguration existingBlockConfiguration = configurationFromBlock(block);20 BlockConfiguration mergedBlockConfiguration =21 BlockConfiguration.merge(existingBlockConfiguration, blockConfiguration);22 return new ConfiguredBlock(mergedBlockConfiguration, block);23 }24 /**25 * Construct a ConfiguredBlock to wrap block execution with configuration data.26 * @param innerBlock the block to wrap27 */28 private ConfiguredBlock(final BlockConfiguration blockConfiguration, final Block innerBlock) {29 this.blockConfiguration = blockConfiguration;30 this.innerBlock = innerBlock;31 }32 /**33 * Get the configuration that applies to the block.34 * @return the configuration on the block35 */36 BlockConfiguration getConfiguration() {37 return this.blockConfiguration;38 }39 @Override40 public void run() throws Throwable {41 this.innerBlock.run();42 }43 /**44 * Provide any configuration data for this child's block or the default.45 * @param block the block which may have configuration data46 * @return a non null {@link BlockConfiguration} object to use47 */48 public static BlockConfiguration configurationFromBlock(final Block block) {49 if (block instanceof ConfiguredBlock) {50 return ((ConfiguredBlock) block).getConfiguration();51 } else {52 return BlockConfiguration.defaultConfiguration();53 }54 }55}...
Source:BlockConfigurationChain.java
1package com.greghaskins.spectrum;2import com.greghaskins.spectrum.internal.configuration.BlockConfigurable;3import com.greghaskins.spectrum.internal.configuration.BlockConfiguration;4import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;5import java.util.stream.Stream;6/**7 * Chainable configuration of a {@link ConfiguredBlock}.8 * Use the factory methods in {@link Spectrum} like {@link Configure#ignore()},9 * {@link Configure#focus()} or {@link Configure#tags(String...)} to add configuration10 * to a block. The result will be a {@link BlockConfigurationChain}. To add configurations together11 * you use {@link BlockConfigurationChain#and(BlockConfigurationChain)}. This is fluent12 * so ands can be chained together.<br><br>13 * e.g.<pre>with(ignore().and(tags("a","b","c")).and(tags("d","e","f"), () -> {...})</pre><br>14 * See also: {@link Configure#with(BlockConfigurationChain, Block)}15 */16public final class BlockConfigurationChain {17 private BlockConfiguration blockConfiguration = BlockConfiguration.defaultConfiguration();18 BlockConfigurationChain() {}19 /**20 * Fluent call to add a configurable to the configuration.21 * @param configurable to add....
ConfiguredBlock
Using AI Code Generation
1import com.greghaskins.spectrum.Spectrum;2import com.greghaskins.spectrum.Spectrum.*;3import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;4import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock.*;5import java.util.*;6public class 1 {7 public static void main(String[] args) {8 ConfiguredBlock block = new ConfiguredBlock();9 block.setBlock(new Block() {10 public void run() {11 System.out.println("Hello World");12 }13 });14 block.setTags(Arrays.asList("tag1", "tag2"));15 block.setOnly(true);16 block.setSkip(true);17 block.setIgnore(true);18 block.setPending(true);19 block.setTimeout(1000);20 block.setBefore(new Block() {21 public void run() {22 System.out.println("Before");23 }24 });25 block.setAfter(new Block() {26 public void run() {27 System.out.println("After");28 }29 });30 block.setBeforeEach(new Block() {31 public void run() {32 System.out.println("BeforeEach");33 }34 });35 block.setAfterEach(new Block() {36 public void run() {37 System.out.println("AfterEach");38 }39 });40 block.setBeforeAll(new Block() {41 public void run() {42 System.out.println("BeforeAll");43 }44 });45 block.setAfterAll(new Block() {46 public void run() {47 System.out.println("AfterAll");48 }49 });50 block.setBeforeClass(new Block() {51 public void run() {52 System.out.println("BeforeClass");53 }54 });55 block.setAfterClass(new Block() {56 public void run() {57 System.out.println("AfterClass");58 }59 });60 block.setBeforeMethod(new Block() {61 public void run() {62 System.out.println("BeforeMethod");63 }64 });65 block.setAfterMethod(new Block() {66 public void run() {67 System.out.println("AfterMethod");68 }69 });70 block.setBeforeClassMethod(new Block() {71 public void run() {72 System.out.println("BeforeClassMethod");73 }74 });
ConfiguredBlock
Using AI Code Generation
1import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;2public class 1 {3 public static void main(String[] args) {4 ConfiguredBlock block = new ConfiguredBlock();5 block.setBlockName("block1");6 block.setBlockDescription("block1 description");7 System.out.println(block.getBlockName());8 System.out.println(block.getBlockDescription());9 }10}11 at 1.main(1.java:7)
ConfiguredBlock
Using AI Code Generation
1import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;2public class TestConfiguredBlock {3 public static void main(String[] args) {4 ConfiguredBlock block = new ConfiguredBlock();5 block.setBlockName("block1");6 block.setBlockDescription("Description of block1");7 block.setBlockTag("block1");8 block.setBlockPriority(1);9 block.setBlockEnabled(true);10 block.setBlockParallel(false);11 block.setBlockTimeout(10000);12 block.setBlockRetry(3);13 block.setBlockRetryInterval(5000);14 block.setBlockRetryOn("java.lang.Exception");15 block.setBlockRetryOn("java.lang.AssertionError");16 block.setBlockRetryOn("java.lang.RuntimeException");17 block.setBlockRetryOn("java.lang.NullPointerException");18 block.setBlockRetryOn("java.lang.ArithmeticException");19 block.setBlockRetryOn("java.lang.ArrayIndexOutOfBoundsException");20 block.setBlockRetryOn("java.lang.ArrayStoreException");21 block.setBlockRetryOn("java.lang.ClassCastException");22 block.setBlockRetryOn("java.lang.IllegalArgumentException");23 block.setBlockRetryOn("java.lang.IllegalStateException");24 block.setBlockRetryOn("java.lang.IndexOutOfBoundsException");25 block.setBlockRetryOn("java.lang.NegativeArraySizeException");26 block.setBlockRetryOn("java.lang.NumberFormatException");27 block.setBlockRetryOn("java.lang.SecurityException");28 block.setBlockRetryOn("java.lang.StringIndexOutOfBoundsException");29 block.setBlockRetryOn("java.lang.UnsupportedOperationException");30 block.setBlockRetryOn("java.lang.reflect.InvocationTargetException");31 block.setBlockRetryOn("org.openqa.selenium.WebDriverException");32 block.setBlockRetryOn("org.openqa.selenium.TimeoutException");33 block.setBlockRetryOn("org.openqa.selenium.NoSuchElementException");34 block.setBlockRetryOn("org.openqa.selenium.StaleElementReferenceException");35 block.setBlockRetryOn("org.openqa.selenium.ElementNotVisibleException");36 block.setBlockRetryOn("org.openqa.selenium.ElementNotSelectableException");37 block.setBlockRetryOn("org.openqa.selenium.InvalidElementStateException");38 block.setBlockRetryOn("org.openqa.selenium.InvalidCookieDomainException");39 block.setBlockRetryOn("org.openqa.selenium.UnhandledAlertException");40 block.setBlockRetryOn("org.openqa.selenium.UnexpectedAlertBehaviour");41 block.setBlockRetryOn("org.openqa.selenium.UnableToSetCookieException");
ConfiguredBlock
Using AI Code Generation
1public class ConfiguredBlockTest {2 public void testConfiguredBlock() throws Exception {3 ConfiguredBlock configuredBlock = new ConfiguredBlock();4 configuredBlock.setBlock(new Block() {5 public void run() throws Exception {6 }7 });8 configuredBlock.run();9 }10}11public class ConfiguredBlockTest {12 public void testConfiguredBlock() throws Exception {13 ConfiguredBlock configuredBlock = new ConfiguredBlock();14 configuredBlock.setBlock(new Block() {15 public void run() throws Exception {16 }17 });18 configuredBlock.run();19 }20}21public class ConfiguredBlockTest {22 public void testConfiguredBlock() throws Exception {23 ConfiguredBlock configuredBlock = new ConfiguredBlock();24 configuredBlock.setBlock(new Block() {25 public void run() throws Exception {26 }27 });28 configuredBlock.run();29 }30}31public class ConfiguredBlockTest {32 public void testConfiguredBlock() throws Exception {33 ConfiguredBlock configuredBlock = new ConfiguredBlock();34 configuredBlock.setBlock(new Block() {35 public void run() throws Exception {36 }37 });38 configuredBlock.run();39 }40}41public class ConfiguredBlockTest {42 public void testConfiguredBlock() throws Exception {43 ConfiguredBlock configuredBlock = new ConfiguredBlock();44 configuredBlock.setBlock(new Block() {45 public void run() throws Exception {46 }47 });48 configuredBlock.run();49 }50}
ConfiguredBlock
Using AI Code Generation
1public class ConfiguredBlockExample {2 public static void main(String[] args) {3 ConfiguredBlock block = new ConfiguredBlock();4 block.setBlock("com.greghaskins.spectrum.internal.configuration.Block");5 block.setConfiguration("com.greghaskins.spectrum.internal.configuration.Configuration");6 block.setConfigurationMethod("com.greghaskins.spectrum.internal.configuration.ConfigurationMethod");7 block.setConfigurationMethodParameter("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParameter");8 block.setConfigurationMethodParameters("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParameters");9 block.setConfigurationMethodParametersFactory("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactory");10 block.setConfigurationMethodParametersFactoryMethod("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethod");11 block.setConfigurationMethodParametersFactoryMethodParameters("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParameters");12 block.setConfigurationMethodParametersFactoryMethodParametersFactory("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactory");13 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethod("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethod");14 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethodParameters("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethodParameters");15 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactory("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactory");16 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethod("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethod");17 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethodParameters("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethodParameters");18 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethodParametersFactory("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethodParametersFactory");19 block.setConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethod("com.greghaskins.spectrum.internal.configuration.ConfigurationMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethodParametersFactoryMethod");
ConfiguredBlock
Using AI Code Generation
1import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;2import com.greghaskins.spectrum.internal.configuration.Configuration;3import com.greghaskins.spectrum.internal.configuration.ConfigurationHolder;4import com.greghaskins.spectrum.internal.configuration.ConfigurationRegistry;5import com.greghaskins.spectrum.internal.configuration.ConfigurationRegistryImpl;6import com.greghaskins.spectrum.internal.configuration.SpecificationConfiguration;7import com.greghaskins.spectrum.internal.configuration.SpecificationConfigurationImpl;8import com.greghaskins.spectrum.internal.configuration.TestConfiguration;9public class 1 {10 public static void main(String[] args) {11 ConfigurationRegistry configurationRegistry = new ConfigurationRegistryImpl();12 ConfigurationHolder configurationHolder = new ConfigurationHolder(configurationRegistry);13 ConfiguredBlock configuredBlock = new ConfiguredBlock(configurationHolder);14 configuredBlock.run(() -> {15 Configuration configuration = configurationRegistry.getConfiguration();16 SpecificationConfiguration specificationConfiguration = configuration.getSpecificationConfiguration();17 TestConfiguration testConfiguration = specificationConfiguration.getTestConfiguration();18 });19 }20}21import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;22import com.greghaskins.spectrum.internal.configuration.Configuration;23import com.greghaskins.spectrum.internal.configuration.ConfigurationHolder;24import com.greghaskins.spectrum.internal.configuration.ConfigurationRegistry;25import com.greghaskins.spectrum.internal.configuration.ConfigurationRegistryImpl;26import com.greghaskins.spectrum.internal.configuration.SpecificationConfiguration;27import com.greghaskins.spectrum.internal.configuration.SpecificationConfigurationImpl;28import com.greghaskins.spectrum.internal.configuration.TestConfiguration;29public class 2 {30 public static void main(String[] args) {31 ConfigurationRegistry configurationRegistry = new ConfigurationRegistryImpl();32 ConfigurationHolder configurationHolder = new ConfigurationHolder(configurationRegistry);33 ConfiguredBlock configuredBlock = new ConfiguredBlock(configurationHolder);34 configuredBlock.run(() -> {
ConfiguredBlock
Using AI Code Generation
1package com.greghaskins.spectrum.test;2import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;3public class ConfiguredBlockTest {4 public static void main(String[] args) {5 ConfiguredBlock block = new ConfiguredBlock();6 System.out.println(block.getConfig().get("key1"));7 System.out.println(block.getConfig().get("key2"));8 System.out.println(block.getConfig().get("key3"));9 }10}11package com.greghaskins.spectrum.test;12import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;13public class ConfiguredBlockTest {14 public static void main(String[] args) {15 ConfiguredBlock block = new ConfiguredBlock();16 System.out.println(block.getConfig().get("key1"));17 System.out.println(block.getConfig().get("key2"));18 System.out.println(block.getConfig().get("key3"));19 }20}21package com.greghaskins.spectrum.test;22import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;23public class ConfiguredBlockTest {24 public static void main(String[] args) {25 ConfiguredBlock block = new ConfiguredBlock();26 System.out.println(block.getConfig().get("key1"));27 System.out.println(block.getConfig().get("key2"));28 System.out.println(block.getConfig().get("key3"));29 }30}31package com.greghaskins.spectrum.test;32import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;33public class ConfiguredBlockTest {34 public static void main(String[] args) {35 ConfiguredBlock block = new ConfiguredBlock();36 System.out.println(block.getConfig().get("key1"));
ConfiguredBlock
Using AI Code Generation
1import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;2import com.greghaskins.spectrum.internal.configuration.Configuration;3import java.lang.reflect.Method;4import java.util.Optional;5public class ConfiguredBlockGetter {6 public static Optional<ConfiguredBlock> getConfiguredBlock(Class<?> testClass) {7 Optional<Method> method = getConfigurationMethod(testClass);8 if (!method.isPresent()) {9 return Optional.empty();10 }11 return Optional.of(new ConfiguredBlock(method.get()));12 }13 private static Optional<Method> getConfigurationMethod(Class<?> testClass) {14 Method[] methods = testClass.getMethods();15 for (Method method : methods) {16 if (method.getAnnotation(Configuration.class) != null) {17 return Optional.of(method);18 }19 }20 return Optional.empty();21 }22}23import com.greghaskins.spectrum.Spectrum;24import com.greghaskins.spectrum.Spectrum.*;25import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;26import java.util.Optional;27import java.util.function.Consumer;28import org.junit.runner.Description;29import org.junit.runner.Runner;30import static org.junit.runner.Description.createSuiteDescription;31import static org.junit.runner.Description.createTestDescription;32public class SpectrumRunner extends Runner {33 private final Description description;34 public SpectrumRunner(Class<?> testClass) throws Exception {35 description = createSuiteDescription(testClass);36 Optional<ConfiguredBlock> configuredBlock = ConfiguredBlockGetter.getConfiguredBlock(testClass);37 if (configuredBlock.isPresent()) {38 configuredBlock.get().invoke();39 }40 Spectrum.describe(testClass.getSimpleName(), () -> {41 });42 }43 public Description getDescription() {44 return description;45 }46 public void run(RunNotifier notifier) {47 }48}49import org.junit.runner.JUnitCore;50public class SpectrumRunnerTest {51 public static void main(String[] args) {52 JUnitCore.runClasses(SpectrumRunner.class);53 }
ConfiguredBlock
Using AI Code Generation
1package com.greghaskins.spectrum.internal.configuration;2import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;3import com.greghaskins.spectrum.internal.configuration.Configuration;4import com.greghaskins.spectrum.internal.configuration.ConfigurationBuilder;5import com.greghaskins.spectrum.internal.configuration.ConfigurationBuilderSupplier;6import com.greghaskins.spectrum.internal.configuration.ConfigurationSupplier;7import com.greghaskins.spectrum.internal.configuration.DefaultConfigurationBuilder;8import com.greghaskins.spectrum.internal.configuration.DefaultConfigurationBuilderSupplier;9import com.greghaskins.spectrum.internal.configuration.DefaultConfigurationSupplier;10import com.greghaskins.spectrum.internal.configuration.DefaultGlobalConfiguration;11import com.greghaskins.spectrum.internal.configuration.GlobalConfiguration;12import com.greghaskins.spectrum.internal.configuration.GlobalConfigurationSupplier;13import com.greghaskins.spectrum.internal.configuration.GlobalConfigurationSupplierSupplier;14import com.greghaskins.spectrum.internal.configuration.LocalConfiguration;15import com.greghaskins.spectrum.internal.configuration.LocalConfigurationSupplier;16import com.greghaskins.spectrum.internal.configuration.LocalConfigurationSupplierSupplier;17import com.greghaskins.spectrum.internal.configuration.NoOpConfigurationBuilder;18import com.greghaskins.spectrum.internal.configuration.NoOpConfigurationSupplier;19import com.greghaskins.spectrum.internal.configuration.NoOpGlobalConfigurationSupplierSupplier;20import com.greghaskins.spectrum.internal.configuration.NoOpLocalConfigurationSupplierSupplier;21import com.greghaskins.spectrum.internal.hooks.Hook;22import com.greghaskins.spectrum.internal.hooks.HookContext;23import com.greghaskins.spectrum.internal.hooks.HookContextSupplier;24import com.greghaskins.spectrum.internal.hooks.HookContextSupplierSupplier;25import com.greghaskins.spectrum.internal.hooks.HookRegistry;26import com.greghaskins.spectrum.internal.hooks.HookRegistrySupplier;27import com.greghaskins.spectrum.internal.hooks.HookRegistrySupplierSupplier;28import com.greghaskins.spectrum.internal.hooks.NoOpHookContextSupplierSupplier;29import com.greghaskins.spectrum.internal.hooks.NoOpHookRegistrySupplierSupplier;30import com.greghaskins.spectrum.internal
ConfiguredBlock
Using AI Code Generation
1import com.greghaskins.spectrum.Spectrum;2import com.greghaskins.spectrum.Spectrum.*;3import com.greghaskins.spectrum.internal.configuration.ConfiguredBlock;4import com.greghaskins.spectrum.internal.configuration.SpectrumConfiguration;5import java.lang.reflect.Method;6public class TestConfiguredBlock {7 public static void main(String[] args) {8 String[] args1 = {"1.java"};9 String[] args2 = {"2.java"};10 String[] args3 = {"3.java"};11 String[] args4 = {"4.java"};12 String[] args5 = {"5.java"};13 String[] args6 = {"6.java"};14 String[] args7 = {"7.java"};15 String[] args8 = {"8.java"};16 String[] args9 = {"9.java"};17 String[] args10 = {"10.java"};18 String[] args11 = {"11.java"};19 String[] args12 = {"12.java"};20 String[] args13 = {"13.java"};21 String[] args14 = {"14.java"};22 String[] args15 = {"15.java"};23 String[] args16 = {"16.java"};24 String[] args17 = {"17.java"};25 String[] args18 = {"18.java"};26 String[] args19 = {"19.java"};
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!