Refactor and add tests for checkstyle comments on changed lines

This is in prevision to reporting checkstyle warnings and errors around
changed lines.

Change-Id: I0c15a4e6e15886967162d19e9619a72c22304078
diff --git a/lint/lint.go b/lint/lint.go
index 5ad9a7a..218c378 100644
--- a/lint/lint.go
+++ b/lint/lint.go
@@ -139,15 +139,19 @@
 		if err != nil {
 			return err
 		}
-		for _, err := range file.Errors {
-			if blameable[err.Line] {
-				l.comment(file.Name, err.Line, err.Severity, err.Message)
-			}
-		}
+		l.addCheckStyleComments(file, blameable)
 	}
 	return nil
 }
 
+func (l *linter) addCheckStyleComments(file checkstyle.File, blameable map[int]bool) {
+	for _, err := range file.Errors {
+		if blameable[err.Line] {
+			l.comment(file.Name, err.Line, err.Severity, err.Message)
+		}
+	}
+}
+
 var fixesIssueRegexp = regexp.MustCompile("(?i)^fixes issue [0-9]{3,}[.]?$")
 var issueRegexp = regexp.MustCompile("(?i)issue [0-9]{3,}")
 var footerRegexp = regexp.MustCompile("^[A-Za-z0-9-]+:")
diff --git a/lint/lint_test.go b/lint/lint_test.go
index 76f0dce..ce25a69 100644
--- a/lint/lint_test.go
+++ b/lint/lint_test.go
@@ -21,6 +21,7 @@
 	"strings"
 	"testing"
 
+	"gwt.googlesource.com/buildglue.git/checkstyle"
 	"gwt.googlesource.com/buildglue.git/gerrit"
 )
 
@@ -30,6 +31,53 @@
 	}
 }
 
+func TestAddCheckStyleComments(t *testing.T) {
+	type testcase struct {
+		errors    []checkstyle.Error
+		blameable []int
+		comments  []gerrit.Comment
+	}
+	tests := []testcase{
+		{
+			errors: []checkstyle.Error{
+				checkstyle.Error{
+					Line:     2,
+					Severity: "warning",
+					Message:  "Warning on line 2",
+				},
+			},
+			blameable: []int{1, 2, 3},
+			comments: []gerrit.Comment{
+				gerrit.Comment{
+					Line:    2,
+					Message: "[warning] Warning on line 2",
+				},
+			},
+		},
+		{
+			errors: []checkstyle.Error{
+				checkstyle.Error{
+					Line:     10,
+					Severity: "error",
+					Message:  "Error far from changed lines",
+				},
+			},
+			blameable: []int{1, 2, 3},
+		},
+	}
+
+	for _, test := range tests {
+		blameableLines := make(map[int]bool)
+		for _, l := range test.blameable {
+			blameableLines[l] = true
+		}
+
+		linter := newLinter("fakeref")
+		linter.addCheckStyleComments(checkstyle.File{Name: "fakefile", Errors: test.errors}, blameableLines)
+		checkEqual(t, test.comments, linter.comments["fakefile"])
+	}
+}
+
 func TestCheckMessage(t *testing.T) {
 	type testcase struct {
 		message  []string