package jpath

import (
	. "github.com/pelletier/go-toml"
	"testing"
)

func testFlow(t *testing.T, input string, expectedFlow []token) {
	_, ch := lex(input)
	for idx, expected := range expectedFlow {
		token := <-ch
		if token != expected {
			t.Log("While testing #", idx, ":", input)
			t.Log("compared", token, "to", expected)
			t.Log(token.val, "<->", expected.val)
			t.Log(token.typ, "<->", expected.typ)
			t.Log(token.Line, "<->", expected.Line)
			t.Log(token.Col, "<->", expected.Col)
			t.FailNow()
		}
	}

	tok, ok := <-ch
	if ok {
		t.Log("channel is not closed!")
		t.Log(len(ch)+1, "tokens remaining:")

		t.Log("token ->", tok)
		for token := range ch {
			t.Log("token ->", token)
		}
		t.FailNow()
	}
}

func TestLexSpecialChars(t *testing.T) {
	testFlow(t, "@.$[]..()?*", []token{
		token{Position{1, 1}, tokenAtCost, "@"},
		token{Position{1, 2}, tokenDot, "."},
		token{Position{1, 3}, tokenDollar, "$"},
		token{Position{1, 4}, tokenLBracket, "["},
		token{Position{1, 5}, tokenRBracket, "]"},
		token{Position{1, 6}, tokenDotDot, ".."},
		token{Position{1, 8}, tokenLParen, "("},
		token{Position{1, 9}, tokenRParen, ")"},
		token{Position{1, 10}, tokenQuestion, "?"},
		token{Position{1, 11}, tokenStar, "*"},
		token{Position{1, 12}, tokenEOF, ""},
	})
}

func TestLexString(t *testing.T) {
	testFlow(t, "'foo'", []token{
		token{Position{1, 2}, tokenString, "foo"},
		token{Position{1, 6}, tokenEOF, ""},
	})
}

func TestLexDoubleString(t *testing.T) {
	testFlow(t, `"bar"`, []token{
		token{Position{1, 2}, tokenString, "bar"},
		token{Position{1, 6}, tokenEOF, ""},
	})
}

func TestLexKey(t *testing.T) {
	testFlow(t, "foo", []token{
		token{Position{1, 1}, tokenKey, "foo"},
		token{Position{1, 4}, tokenEOF, ""},
	})
}

func TestLexRecurse(t *testing.T) {
	testFlow(t, "$..*", []token{
		token{Position{1, 1}, tokenDollar, "$"},
		token{Position{1, 2}, tokenDotDot, ".."},
		token{Position{1, 4}, tokenStar, "*"},
		token{Position{1, 5}, tokenEOF, ""},
	})
}

func TestLexBracketKey(t *testing.T) {
	testFlow(t, "$[foo]", []token{
		token{Position{1, 1}, tokenDollar, "$"},
		token{Position{1, 2}, tokenLBracket, "["},
		token{Position{1, 3}, tokenKey, "foo"},
		token{Position{1, 6}, tokenRBracket, "]"},
		token{Position{1, 7}, tokenEOF, ""},
	})
}

func TestLexSpace(t *testing.T) {
	testFlow(t, "foo bar baz", []token{
		token{Position{1, 1}, tokenKey, "foo"},
		token{Position{1, 5}, tokenKey, "bar"},
		token{Position{1, 9}, tokenKey, "baz"},
		token{Position{1, 12}, tokenEOF, ""},
	})
}
