com.google.jstestdriver.servlet.fileset.BrowserFileCheck Maven / Gradle / Ivy
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 [email protected] (Cory Smith)
*/
public class BrowserFileCheck implements FileSetRequestHandler {
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.emptyList(),
Collections.emptyList(), false);
}
final List filesToUpdate = Lists.newLinkedList();
final List 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);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy