diff --git a/rc/rc.go b/rc/rc.go index 290c5454c..d9bdd779e 100644 --- a/rc/rc.go +++ b/rc/rc.go @@ -538,6 +538,7 @@ func analyseProgram(filename, path string, load loadedSource) *info { info.illegals = append(info.illegals, analyseArrayTypes(info.arrays, noArrays, noTheseArrays)...) info.illegals = append(info.illegals, analyseLits(info.lits, noLit)...) info.illegals = append(info.illegals, analyseRepetition(info.callRep, allowedRep)...) + info.illegals = removeRepetitions(info.illegals) return info } diff --git a/rc/rc_test.go b/rc/rc_test.go index 07867d504..9843ce8ad 100644 --- a/rc/rc_test.go +++ b/rc/rc_test.go @@ -2,142 +2,125 @@ package main import ( "fmt" + "runtime" "strings" "testing" "github.com/01-edu/z01" ) -func challengeProgram(t *testing.T, stuPath, solPath string, args ...string) { - exercise := strings.ToLower( - strings.TrimPrefix(t.Name(), "Test")) - out, err := z01.MainOut(stuPath+exercise, args...) - if err != nil { - t.Error(err) - } - correct, err := z01.MainOut(solPath+exercise, args...) - if err != nil { - t.Error(err) - } - if out != correct { - t.Errorf("./%s %s prints %q instead of %q\n", - exercise, strings.Join(args, " "), out, correct) - } -} - func TestFlags(t *testing.T) { argsAndSolution := map[string]string{ - "tests/alphacount.go": `Parsing - OK -Cheating - illegal-import regexp tests/alphacount.go:4:2 - illegal-access regexp.MustCompile tests/alphacount.go:8:8 - illegal-call len tests/alphacount.go:10:9 - illegal-call AlphaCount tests/alphacount.go:7:1 + "tests/testingSimpleFunc.go": `Parsing: + Ok +Cheating: + TYPE: NAME: LOCATION: + illegal-import regexp tests/testingSimpleFunc.go:4:2 + illegal-call len tests/testingSimpleFunc.go:10:9 + illegal-access regexp.MustCompile tests/testingSimpleFunc.go:8:8 + illegal-definition SimpleFunc tests/testingSimpleFunc.go:7:1 `, - "-no-for -no-lit=[a-z] tests/printalphabet/printalphabet.go": `Parsing - OK -Cheating - illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:4:2 - illegal-call append tests/printalphabet/printalphabet.go:9:7 - illegal-call fillArray tests/printalphabet/printalphabet.go:15:2 - illegal-call fillArray tests/printalphabet/printalphabet.go:7:1 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:17:3 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:2 - illegal-call main tests/printalphabet/printalphabet.go:13:1 - illegal-literal 'a' tests/printalphabet/printalphabet.go:8:11 - illegal-literal 'z' tests/printalphabet/printalphabet.go:8:21 - illegal-literal '\n' tests/printalphabet/printalphabet.go:19:16 - illegal-literal 'a' tests/printalphabet/printalphabet.go:8:11 - illegal-literal 'z' tests/printalphabet/printalphabet.go:8:21 - illegal-literal 'a' tests/printalphabet/printalphabet.go:8:11 - illegal-literal 'z' tests/printalphabet/printalphabet.go:8:21 - illegal-loop for tests/printalphabet/printalphabet.go:8:2 - illegal-loop for tests/printalphabet/printalphabet.go:8:2 - illegal-loop for tests/printalphabet/printalphabet.go:8:2 + "-no-for -no-lit=[a-z] tests/printalphabet/printalphabet.go": `Parsing: + Ok +Cheating: + TYPE: NAME: LOCATION: + illegal-import fmt tests/printalphabet/printalphabet.go:4:2 + illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:6:2 + illegal-call append tests/printalphabet/printalphabet.go:11:7 + illegal-definition fillArray tests/printalphabet/printalphabet.go:9:1 + illegal-call int tests/printalphabet/printalphabet.go:17:7 + illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:3 + illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:21:2 + illegal-definition main tests/printalphabet/printalphabet.go:15:1 + illegal-access fmt.Println tests/printalphabet/printalphabet.go:26:3 + illegal-definition defFun tests/printalphabet/printalphabet.go:25:2 + illegal-call defFun tests/printalphabet/printalphabet.go:28:2 + illegal-definition testingScope tests/printalphabet/printalphabet.go:24:1 + illegal-loop for tests/printalphabet/printalphabet.go:10:2 + illegal-lit 'a' tests/printalphabet/printalphabet.go:10:11 + illegal-lit 'z' tests/printalphabet/printalphabet.go:10:21 + illegal-lit 'a' tests/printalphabet/printalphabet.go:16:14 + illegal-lit 'b' tests/printalphabet/printalphabet.go:16:19 + illegal-lit 'c' tests/printalphabet/printalphabet.go:16:24 + illegal-lit 'd' tests/printalphabet/printalphabet.go:16:29 + illegal-lit 'e' tests/printalphabet/printalphabet.go:16:34 + illegal-lit 'f' tests/printalphabet/printalphabet.go:16:39 + illegal-lit 'a' tests/printalphabet/printalphabet.go:17:11 + illegal-lit '\n' tests/printalphabet/printalphabet.go:21:16 + illegal-lit "Hello" tests/printalphabet/printalphabet.go:28:9 `, - "tests/eightqueens.go": `Parsing - OK -Cheating - illegal-import github.com/01-edu/z01 tests/eightqueens.go:4:2 - illegal-access z01.PrintRune tests/eightqueens.go:49:5 - illegal-access z01.PrintRune tests/eightqueens.go:55:2 - illegal-call rune tests/eightqueens.go:49:19 - illegal-call printQueens tests/eightqueens.go:70:5 - illegal-call printQueens tests/eightqueens.go:42:1 - illegal-call tryX tests/eightqueens.go:73:5 - illegal-call tryX tests/eightqueens.go:85:2 - illegal-call tryX tests/eightqueens.go:60:1 - illegal-call EightQueens tests/eightqueens.go:83:1 + "-cast tests/eightqueens.go": `Parsing: + Ok +Cheating: + TYPE: NAME: LOCATION: + illegal-import github.com/01-edu/z01 tests/eightqueens.go:4:2 + illegal-access z01.PrintRune tests/eightqueens.go:49:5 + illegal-access z01.PrintRune tests/eightqueens.go:55:2 + illegal-definition printQueens tests/eightqueens.go:42:1 `, - "-cast tests/eightqueens.go": `Parsing - OK -Cheating - illegal-import github.com/01-edu/z01 tests/eightqueens.go:4:2 - illegal-access z01.PrintRune tests/eightqueens.go:49:5 - illegal-access z01.PrintRune tests/eightqueens.go:55:2 + "-no-arrays tests/printalphabet/printalphabet.go": `Parsing: + Ok +Cheating: + TYPE: NAME: LOCATION: + illegal-import fmt tests/printalphabet/printalphabet.go:4:2 + illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:6:2 + illegal-call append tests/printalphabet/printalphabet.go:11:7 + illegal-definition fillArray tests/printalphabet/printalphabet.go:9:1 + illegal-call int tests/printalphabet/printalphabet.go:17:7 + illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:3 + illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:21:2 + illegal-definition main tests/printalphabet/printalphabet.go:15:1 + illegal-access fmt.Println tests/printalphabet/printalphabet.go:26:3 + illegal-definition defFun tests/printalphabet/printalphabet.go:25:2 + illegal-call defFun tests/printalphabet/printalphabet.go:28:2 + illegal-definition testingScope tests/printalphabet/printalphabet.go:24:1 + illegal-array rune tests/printalphabet/printalphabet.go:9:18 + illegal-array rune tests/printalphabet/printalphabet.go:16:7 `, - "-no-arrays tests/printalphabet/printalphabet.go ": `Parsing - OK -Cheating - illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:4:2 - illegal-call append tests/printalphabet/printalphabet.go:9:7 - illegal-call fillArray tests/printalphabet/printalphabet.go:15:2 - illegal-call fillArray tests/printalphabet/printalphabet.go:7:1 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:17:3 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:2 - illegal-call main tests/printalphabet/printalphabet.go:13:1 - illegal-array-type rune tests/printalphabet/printalphabet.go:14:8 + "-no-these-arrays=int,rune tests/printalphabet/printalphabet.go": `Parsing: + Ok +Cheating: + TYPE: NAME: LOCATION: + illegal-import fmt tests/printalphabet/printalphabet.go:4:2 + illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:6:2 + illegal-call append tests/printalphabet/printalphabet.go:11:7 + illegal-definition fillArray tests/printalphabet/printalphabet.go:9:1 + illegal-call int tests/printalphabet/printalphabet.go:17:7 + illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:3 + illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:21:2 + illegal-definition main tests/printalphabet/printalphabet.go:15:1 + illegal-access fmt.Println tests/printalphabet/printalphabet.go:26:3 + illegal-definition defFun tests/printalphabet/printalphabet.go:25:2 + illegal-call defFun tests/printalphabet/printalphabet.go:28:2 + illegal-definition testingScope tests/printalphabet/printalphabet.go:24:1 + illegal-array rune tests/printalphabet/printalphabet.go:9:18 + illegal-array rune tests/printalphabet/printalphabet.go:16:7 `, - "-no-these-arrays rune tests/printalphabet/printalphabet.go ": `Parsing - OK -Cheating - illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:4:2 - illegal-call append tests/printalphabet/printalphabet.go:9:7 - illegal-call fillArray tests/printalphabet/printalphabet.go:15:2 - illegal-call fillArray tests/printalphabet/printalphabet.go:7:1 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:17:3 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:2 - illegal-call main tests/printalphabet/printalphabet.go:13:1 - illegal-array-type rune tests/printalphabet/printalphabet.go:14:8 + `-allow-builtin tests/doopprog/main.go fmt.Println strconv.Atoi os.Args`: `Parsing: + Ok +Cheating: + Ok `, - `-no-these-arrays "int" tests/printalphabet/printalphabet.go`: `Parsing - OK -Cheating - illegal-import github.com/01-edu/z01 tests/printalphabet/printalphabet.go:4:2 - illegal-call append tests/printalphabet/printalphabet.go:9:7 - illegal-call fillArray tests/printalphabet/printalphabet.go:15:2 - illegal-call fillArray tests/printalphabet/printalphabet.go:7:1 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:17:3 - illegal-access z01.PrintRune tests/printalphabet/printalphabet.go:19:2 - illegal-call main tests/printalphabet/printalphabet.go:13:1 + `-cast tests/doopprog/main.go fmt.Println strconv.Atoi os.Args len`: `Parsing: + Ok +Cheating: + Ok `, } - + _, filename, _, _ := runtime.Caller(1) + fmt.Println("Filename:", filename) Compare(t, argsAndSolution) } func Compare(t *testing.T, argsAndSol map[string]string) { for args, sol := range argsAndSol { out, err := z01.MainOut("../rc", strings.Split(args, " ")...) - if err.Error() != sol && out != sol { - fmt.Println("Error:", err) - fmt.Println("Out:", out) + if out != sol && err != nil && err.Error() != sol { + fmt.Println(args, "\nError:", err) + fmt.Println("Solution:", sol) + // fmt.Println("Out:", out) t.Errorf("./rc %s prints %q\n instead of %q\n", args, out, sol) } } } - -func TestWrapping(t *testing.T) { - argsAndSolution := map[string]string{ - "tests/testingWrapping.go ./util": `Parsing - OK -Cheating - illegal-call len tests/util/util.go:6:9 - illegal-call util.LenWrapper tests/util/util.go:5:1 - illegal-call Length tests/testingWrapping.go:7:1 -`, - } - Compare(t, argsAndSolution) -}