package pimport

import (
	"context"
	"fmt"
	"testing"

	"github.com/pingcap/errcode"
	"github.com/pingcap/errors"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestPrettyMessage(t *testing.T) {
	var msg = ` one
two
github.com/pingcap/tidb-lightning/lightning/mydump.(*mdLoaderSetup).setup
        /go/src/github.com/pingcap/tidb-lightning/lightning/mydum
`

	get := PrettyMessage(msg)
	assert.Equal(t, "one\ntwo", get)
}

func TestWrapErr(t *testing.T) {
	serverErrMSG := "server error"

	type test struct {
		input error
		msg   string
	}

	tests := []test{
		{
			input: errcode.NewInvalidInputErr(fmt.Errorf("bad request")),
			msg:   "bad request",
		},
		{
			input: errors.New("what ever"),
			msg:   serverErrMSG,
		},
	}

	for _, tc := range tests {
		err := wrapErr(tc.input, serverErrMSG)
		require.Equal(t, tc.msg, err.Error())
	}
}

func TestRestoreSpecialChars(t *testing.T) {
	var cases = map[string]string{
		`\b`:     "\b",
		`\t`:     "\t",
		`\n`:     "\n",
		`\f`:     "\f",
		`\r`:     "\r",
		`\"`:     "\"",
		`\\`:     "\\",
		`\a`:     "",
		`\u0000`: "\u0000",
		`\u0001`: "\u0001",
		`hahah`:  "hahah",
	}

	ctx := context.Background()
	for k, v := range cases {
		assert.Equal(t, v, restoreSpecialChars(ctx, k))
	}
}
