// Copyright 2020 the Pinniped contributors. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package here

import (
	"testing"

	"github.com/sclevine/spec"
	"github.com/sclevine/spec/report"
	"github.com/stretchr/testify/require"
)

func TestDoc(t *testing.T) {
	spec.Run(t, "here.Doc", func(t *testing.T, when spec.G, it spec.S) {
		var r *require.Assertions

		it.Before(func() {
			r = require.New(t)
		})

		it("returns single-line strings unchanged", func() {
			r.Equal("the quick brown fox", Doc("the quick brown fox"))
			r.Equal("  the quick brown fox", Doc("  the quick brown fox"))
		})

		it("returns multi-line strings with indentation removed", func() {
			r.Equal(
				"the quick brown fox\njumped over the\nlazy dog",
				Doc(`the quick brown fox
						jumped over the
						lazy dog`),
			)
		})

		it("ignores the first empty line and the whitespace in the last line", func() {
			r.Equal(
				"the quick brown fox\njumped over the\nlazy dog\n",
				Doc(`
						the quick brown fox
						jumped over the
						lazy dog
				`),
			)
		})

		it("turns all tabs into 4 spaces", func() {
			r.Equal(
				"the quick brown fox\n    jumped over the\n        lazy dog\n",
				Doc(`
						the quick brown fox
							jumped over the
								lazy dog
				`),
			)
		})
	}, spec.Parallel(), spec.Report(report.Terminal{}))

	spec.Run(t, "here.Docf", func(t *testing.T, when spec.G, it spec.S) {
		var r *require.Assertions

		it.Before(func() {
			r = require.New(t)
		})

		it("returns single-line strings unchanged", func() {
			r.Equal("the quick brown fox", Docf("the quick brown %s", "fox"))
			r.Equal("  the quick brown fox", Docf("  the %s brown %s", "quick", "fox"))
		})

		it("returns multi-line strings with indentation removed", func() {
			r.Equal(
				"the quick brown fox\njumped over the\nlazy dog",
				Docf(`the quick brown %s
						jumped over the
						lazy %s`, "fox", "dog"),
			)
		})

		it("ignores the first empty line and the whitespace in the last line", func() {
			r.Equal(
				"the quick brown fox\njumped over the\nlazy dog\n",
				Docf(`
						the quick brown %s
						jumped over the
						lazy %s
				`, "fox", "dog"),
			)
		})

		it("turns all tabs into 4 spaces", func() {
			r.Equal(
				"the quick brown fox\n    jumped over the\n        lazy dog\n",
				Docf(`
						the quick brown %s
							jumped over the
								lazy %s
				`, "fox", "dog"),
			)
		})
	}, spec.Parallel(), spec.Report(report.Terminal{}))
}