/*
* https://webfolder.io/license.html
*/
package io.webfolder.cdp.js;
import static java.lang.String.format;
import java.net.URL;
import java.util.List;
import io.webfolder.cdp.Example;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.command.Profiler;
import io.webfolder.cdp.session.Command;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
import io.webfolder.cdp.type.profiler.CoverageRange;
import io.webfolder.cdp.type.profiler.FunctionCoverage;
import io.webfolder.cdp.type.profiler.ScriptCoverage;
@Example
public class CodeCoverage {
public static void main(String[] args) {
URL url = CodeCoverage.class.getResource("/code-coverage.html");
Launcher launcher = new Launcher();
try (SessionFactory factory = launcher.launch();
Session session = factory.create()) {
Command command = session.getCommand();
Profiler profiler = command.getProfiler();
session.navigate(url.toString());
session.waitDocumentReady();
profiler.enable();
profiler.start();
session.callFunction("fibonacci", Double.class, 20);
profiler.stop();
List<ScriptCoverage> list = profiler.getBestEffortCoverage();
for (ScriptCoverage coverage : list) {
if ( ! coverage.getUrl().endsWith("test-lib.js") ) {
continue;
}
String libName = coverage.getUrl().substring(coverage.getUrl().lastIndexOf("/") + 1, coverage.getUrl().length());
List<FunctionCoverage> functions = coverage.getFunctions();
System.out.println("");
System.out.println("======================================================================");
System.out.println(String.format(" %-40s %s %s", "[Function]", "[Start Offset]", "[End Offset]"));
System.out.println("======================================================================");
for (FunctionCoverage functionCoverage : functions) {
if (functionCoverage.getFunctionName().isEmpty()) {
continue;
}
for (CoverageRange range : functionCoverage.getRanges()) {
System.out.println(format(" %-46s %-11d %d",
libName + "/" + functionCoverage.getFunctionName(),
range.getStartOffset(),
range.getEndOffset()));
}
}
System.out.println("");
}
profiler.disable();
} finally {
launcher.kill();
}
}
}