package mtree

import "testing"

func TestVis(t *testing.T) {
	testset := []struct {
		Src, Dest string
	}{
		{"[", "\\133"},
		{" ", "\\040"},
		{"	", "\\011"},
		{"dir with space", "dir\\040with\\040space"},
		{"consec   spaces", "consec\\040\\040\\040spaces"},
		{"trailingsymbol[", "trailingsymbol\\133"},
		{" [ leadingsymbols", "\\040\\133\\040leadingsymbols"},
		{"no_need_for_encoding", "no_need_for_encoding"},
	}

	for i := range testset {
		got, err := Vis(testset[i].Src)
		if err != nil {
			t.Errorf("working with %q: %s", testset[i].Src, err)
		}
		if got != testset[i].Dest {
			t.Errorf("expected %#v; got %#v", testset[i].Dest, got)
			continue
		}

		got, err = Unvis(got)
		if err != nil {
			t.Errorf("working with %q: %s", testset[i].Src, err)
			continue
		}
		if got != testset[i].Src {
			t.Errorf("expected %#v; got %#v", testset[i].Src, got)
			continue
		}
	}
}

// The resulting string of Vis output could potentially be four times longer than
// the original. Vis must handle this possibility.
func TestVisLength(t *testing.T) {
	testString := "All work and no play makes Jack a dull boy\n"
	for i := 0; i < 20; i++ {
		Vis(testString)
		testString = testString + testString
	}
}