Add testifycheck task
This commit is contained in:
parent
c731c6cd0d
commit
84f4e07a29
6 changed files with 240 additions and 0 deletions
8
testifycheck/README.md
Normal file
8
testifycheck/README.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# testifycheck
|
||||||
|
|
||||||
|
Напишите линтер, который находит неправильные использование функции `{require,assert}.(Not)?Nil` из пакета `testify`.
|
||||||
|
|
||||||
|
Линтер должен смотреть на тип аргумента, который передаётся в функцию `require.NotNil`. Если тот является `error`,
|
||||||
|
то линтер должен предлагать заменить вызов на `require.NoError`.
|
||||||
|
|
||||||
|
Полный список ситуаций, смотрите в тестовом файле `testdata/srcs/tests/errors_test.go`.
|
75
testifycheck/testdata/src/github.com/stretchr/testify/assert/assert.go
vendored
Normal file
75
testifycheck/testdata/src/github.com/stretchr/testify/assert/assert.go
vendored
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
package assert
|
||||||
|
|
||||||
|
type TestingT interface {
|
||||||
|
Errorf(format string, args ...interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NoError(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NoErrorf(t TestingT, err error, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Error(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Errorf(t TestingT, err error, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
type Assertions struct{}
|
||||||
|
|
||||||
|
func New(t TestingT) *Assertions {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NotNilf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Nilf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NoError(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NoErrorf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Error(object interface{}, msgAndArgs ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Errorf(object interface{}, msg string, args ...interface{}) bool {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
75
testifycheck/testdata/src/github.com/stretchr/testify/require/require.go
vendored
Normal file
75
testifycheck/testdata/src/github.com/stretchr/testify/require/require.go
vendored
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
package require
|
||||||
|
|
||||||
|
type TestingT interface {
|
||||||
|
Errorf(format string, args ...interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NoError(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NoErrorf(t TestingT, err error, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Error(t TestingT, object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Errorf(t TestingT, err error, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
type Assertions struct{}
|
||||||
|
|
||||||
|
func New(t TestingT) *Assertions {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NotNilf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Nil(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Nilf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NoError(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) NoErrorf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Error(object interface{}, msgAndArgs ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Assertions) Errorf(object interface{}, msg string, args ...interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
67
testifycheck/testdata/src/tests/errors_test.go
vendored
Normal file
67
testifycheck/testdata/src/tests/errors_test.go
vendored
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
package tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func errorFunc() error {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFunctions(t *testing.T) {
|
||||||
|
err := errorFunc()
|
||||||
|
|
||||||
|
require.Nil(t, err) // want `use require.NoError instead of comparing error to nil`
|
||||||
|
require.NotNil(t, err) // want `use require.Error instead of comparing error to nil`
|
||||||
|
assert.Nil(t, err) // want `use assert.NoError instead of comparing error to nil`
|
||||||
|
assert.NotNil(t, err) // want `use assert.Error instead of comparing error to nil`
|
||||||
|
|
||||||
|
require.Nilf(t, err, "%s", "a") // want `use require.NoErrorf instead of comparing error to nil`
|
||||||
|
require.NotNilf(t, err, "%s", "a") // want `use require.Errorf instead of comparing error to nil`
|
||||||
|
assert.Nilf(t, err, "%s", "a") // want `use assert.NoErrorf instead of comparing error to nil`
|
||||||
|
assert.NotNilf(t, err, "%s", "a") // want `use assert.Errorf instead of comparing error to nil`
|
||||||
|
|
||||||
|
p := new(int)
|
||||||
|
|
||||||
|
require.Nil(t, p)
|
||||||
|
require.NotNil(t, p)
|
||||||
|
assert.Nil(t, p)
|
||||||
|
assert.NotNil(t, p)
|
||||||
|
|
||||||
|
require.Nilf(t, p, "%s", "a")
|
||||||
|
require.NotNilf(t, p, "%s", "a")
|
||||||
|
assert.Nilf(t, p, "%s", "a")
|
||||||
|
assert.NotNilf(t, p, "%s", "a")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAssertions(t *testing.T) {
|
||||||
|
err := errorFunc()
|
||||||
|
|
||||||
|
assert := assert.New(t)
|
||||||
|
require := require.New(t)
|
||||||
|
|
||||||
|
require.Nil(err) // want `use require.NoError instead of comparing error to nil`
|
||||||
|
require.NotNil(err) // want `use require.Error instead of comparing error to nil`
|
||||||
|
assert.Nil(err) // want `use assert.NoError instead of comparing error to nil`
|
||||||
|
assert.NotNil(err) // want `use assert.Error instead of comparing error to nil`
|
||||||
|
|
||||||
|
require.Nilf(err, "%s", "a") // want `use require.NoErrorf instead of comparing error to nil`
|
||||||
|
require.NotNilf(err, "%s", "a") // want `use require.Errorf instead of comparing error to nil`
|
||||||
|
assert.Nilf(err, "%s", "a") // want `use assert.NoErrorf instead of comparing error to nil`
|
||||||
|
assert.NotNilf(err, "%s", "a") // want `use assert.Errorf instead of comparing error to nil`
|
||||||
|
|
||||||
|
p := new(int)
|
||||||
|
|
||||||
|
require.Nil(p)
|
||||||
|
require.NotNil(p)
|
||||||
|
assert.Nil(p)
|
||||||
|
assert.NotNil(p)
|
||||||
|
|
||||||
|
require.Nilf(p, "%s", "a")
|
||||||
|
require.NotNilf(p, "%s", "a")
|
||||||
|
assert.Nilf(p, "%s", "a")
|
||||||
|
assert.NotNilf(p, "%s", "a")
|
||||||
|
}
|
3
testifycheck/testifycheck.go
Normal file
3
testifycheck/testifycheck.go
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// +build !solution
|
||||||
|
|
||||||
|
package testifycheck
|
12
testifycheck/testifycheck_test.go
Normal file
12
testifycheck/testifycheck_test.go
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package testifycheck
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"golang.org/x/tools/go/analysis/analysistest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test(t *testing.T) {
|
||||||
|
testdata := analysistest.TestData()
|
||||||
|
analysistest.Run(t, testdata, Analyzer, "tests/...")
|
||||||
|
}
|
Loading…
Reference in a new issue