/*
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:    1,
					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:    2,
					Message: "[warning] Subject line and body should be separated by a blank line.",
				},
			},
		},
		{
			message: []string{
				"Subject line",
				"",
				"Fixes issue 3171",
				"",
				"Change-Id: blah2",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    3,
					Message: "[warning] Please use 'Bug: issue NNNN' and place it just above the Change-Id line.",
				},
			},
		},
		{
			message: []string{
				"ISSUE 712 - change some stuff",
				"",
				"Change-Id: blah2",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    1,
					Message: "[warning] Please use 'Bug: issue NNNN' and place it just above the Change-Id line.",
				},
			},
		},
		{
			message: []string{
				"Subject line",
				"",
				"bug: issue 88",
				"Change-Id: blah2",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    3,
					Message: "[warning] Footer fields should be in Title-Case.",
				},
			},
		},
		{
			message: []string{
				"Topic: Subject line looking like footer line",
				"",
				"Change-Id: blah",
			},
			// No warnings
		},
		{
			message: []string{
				"Subject line",
				"",
				"Message body",
				"Change-Id: blah",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    3,
					Message: "[warning] Footer lines should be separated from message body by a blank line.",
				},
			},
		},
		{
			message: []string{
				"Subject line",
				"",
				"Bug: issue 8403",
				"",
				"Change-Id: blah",
			},
			warnings: []gerrit.Comment{
				gerrit.Comment{
					Line:    3,
					Message: "[warning] Footer lines should form a single paragraph (i.e. must not be separated by blank lines.)",
				},
			},
		},
	}

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