package yqlib

import (
	"testing"
)

var mapOperatorScenarios = []expressionScenario{
	{
		skipDoc:    true,
		document:   `[1,2,3]`,
		document2:  `[5,6,7]`,
		expression: `map(. + 1)`,
		expected: []string{
			"D0, P[], (!!seq)::[2, 3, 4]\n",
			"D0, P[], (!!seq)::[6, 7, 8]\n",
		},
	},
	{
		skipDoc:    true,
		document:   `[1,2]`,
		expression: `map(. + 1)[]`,
		expected: []string{
			"D0, P[0], (!!int)::2\n",
			"D0, P[1], (!!int)::3\n",
		},
	},
	{
		description: "Map array",
		document:    `[1,2,3]`,
		expression:  `map(. + 1)`,
		expected: []string{
			"D0, P[], (!!seq)::[2, 3, 4]\n",
		},
	},
	{
		skipDoc:    true,
		document:   `{a: 1, b: 2, c: 3}`,
		document2:  `{x: 10, y: 20, z: 30}`,
		expression: `map_values(. + 1)`,
		expected: []string{
			"D0, P[], (!!map)::{a: 2, b: 3, c: 4}\n",
			"D0, P[], (!!map)::{x: 11, y: 21, z: 31}\n",
		},
	},
	{
		description: "map values splat",
		skipDoc:     true,
		document:    `{a: 1, b: 2}`,
		expression:  `map_values(. + 1)[]`,
		expected: []string{
			"D0, P[a], (!!int)::2\n",
			"D0, P[b], (!!int)::3\n",
		},
	},
	{
		description: "Map object values",
		document:    `{a: 1, b: 2, c: 3}`,
		expression:  `map_values(. + 1)`,
		expected: []string{
			"D0, P[], (!!map)::{a: 2, b: 3, c: 4}\n",
		},
	},
}

func TestMapOperatorScenarios(t *testing.T) {
	for _, tt := range mapOperatorScenarios {
		testScenario(t, &tt)
	}
	documentOperatorScenarios(t, "map", mapOperatorScenarios)
}
