package chroma

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestInclude(t *testing.T) {
	include := Include("other")
	actual := CompiledRules{
		"root": {
			CompiledRule{Rule: include},
		},
		"other": {
			CompiledRule{Rule: Rule{
				Pattern: "//.+",
				Type:    Comment,
			}},
			CompiledRule{Rule: Rule{
				Pattern: `"[^"]*"`,
				Type:    String,
			}},
		},
	}
	state := &LexerState{
		State: "root",
		Rules: actual,
	}
	err := include.Mutator.Mutate(state)
	require.NoError(t, err)
	expected := CompiledRules{
		"root": {
			CompiledRule{Rule: Rule{
				Pattern: "//.+",
				Type:    Comment,
			}},
			CompiledRule{Rule: Rule{
				Pattern: `"[^"]*"`,
				Type:    String,
			}},
		},
		"other": {
			CompiledRule{Rule: Rule{
				Pattern: "//.+",
				Type:    Comment,
			}},
			CompiledRule{Rule: Rule{
				Pattern: `"[^"]*"`,
				Type:    String,
			}},
		},
	}
	require.Equal(t, expected, actual)
}