aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/base/src/test/kotlin/expect/ExpectTest.kt63
-rw-r--r--plugins/base/src/test/resources/expect/test/out/-search.html25
-rw-r--r--plugins/base/src/test/resources/expect/test/out/images/arrow_down.svg4
-rw-r--r--plugins/base/src/test/resources/expect/test/out/images/logo-icon.svg3
-rw-r--r--plugins/base/src/test/resources/expect/test/out/images/logo-text.svg10
-rw-r--r--plugins/base/src/test/resources/expect/test/out/navigation.html14
-rw-r--r--plugins/base/src/test/resources/expect/test/out/root/fn.html30
-rw-r--r--plugins/base/src/test/resources/expect/test/out/root/index.html37
-rw-r--r--plugins/base/src/test/resources/expect/test/out/scripts/navigationLoader.js12
-rw-r--r--plugins/base/src/test/resources/expect/test/out/scripts/pages.js5
-rw-r--r--plugins/base/src/test/resources/expect/test/out/scripts/scripts.js11
-rw-r--r--plugins/base/src/test/resources/expect/test/out/scripts/search.js6
-rw-r--r--plugins/base/src/test/resources/expect/test/out/styles/style.css353
-rw-r--r--plugins/base/src/test/resources/expect/test/src/function.kt5
14 files changed, 578 insertions, 0 deletions
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 @@
+<html>
+<head>
+ <title>Search</title>
+ <link href="styles/style.css" rel="Stylesheet">
+ <script type="text/javascript" src="scripts/pages.js" async="async"></script>
+ <script>var pathToRoot = "";</script>
+</head>
+<body>
+<div id="navigation">
+ <div id="searchBar">
+ <form action="-search.html" method="get" id="searchForm"><input type="search" name="query"><input type="submit"
+ value="Search">
+ </form>
+ </div>
+ <div id="sideMenu"></div>
+</div>
+<div id="content">
+ <h1 id="searchTitle">Search results for </h1>
+ <table>
+ <tbody id="searchTable"></tbody>
+ </table>
+</div>
+</body>
+</html>
+
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 @@
+<svg width="10" height="7" viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M9.71824 1.66658L9.01113 0.959473L5.00497 4.96447L1.00008 0.959473L0.292969 1.66658L5.01113 6.38474L9.71824 1.66658Z"
+ fill="#A1AAB4"/>
+</svg>
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 @@
+<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M26 26H0V0H26L12.9243 12.9747L26 26Z" fill="#F8873C"/>
+</svg>
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 @@
+<svg width="83" height="27" viewBox="0 0 83 27" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M47.1611 7.6297V25.6345V25.6867H61.8428V21.8039H51.3589V10.3852H61.8428V6.50244H47.1611V7.6297Z"
+ fill="#27282C"/>
+ <path d="M82.9891 21.8039L72.778 10.3852H82.9051V6.50244H67.0586V10.3852L77.4585 21.8039H67.0586V25.6867H82.9996V21.8039H82.9891Z"
+ fill="#27282C"/>
+ <path d="M16.2978 7.76556C14.5872 6.46086 12.4463 5.67804 10.1271 5.67804C4.53357 5.67804 0 10.1871 0 15.7503C0 21.3135 4.53357 25.8226 10.1271 25.8226C12.4463 25.8226 14.5872 25.0502 16.2978 23.735V25.7182H20.4955V0H16.2978V7.76556ZM10.1271 21.8041C6.75838 21.8041 4.02984 19.0903 4.02984 15.7399C4.02984 12.3894 6.75838 9.67563 10.1271 9.67563C13.4958 9.67563 16.2243 12.3894 16.2243 15.7399C16.2138 19.0903 13.4853 21.8041 10.1271 21.8041Z"
+ fill="#27282C"/>
+ <path d="M33.9703 5.86566C28.3768 5.86566 23.8433 10.3747 23.8433 15.9379C23.8433 21.5011 28.3768 26.0102 33.9703 26.0102C39.5638 26.0102 44.0974 21.5011 44.0974 15.9379C44.0974 10.3747 39.5638 5.86566 33.9703 5.86566ZM33.9703 21.9917C30.6016 21.9917 27.8731 19.2779 27.8731 15.9275C27.8731 12.577 30.6016 9.86325 33.9703 9.86325C37.339 9.86325 40.0676 12.577 40.0676 15.9275C40.0676 19.2779 37.339 21.9917 33.9703 21.9917Z"
+ fill="#27282C"/>
+</svg>
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 @@
+<div class="sideMenuPart" id="nav-submenu">
+ <div class="overview"><a href="root/index.html">root</a><span class="navButton"
+ onclick="document.getElementById(&quot;nav-submenu&quot;).classList.toggle(&quot;hidden&quot;);"><span
+ class="navButtonContent"></span></span></div>
+ <div class="sideMenuPart" id="nav-submenu-0">
+ <div class="overview"><a href="root//index.html"></a><span class="navButton"
+ onclick="document.getElementById(&quot;nav-submenu-0&quot;).classList.toggle(&quot;hidden&quot;);"><span
+ class="navButtonContent"></span></span></div>
+ <div class="sideMenuPart" id="nav-submenu-0-0">
+ <div class="overview"><a href="root//fn.html">fn</a></div>
+ </div>
+ </div>
+</div>
+
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 @@
+<html>
+<head>
+ <title>fn</title>
+ <link href="../../styles/style.css" rel="Stylesheet">
+ <script type="text/javascript" src="../../scripts/navigationLoader.js" async="async"></script>
+ <script>var pathToRoot = "../../";</script>
+</head>
+<body>
+<div id="navigation">
+ <div id="searchBar">
+ <form action="../../-search.html" method="get" id="searchForm"><input type="search" name="query"><input
+ type="submit" value="Search"></form>
+ </div>
+ <div id="sideMenu"></div>
+</div>
+<div id="content">//<a href="../index.html">root</a>/<a href="index.html"></a>/<a href="fn.html">fn</a>
+ <h1>fn</h1>
+ fun <a href="fn.html">fn</a>()
+ <h3>Description [jvm]</h3>
+ Function fn
+
+ <h2>Parameters</h2>
+ <table>
+ <thead></thead>
+ <tbody></tbody>
+ </table>
+</div>
+</body>
+</html>
+
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 @@
+<html>
+<head>
+ <title></title>
+ <link href="../../styles/style.css" rel="Stylesheet">
+ <script type="text/javascript" src="../../scripts/navigationLoader.js" async="async"></script>
+ <script>var pathToRoot = "../../";</script>
+</head>
+<body>
+<div id="navigation">
+ <div id="searchBar">
+ <form action="../../-search.html" method="get" id="searchForm"><input type="search" name="query"><input
+ type="submit" value="Search"></form>
+ </div>
+ <div id="sideMenu"></div>
+</div>
+<div id="content">//<a href="../index.html">root</a>/<a href="index.html"></a>
+ <h1>Package </h1>
+ <h2>Types</h2>
+ <table>
+ <thead></thead>
+ <tbody></tbody>
+ </table>
+ <h2>Functions</h2>
+ <table>
+ <thead></thead>
+ <tbody>
+ <tr>
+ <td><a href="fn.html">fn</a></td>
+ <td>fun <a href="fn.html">fn</a>()</td>
+ <td>Function fn</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+</body>
+</html>
+
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 +
+ '<tr><td><a href="' + element.location + '">' + element.name + '</a></td></tr>'
+}, ""); \ 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