mirror of
				https://github.com/gin-gonic/gin.git
				synced 2025-11-04 17:22:12 +08:00 
			
		
		
		
	* ci: update golangci-lint configuration and lint settings - Update golangci-lint to version 2 - Enable new linters and adjust existing ones - Update lint settings across multiple test files - Remove unused struct and variable checks - Add new lint exclusions for generated code and specific directories Signed-off-by: Flc <four_leaf_clover@foxmail.com> * ci(github): update golangci-lint-action to v8 and lint version to v2.3.4 Signed-off-by: Flc <four_leaf_clover@foxmail.com> * ci: downgrade golangci-lint to v2.1.6 Signed-off-by: Flc <four_leaf_clover@foxmail.com> * ci(golangci): add gofumpt linter and fix related issues- Added gofumpt linter to .golangci.yml Signed-off-by: Flc <four_leaf_clover@foxmail.com> * test: ignore testifylint and gofumpt lints in specific test cases Signed-off-by: Flc <four_leaf_clover@foxmail.com> * build(deps): remove golang.org/x/lint - Remove golang.org/x/lint package from go.mod - Update related dependencies in go.sum Signed-off-by: flc1125 <four_leaf_clover@foxmail.com> * build(deps): downgrade golang.org/x/mod and golang.org/x/tools - Downgrade golang.org/x/mod from v0.24.0 to v0.18.0 - Downgrade golang.org/x/tools from v0.33.0 to v.22.0 These changes are made to address compatibility issues with the current project setup. Signed-off-by: flc1125 <four_leaf_clover@foxmail.com> --------- Signed-off-by: Flc <four_leaf_clover@foxmail.com> Signed-off-by: flc1125 <four_leaf_clover@foxmail.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2020 Gin Core Team. All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package binding
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestSliceValidationError(t *testing.T) {
 | 
						|
	tests := []struct {
 | 
						|
		name string
 | 
						|
		err  SliceValidationError
 | 
						|
		want string
 | 
						|
	}{
 | 
						|
		{"has nil elements", SliceValidationError{errors.New("test error"), nil}, "[0]: test error"},
 | 
						|
		{"has zero elements", SliceValidationError{}, ""},
 | 
						|
		{"has one element", SliceValidationError{errors.New("test one error")}, "[0]: test one error"},
 | 
						|
		{
 | 
						|
			"has two elements",
 | 
						|
			SliceValidationError{
 | 
						|
				errors.New("first error"),
 | 
						|
				errors.New("second error"),
 | 
						|
			},
 | 
						|
			"[0]: first error\n[1]: second error",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"has many elements",
 | 
						|
			SliceValidationError{
 | 
						|
				errors.New("first error"),
 | 
						|
				errors.New("second error"),
 | 
						|
				nil,
 | 
						|
				nil,
 | 
						|
				nil,
 | 
						|
				errors.New("last error"),
 | 
						|
			},
 | 
						|
			"[0]: first error\n[1]: second error\n[5]: last error",
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			if got := tt.err.Error(); got != tt.want {
 | 
						|
				t.Errorf("SliceValidationError.Error() = %v, want %v", got, tt.want)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestDefaultValidator(t *testing.T) {
 | 
						|
	type exampleStruct struct {
 | 
						|
		A string `binding:"max=8"`
 | 
						|
		B int    `binding:"gt=0"`
 | 
						|
	}
 | 
						|
	tests := []struct {
 | 
						|
		name    string
 | 
						|
		v       *defaultValidator
 | 
						|
		obj     any
 | 
						|
		wantErr bool
 | 
						|
	}{
 | 
						|
		{"validate nil obj", &defaultValidator{}, nil, false},
 | 
						|
		{"validate int obj", &defaultValidator{}, 3, false},
 | 
						|
		{"validate struct failed-1", &defaultValidator{}, exampleStruct{A: "123456789", B: 1}, true},
 | 
						|
		{"validate struct failed-2", &defaultValidator{}, exampleStruct{A: "12345678", B: 0}, true},
 | 
						|
		{"validate struct passed", &defaultValidator{}, exampleStruct{A: "12345678", B: 1}, false},
 | 
						|
		{"validate *struct failed-1", &defaultValidator{}, &exampleStruct{A: "123456789", B: 1}, true},
 | 
						|
		{"validate *struct failed-2", &defaultValidator{}, &exampleStruct{A: "12345678", B: 0}, true},
 | 
						|
		{"validate *struct passed", &defaultValidator{}, &exampleStruct{A: "12345678", B: 1}, false},
 | 
						|
		{"validate []struct failed-1", &defaultValidator{}, []exampleStruct{{A: "123456789", B: 1}}, true},
 | 
						|
		{"validate []struct failed-2", &defaultValidator{}, []exampleStruct{{A: "12345678", B: 0}}, true},
 | 
						|
		{"validate []struct passed", &defaultValidator{}, []exampleStruct{{A: "12345678", B: 1}}, false},
 | 
						|
		{"validate []*struct failed-1", &defaultValidator{}, []*exampleStruct{{A: "123456789", B: 1}}, true},
 | 
						|
		{"validate []*struct failed-2", &defaultValidator{}, []*exampleStruct{{A: "12345678", B: 0}}, true},
 | 
						|
		{"validate []*struct passed", &defaultValidator{}, []*exampleStruct{{A: "12345678", B: 1}}, false},
 | 
						|
		{"validate *[]struct failed-1", &defaultValidator{}, &[]exampleStruct{{A: "123456789", B: 1}}, true},
 | 
						|
		{"validate *[]struct failed-2", &defaultValidator{}, &[]exampleStruct{{A: "12345678", B: 0}}, true},
 | 
						|
		{"validate *[]struct passed", &defaultValidator{}, &[]exampleStruct{{A: "12345678", B: 1}}, false},
 | 
						|
		{"validate *[]*struct failed-1", &defaultValidator{}, &[]*exampleStruct{{A: "123456789", B: 1}}, true},
 | 
						|
		{"validate *[]*struct failed-2", &defaultValidator{}, &[]*exampleStruct{{A: "12345678", B: 0}}, true},
 | 
						|
		{"validate *[]*struct passed", &defaultValidator{}, &[]*exampleStruct{{A: "12345678", B: 1}}, false},
 | 
						|
	}
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			if err := tt.v.ValidateStruct(tt.obj); (err != nil) != tt.wantErr {
 | 
						|
				t.Errorf("defaultValidator.Validate() error = %v, wantErr %v", err, tt.wantErr)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |