package ini

import (
	"reflect"
	"testing"
)

func TestTrimSpaces(t *testing.T) {
	cases := []struct {
		name         string
		node         AST
		expectedNode AST
	}{
		{
			name: "simple case",
			node: AST{
				Root: Token{
					raw: []rune("foo"),
				},
			},
			expectedNode: AST{
				Root: Token{
					raw: []rune("foo"),
				},
			},
		},
		{
			name: "LHS case",
			node: AST{
				Root: Token{
					raw: []rune("         foo"),
				},
			},
			expectedNode: AST{
				Root: Token{
					raw: []rune("foo"),
				},
			},
		},
		{
			name: "RHS case",
			node: AST{
				Root: Token{
					raw: []rune("foo     "),
				},
			},
			expectedNode: AST{
				Root: Token{
					raw: []rune("foo"),
				},
			},
		},
		{
			name: "both sides case",
			node: AST{
				Root: Token{
					raw: []rune(" foo "),
				},
			},
			expectedNode: AST{
				Root: Token{
					raw: []rune("foo"),
				},
			},
		},
	}

	for _, c := range cases {
		node := trimSpaces(c.node)

		if e, a := c.expectedNode, node; !reflect.DeepEqual(e, a) {
			t.Errorf("%s: expected %v, but received %v", c.name, e, a)
		}
	}
}