From c5b4475e4adf5f5168b6131df78970dc06d470a2 Mon Sep 17 00:00:00 2001 From: Szymon Świstun Date: Tue, 25 Feb 2020 17:22:51 +0100 Subject: output comparing --- plugins/base/src/test/kotlin/expect/ExpectTest.kt | 63 ++++ .../test/resources/expect/test/out/-search.html | 25 ++ .../expect/test/out/images/arrow_down.svg | 4 + .../resources/expect/test/out/images/logo-icon.svg | 3 + .../resources/expect/test/out/images/logo-text.svg | 10 + .../test/resources/expect/test/out/navigation.html | 14 + .../test/resources/expect/test/out/root/fn.html | 30 ++ .../test/resources/expect/test/out/root/index.html | 37 +++ .../expect/test/out/scripts/navigationLoader.js | 12 + .../resources/expect/test/out/scripts/pages.js | 5 + .../resources/expect/test/out/scripts/scripts.js | 11 + .../resources/expect/test/out/scripts/search.js | 6 + .../resources/expect/test/out/styles/style.css | 353 +++++++++++++++++++++ .../src/test/resources/expect/test/src/function.kt | 5 + 14 files changed, 578 insertions(+) create mode 100644 plugins/base/src/test/kotlin/expect/ExpectTest.kt create mode 100644 plugins/base/src/test/resources/expect/test/out/-search.html create mode 100644 plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg create mode 100644 plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg create mode 100644 plugins/base/src/test/resources/expect/test/out/images/logo-text.svg create mode 100644 plugins/base/src/test/resources/expect/test/out/navigation.html create mode 100644 plugins/base/src/test/resources/expect/test/out/root/fn.html create mode 100644 plugins/base/src/test/resources/expect/test/out/root/index.html create mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js create mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/pages.js create mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/scripts.js create mode 100644 plugins/base/src/test/resources/expect/test/out/scripts/search.js create mode 100644 plugins/base/src/test/resources/expect/test/out/styles/style.css create mode 100644 plugins/base/src/test/resources/expect/test/src/function.kt (limited to 'plugins/base/src') diff --git a/plugins/base/src/test/kotlin/expect/ExpectTest.kt b/plugins/base/src/test/kotlin/expect/ExpectTest.kt new file mode 100644 index 00000000..c014c65f --- /dev/null +++ b/plugins/base/src/test/kotlin/expect/ExpectTest.kt @@ -0,0 +1,63 @@ +package expect + +import org.jetbrains.dokka.utilities.DokkaConsoleLogger +import org.junit.Test +import testApi.testRunner.AbstractCoreTest +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import java.util.concurrent.TimeUnit + +class ExpectTest : AbstractCoreTest() { + + private fun generateOutput(path: Path): Path? { + val config = dokkaConfiguration { + passes { + pass { + sourceRoots = listOf(path.asString()) + } + } + } + + var result: Path? = null + testFromData(config, cleanupOutput = false) { + renderingStage = { _, context -> result = Paths.get(context.configuration.outputDir) } + } + return result + } + + private fun compareOutput(expected: Path, obtained: Path?, gitTimeout: Long = 500) { + obtained?.let { path -> + val gitCompare = ProcessBuilder( + "git", + "--no-pager", + "diff", + expected.asString(), + path.asString() + ).also { DokkaConsoleLogger.info("git diff command: ${it.command().joinToString(" ")}") } + .start() + + assert(gitCompare.waitFor(gitTimeout, TimeUnit.MILLISECONDS)) { "Git timed out after $gitTimeout" } + gitCompare.inputStream.bufferedReader().lines().forEach { DokkaConsoleLogger.info(it) } + gitCompare.errorStream.bufferedReader().lines().forEach { DokkaConsoleLogger.info(it) } + assert(gitCompare.exitValue() == 0) { "${path.fileName}: outputs don't match" } + } ?: throw AssertionError("obtained path is null") + } + + @Test + fun expectTest() { + val logger = DokkaConsoleLogger + val sources = Paths.get("src/test", "resources", "expect") + + Files.list(sources).forEach { p -> + val expectOut = p.resolve("out") + val testOut = generateOutput(p.resolve("src")) + .also { logger.info("Test out: ${it?.asString()}") } + + compareOutput(expectOut, testOut) + } + } + + fun Path.asString() = toAbsolutePath().normalize().toString() + +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/-search.html b/plugins/base/src/test/resources/expect/test/out/-search.html new file mode 100644 index 00000000..6f6af500 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/-search.html @@ -0,0 +1,25 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg b/plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg new file mode 100644 index 00000000..d6dedd64 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg @@ -0,0 +1,4 @@ + + + diff --git a/plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg b/plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg new file mode 100644 index 00000000..61606c7e --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/base/src/test/resources/expect/test/out/images/logo-text.svg b/plugins/base/src/test/resources/expect/test/out/images/logo-text.svg new file mode 100644 index 00000000..e98992a8 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/images/logo-text.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/plugins/base/src/test/resources/expect/test/out/navigation.html b/plugins/base/src/test/resources/expect/test/out/navigation.html new file mode 100644 index 00000000..b0f35878 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/navigation.html @@ -0,0 +1,14 @@ + + diff --git a/plugins/base/src/test/resources/expect/test/out/root/fn.html b/plugins/base/src/test/resources/expect/test/out/root/fn.html new file mode 100644 index 00000000..8b6a80c1 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/root/fn.html @@ -0,0 +1,30 @@ + + + fn + + + + + + +
//root//fn +

fn

+ fun fn() +

Description [jvm]

+ Function fn + +

Parameters

+ + + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/test/out/root/index.html b/plugins/base/src/test/resources/expect/test/out/root/index.html new file mode 100644 index 00000000..0c469a1d --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/root/index.html @@ -0,0 +1,37 @@ + + + + + + + + + +
//root/ +

Package

+

Types

+ + + +
+

Functions

+ + + + + + + + + +
fnfun fn()Function fn
+
+ + + diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js b/plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js new file mode 100644 index 00000000..c2117dd5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js @@ -0,0 +1,12 @@ +onload = () => { + fetch(pathToRoot + "navigation.html") + .then(response => response.text()) + .then(data => { + document.getElementById("sideMenu").innerHTML = data; + }).then(() => { + document.querySelectorAll(".overview > a").forEach(link => { + link.setAttribute("href", pathToRoot + link.getAttribute("href")) + console.log(link.attributes["href"]) + }) + }) +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/pages.js b/plugins/base/src/test/resources/expect/test/out/scripts/pages.js new file mode 100644 index 00000000..93315f40 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/scripts/pages.js @@ -0,0 +1,5 @@ +var pages = [ + {"name": "root", "location": "root/index.html"}, + {"name": "", "location": "root//index.html"}, + {"name": "fn", "location": "root//fn.html"} +] diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/scripts.js b/plugins/base/src/test/resources/expect/test/out/scripts/scripts.js new file mode 100644 index 00000000..8b84d525 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/scripts/scripts.js @@ -0,0 +1,11 @@ +document.getElementById("navigationFilter").oninput = function (e) { + var input = e.target.value; + var menuParts = document.getElementsByClassName("sideMenuPart") + for (let part of menuParts) { + if (part.querySelector("a").textContent.startsWith(input)) { + part.classList.remove("filtered"); + } else { + part.classList.add("filtered"); + } + } +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/scripts/search.js b/plugins/base/src/test/resources/expect/test/out/scripts/search.js new file mode 100644 index 00000000..22346f38 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/scripts/search.js @@ -0,0 +1,6 @@ +var query = new URLSearchParams(window.location.search).get("query"); +document.getElementById("searchTitle").innerHTML += '"' + query + '":'; +document.getElementById("searchTable").innerHTML = pages.filter(el => el.name.startsWith(query)).reduce((acc, element) => { + return acc + + '' + element.name + '' +}, ""); \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/test/out/styles/style.css b/plugins/base/src/test/resources/expect/test/out/styles/style.css new file mode 100644 index 00000000..9a44da89 --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/out/styles/style.css @@ -0,0 +1,353 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans:300i,400,700); + + +#content { + margin-top: 3em; + margin-left: 15em; +} + +#navigation { + position: relative +} + +#sideMenu, #searchBar { + position: absolute; +} + +#sideMenu { + width: 14em; + padding-left: 0.5em; +} + +#sideMenu .sideMenuPart { + margin-left: 1em; +} + +#sideMenu img { + margin: 1em 0.25em; +} + +#sideMenu hr { + background: #DADFE6; +} + +#searchBar { + width: 100%; + pointer-events: none; +} + +#searchForm { + float: right; + pointer-events: all; +} + +.sideMenuPart > .navButton { + margin-left: 0.25em +} + +.sideMenuPart > .overview .navButtonContent::after { + float: right; + content: url("../images/arrow_down.svg"); +} + +.sideMenuPart.hidden > .navButton .navButtonContent::after { + content: '\02192'; +} + +.sideMenuPart.hidden > .sideMenuPart { + display: none; +} + +.filtered > a, .filtered > .navButton { + display: none; +} + +body, table { + font: 14px/1.5 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif; + background: #F4F4F4; + font-weight: 300; + margin-left: auto; + margin-right: auto; + max-width: 1440px; +} + +table { + display: flex; + padding: 5px; +} + +td:first-child { + width: 20vw; +} + +.keyword { + color: black; + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + font-size: 12px; +} + +.symbol { + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + font-size: 12px; +} + +.identifier { + color: darkblue; + font-size: 12px; + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; +} + +h1, h2, h3, h4, h5, h6 { + color: #222; + margin: 0 0 20px; +} + +p, ul, ol, table, pre, dl { + margin: 0 0 20px; +} + +h1, h2, h3 { + line-height: 1.1; +} + +h1 { + font-size: 28px; +} + +h2 { + color: #393939; +} + +h3, h4, h5, h6 { + color: #494949; +} + +a { + color: #258aaf; + font-weight: 400; + text-decoration: none; +} + +a:hover { + color: inherit; + text-decoration: underline; +} + +a small { + font-size: 11px; + color: #555; + margin-top: -0.6em; + display: block; +} + +.wrapper { + width: 860px; + margin: 0 auto; +} + +blockquote { + border-left: 1px solid #e5e5e5; + margin: 0; + padding: 0 0 0 20px; + font-style: italic; +} + +code, pre { + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + color: #333; + font-size: 12px; +} + +pre { + display: block; + /* + padding:8px 8px; + background: #f8f8f8; + border-radius:5px; + border:1px solid #e5e5e5; + */ + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; +} + +th, td { + text-align: left; + vertical-align: top; + padding: 5px 10px; +} + +dt { + color: #444; + font-weight: 700; +} + +th { + color: #444; +} + +img { + max-width: 100%; +} + +header { + width: 270px; + float: left; + position: fixed; +} + +header ul { + list-style: none; + height: 40px; + + padding: 0; + + background: #eee; + background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #dddddd)); + background: -webkit-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -o-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -ms-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + + border-radius: 5px; + border: 1px solid #d2d2d2; + box-shadow: inset #fff 0 1px 0, inset rgba(0, 0, 0, 0.03) 0 -1px 0; + width: 270px; +} + +header li { + width: 89px; + float: left; + border-right: 1px solid #d2d2d2; + height: 40px; +} + +header ul a { + line-height: 1; + font-size: 11px; + color: #999; + display: block; + text-align: center; + padding-top: 6px; + height: 40px; +} + +strong { + color: #222; + font-weight: 700; +} + +header ul li + li { + width: 88px; + border-left: 1px solid #fff; +} + +header ul li + li + li { + border-right: none; + width: 89px; +} + +header ul a strong { + font-size: 14px; + display: block; + color: #222; +} + +section { + width: 500px; + float: right; + padding-bottom: 50px; +} + +small { + font-size: 11px; +} + +hr { + border: 0; + background: #e5e5e5; + height: 1px; + margin: 0 0 20px; +} + +footer { + width: 270px; + float: left; + position: fixed; + bottom: 50px; +} + +@media print, screen and (max-width: 960px) { + + div.wrapper { + width: auto; + margin: 0; + } + + header, section, footer { + float: none; + position: static; + width: auto; + } + + header { + padding-right: 320px; + } + + section { + border: 1px solid #e5e5e5; + border-width: 1px 0; + padding: 20px 0; + margin: 0 0 20px; + } + + header a small { + display: inline; + } + + header ul { + position: absolute; + right: 50px; + top: 52px; + } +} + +@media print, screen and (max-width: 720px) { + body { + word-wrap: break-word; + } + + header { + padding: 0; + } + + header ul, header p.view { + position: static; + } + + pre, code { + word-wrap: normal; + } +} + +@media print, screen and (max-width: 480px) { + body { + padding: 15px; + } + + header ul { + display: none; + } +} + +@media print { + body { + padding: 0.4in; + font-size: 12pt; + color: #444; + } +} diff --git a/plugins/base/src/test/resources/expect/test/src/function.kt b/plugins/base/src/test/resources/expect/test/src/function.kt new file mode 100644 index 00000000..3ed81dfa --- /dev/null +++ b/plugins/base/src/test/resources/expect/test/src/function.kt @@ -0,0 +1,5 @@ +/** + * Function fn + */ +fun fn() { +} \ No newline at end of file -- cgit