Java tutorial
/* * Copyright 2014 Shazam Entertainment Limited * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. * * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ package com.shazam.fork.summary; import com.android.ddmlib.logcat.LogCatMessage; import com.android.ddmlib.testrunner.TestIdentifier; import com.google.common.io.Resources; import com.shazam.fork.io.HtmlGenerator; import org.lesscss.LessCompiler; import java.io.File; import java.util.List; import static com.google.common.base.Charsets.UTF_8; import static com.google.common.collect.Collections2.transform; import static com.shazam.fork.io.Files.copyResource; import static com.shazam.fork.summary.HtmlConverters.toHtmlLogCatMessages; import static com.shazam.fork.summary.HtmlConverters.toHtmlSummary; import static org.apache.commons.io.FileUtils.writeStringToFile; public class HtmlSummaryPrinter implements SummaryPrinter { private static final String HTML_OUTPUT = "html"; private static final String STATIC = "static"; private static final String INDEX_FILENAME = "index.html"; private static final String[] STATIC_ASSETS = { "bootstrap-responsive.min.css", "bootstrap.min.css", "fork.css", "bootstrap.min.js", "ceiling_android.png", "ceiling_android-green.png", "ceiling_android-red.png", "ceiling_android-yellow.png", "device.png", "icon-devices.png", "icon-log.png", "jquery.min.js", "log.png" }; private final File htmlOutput; private final File staticOutput; private final LogCatRetriever retriever; private final HtmlGenerator htmlGenerator; public HtmlSummaryPrinter(File rootOutput, LogCatRetriever retriever, HtmlGenerator htmlGenerator) { this.retriever = retriever; this.htmlGenerator = htmlGenerator; htmlOutput = new File(rootOutput, HTML_OUTPUT); staticOutput = new File(htmlOutput, STATIC); } @SuppressWarnings("ResultOfMethodCallIgnored") @Override public void print(Summary summary) { htmlOutput.mkdirs(); copyAssets(); generateCssFromLess(); HtmlSummary htmlSummary = toHtmlSummary(summary); htmlGenerator.generateHtml("forkpages/index.html", htmlOutput, INDEX_FILENAME, htmlSummary); generatePoolHtml(htmlSummary); generatePoolTestsHtml(htmlSummary); } private void copyAssets() { for (String asset : STATIC_ASSETS) { copyResource("/static/", asset, staticOutput); } } private void generateCssFromLess() { try { LessCompiler compiler = new LessCompiler(); String less = Resources.toString(getClass().getResource("/spoon.less"), UTF_8); String css = compiler.compile(less); File cssFile = new File(staticOutput, "spoon.css"); writeStringToFile(cssFile, css); } catch (Exception e) { throw new RuntimeException(e); } } /** * Generates an HTML page for each pool, with multiple tests * * @param htmlSummary the summary of the pool */ @SuppressWarnings("ResultOfMethodCallIgnored") private void generatePoolHtml(HtmlSummary htmlSummary) { File poolsDir = new File(htmlOutput, "pools"); poolsDir.mkdirs(); for (HtmlPoolSummary pool : htmlSummary.pools) { String name = pool.plainPoolName + ".html"; htmlGenerator.generateHtml("forkpages/pool.html", poolsDir, name, pool); } } /** * Genarates an HTML page for each test of each pool. * * @param htmlSummary the summary containing the results */ @SuppressWarnings("ResultOfMethodCallIgnored") private void generatePoolTestsHtml(HtmlSummary htmlSummary) { for (HtmlPoolSummary pool : htmlSummary.pools) { File poolTestsDir = new File(htmlOutput, "pools/" + pool.plainPoolName); poolTestsDir.mkdirs(); for (HtmlTestResult testResult : pool.testResults) { String fileName = testResult.plainClassName + "__" + testResult.plainMethodName + ".html"; addLogcats(testResult, pool); htmlGenerator.generateHtml("forkpages/pooltest.html", poolTestsDir, fileName, testResult, pool); } } } private void addLogcats(HtmlTestResult testResult, HtmlPoolSummary pool) { TestIdentifier testIdentifier = new TestIdentifier(testResult.plainClassName, testResult.plainMethodName); List<LogCatMessage> logCatMessages = retriever.retrieveLogCat(pool.plainPoolName, testResult.deviceSafeSerial, testIdentifier); testResult.logcatMessages = transform(logCatMessages, toHtmlLogCatMessages()); } }