All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.specs2.reporter.MarkupExporting.scala Maven / Gradle / Ivy

The newest version!
package org.specs2
package reporter

import main.{Diffs, Arguments}
import specification._
import scala.xml.{Elem, Xhtml, NodeSeq}
import text.MarkupString
import execute.{Details, ResultStackTrace, Result}
import control.StackTraceFilter
import java.io.Writer

/**
 * Trait for exporting the specification as Markup files. It reuses most of the classes for writing html files but skips
 * the markup conversion for text
 */
trait MarkupExporting extends HtmlExporting {

  override def writeFiles(implicit args: Arguments = Arguments()) = (htmlFiles: Seq[HtmlFile]) => {
    htmlFiles.filter(_.nonEmpty).foreach(writeFile)
  }

  /** write the xml output to a Writer */
  override protected def writeXml(xml: NodeSeq)(out: Writer) {
    out.write(xml.text)
  }

  /** @return the file path for the markdown output */
  override def reportPath(url: String) = outputDir + url.replace(".html", markupExtension)

  /** markdown and .md is the default output format */
  def markupExtension = ".md"

  /** @return a new ReportOutput object creating markup elements */
  override def output: HtmlReportOutput = new MarkupResultOutput
}
object MarkupExporting extends MarkupExporting

/**
 * Implementation of a ReportOutput where most of the work is delegated to the HtmlResultOutput but where
 * the layout of html elements (html, body, head,...) is skipped
 * @param output
 */
private[specs2]
case class MarkupResultOutput(
  output: HtmlReportOutput = HtmlResultOutput(textPrinter = (t: String) => scala.xml.Text(t))) extends HtmlReportOutput {

  def xml: NodeSeq                                                                              = output.xml
  def print(xml: NodeSeq): MarkupResultOutput                                                   = MarkupResultOutput(output.print(xml))
  def print(xml: Elem)   : MarkupResultOutput                                                   = MarkupResultOutput(output.print(xml))
  def filePathIs(path: String)                                                                  = MarkupResultOutput(output.filePathIs(path))
  def printHtml(n: =>NodeSeq)                                                                   = print(n.map(_.text).mkString("\n"))
  def printBody(n: =>NodeSeq)                                                                   = print(n.map(_.text).mkString("\n"))
  def printHead                                                                                 = MarkupResultOutput(output)
  def printBr                                                                                   = println()
  def printPar(text: String = "")                                                               = println("\n"+text)
  def printText(text: String = "", level: Int = 0)                                              = MarkupResultOutput(output.printText(text, level))
  def printTextPar(text: String = "", level: Int = 0)                                           = print("\n").printText(text, level).print("\n")
  def printSpecStart(name: SpecName, stats: Stats)                                              = println("## "+name.title)
  def printIssueWithIcon(message: MarkupString, iconName: String, level: Int = 0)               = MarkupResultOutput(output.printIssueWithIcon(message, iconName, level))
  def printTextWithIcon(message: MarkupString, iconName: String, level: Int = 0)                = MarkupResultOutput(output.printTextWithIcon(message, iconName, level))
  def printOkXmlWithIcon(xml: NodeSeq, iconName: String, level: Int = 0)                        = MarkupResultOutput(output.printOkXmlWithIcon(xml, iconName, level))
  def printKoXmlWithIcon(xml: NodeSeq, iconName: String, level: Int = 0)                        = MarkupResultOutput(output.printKoXmlWithIcon(xml, iconName, level))
  def printExceptionMessage(e: Result with ResultStackTrace, level: Int)                        = MarkupResultOutput(output.printExceptionMessage(e, level))
  def printCollapsibleExceptionMessage(e: Result with ResultStackTrace, level: Int)             = MarkupResultOutput(output.printCollapsibleExceptionMessage(e, level))
  def printDetailedFailure(details: Details, level: Int, diffs: Diffs)                          = MarkupResultOutput(output.printDetailedFailure(details, level, diffs))
  def printStack(e: ResultStackTrace, level: Int, traceFilter: StackTraceFilter)                = MarkupResultOutput(output.printStack(e, level, traceFilter))
  def printForm(form: NodeSeq)                                                                  = MarkupResultOutput(output.printForm(form))
  def printStats(name: SpecName, stats: Stats)                                                  = MarkupResultOutput(output.printStats(name, stats))
  def printLink(link: HtmlLink)                                                                 = MarkupResultOutput(output.printLink(link))
  def printLink(link: HtmlLink, level: Int, stats: Stats = Stats(), hidden: Boolean = false)    = {
    if (hidden) this
    else print(" * ").println(HtmlResultOutput().printLink(link).xml.toString)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy