package org.jetbrains.dokka.tests

import org.junit.Test
import org.jetbrains.dokka
import org.jetbrains.dokka.toTestString
import org.jetbrains.dokka.parseMarkdown
import org.junit.Ignore

Ignore public class ParserTest {
    fun runTestFor(text : String) {
        println("MD: ---")
        println(text)
        val markdownTree = parseMarkdown(text)
        println("AST: ---")
        println(markdownTree.toTestString())
        println()
    }

    Test fun text() {
        runTestFor("text")
    }

    Test fun textWithSpaces() {
        runTestFor("text and string")
    }

    Test fun textWithColon() {
        runTestFor("text and string: cool!")
    }

    Test fun link() {
        runTestFor("text [links]")
    }

    Test fun linkWithHref() {
        runTestFor("text [links](http://google.com)")
    }

    Test fun multiline() {
        runTestFor(
                """
text
and
string
""")
    }

    Test fun para() {
        runTestFor(
                """
paragraph number
one

paragraph
number two
""")
    }

    Test fun bulletList() {
        runTestFor(
                """* list item 1
* list item 2
""")
    }

    Test fun bulletListWithLines() {
        runTestFor(
                """
* list item 1
  continue 1
* list item 2
  continue 2
 """)
    }

    Test fun bulletListStrong() {
        runTestFor(
                """
* list *item* 1
  continue 1
* list *item* 2
  continue 2
 """)
    }

    Test fun emph() {
        runTestFor("*text*")
    }

    Test fun directive() {
        runTestFor("A text \${code with.another.value} with directive")
    }

    Test fun emphAndEmptySection() {
        runTestFor("*text*\n\$sec:\n")
    }

    Test fun emphAndSection() {
        runTestFor("*text*\n\$sec: some text\n")
    }

    Test fun emphAndBracedSection() {
        runTestFor("Text *bold* text \n\${sec}: some text")
    }

    Test fun section() {
        runTestFor(
                "Plain text \n\$one: Summary \n\${two}: Description with *emphasis* \n\${An example of a section}: Example")
    }

    Test fun anonymousSection() {
        runTestFor("Summary\n\nDescription\n")
    }

    Test fun specialSection() {
        runTestFor(
                "Plain text \n\$\$summary: Summary \n\${\$description}: Description \n\${\$An example of a section}: Example")
    }

    Test fun emptySection() {
        runTestFor(
                "Plain text \n\$summary:")
    }

    val b = "$"
    Test fun pair() {
        runTestFor(
                """Represents a generic pair of two values.

There is no meaning attached to values in this class, it can be used for any purpose.
Pair exhibits value semantics, i.e. two pairs are equal if both components are equal.

An example of decomposing it into values:
${b}{code test.tuples.PairTest.pairMultiAssignment}

${b}constructor: Creates new instance of [Pair]
${b}first: First value
${b}second: Second value""""
                  )
    }

}