package com.github.shyiko.ktlint.reporter.json

import com.github.shyiko.ktlint.core.LintError
import org.assertj.core.api.Assertions
import org.testng.annotations.Test
import java.io.ByteArrayOutputStream
import java.io.PrintStream

class JsonReporterTest {

    @Test
    fun testReportGeneration() {
        val out = ByteArrayOutputStream()
        val reporter = JsonReporter(PrintStream(out, true))
        reporter.onLintError("/one-fixed-and-one-not.kt", LintError(1, 1, "rule-1",
            "<\"&'>"), false)
        reporter.onLintError("/one-fixed-and-one-not.kt", LintError(2, 1, "rule-2",
            "And if you see my friend"), true)

        reporter.onLintError("/two-not-fixed.kt", LintError(1, 10, "rule-1",
            "I thought I would again"), false)
        reporter.onLintError("/two-not-fixed.kt", LintError(2, 20, "rule-2",
            "A single thin straight line"), false)

        reporter.onLintError("/all-corrected.kt", LintError(1, 1, "rule-1",
            "I thought we had more time"), true)
        reporter.afterAll()
        Assertions.assertThat(String(out.toByteArray())).isEqualTo(
            """
[
	{
		"file": "/one-fixed-and-one-not.kt",
		"errors": [
			{
				"line": 1,
				"column": 1,
				"message": "<\"&'>",
				"rule": "rule-1"
			}
		]
	},
	{
		"file": "/two-not-fixed.kt",
		"errors": [
			{
				"line": 1,
				"column": 10,
				"message": "I thought I would again",
				"rule": "rule-1"
			},
			{
				"line": 2,
				"column": 20,
				"message": "A single thin straight line",
				"rule": "rule-2"
			}
		]
	}
]
""".trimStart()
        )
    }
}
