package media

import (
	"fmt"
	"image"
	"testing"
)

// TestThumbSizeStrings tests parsing various size strings, which doesn't include
// scaling zeros, but does use the actual image size to infer single-dimension
// strings
func TestThumbSizeStrings(t *testing.T) {
	type testcase struct {
		input      string
		actualSize image.Rectangle
		expect     image.Rectangle
	}

	i50x100 := image.Rect(0, 0, 50, 100)
	i100x100 := image.Rect(0, 0, 100, 100)

	var cases = []testcase{
		{"100x100", i100x100, image.Rect(0, 0, 100, 100)},
		{"x100", i100x100, image.Rect(0, 0, 0, 100)},
		{"100x", i100x100, image.Rect(0, 0, 100, 0)},
		{"100", i100x100, image.Rect(0, 0, 100, 0)},

		{"100x100", i50x100, image.Rect(0, 0, 100, 100)},
		{"x100", i50x100, image.Rect(0, 0, 0, 100)},
		{"100x", i50x100, image.Rect(0, 0, 100, 0)},
		{"100", i50x100, image.Rect(0, 0, 0, 100)},
	}

	for _, c := range cases {
		t.Run(fmt.Sprint(c.input, "=>", c.actualSize), func(t *testing.T) {
			got, err := ParseSizeString(c.input, image.Rect(0, 0, 100, 100))
			if err != nil {
				t.Errorf("error parsing size string: %v", err)
				return
			}

			if !got.Eq(c.expect) {
				t.Errorf("expected %v, got %v", c.expect, got)
				return
			}

		})
	}
}
