Skip to content

Commit 484fee6

Browse files
authored
Merge pull request #89 from arduino/per1234/improve-check-output
Improve handling of check output
2 parents 6caf4c6 + e8ff10d commit 484fee6

File tree

5 files changed

+43
-30
lines changed

5 files changed

+43
-30
lines changed

Diff for: check/checkconfigurations/checkconfigurations_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func TestConfigurationResolution(t *testing.T) {
3232
enabled, err := check.IsEnabled(checkConfiguration, map[checkmode.Type]bool{checkMode: true})
3333
assert.Nil(t, err, fmt.Sprintf("Enable configuration of check %s doesn't resolve for check mode %s", checkConfiguration.ID, checkMode))
3434
if err == nil && enabled {
35-
_, err := checklevel.CheckLevelForCheckModes(checkConfiguration, map[checkmode.Type]bool{checkMode: true})
35+
_, err := checklevel.FailCheckLevel(checkConfiguration, map[checkmode.Type]bool{checkMode: true})
3636
assert.Nil(t, err, fmt.Sprintf("Level configuration of check %s doesn't resolve for check mode %s", checkConfiguration.ID, checkMode))
3737
}
3838
}

Diff for: check/checklevel/checklevel.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121

2222
"github.com/arduino/arduino-check/check/checkconfigurations"
23+
"github.com/arduino/arduino-check/check/checkresult"
2324
"github.com/arduino/arduino-check/configuration"
2425
"github.com/arduino/arduino-check/configuration/checkmode"
2526
)
@@ -36,13 +37,17 @@ const (
3637
Notice // notice
3738
)
3839

39-
// CheckLevel determines the check level assigned to failure of the given check under the current tool configuration.
40-
func CheckLevel(checkConfiguration checkconfigurations.Type) (Type, error) {
40+
// CheckLevel determines the check level assigned to the given result of the given check under the current tool configuration.
41+
func CheckLevel(checkConfiguration checkconfigurations.Type, checkResult checkresult.Type) (Type, error) {
42+
if checkResult != checkresult.Fail {
43+
return Notice, nil // Level provided by FailCheckLevel() is only relevant for failure result.
44+
}
4145
configurationCheckModes := configuration.CheckModes(checkConfiguration.ProjectType)
42-
return CheckLevelForCheckModes(checkConfiguration, configurationCheckModes)
46+
return FailCheckLevel(checkConfiguration, configurationCheckModes)
4347
}
4448

45-
func CheckLevelForCheckModes(checkConfiguration checkconfigurations.Type, configurationCheckModes map[checkmode.Type]bool) (Type, error) {
49+
// FailCheckLevel determines the level of a failed check for the given check modes.
50+
func FailCheckLevel(checkConfiguration checkconfigurations.Type, configurationCheckModes map[checkmode.Type]bool) (Type, error) {
4651
for _, errorMode := range checkConfiguration.ErrorModes {
4752
if configurationCheckModes[errorMode] {
4853
return Error, nil

Diff for: check/checklevel/checklevel_test.go

+14-11
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"testing"
2020

2121
"github.com/arduino/arduino-check/check/checkconfigurations"
22+
"github.com/arduino/arduino-check/check/checkresult"
2223
"github.com/arduino/arduino-check/configuration"
2324
"github.com/arduino/arduino-check/configuration/checkmode"
2425
"github.com/arduino/arduino-check/util/test"
@@ -31,19 +32,21 @@ func TestCheckLevel(t *testing.T) {
3132
infoModes []checkmode.Type
3233
warningModes []checkmode.Type
3334
errorModes []checkmode.Type
35+
checkResult checkresult.Type
3436
libraryManagerSetting string
3537
permissiveSetting string
3638
expectedLevel Type
3739
errorAssertion assert.ErrorAssertionFunc
3840
}{
39-
{"Error", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, "submit", "false", Error, assert.NoError},
40-
{"Warning", []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, []checkmode.Type{}, "submit", "false", Warning, assert.NoError},
41-
{"Info", []checkmode.Type{checkmode.LibraryManagerSubmission}, []checkmode.Type{}, []checkmode.Type{}, "submit", "false", Info, assert.NoError},
42-
{"Default to Error", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{checkmode.Default}, "submit", "false", Error, assert.NoError},
43-
{"Default to Warning", []checkmode.Type{}, []checkmode.Type{checkmode.Default}, []checkmode.Type{}, "submit", "false", Warning, assert.NoError},
44-
{"Default to Info", []checkmode.Type{checkmode.Default}, []checkmode.Type{}, []checkmode.Type{}, "submit", "false", Info, assert.NoError},
45-
{"Default override", []checkmode.Type{checkmode.Default}, []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, "submit", "false", Error, assert.NoError},
46-
{"Unable to resolve", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{}, "submit", "false", Info, assert.Error},
41+
{"Non-fail", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, checkresult.Skip, "submit", "false", Notice, assert.NoError},
42+
{"Error", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, checkresult.Fail, "submit", "false", Error, assert.NoError},
43+
{"Warning", []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, []checkmode.Type{}, checkresult.Fail, "submit", "false", Warning, assert.NoError},
44+
{"Info", []checkmode.Type{checkmode.LibraryManagerSubmission}, []checkmode.Type{}, []checkmode.Type{}, checkresult.Fail, "submit", "false", Info, assert.NoError},
45+
{"Default to Error", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{checkmode.Default}, checkresult.Fail, "submit", "false", Error, assert.NoError},
46+
{"Default to Warning", []checkmode.Type{}, []checkmode.Type{checkmode.Default}, []checkmode.Type{}, checkresult.Fail, "submit", "false", Warning, assert.NoError},
47+
{"Default to Info", []checkmode.Type{checkmode.Default}, []checkmode.Type{}, []checkmode.Type{}, checkresult.Fail, "submit", "false", Info, assert.NoError},
48+
{"Default override", []checkmode.Type{checkmode.Default}, []checkmode.Type{}, []checkmode.Type{checkmode.LibraryManagerSubmission}, checkresult.Fail, "submit", "false", Error, assert.NoError},
49+
{"Unable to resolve", []checkmode.Type{}, []checkmode.Type{}, []checkmode.Type{}, checkresult.Fail, "submit", "false", Info, assert.Error},
4750
}
4851

4952
flags := test.ConfigurationFlags()
@@ -60,10 +63,10 @@ func TestCheckLevel(t *testing.T) {
6063
ErrorModes: testTable.errorModes,
6164
}
6265

63-
level, err := CheckLevel(checkConfiguration)
64-
testTable.errorAssertion(t, err)
66+
level, err := CheckLevel(checkConfiguration, testTable.checkResult)
67+
testTable.errorAssertion(t, err, testTable.testName)
6568
if err == nil {
66-
assert.Equal(t, testTable.expectedLevel, level)
69+
assert.Equal(t, testTable.expectedLevel, level, testTable.testName)
6770
}
6871
}
6972
}

Diff for: result/result.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,25 @@ func (results *Type) Initialize() {
9292

9393
// Record records the result of a check and returns a text summary for it.
9494
func (results *Type) Record(checkedProject project.Type, checkConfiguration checkconfigurations.Type, checkResult checkresult.Type, checkOutput string) string {
95-
checkMessage := message(checkConfiguration.MessageTemplate, checkOutput)
96-
97-
checkLevel, err := checklevel.CheckLevel(checkConfiguration)
95+
checkLevel, err := checklevel.CheckLevel(checkConfiguration, checkResult)
9896
if err != nil {
9997
feedback.Errorf("Error while determining check level: %v", err)
10098
os.Exit(1)
10199
}
102100

103101
summaryText := fmt.Sprintf("%s\n", checkResult)
104102

105-
if checkResult == checkresult.NotRun {
106-
// TODO: make the check functions output an explanation for why they didn't run
107-
summaryText += fmt.Sprintf("%s: %s\n", checklevel.Notice, checkOutput)
108-
} else if checkResult != checkresult.Pass {
103+
checkMessage := ""
104+
if checkLevel == checklevel.Error {
105+
checkMessage = message(checkConfiguration.MessageTemplate, checkOutput)
106+
} else {
107+
// Checks may provide an explanation for their non-fail result.
108+
// The message template should not be used in this case, since it is written for a failure result.
109+
checkMessage = checkOutput
110+
}
111+
112+
// Add explanation of check result if present.
113+
if checkMessage != "" {
109114
summaryText += fmt.Sprintf("%s: %s\n", checkLevel, checkMessage)
110115
}
111116

Diff for: result/result_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ func TestRecord(t *testing.T) {
6161
var results Type
6262
checkConfiguration := checkconfigurations.Configurations()[0]
6363
checkOutput := "foo"
64-
summaryText := results.Record(checkedProject, checkConfiguration, checkresult.Pass, checkOutput)
65-
assert.Equal(t, fmt.Sprintf("%s\n", checkresult.Pass), summaryText)
66-
summaryText = results.Record(checkedProject, checkConfiguration, checkresult.NotRun, checkOutput)
67-
assert.Equal(t, fmt.Sprintf("%s\n%s: %s\n", checkresult.NotRun, checklevel.Notice, checkOutput), summaryText)
68-
summaryText = results.Record(checkedProject, checkConfiguration, checkresult.Fail, checkOutput)
64+
summaryText := results.Record(checkedProject, checkConfiguration, checkresult.Fail, checkOutput)
6965
assert.Equal(t, fmt.Sprintf("%s\n%s: %s\n", checkresult.Fail, checklevel.Error, message(checkConfiguration.MessageTemplate, checkOutput)), summaryText)
66+
summaryText = results.Record(checkedProject, checkConfiguration, checkresult.NotRun, checkOutput)
67+
assert.Equal(t, fmt.Sprintf("%s\n%s: %s\n", checkresult.NotRun, checklevel.Notice, checkOutput), summaryText, "Non-fail result should not use message")
68+
summaryText = results.Record(checkedProject, checkConfiguration, checkresult.Pass, "")
69+
assert.Equal(t, "", "", summaryText, "Non-failure result with no check function output should result in an empty summary")
7070

7171
checkResult := checkresult.Pass
7272
results = Type{}
@@ -88,9 +88,9 @@ func TestRecord(t *testing.T) {
8888
assert.Equal(t, checkConfiguration.Brief, checkReport.Brief)
8989
assert.Equal(t, checkConfiguration.Description, checkReport.Description)
9090
assert.Equal(t, checkResult.String(), checkReport.Result)
91-
checkLevel, _ := checklevel.CheckLevel(checkConfiguration)
91+
checkLevel, _ := checklevel.CheckLevel(checkConfiguration, checkResult)
9292
assert.Equal(t, checkLevel.String(), checkReport.Level)
93-
assert.Equal(t, message(checkConfiguration.MessageTemplate, checkOutput), checkReport.Message)
93+
assert.Equal(t, checkOutput, checkReport.Message)
9494

9595
assert.Len(t, results.Projects, 1)
9696
previousProjectPath := checkedProject.Path

0 commit comments

Comments
 (0)