Fix the dependency issue (#231)
This commit is contained in:
2
vendor/github.com/asaskevich/govalidator/.github/ISSUE_TEMPLATE.md
generated
vendored
2
vendor/github.com/asaskevich/govalidator/.github/ISSUE_TEMPLATE.md
generated
vendored
@@ -1,2 +0,0 @@
|
||||
<!-- Love govalidator? Please consider supporting our collective:
|
||||
👉 https://opencollective.com/govalidator/donate -->
|
||||
14
vendor/github.com/asaskevich/govalidator/.travis.yml
generated
vendored
14
vendor/github.com/asaskevich/govalidator/.travis.yml
generated
vendored
@@ -1,14 +0,0 @@
|
||||
language: go
|
||||
|
||||
go:
|
||||
- 1.1
|
||||
- 1.2
|
||||
- 1.3
|
||||
- 1.4
|
||||
- 1.5
|
||||
- 1.6
|
||||
- tip
|
||||
|
||||
notifications:
|
||||
email:
|
||||
- bwatas@gmail.com
|
||||
63
vendor/github.com/asaskevich/govalidator/CONTRIBUTING.md
generated
vendored
63
vendor/github.com/asaskevich/govalidator/CONTRIBUTING.md
generated
vendored
@@ -1,63 +0,0 @@
|
||||
#### Support
|
||||
If you do have a contribution to the package, feel free to create a Pull Request or an Issue.
|
||||
|
||||
#### What to contribute
|
||||
If you don't know what to do, there are some features and functions that need to be done
|
||||
|
||||
- [ ] Refactor code
|
||||
- [ ] Edit docs and [README](https://github.com/asaskevich/govalidator/README.md): spellcheck, grammar and typo check
|
||||
- [ ] Create actual list of contributors and projects that currently using this package
|
||||
- [ ] Resolve [issues and bugs](https://github.com/asaskevich/govalidator/issues)
|
||||
- [ ] Update actual [list of functions](https://github.com/asaskevich/govalidator#list-of-functions)
|
||||
- [ ] Update [list of validators](https://github.com/asaskevich/govalidator#validatestruct-2) that available for `ValidateStruct` and add new
|
||||
- [ ] Implement new validators: `IsFQDN`, `IsIMEI`, `IsPostalCode`, `IsISIN`, `IsISRC` etc
|
||||
- [ ] Implement [validation by maps](https://github.com/asaskevich/govalidator/issues/224)
|
||||
- [ ] Implement fuzzing testing
|
||||
- [ ] Implement some struct/map/array utilities
|
||||
- [ ] Implement map/array validation
|
||||
- [ ] Implement benchmarking
|
||||
- [ ] Implement batch of examples
|
||||
- [ ] Look at forks for new features and fixes
|
||||
|
||||
#### Advice
|
||||
Feel free to create what you want, but keep in mind when you implement new features:
|
||||
- Code must be clear and readable, names of variables/constants clearly describes what they are doing
|
||||
- Public functions must be documented and described in source file and added to README.md to the list of available functions
|
||||
- There are must be unit-tests for any new functions and improvements
|
||||
|
||||
## Financial contributions
|
||||
|
||||
We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/govalidator).
|
||||
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
|
||||
|
||||
|
||||
## Credits
|
||||
|
||||
|
||||
### Contributors
|
||||
|
||||
Thank you to all the people who have already contributed to govalidator!
|
||||
<a href="graphs/contributors"><img src="https://opencollective.com/govalidator/contributors.svg?width=890" /></a>
|
||||
|
||||
|
||||
### Backers
|
||||
|
||||
Thank you to all our backers! [[Become a backer](https://opencollective.com/govalidator#backer)]
|
||||
|
||||
<a href="https://opencollective.com/govalidator#backers" target="_blank"><img src="https://opencollective.com/govalidator/backers.svg?width=890"></a>
|
||||
|
||||
|
||||
### Sponsors
|
||||
|
||||
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/govalidator#sponsor))
|
||||
|
||||
<a href="https://opencollective.com/govalidator/sponsor/0/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/1/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/2/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/3/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/4/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/5/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/6/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/7/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/8/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/9/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/9/avatar.svg"></a>
|
||||
490
vendor/github.com/asaskevich/govalidator/README.md
generated
vendored
490
vendor/github.com/asaskevich/govalidator/README.md
generated
vendored
@@ -1,490 +0,0 @@
|
||||
govalidator
|
||||
===========
|
||||
[](https://gitter.im/asaskevich/govalidator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://godoc.org/github.com/asaskevich/govalidator) [](https://coveralls.io/r/asaskevich/govalidator?branch=master) [](https://app.wercker.com/project/bykey/1ec990b09ea86c910d5f08b0e02c6043)
|
||||
[](https://travis-ci.org/asaskevich/govalidator) [](https://goreportcard.com/report/github.com/asaskevich/govalidator) [](http://go-search.org/view?id=github.com%2Fasaskevich%2Fgovalidator) [](#backers) [](#sponsors)
|
||||
|
||||
A package of validators and sanitizers for strings, structs and collections. Based on [validator.js](https://github.com/chriso/validator.js).
|
||||
|
||||
#### Installation
|
||||
Make sure that Go is installed on your computer.
|
||||
Type the following command in your terminal:
|
||||
|
||||
go get github.com/asaskevich/govalidator
|
||||
|
||||
or you can get specified release of the package with `gopkg.in`:
|
||||
|
||||
go get gopkg.in/asaskevich/govalidator.v4
|
||||
|
||||
After it the package is ready to use.
|
||||
|
||||
|
||||
#### Import package in your project
|
||||
Add following line in your `*.go` file:
|
||||
```go
|
||||
import "github.com/asaskevich/govalidator"
|
||||
```
|
||||
If you are unhappy to use long `govalidator`, you can do something like this:
|
||||
```go
|
||||
import (
|
||||
valid "github.com/asaskevich/govalidator"
|
||||
)
|
||||
```
|
||||
|
||||
#### Activate behavior to require all fields have a validation tag by default
|
||||
`SetFieldsRequiredByDefault` causes validation to fail when struct fields do not include validations or are not explicitly marked as exempt (using `valid:"-"` or `valid:"email,optional"`). A good place to activate this is a package init function or the main() function.
|
||||
|
||||
```go
|
||||
import "github.com/asaskevich/govalidator"
|
||||
|
||||
func init() {
|
||||
govalidator.SetFieldsRequiredByDefault(true)
|
||||
}
|
||||
```
|
||||
|
||||
Here's some code to explain it:
|
||||
```go
|
||||
// this struct definition will fail govalidator.ValidateStruct() (and the field values do not matter):
|
||||
type exampleStruct struct {
|
||||
Name string ``
|
||||
Email string `valid:"email"`
|
||||
}
|
||||
|
||||
// this, however, will only fail when Email is empty or an invalid email address:
|
||||
type exampleStruct2 struct {
|
||||
Name string `valid:"-"`
|
||||
Email string `valid:"email"`
|
||||
}
|
||||
|
||||
// lastly, this will only fail when Email is an invalid email address but not when it's empty:
|
||||
type exampleStruct2 struct {
|
||||
Name string `valid:"-"`
|
||||
Email string `valid:"email,optional"`
|
||||
}
|
||||
```
|
||||
|
||||
#### Recent breaking changes (see [#123](https://github.com/asaskevich/govalidator/pull/123))
|
||||
##### Custom validator function signature
|
||||
A context was added as the second parameter, for structs this is the object being validated – this makes dependent validation possible.
|
||||
```go
|
||||
import "github.com/asaskevich/govalidator"
|
||||
|
||||
// old signature
|
||||
func(i interface{}) bool
|
||||
|
||||
// new signature
|
||||
func(i interface{}, o interface{}) bool
|
||||
```
|
||||
|
||||
##### Adding a custom validator
|
||||
This was changed to prevent data races when accessing custom validators.
|
||||
```go
|
||||
import "github.com/asaskevich/govalidator"
|
||||
|
||||
// before
|
||||
govalidator.CustomTypeTagMap["customByteArrayValidator"] = CustomTypeValidator(func(i interface{}, o interface{}) bool {
|
||||
// ...
|
||||
})
|
||||
|
||||
// after
|
||||
govalidator.CustomTypeTagMap.Set("customByteArrayValidator", CustomTypeValidator(func(i interface{}, o interface{}) bool {
|
||||
// ...
|
||||
}))
|
||||
```
|
||||
|
||||
#### List of functions:
|
||||
```go
|
||||
func Abs(value float64) float64
|
||||
func BlackList(str, chars string) string
|
||||
func ByteLength(str string, params ...string) bool
|
||||
func CamelCaseToUnderscore(str string) string
|
||||
func Contains(str, substring string) bool
|
||||
func Count(array []interface{}, iterator ConditionIterator) int
|
||||
func Each(array []interface{}, iterator Iterator)
|
||||
func ErrorByField(e error, field string) string
|
||||
func ErrorsByField(e error) map[string]string
|
||||
func Filter(array []interface{}, iterator ConditionIterator) []interface{}
|
||||
func Find(array []interface{}, iterator ConditionIterator) interface{}
|
||||
func GetLine(s string, index int) (string, error)
|
||||
func GetLines(s string) []string
|
||||
func InRange(value, left, right float64) bool
|
||||
func IsASCII(str string) bool
|
||||
func IsAlpha(str string) bool
|
||||
func IsAlphanumeric(str string) bool
|
||||
func IsBase64(str string) bool
|
||||
func IsByteLength(str string, min, max int) bool
|
||||
func IsCIDR(str string) bool
|
||||
func IsCreditCard(str string) bool
|
||||
func IsDNSName(str string) bool
|
||||
func IsDataURI(str string) bool
|
||||
func IsDialString(str string) bool
|
||||
func IsDivisibleBy(str, num string) bool
|
||||
func IsEmail(str string) bool
|
||||
func IsFilePath(str string) (bool, int)
|
||||
func IsFloat(str string) bool
|
||||
func IsFullWidth(str string) bool
|
||||
func IsHalfWidth(str string) bool
|
||||
func IsHexadecimal(str string) bool
|
||||
func IsHexcolor(str string) bool
|
||||
func IsHost(str string) bool
|
||||
func IsIP(str string) bool
|
||||
func IsIPv4(str string) bool
|
||||
func IsIPv6(str string) bool
|
||||
func IsISBN(str string, version int) bool
|
||||
func IsISBN10(str string) bool
|
||||
func IsISBN13(str string) bool
|
||||
func IsISO3166Alpha2(str string) bool
|
||||
func IsISO3166Alpha3(str string) bool
|
||||
func IsISO693Alpha2(str string) bool
|
||||
func IsISO693Alpha3b(str string) bool
|
||||
func IsISO4217(str string) bool
|
||||
func IsIn(str string, params ...string) bool
|
||||
func IsInt(str string) bool
|
||||
func IsJSON(str string) bool
|
||||
func IsLatitude(str string) bool
|
||||
func IsLongitude(str string) bool
|
||||
func IsLowerCase(str string) bool
|
||||
func IsMAC(str string) bool
|
||||
func IsMongoID(str string) bool
|
||||
func IsMultibyte(str string) bool
|
||||
func IsNatural(value float64) bool
|
||||
func IsNegative(value float64) bool
|
||||
func IsNonNegative(value float64) bool
|
||||
func IsNonPositive(value float64) bool
|
||||
func IsNull(str string) bool
|
||||
func IsNumeric(str string) bool
|
||||
func IsPort(str string) bool
|
||||
func IsPositive(value float64) bool
|
||||
func IsPrintableASCII(str string) bool
|
||||
func IsRFC3339(str string) bool
|
||||
func IsRFC3339WithoutZone(str string) bool
|
||||
func IsRGBcolor(str string) bool
|
||||
func IsRequestURI(rawurl string) bool
|
||||
func IsRequestURL(rawurl string) bool
|
||||
func IsSSN(str string) bool
|
||||
func IsSemver(str string) bool
|
||||
func IsTime(str string, format string) bool
|
||||
func IsURL(str string) bool
|
||||
func IsUTFDigit(str string) bool
|
||||
func IsUTFLetter(str string) bool
|
||||
func IsUTFLetterNumeric(str string) bool
|
||||
func IsUTFNumeric(str string) bool
|
||||
func IsUUID(str string) bool
|
||||
func IsUUIDv3(str string) bool
|
||||
func IsUUIDv4(str string) bool
|
||||
func IsUUIDv5(str string) bool
|
||||
func IsUpperCase(str string) bool
|
||||
func IsVariableWidth(str string) bool
|
||||
func IsWhole(value float64) bool
|
||||
func LeftTrim(str, chars string) string
|
||||
func Map(array []interface{}, iterator ResultIterator) []interface{}
|
||||
func Matches(str, pattern string) bool
|
||||
func NormalizeEmail(str string) (string, error)
|
||||
func PadBoth(str string, padStr string, padLen int) string
|
||||
func PadLeft(str string, padStr string, padLen int) string
|
||||
func PadRight(str string, padStr string, padLen int) string
|
||||
func Range(str string, params ...string) bool
|
||||
func RemoveTags(s string) string
|
||||
func ReplacePattern(str, pattern, replace string) string
|
||||
func Reverse(s string) string
|
||||
func RightTrim(str, chars string) string
|
||||
func RuneLength(str string, params ...string) bool
|
||||
func SafeFileName(str string) string
|
||||
func SetFieldsRequiredByDefault(value bool)
|
||||
func Sign(value float64) float64
|
||||
func StringLength(str string, params ...string) bool
|
||||
func StringMatches(s string, params ...string) bool
|
||||
func StripLow(str string, keepNewLines bool) string
|
||||
func ToBoolean(str string) (bool, error)
|
||||
func ToFloat(str string) (float64, error)
|
||||
func ToInt(str string) (int64, error)
|
||||
func ToJSON(obj interface{}) (string, error)
|
||||
func ToString(obj interface{}) string
|
||||
func Trim(str, chars string) string
|
||||
func Truncate(str string, length int, ending string) string
|
||||
func UnderscoreToCamelCase(s string) string
|
||||
func ValidateStruct(s interface{}) (bool, error)
|
||||
func WhiteList(str, chars string) string
|
||||
type ConditionIterator
|
||||
type CustomTypeValidator
|
||||
type Error
|
||||
func (e Error) Error() string
|
||||
type Errors
|
||||
func (es Errors) Error() string
|
||||
func (es Errors) Errors() []error
|
||||
type ISO3166Entry
|
||||
type Iterator
|
||||
type ParamValidator
|
||||
type ResultIterator
|
||||
type UnsupportedTypeError
|
||||
func (e *UnsupportedTypeError) Error() string
|
||||
type Validator
|
||||
```
|
||||
|
||||
#### Examples
|
||||
###### IsURL
|
||||
```go
|
||||
println(govalidator.IsURL(`http://user@pass:domain.com/path/page`))
|
||||
```
|
||||
###### ToString
|
||||
```go
|
||||
type User struct {
|
||||
FirstName string
|
||||
LastName string
|
||||
}
|
||||
|
||||
str := govalidator.ToString(&User{"John", "Juan"})
|
||||
println(str)
|
||||
```
|
||||
###### Each, Map, Filter, Count for slices
|
||||
Each iterates over the slice/array and calls Iterator for every item
|
||||
```go
|
||||
data := []interface{}{1, 2, 3, 4, 5}
|
||||
var fn govalidator.Iterator = func(value interface{}, index int) {
|
||||
println(value.(int))
|
||||
}
|
||||
govalidator.Each(data, fn)
|
||||
```
|
||||
```go
|
||||
data := []interface{}{1, 2, 3, 4, 5}
|
||||
var fn govalidator.ResultIterator = func(value interface{}, index int) interface{} {
|
||||
return value.(int) * 3
|
||||
}
|
||||
_ = govalidator.Map(data, fn) // result = []interface{}{1, 6, 9, 12, 15}
|
||||
```
|
||||
```go
|
||||
data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
var fn govalidator.ConditionIterator = func(value interface{}, index int) bool {
|
||||
return value.(int)%2 == 0
|
||||
}
|
||||
_ = govalidator.Filter(data, fn) // result = []interface{}{2, 4, 6, 8, 10}
|
||||
_ = govalidator.Count(data, fn) // result = 5
|
||||
```
|
||||
###### ValidateStruct [#2](https://github.com/asaskevich/govalidator/pull/2)
|
||||
If you want to validate structs, you can use tag `valid` for any field in your structure. All validators used with this field in one tag are separated by comma. If you want to skip validation, place `-` in your tag. If you need a validator that is not on the list below, you can add it like this:
|
||||
```go
|
||||
govalidator.TagMap["duck"] = govalidator.Validator(func(str string) bool {
|
||||
return str == "duck"
|
||||
})
|
||||
```
|
||||
For completely custom validators (interface-based), see below.
|
||||
|
||||
Here is a list of available validators for struct fields (validator - used function):
|
||||
```go
|
||||
"email": IsEmail,
|
||||
"url": IsURL,
|
||||
"dialstring": IsDialString,
|
||||
"requrl": IsRequestURL,
|
||||
"requri": IsRequestURI,
|
||||
"alpha": IsAlpha,
|
||||
"utfletter": IsUTFLetter,
|
||||
"alphanum": IsAlphanumeric,
|
||||
"utfletternum": IsUTFLetterNumeric,
|
||||
"numeric": IsNumeric,
|
||||
"utfnumeric": IsUTFNumeric,
|
||||
"utfdigit": IsUTFDigit,
|
||||
"hexadecimal": IsHexadecimal,
|
||||
"hexcolor": IsHexcolor,
|
||||
"rgbcolor": IsRGBcolor,
|
||||
"lowercase": IsLowerCase,
|
||||
"uppercase": IsUpperCase,
|
||||
"int": IsInt,
|
||||
"float": IsFloat,
|
||||
"null": IsNull,
|
||||
"uuid": IsUUID,
|
||||
"uuidv3": IsUUIDv3,
|
||||
"uuidv4": IsUUIDv4,
|
||||
"uuidv5": IsUUIDv5,
|
||||
"creditcard": IsCreditCard,
|
||||
"isbn10": IsISBN10,
|
||||
"isbn13": IsISBN13,
|
||||
"json": IsJSON,
|
||||
"multibyte": IsMultibyte,
|
||||
"ascii": IsASCII,
|
||||
"printableascii": IsPrintableASCII,
|
||||
"fullwidth": IsFullWidth,
|
||||
"halfwidth": IsHalfWidth,
|
||||
"variablewidth": IsVariableWidth,
|
||||
"base64": IsBase64,
|
||||
"datauri": IsDataURI,
|
||||
"ip": IsIP,
|
||||
"port": IsPort,
|
||||
"ipv4": IsIPv4,
|
||||
"ipv6": IsIPv6,
|
||||
"dns": IsDNSName,
|
||||
"host": IsHost,
|
||||
"mac": IsMAC,
|
||||
"latitude": IsLatitude,
|
||||
"longitude": IsLongitude,
|
||||
"ssn": IsSSN,
|
||||
"semver": IsSemver,
|
||||
"rfc3339": IsRFC3339,
|
||||
"rfc3339WithoutZone": IsRFC3339WithoutZone,
|
||||
"ISO3166Alpha2": IsISO3166Alpha2,
|
||||
"ISO3166Alpha3": IsISO3166Alpha3,
|
||||
```
|
||||
Validators with parameters
|
||||
|
||||
```go
|
||||
"range(min|max)": Range,
|
||||
"length(min|max)": ByteLength,
|
||||
"runelength(min|max)": RuneLength,
|
||||
"matches(pattern)": StringMatches,
|
||||
"in(string1|string2|...|stringN)": IsIn,
|
||||
```
|
||||
|
||||
And here is small example of usage:
|
||||
```go
|
||||
type Post struct {
|
||||
Title string `valid:"alphanum,required"`
|
||||
Message string `valid:"duck,ascii"`
|
||||
AuthorIP string `valid:"ipv4"`
|
||||
Date string `valid:"-"`
|
||||
}
|
||||
post := &Post{
|
||||
Title: "My Example Post",
|
||||
Message: "duck",
|
||||
AuthorIP: "123.234.54.3",
|
||||
}
|
||||
|
||||
// Add your own struct validation tags
|
||||
govalidator.TagMap["duck"] = govalidator.Validator(func(str string) bool {
|
||||
return str == "duck"
|
||||
})
|
||||
|
||||
result, err := govalidator.ValidateStruct(post)
|
||||
if err != nil {
|
||||
println("error: " + err.Error())
|
||||
}
|
||||
println(result)
|
||||
```
|
||||
###### WhiteList
|
||||
```go
|
||||
// Remove all characters from string ignoring characters between "a" and "z"
|
||||
println(govalidator.WhiteList("a3a43a5a4a3a2a23a4a5a4a3a4", "a-z") == "aaaaaaaaaaaa")
|
||||
```
|
||||
|
||||
###### Custom validation functions
|
||||
Custom validation using your own domain specific validators is also available - here's an example of how to use it:
|
||||
```go
|
||||
import "github.com/asaskevich/govalidator"
|
||||
|
||||
type CustomByteArray [6]byte // custom types are supported and can be validated
|
||||
|
||||
type StructWithCustomByteArray struct {
|
||||
ID CustomByteArray `valid:"customByteArrayValidator,customMinLengthValidator"` // multiple custom validators are possible as well and will be evaluated in sequence
|
||||
Email string `valid:"email"`
|
||||
CustomMinLength int `valid:"-"`
|
||||
}
|
||||
|
||||
govalidator.CustomTypeTagMap.Set("customByteArrayValidator", CustomTypeValidator(func(i interface{}, context interface{}) bool {
|
||||
switch v := context.(type) { // you can type switch on the context interface being validated
|
||||
case StructWithCustomByteArray:
|
||||
// you can check and validate against some other field in the context,
|
||||
// return early or not validate against the context at all – your choice
|
||||
case SomeOtherType:
|
||||
// ...
|
||||
default:
|
||||
// expecting some other type? Throw/panic here or continue
|
||||
}
|
||||
|
||||
switch v := i.(type) { // type switch on the struct field being validated
|
||||
case CustomByteArray:
|
||||
for _, e := range v { // this validator checks that the byte array is not empty, i.e. not all zeroes
|
||||
if e != 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}))
|
||||
govalidator.CustomTypeTagMap.Set("customMinLengthValidator", CustomTypeValidator(func(i interface{}, context interface{}) bool {
|
||||
switch v := context.(type) { // this validates a field against the value in another field, i.e. dependent validation
|
||||
case StructWithCustomByteArray:
|
||||
return len(v.ID) >= v.CustomMinLength
|
||||
}
|
||||
return false
|
||||
}))
|
||||
```
|
||||
|
||||
###### Custom error messages
|
||||
Custom error messages are supported via annotations by adding the `~` separator - here's an example of how to use it:
|
||||
```go
|
||||
type Ticket struct {
|
||||
Id int64 `json:"id"`
|
||||
FirstName string `json:"firstname" valid:"required~First name is blank"`
|
||||
}
|
||||
```
|
||||
|
||||
#### Notes
|
||||
Documentation is available here: [godoc.org](https://godoc.org/github.com/asaskevich/govalidator).
|
||||
Full information about code coverage is also available here: [govalidator on gocover.io](http://gocover.io/github.com/asaskevich/govalidator).
|
||||
|
||||
#### Support
|
||||
If you do have a contribution to the package, feel free to create a Pull Request or an Issue.
|
||||
|
||||
#### What to contribute
|
||||
If you don't know what to do, there are some features and functions that need to be done
|
||||
|
||||
- [ ] Refactor code
|
||||
- [ ] Edit docs and [README](https://github.com/asaskevich/govalidator/README.md): spellcheck, grammar and typo check
|
||||
- [ ] Create actual list of contributors and projects that currently using this package
|
||||
- [ ] Resolve [issues and bugs](https://github.com/asaskevich/govalidator/issues)
|
||||
- [ ] Update actual [list of functions](https://github.com/asaskevich/govalidator#list-of-functions)
|
||||
- [ ] Update [list of validators](https://github.com/asaskevich/govalidator#validatestruct-2) that available for `ValidateStruct` and add new
|
||||
- [ ] Implement new validators: `IsFQDN`, `IsIMEI`, `IsPostalCode`, `IsISIN`, `IsISRC` etc
|
||||
- [ ] Implement [validation by maps](https://github.com/asaskevich/govalidator/issues/224)
|
||||
- [ ] Implement fuzzing testing
|
||||
- [ ] Implement some struct/map/array utilities
|
||||
- [ ] Implement map/array validation
|
||||
- [ ] Implement benchmarking
|
||||
- [ ] Implement batch of examples
|
||||
- [ ] Look at forks for new features and fixes
|
||||
|
||||
#### Advice
|
||||
Feel free to create what you want, but keep in mind when you implement new features:
|
||||
- Code must be clear and readable, names of variables/constants clearly describes what they are doing
|
||||
- Public functions must be documented and described in source file and added to README.md to the list of available functions
|
||||
- There are must be unit-tests for any new functions and improvements
|
||||
|
||||
## Credits
|
||||
### Contributors
|
||||
|
||||
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
|
||||
|
||||
#### Special thanks to [contributors](https://github.com/asaskevich/govalidator/graphs/contributors)
|
||||
* [Daniel Lohse](https://github.com/annismckenzie)
|
||||
* [Attila Oláh](https://github.com/attilaolah)
|
||||
* [Daniel Korner](https://github.com/Dadie)
|
||||
* [Steven Wilkin](https://github.com/stevenwilkin)
|
||||
* [Deiwin Sarjas](https://github.com/deiwin)
|
||||
* [Noah Shibley](https://github.com/slugmobile)
|
||||
* [Nathan Davies](https://github.com/nathj07)
|
||||
* [Matt Sanford](https://github.com/mzsanford)
|
||||
* [Simon ccl1115](https://github.com/ccl1115)
|
||||
|
||||
<a href="graphs/contributors"><img src="https://opencollective.com/govalidator/contributors.svg?width=890" /></a>
|
||||
|
||||
|
||||
### Backers
|
||||
|
||||
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/govalidator#backer)]
|
||||
|
||||
<a href="https://opencollective.com/govalidator#backers" target="_blank"><img src="https://opencollective.com/govalidator/backers.svg?width=890"></a>
|
||||
|
||||
|
||||
### Sponsors
|
||||
|
||||
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/govalidator#sponsor)]
|
||||
|
||||
<a href="https://opencollective.com/govalidator/sponsor/0/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/1/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/2/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/3/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/4/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/5/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/6/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/7/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/8/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/govalidator/sponsor/9/website" target="_blank"><img src="https://opencollective.com/govalidator/sponsor/9/avatar.svg"></a>
|
||||
|
||||
|
||||
116
vendor/github.com/asaskevich/govalidator/arrays_test.go
generated
vendored
116
vendor/github.com/asaskevich/govalidator/arrays_test.go
generated
vendored
@@ -1,116 +0,0 @@
|
||||
package govalidator
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestEach(t *testing.T) {
|
||||
// TODO Maybe refactor?
|
||||
t.Parallel()
|
||||
acc := 0
|
||||
data := []interface{}{1, 2, 3, 4, 5}
|
||||
var fn Iterator = func(value interface{}, index int) {
|
||||
acc = acc + value.(int)
|
||||
}
|
||||
Each(data, fn)
|
||||
if acc != 15 {
|
||||
t.Errorf("Expected Each(..) to be %v, got %v", 15, acc)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleEach() {
|
||||
data := []interface{}{1, 2, 3, 4, 5}
|
||||
var fn Iterator = func(value interface{}, index int) {
|
||||
println(value.(int))
|
||||
}
|
||||
Each(data, fn)
|
||||
}
|
||||
|
||||
func TestMap(t *testing.T) {
|
||||
// TODO Maybe refactor?
|
||||
t.Parallel()
|
||||
data := []interface{}{1, 2, 3, 4, 5}
|
||||
var fn ResultIterator = func(value interface{}, index int) interface{} {
|
||||
return value.(int) * 3
|
||||
}
|
||||
result := Map(data, fn)
|
||||
for i, d := range result {
|
||||
if d != fn(data[i], i) {
|
||||
t.Errorf("Expected Map(..) to be %v, got %v", fn(data[i], i), d)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleMap() {
|
||||
data := []interface{}{1, 2, 3, 4, 5}
|
||||
var fn ResultIterator = func(value interface{}, index int) interface{} {
|
||||
return value.(int) * 3
|
||||
}
|
||||
_ = Map(data, fn) // result = []interface{}{1, 6, 9, 12, 15}
|
||||
}
|
||||
|
||||
func TestFind(t *testing.T) {
|
||||
// TODO Maybe refactor?
|
||||
t.Parallel()
|
||||
findElement := 96
|
||||
data := []interface{}{1, 2, 3, 4, findElement, 5}
|
||||
var fn1 ConditionIterator = func(value interface{}, index int) bool {
|
||||
return value.(int) == findElement
|
||||
}
|
||||
var fn2 ConditionIterator = func(value interface{}, index int) bool {
|
||||
value, _ = value.(string)
|
||||
return value == "govalidator"
|
||||
}
|
||||
val1 := Find(data, fn1)
|
||||
val2 := Find(data, fn2)
|
||||
if val1 != findElement {
|
||||
t.Errorf("Expected Find(..) to be %v, got %v", findElement, val1)
|
||||
}
|
||||
if val2 != nil {
|
||||
t.Errorf("Expected Find(..) to be %v, got %v", nil, val2)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilter(t *testing.T) {
|
||||
// TODO Maybe refactor?
|
||||
t.Parallel()
|
||||
data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
answer := []interface{}{2, 4, 6, 8, 10}
|
||||
var fn ConditionIterator = func(value interface{}, index int) bool {
|
||||
return value.(int)%2 == 0
|
||||
}
|
||||
result := Filter(data, fn)
|
||||
for i := range result {
|
||||
if result[i] != answer[i] {
|
||||
t.Errorf("Expected Filter(..) to be %v, got %v", answer[i], result[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleFilter() {
|
||||
data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
var fn ConditionIterator = func(value interface{}, index int) bool {
|
||||
return value.(int)%2 == 0
|
||||
}
|
||||
_ = Filter(data, fn) // result = []interface{}{2, 4, 6, 8, 10}
|
||||
}
|
||||
|
||||
func TestCount(t *testing.T) {
|
||||
// TODO Maybe refactor?
|
||||
t.Parallel()
|
||||
data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
count := 5
|
||||
var fn ConditionIterator = func(value interface{}, index int) bool {
|
||||
return value.(int)%2 == 0
|
||||
}
|
||||
result := Count(data, fn)
|
||||
if result != count {
|
||||
t.Errorf("Expected Count(..) to be %v, got %v", count, result)
|
||||
}
|
||||
}
|
||||
|
||||
func ExampleCount() {
|
||||
data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
var fn ConditionIterator = func(value interface{}, index int) bool {
|
||||
return value.(int)%2 == 0
|
||||
}
|
||||
_ = Count(data, fn) // result = 5
|
||||
}
|
||||
78
vendor/github.com/asaskevich/govalidator/converter_test.go
generated
vendored
78
vendor/github.com/asaskevich/govalidator/converter_test.go
generated
vendored
@@ -1,78 +0,0 @@
|
||||
package govalidator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestToInt(t *testing.T) {
|
||||
tests := []string{"1000", "-123", "abcdef", "100000000000000000000000000000000000000000000"}
|
||||
expected := []int64{1000, -123, 0, 0}
|
||||
for i := 0; i < len(tests); i++ {
|
||||
result, _ := ToInt(tests[i])
|
||||
if result != expected[i] {
|
||||
t.Log("Case ", i, ": expected ", expected[i], " when result is ", result)
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestToBoolean(t *testing.T) {
|
||||
tests := []string{"true", "1", "True", "false", "0", "abcdef"}
|
||||
expected := []bool{true, true, true, false, false, false}
|
||||
for i := 0; i < len(tests); i++ {
|
||||
res, _ := ToBoolean(tests[i])
|
||||
if res != expected[i] {
|
||||
t.Log("Case ", i, ": expected ", expected[i], " when result is ", res)
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func toString(t *testing.T, test interface{}, expected string) {
|
||||
res := ToString(test)
|
||||
if res != expected {
|
||||
t.Log("Case ToString: expected ", expected, " when result is ", res)
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestToString(t *testing.T) {
|
||||
toString(t, "str123", "str123")
|
||||
toString(t, 123, "123")
|
||||
toString(t, 12.3, "12.3")
|
||||
toString(t, true, "true")
|
||||
toString(t, 1.5+10i, "(1.5+10i)")
|
||||
// Sprintf function not guarantee that maps with equal keys always will be equal in string representation
|
||||
//toString(t, struct{ Keys map[int]int }{Keys: map[int]int{1: 2, 3: 4}}, "{map[1:2 3:4]}")
|
||||
}
|
||||
|
||||
func TestToFloat(t *testing.T) {
|
||||
tests := []string{"", "123", "-.01", "10.", "string", "1.23e3", ".23e10"}
|
||||
expected := []float64{0, 123, -0.01, 10.0, 0, 1230, 0.23e10}
|
||||
for i := 0; i < len(tests); i++ {
|
||||
res, _ := ToFloat(tests[i])
|
||||
if res != expected[i] {
|
||||
t.Log("Case ", i, ": expected ", expected[i], " when result is ", res)
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestToJSON(t *testing.T) {
|
||||
tests := []interface{}{"test", map[string]string{"a": "b", "b": "c"}, func() error { return fmt.Errorf("Error") }}
|
||||
expected := [][]string{
|
||||
{"\"test\"", "<nil>"},
|
||||
{"{\"a\":\"b\",\"b\":\"c\"}", "<nil>"},
|
||||
{"", "json: unsupported type: func() error"},
|
||||
}
|
||||
for i, test := range tests {
|
||||
actual, err := ToJSON(test)
|
||||
if actual != expected[i][0] {
|
||||
t.Errorf("Expected toJSON(%v) to return '%v', got '%v'", test, expected[i][0], actual)
|
||||
}
|
||||
if fmt.Sprintf("%v", err) != expected[i][1] {
|
||||
t.Errorf("Expected error returned from toJSON(%v) to return '%v', got '%v'", test, expected[i][1], fmt.Sprintf("%v", err))
|
||||
}
|
||||
}
|
||||
}
|
||||
29
vendor/github.com/asaskevich/govalidator/error_test.go
generated
vendored
29
vendor/github.com/asaskevich/govalidator/error_test.go
generated
vendored
@@ -1,29 +0,0 @@
|
||||
package govalidator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestErrorsToString(t *testing.T) {
|
||||
t.Parallel()
|
||||
customErr := &Error{Name: "Custom Error Name", Err: fmt.Errorf("stdlib error")}
|
||||
customErrWithCustomErrorMessage := &Error{Name: "Custom Error Name 2", Err: fmt.Errorf("Bad stuff happened"), CustomErrorMessageExists: true}
|
||||
|
||||
var tests = []struct {
|
||||
param1 Errors
|
||||
expected string
|
||||
}{
|
||||
{Errors{}, ""},
|
||||
{Errors{fmt.Errorf("Error 1")}, "Error 1"},
|
||||
{Errors{fmt.Errorf("Error 1"), fmt.Errorf("Error 2")}, "Error 1;Error 2"},
|
||||
{Errors{customErr, fmt.Errorf("Error 2")}, "Custom Error Name: stdlib error;Error 2"},
|
||||
{Errors{fmt.Errorf("Error 123"), customErrWithCustomErrorMessage}, "Error 123;Bad stuff happened"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := test.param1.Error()
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Error() to return '%v', got '%v'", test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
549
vendor/github.com/asaskevich/govalidator/numerics_test.go
generated
vendored
549
vendor/github.com/asaskevich/govalidator/numerics_test.go
generated
vendored
@@ -1,549 +0,0 @@
|
||||
package govalidator
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestAbs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected float64
|
||||
}{
|
||||
{0, 0},
|
||||
{-1, 1},
|
||||
{10, 10},
|
||||
{3.14, 3.14},
|
||||
{-96, 96},
|
||||
{-10e-12, 10e-12},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Abs(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Abs(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSign(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected float64
|
||||
}{
|
||||
{0, 0},
|
||||
{-1, -1},
|
||||
{10, 1},
|
||||
{3.14, 1},
|
||||
{-96, -1},
|
||||
{-10e-12, -1},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Sign(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Sign(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNegative(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected bool
|
||||
}{
|
||||
{0, false},
|
||||
{-1, true},
|
||||
{10, false},
|
||||
{3.14, false},
|
||||
{-96, true},
|
||||
{-10e-12, true},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := IsNegative(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected IsNegative(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNonNegative(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected bool
|
||||
}{
|
||||
{0, true},
|
||||
{-1, false},
|
||||
{10, true},
|
||||
{3.14, true},
|
||||
{-96, false},
|
||||
{-10e-12, false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := IsNonNegative(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected IsNonNegative(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsPositive(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected bool
|
||||
}{
|
||||
{0, false},
|
||||
{-1, false},
|
||||
{10, true},
|
||||
{3.14, true},
|
||||
{-96, false},
|
||||
{-10e-12, false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := IsPositive(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected IsPositive(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNonPositive(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected bool
|
||||
}{
|
||||
{0, true},
|
||||
{-1, true},
|
||||
{10, false},
|
||||
{3.14, false},
|
||||
{-96, true},
|
||||
{-10e-12, true},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := IsNonPositive(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected IsNonPositive(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsWhole(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected bool
|
||||
}{
|
||||
{0, true},
|
||||
{-1, true},
|
||||
{10, true},
|
||||
{3.14, false},
|
||||
{-96, true},
|
||||
{-10e-12, false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := IsWhole(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected IsWhole(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNatural(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
expected bool
|
||||
}{
|
||||
{0, false},
|
||||
{-1, false},
|
||||
{10, true},
|
||||
{3.14, false},
|
||||
{96, true},
|
||||
{-10e-12, false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := IsNatural(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected IsNatural(%v) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestInRangeInt(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var testAsInts = []struct {
|
||||
param int
|
||||
left int
|
||||
right int
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsInts {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type int", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsInt8s = []struct {
|
||||
param int8
|
||||
left int8
|
||||
right int8
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsInt8s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type int8", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsInt16s = []struct {
|
||||
param int16
|
||||
left int16
|
||||
right int16
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsInt16s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type int16", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsInt32s = []struct {
|
||||
param int32
|
||||
left int32
|
||||
right int32
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsInt32s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type int32", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsInt64s = []struct {
|
||||
param int64
|
||||
left int64
|
||||
right int64
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsInt64s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type int64", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsUInts = []struct {
|
||||
param uint
|
||||
left uint
|
||||
right uint
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{0, 0, 1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsUInts {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type uint", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsUInt8s = []struct {
|
||||
param uint8
|
||||
left uint8
|
||||
right uint8
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{0, 0, 1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsUInt8s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type uint", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsUInt16s = []struct {
|
||||
param uint16
|
||||
left uint16
|
||||
right uint16
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{0, 0, 1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsUInt16s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type uint", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsUInt32s = []struct {
|
||||
param uint32
|
||||
left uint32
|
||||
right uint32
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{0, 0, 1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsUInt32s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type uint", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsUInt64s = []struct {
|
||||
param uint64
|
||||
left uint64
|
||||
right uint64
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{0, 0, 1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testAsUInt64s {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type uint", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testAsStrings = []struct {
|
||||
param string
|
||||
left string
|
||||
right string
|
||||
expected bool
|
||||
}{
|
||||
{"0", "0", "0", true},
|
||||
{"1", "0", "0", false},
|
||||
{"-1", "0", "0", false},
|
||||
{"0", "-1", "1", true},
|
||||
{"0", "0", "1", true},
|
||||
{"0", "-1", "0", true},
|
||||
{"0", "0", "-1", true},
|
||||
{"0", "10", "5", false},
|
||||
}
|
||||
for _, test := range testAsStrings {
|
||||
actual := InRangeInt(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeInt(%v, %v, %v) to be %v, got %v using type string", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestInRangeFloat32(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float32
|
||||
left float32
|
||||
right float32
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := InRangeFloat32(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeFloat32(%v, %v, %v) to be %v, got %v", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestInRangeFloat64(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param float64
|
||||
left float64
|
||||
right float64
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := InRangeFloat64(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRangeFloat64(%v, %v, %v) to be %v, got %v", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestInRange(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var testsInt = []struct {
|
||||
param int
|
||||
left int
|
||||
right int
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testsInt {
|
||||
actual := InRange(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRange(%v, %v, %v) to be %v, got %v", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testsFloat32 = []struct {
|
||||
param float32
|
||||
left float32
|
||||
right float32
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testsFloat32 {
|
||||
actual := InRange(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRange(%v, %v, %v) to be %v, got %v", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testsFloat64 = []struct {
|
||||
param float64
|
||||
left float64
|
||||
right float64
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, true},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, true},
|
||||
{0, 0, 1, true},
|
||||
{0, -1, 0, true},
|
||||
{0, 0, -1, true},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testsFloat64 {
|
||||
actual := InRange(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRange(%v, %v, %v) to be %v, got %v", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var testsTypeMix = []struct {
|
||||
param int
|
||||
left float64
|
||||
right float64
|
||||
expected bool
|
||||
}{
|
||||
{0, 0, 0, false},
|
||||
{1, 0, 0, false},
|
||||
{-1, 0, 0, false},
|
||||
{0, -1, 1, false},
|
||||
{0, 0, 1, false},
|
||||
{0, -1, 0, false},
|
||||
{0, 0, -1, false},
|
||||
{0, 10, 5, false},
|
||||
}
|
||||
for _, test := range testsTypeMix {
|
||||
actual := InRange(test.param, test.left, test.right)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected InRange(%v, %v, %v) to be %v, got %v", test.param, test.left, test.right, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
17
vendor/github.com/asaskevich/govalidator/utils_benchmark_test.go
generated
vendored
17
vendor/github.com/asaskevich/govalidator/utils_benchmark_test.go
generated
vendored
@@ -1,17 +0,0 @@
|
||||
package govalidator
|
||||
|
||||
import "testing"
|
||||
|
||||
func BenchmarkContains(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
for n := 0; n < b.N; n++ {
|
||||
Contains("a0b01c012deffghijklmnopqrstu0123456vwxyz", "0123456789")
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkMatches(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
for n := 0; n < b.N; n++ {
|
||||
Matches("alfkjl12309fdjldfsa209jlksdfjLAKJjs9uJH234", "[\\w\\d]+")
|
||||
}
|
||||
}
|
||||
502
vendor/github.com/asaskevich/govalidator/utils_test.go
generated
vendored
502
vendor/github.com/asaskevich/govalidator/utils_test.go
generated
vendored
@@ -1,502 +0,0 @@
|
||||
package govalidator
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestContains(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected bool
|
||||
}{
|
||||
{"abacada", "", true},
|
||||
{"abacada", "ritir", false},
|
||||
{"abacada", "a", true},
|
||||
{"abacada", "aca", true},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Contains(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Contains(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatches(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected bool
|
||||
}{
|
||||
{"123456789", "[0-9]+", true},
|
||||
{"abacada", "cab$", false},
|
||||
{"111222333", "((111|222|333)+)+", true},
|
||||
{"abacaba", "((123+]", false},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Matches(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Matches(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLeftTrim(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected string
|
||||
}{
|
||||
{" \r\n\tfoo \r\n\t ", "", "foo \r\n\t "},
|
||||
{"010100201000", "01", "201000"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := LeftTrim(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected LeftTrim(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRightTrim(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected string
|
||||
}{
|
||||
{" \r\n\tfoo \r\n\t ", "", " \r\n\tfoo"},
|
||||
{"010100201000", "01", "0101002"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := RightTrim(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected RightTrim(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrim(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected string
|
||||
}{
|
||||
{" \r\n\tfoo \r\n\t ", "", "foo"},
|
||||
{"010100201000", "01", "2"},
|
||||
{"1234567890987654321", "1-8", "909"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Trim(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Trim(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This small example illustrate how to work with Trim function.
|
||||
func ExampleTrim() {
|
||||
// Remove from left and right spaces and "\r", "\n", "\t" characters
|
||||
println(Trim(" \r\r\ntext\r \t\n", "") == "text")
|
||||
// Remove from left and right characters that are between "1" and "8".
|
||||
// "1-8" is like full list "12345678".
|
||||
println(Trim("1234567890987654321", "1-8") == "909")
|
||||
}
|
||||
|
||||
func TestWhiteList(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected string
|
||||
}{
|
||||
{"abcdef", "abc", "abc"},
|
||||
{"aaaaaaaaaabbbbbbbbbb", "abc", "aaaaaaaaaabbbbbbbbbb"},
|
||||
{"a1b2c3", "abc", "abc"},
|
||||
{" ", "abc", ""},
|
||||
{"a3a43a5a4a3a2a23a4a5a4a3a4", "a-z", "aaaaaaaaaaaa"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := WhiteList(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected WhiteList(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This small example illustrate how to work with WhiteList function.
|
||||
func ExampleWhiteList() {
|
||||
// Remove all characters from string ignoring characters between "a" and "z"
|
||||
println(WhiteList("a3a43a5a4a3a2a23a4a5a4a3a4", "a-z") == "aaaaaaaaaaaa")
|
||||
}
|
||||
|
||||
func TestBlackList(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
expected string
|
||||
}{
|
||||
{"abcdef", "abc", "def"},
|
||||
{"aaaaaaaaaabbbbbbbbbb", "abc", ""},
|
||||
{"a1b2c3", "abc", "123"},
|
||||
{" ", "abc", " "},
|
||||
{"a3a43a5a4a3a2a23a4a5a4a3a4", "a-z", "34354322345434"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := BlackList(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected BlackList(%q,%q) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestStripLow(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 bool
|
||||
expected string
|
||||
}{
|
||||
{"foo\x00", false, "foo"},
|
||||
{"\x7Ffoo\x02", false, "foo"},
|
||||
{"\x01\x09", false, ""},
|
||||
{"foo\x0A\x0D", false, "foo"},
|
||||
{"perch\u00e9", false, "perch\u00e9"},
|
||||
{"\u20ac", false, "\u20ac"},
|
||||
{"\u2206\x0A", false, "\u2206"},
|
||||
{"foo\x0A\x0D", true, "foo\x0A\x0D"},
|
||||
{"\x03foo\x0A\x0D", true, "foo\x0A\x0D"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := StripLow(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected StripLow(%q,%t) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReplacePattern(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
param3 string
|
||||
expected string
|
||||
}{
|
||||
{"ab123ba", "[0-9]+", "aca", "abacaba"},
|
||||
{"abacaba", "[0-9]+", "aca", "abacaba"},
|
||||
{"httpftp://github.comio", "(ftp|io)", "", "http://github.com"},
|
||||
{"aaaaaaaaaa", "a", "", ""},
|
||||
{"http123123ftp://git534543hub.comio", "(ftp|io|[0-9]+)", "", "http://github.com"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := ReplacePattern(test.param1, test.param2, test.param3)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected ReplacePattern(%q,%q,%q) to be %v, got %v", test.param1, test.param2, test.param3, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This small example illustrate how to work with ReplacePattern function.
|
||||
func ExampleReplacePattern() {
|
||||
// Replace in "http123123ftp://git534543hub.comio" following (pattern "(ftp|io|[0-9]+)"):
|
||||
// - Sequence "ftp".
|
||||
// - Sequence "io".
|
||||
// - Sequence of digits.
|
||||
// with empty string.
|
||||
println(ReplacePattern("http123123ftp://git534543hub.comio", "(ftp|io|[0-9]+)", "") == "http://github.com")
|
||||
}
|
||||
|
||||
func TestEscape(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{`<img alt="foo&bar">`, "<img alt="foo&bar">"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Escape(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Escape(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnderscoreToCamelCase(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{"a_b_c", "ABC"},
|
||||
{"my_func", "MyFunc"},
|
||||
{"1ab_cd", "1abCd"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := UnderscoreToCamelCase(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected UnderscoreToCamelCase(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCamelCaseToUnderscore(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{"MyFunc", "my_func"},
|
||||
{"ABC", "a_b_c"},
|
||||
{"1B", "1_b"},
|
||||
{"foo_bar", "foo_bar"},
|
||||
{"FooV2Bar", "foo_v2_bar"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := CamelCaseToUnderscore(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected CamelCaseToUnderscore(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReverse(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{"abc", "cba"},
|
||||
{"カタカナ", "ナカタカ"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Reverse(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Reverse(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetLines(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected []string
|
||||
}{
|
||||
{"abc", []string{"abc"}},
|
||||
{"a\nb\nc", []string{"a", "b", "c"}},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := GetLines(test.param)
|
||||
if !reflect.DeepEqual(actual, test.expected) {
|
||||
t.Errorf("Expected GetLines(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetLine(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 int
|
||||
expected string
|
||||
}{
|
||||
{"abc", 0, "abc"},
|
||||
{"a\nb\nc", 0, "a"},
|
||||
{"abc", -1, ""},
|
||||
{"abacaba\n", 1, ""},
|
||||
{"abc", 3, ""},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual, _ := GetLine(test.param1, test.param2)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected GetLine(%q, %d) to be %v, got %v", test.param1, test.param2, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveTags(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{"abc", "abc"},
|
||||
{"<!-- Test -->", ""},
|
||||
{"<div><div><p><a>Text</a></p></div></div>", "Text"},
|
||||
{`<a href="#">Link</a>`, "Link"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := RemoveTags(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected RemoveTags(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSafeFileName(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{"abc", "abc"},
|
||||
{"123456789 '_-?ASDF@£$%£%^é.html", "123456789-asdf.html"},
|
||||
{"ReadMe.md", "readme.md"},
|
||||
{"file:///c:/test.go", "test.go"},
|
||||
{"../../../Hello World!.txt", "hello-world.txt"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := SafeFileName(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected SafeFileName(%q) to be %v, got %v", test.param, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeEmail(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param string
|
||||
expected string
|
||||
}{
|
||||
{`test@me.com`, `test@me.com`},
|
||||
{`some.name@gmail.com`, `somename@gmail.com`},
|
||||
{`some.name@googlemail.com`, `somename@gmail.com`},
|
||||
{`some.name+extension@gmail.com`, `somename@gmail.com`},
|
||||
{`some.name+extension@googlemail.com`, `somename@gmail.com`},
|
||||
{`some.name.middlename+extension@gmail.com`, `somenamemiddlename@gmail.com`},
|
||||
{`some.name.middlename+extension@googlemail.com`, `somenamemiddlename@gmail.com`},
|
||||
{`some.name.midd.lena.me.+extension@gmail.com`, `somenamemiddlename@gmail.com`},
|
||||
{`some.name.midd.lena.me.+extension@googlemail.com`, `somenamemiddlename@gmail.com`},
|
||||
{`some.name+extension@unknown.com`, `some.name+extension@unknown.com`},
|
||||
// TODO: {`hans@m端ller.com`, `hans@m端ller.com`},
|
||||
{`hans`, ``},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual, err := NormalizeEmail(test.param)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected NormalizeEmail(%q) to be %v, got %v, err %v", test.param, test.expected, actual, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTruncate(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 int
|
||||
param3 string
|
||||
expected string
|
||||
}{
|
||||
{`Lorem ipsum dolor sit amet, consectetur adipiscing elit.`, 25, `...`, `Lorem ipsum dolor sit amet...`},
|
||||
{`Measuring programming progress by lines of code is like measuring aircraft building progress by weight.`, 35, ` new born babies!`, `Measuring programming progress by new born babies!`},
|
||||
{`Testestestestestestestestestest testestestestestestestestest`, 7, `...`, `Testestestestestestestestestest...`},
|
||||
{`Testing`, 7, `...`, `Testing`},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := Truncate(test.param1, test.param2, test.param3)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected Truncate(%q, %d, %q) to be %v, got %v", test.param1, test.param2, test.param3, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPadLeft(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
param3 int
|
||||
expected string
|
||||
}{
|
||||
{"こんにちは", "xyz", 12, "xyzxyzxこんにちは"},
|
||||
{"こんにちは", "xyz", 11, "xyzxyzこんにちは"},
|
||||
{"abc", "x", 5, "xxabc"},
|
||||
{"abc", "xyz", 5, "xyabc"},
|
||||
{"abcde", "xyz", 5, "abcde"},
|
||||
{"abcde", "xyz", 4, "abcde"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := PadLeft(test.param1, test.param2, test.param3)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected PadLeft(%q,%q,%q) to be %v, got %v", test.param1, test.param2, test.param3, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPadRight(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
param3 int
|
||||
expected string
|
||||
}{
|
||||
{"こんにちは", "xyz", 12, "こんにちはxyzxyzx"},
|
||||
{"こんにちは", "xyz", 11, "こんにちはxyzxyz"},
|
||||
{"abc", "x", 5, "abcxx"},
|
||||
{"abc", "xyz", 5, "abcxy"},
|
||||
{"abcde", "xyz", 5, "abcde"},
|
||||
{"abcde", "xyz", 4, "abcde"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := PadRight(test.param1, test.param2, test.param3)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected PadRight(%q,%q,%q) to be %v, got %v", test.param1, test.param2, test.param3, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPadBoth(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var tests = []struct {
|
||||
param1 string
|
||||
param2 string
|
||||
param3 int
|
||||
expected string
|
||||
}{
|
||||
{"こんにちは", "xyz", 12, "xyzこんにちはxyzx"},
|
||||
{"こんにちは", "xyz", 11, "xyzこんにちはxyz"},
|
||||
{"abc", "x", 5, "xabcx"},
|
||||
{"abc", "xyz", 5, "xabcx"},
|
||||
{"abcde", "xyz", 5, "abcde"},
|
||||
{"abcde", "xyz", 4, "abcde"},
|
||||
}
|
||||
for _, test := range tests {
|
||||
actual := PadBoth(test.param1, test.param2, test.param3)
|
||||
if actual != test.expected {
|
||||
t.Errorf("Expected PadBoth(%q,%q,%q) to be %v, got %v", test.param1, test.param2, test.param3, test.expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
3216
vendor/github.com/asaskevich/govalidator/validator_test.go
generated
vendored
3216
vendor/github.com/asaskevich/govalidator/validator_test.go
generated
vendored
File diff suppressed because it is too large
Load Diff
15
vendor/github.com/asaskevich/govalidator/wercker.yml
generated
vendored
15
vendor/github.com/asaskevich/govalidator/wercker.yml
generated
vendored
@@ -1,15 +0,0 @@
|
||||
box: golang
|
||||
build:
|
||||
steps:
|
||||
- setup-go-workspace
|
||||
|
||||
- script:
|
||||
name: go get
|
||||
code: |
|
||||
go version
|
||||
go get -t ./...
|
||||
|
||||
- script:
|
||||
name: go test
|
||||
code: |
|
||||
go test -race ./...
|
||||
Reference in New Issue
Block a user