package jscover.server;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebWindow;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import jscover.Main;
import jscover.util.IoService;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
public class HtmlUnitIsolateBrowserTest {
private static Thread server;
private static Main main = new Main();
private static String reportDir = "target/isolateBrowser";
protected WebClient webClient = new WebClient(BrowserVersion.FIREFOX_45);
private IoService ioService = new IoService(false);
private static String[] args = new String[]{
"-ws",
"--document-root=src/test-acceptance/resources",
"--port=9001",
"--no-instrument=example/lib",
"--isolate-browser",
"--report-dir=" + reportDir
};
protected String getReportDir() {
return reportDir;
}
@BeforeClass
public static void setUpOnce() throws IOException {
server = new Thread(new Runnable() {
public void run() {
main.runMain(args);
}
});
server.start();
}
@AfterClass
public static void tearDown() {
main.stop();
}
@Before
public void setUp() {
File jsonFile = new File(getReportDir() + "/jscoverage.json");
if (jsonFile.exists())
jsonFile.delete();
ioService.generateJSCoverFilesForWebServer(new File(reportDir), "isolateBrowser");
}
protected String getTestUrl() {
return "example/index.html";
}
@Test
public void shouldNotCombineCoverage() throws IOException, InterruptedException {
HtmlPage page = webClient.getPage("http://localhost:9001/" + getTestUrl());
page.getElementById("radio4").click();
page.getHtmlElementById("launchDuplicate").click();
webClient.waitForBackgroundJavaScript(100);
WebWindow webWindow = webClient.getWebWindowByName("JSCoverInvertedModeDuplicateWindow");
HtmlPage duplicatePage = (HtmlPage)webWindow.getEnclosedPage();
duplicatePage.getElementById("radio1").click();
duplicatePage.executeJavaScript("jscoverage_report();");
webClient.waitForBackgroundJavaScript(2000);
page = webClient.getPage("file:///"+ new File(getReportDir()+"/jscoverage.html").getAbsolutePath());
verifyTotal(page, 57, 12, 33);
}
protected void verifyTotal(HtmlPage page, int percentage, int branchPercentage, int functionPercentage) throws IOException {
page = page.getElementById("summaryTab").click();
webClient.waitForBackgroundJavaScript(2000);
verifyTotals(page, percentage, branchPercentage, functionPercentage);
}
protected void verifyTotals(HtmlPage page, int percentage, int branchPercentage, int functionPercentage) {
assertEquals(percentage + "%", page.getElementById("summaryTotal").getTextContent());
assertEquals(branchPercentage + "%", page.getElementById("branchSummaryTotal").getTextContent());
assertEquals(functionPercentage + "%", page.getElementById("functionSummaryTotal").getTextContent());
}
}