Package com.google.jstestdriver.servlet.fileset

Source Code of com.google.jstestdriver.servlet.fileset.BrowserFileCheck

package com.google.jstestdriver.servlet.fileset;

import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.inject.Inject;
import com.google.jstestdriver.FileInfo;
import com.google.jstestdriver.SlaveBrowser;
import com.google.jstestdriver.browser.BrowserFileSet;
import com.google.jstestdriver.model.JstdTestCase;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;
import java.util.List;

/**
* @author corbinrsmith@gmail.com (Cory Smith)
*/
public class BrowserFileCheck implements FileSetRequestHandler<BrowserFileSet> {

  private static final Logger logger = LoggerFactory.getLogger(BrowserFileCheck.class);

  public static final String ACTION = "browserFileCheck";

  private final Gson gson;

  @Inject
  public BrowserFileCheck(Gson gson) {
    this.gson = gson;
  }

  @Override
  public BrowserFileSet handle(SlaveBrowser browser, String data) {
    JstdTestCase testCase = gson.fromJson(data, JstdTestCase.class);
    if (browser == null) {
      logger.debug("no browser, returning empty set.");
      return new BrowserFileSet(Collections.<FileInfo>emptyList(),
          Collections.<FileInfo>emptyList(), false);
    }

    if (browser.hasFileLoadErrors()) {
      logger.debug("errors in the previous load, requesting refresh.");
      return new BrowserFileSet(Lists.<FileInfo>newLinkedList(),
          Lists.<FileInfo>newLinkedList(), true);
    }

    final List<FileInfo> filesToUpdate = Lists.newLinkedList();
    final List<FileInfo> extraFiles = Lists.newLinkedList();
    boolean reset = false;
    logger.debug("Determing files to update {}, {}", testCase.toFileSet(), browser.getFileSet());
    for (FileInfo newFile : testCase.getServable()) {
      if (browser.getFileSet().contains(newFile)) {
        for (FileInfo oldFile : browser.getFileSet()) {
          if (oldFile.shouldReplaceWith(newFile)) {
            filesToUpdate.add(newFile);
          }
        }
      } else {
        filesToUpdate.add(newFile);
      }
    }
    extraFiles.addAll(browser.getFileSet());
    extraFiles.removeAll(testCase.toFileSet());

    if (!(filesToUpdate.isEmpty() && extraFiles.isEmpty())
        && (browser.getBrowserInfo().getName().contains("Safari")
            || browser.getBrowserInfo().getName().contains("Opera")
            || browser.getBrowserInfo().getName().contains("Konqueror"))) {
      // reload all files if Safari, Opera, or Konqueror, because they don't
      // overwrite properly.
      // TODO(corysmith): Replace this with polymorphic browser classes.
      logger.info("Resetting browser fileset to ensure proper overwriting. {} {}", filesToUpdate.isEmpty(), extraFiles);
      filesToUpdate.addAll(testCase.toFileSet());
      // TODO(corysmith): Change the browser to handle it's own resets.
      browser.resetFileSet();
      reset = true;
    }

    return new BrowserFileSet(filesToUpdate, extraFiles, reset);
  }
 

  @Override
  public boolean canHandle(String action) {
    return ACTION.equalsIgnoreCase(action);
  }
}
TOP

Related Classes of com.google.jstestdriver.servlet.fileset.BrowserFileCheck

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.