/*
Copyright 2013 Google Inc. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package lint

import (
	"fmt"
	"strings"
	"testing"

	"gwt.googlesource.com/buildglue.git/gerrit"
)

func checkEqual(t *testing.T, expect, actual interface{}) {
	if fmt.Sprintf("%#v", expect) != fmt.Sprintf("%#v", actual) {
		t.Errorf("expect %#v, actual %#v", expect, actual)
	}
}

func TestCheckMessage(t *testing.T) {
	type testcase struct {
		message  []string
		warnings []gerrit.Comment
	}
	tests := []testcase{
		{
			message: []string{
				strings.Repeat("x", 60),
				"",
				"Change-Id: blah",
			},
			// No warnings
		},
		{
			message: []string{
				strings.Repeat("x", 90),
				"",
				"Change-Id: blah2",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    7,
					Message: "[warning] Commit message lines should be 72 characters or fewer.",
				},
			},
		},
		{
			message: []string{
				"Subject line",
				"No blank line",
				"",
				"Change-Id: blah2",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    8,
					Message: "[warning] Subject line and body should be separated by a blank line.",
				},
			},
		},
	}

	for _, test := range tests {
		linter := newLinter("fakeref")
		linter.checkMessage(test.message)
		checkEqual(t, test.warnings, linter.comments["/COMMIT_MSG"])
	}
}
