package util

import "testing"

// TestToCamelCase tests whether ToCamelCase correctly converts camelCase-ish strings to camelCase.
func TestToCamelCase(t *testing.T) {
	tests := []struct {
		name           string
		input          string
		expectedResult string
	}{
		{
			name:           "single word that's already in camelCase",
			input:          "abc",
			expectedResult: "abc",
		},
		{
			name:           "single word in PascalCase",
			input:          "Abc",
			expectedResult: "abc",
		},
		{
			name:           "single word in all caps",
			input:          "ABC",
			expectedResult: "abc",
		},
		{
			name:           "multiple words that are already in camelCase",
			input:          "aaaBbbCcc",
			expectedResult: "aaaBbbCcc",
		},
		{
			name:           "multiple words in PascalCase",
			input:          "AaaBbbCcc",
			expectedResult: "aaaBbbCcc",
		},
		{
			name:           "acronym in start position",
			input:          "AAABbbCcc",
			expectedResult: "aaaBbbCcc",
		},
		{
			name:           "acronym in middle position",
			input:          "aaaBBBCcc",
			expectedResult: "aaaBbbCcc",
		},
		{
			name:           "acronym in end position",
			input:          "aaaBbbCCC",
			expectedResult: "aaaBbbCcc",
		},
	}

	for _, test := range tests {
		result := ToCamelCase(test.input)
		if result != test.expectedResult {
			t.Errorf("ToCamelCase for test \"%s\" returned an unexpected result. "+
				"Expected: \"%s\", got: \"%s\"", test.name, test.expectedResult, result)
		}
	}
}