public void execute(@Observes AfterClass event) {
   try {
     container.fire(new UnDeployManagedDeployments());
   } finally {
     container.fire(new StopManualContainers());
     container.fire(new StopClassContainers());
   }
 }
  public void beforeTest(@Observes Before event) {
    if (strategy.get().isTakingAction(event)) {

      ScreenshotType screenshotType = getScreenshotType();
      ScreenshotMetaData metaData = getMetaData(event);

      beforeScreenshotTaken.fire(new BeforeScreenshotTaken(screenshotType, metaData));

      takeScreenshot.fire(new TakeScreenshot(screenshotType, metaData, When.BEFORE));

      afterScreenshotTaken.fire(new AfterScreenshotTaken(screenshotType, metaData));
    }
  }
  void afterTest(@Observes(precedence = -500) After event) {
    Class<?> testClass = event.getTestInstance().getClass();

    if (WarpCommons.isWarpTest(testClass)) {
      stopBus.fire(new StopBus(event));
    }
  }
  void beforeTest(@Observes(precedence = 500) Before event) {
    Class<?> testClass = event.getTestInstance().getClass();

    if (WarpCommons.isWarpTest(testClass)) {
      startBus.fire(new StartBus(event));
    }
  }
 @Override
 public void update() throws Exception {
   for (ToxiProxyClient.BaseToxic toxic : toxics) {
     logger.log(Level.FINER, String.format("Next toxic is updated %s.", toxic.toString()));
     client.updateToxic(proxy, toxic);
     toxicUpdated.fire(new ToxicUpdated(toxic));
   }
 }
 @Override
 public void execute(Q.RunCondition runCondition) throws Exception {
   for (ToxiProxyClient.BaseToxic toxic : toxics) {
     logger.log(Level.FINER, String.format("Next toxic is created %s.", toxic.toString()));
     client.createToxic(proxy, toxic);
     toxicCreated.fire(new ToxicCreated(toxic, runCondition));
   }
 }
 /* (non-Javadoc)
  * @see org.jboss.arquillian.spi.ContainerMethodExecutor#invoke(org.jboss.arquillian.spi.TestMethodExecutor)
  */
 public TestResult invoke(TestMethodExecutor testMethodExecutor) {
   /*
    *  TODO: when we fire a LocalExecutionEvent from a ContainerMethodExecutor,
    *  both the LocalTestExecutor and RemoteTestExecutor will set the same TestResult.
    */
   event.fire(new LocalExecutionEvent(testMethodExecutor));
   return testResult.get();
 }
  public void afterTest(@Observes After event) {
    TestResult result = testResult.get();
    if (strategy.get().isTakingAction(event, result)) {
      ScreenshotType screenshotType = getScreenshotType();
      ScreenshotMetaData metaData = getMetaData(event);
      metaData.setTestResult(result);

      beforeScreenshotTaken.fire(new BeforeScreenshotTaken(screenshotType, metaData));

      takeScreenshot.fire(
          new TakeScreenshot(
              screenshotType,
              metaData,
              result.getStatus() == TestResult.Status.FAILED ? When.FAILED : When.AFTER));

      afterScreenshotTaken.fire(new AfterScreenshotTaken(screenshotType, metaData));
    }
  }
 /*
  * Class Level
  */
 public void execute(@Observes BeforeClass event) {
   container.fire(new StartClassContainers());
   deployment.fire(new GenerateDeployment(event.getTestClass()));
   container.fire(new DeployManagedDeployments());
 }
 public void execute(@Observes AfterSuite event) {
   container.fire(new StopSuiteContainers());
 }
 /*
  * Suite Level
  */
 public void execute(@Observes BeforeSuite event) {
   container.fire(new SetupContainers());
   container.fire(new StartSuiteContainers());
 }
  public void createAndroidVirtualDeviceAvailable(
      @Observes AndroidVirtualDeviceEvent event,
      AndroidBridge bridge,
      AndroidExtensionConfiguration configuration,
      AndroidSdk sdk,
      ProcessExecutor executor)
      throws AndroidExecutionException {

    if (!bridge.isConnected()) {
      throw new IllegalStateException(
          "Android debug bridge must be connected in order to spawn emulator");
    }

    String name = configuration.getAvdName();
    AndroidDevice running = null;
    for (AndroidDevice device : bridge.getDevices()) {
      if (equalsIgnoreNulls(name, device.getAvdName())) {
        running = device;
        break;
      }
    }

    if (running == null) {

      CountDownWatch countdown =
          new CountDownWatch(configuration.getEmulatorBootupTimeoutInSeconds(), TimeUnit.SECONDS);
      log.log(
          Level.INFO,
          "Waiting {0} seconds for emulator {1} to be started and connected.",
          new Object[] {countdown.timeout(), name});

      // discover what device was added here
      DeviceConnectDiscovery deviceDiscovery = new DeviceConnectDiscovery();
      AndroidDebugBridge.addDeviceChangeListener(deviceDiscovery);

      Process emulator = startEmulator(executor, sdk, name, configuration.getEmulatorOptions());
      androidEmulator.set(new AndroidEmulator(emulator));

      log.log(
          Level.FINE,
          "Emulator process started, {0} seconds remaining to start the device {1}",
          new Object[] {countdown.timeLeft(), name});

      waitUntilBootUpIsComplete(deviceDiscovery, executor, sdk, countdown);
      running = deviceDiscovery.getDiscoveredDevice();

      AndroidDebugBridge.removeDeviceChangeListener(deviceDiscovery);

    } else {
      log.info(
          "Emulator for device "
              + name
              + " is already started, device serial is "
              + running.getSerialNumber()
              + ". Emulator will not be reinitialized.");
    }

    // fire event that we have a device ready
    androidDevice.set(running);
    androidDeviceReady.fire(new AndroidDeviceReady(running));
  }