github.com/v2pro/plz@v0.0.0-20221028024117-e5f9aec5b631/test/testify/assert/forward_assertions_test.go (about) 1 package assert 2 3 import ( 4 "errors" 5 "regexp" 6 "testing" 7 "time" 8 ) 9 10 func TestImplementsWrapper(t *testing.T) { 11 assert := New(new(testing.T)) 12 13 if !assert.Implements((*AssertionTesterInterface)(nil), new(AssertionTesterConformingObject)) { 14 t.Error("Implements method should return true: AssertionTesterConformingObject implements AssertionTesterInterface") 15 } 16 if assert.Implements((*AssertionTesterInterface)(nil), new(AssertionTesterNonConformingObject)) { 17 t.Error("Implements method should return false: AssertionTesterNonConformingObject does not implements AssertionTesterInterface") 18 } 19 } 20 21 func TestIsTypeWrapper(t *testing.T) { 22 assert := New(new(testing.T)) 23 24 if !assert.IsType(new(AssertionTesterConformingObject), new(AssertionTesterConformingObject)) { 25 t.Error("IsType should return true: AssertionTesterConformingObject is the same type as AssertionTesterConformingObject") 26 } 27 if assert.IsType(new(AssertionTesterConformingObject), new(AssertionTesterNonConformingObject)) { 28 t.Error("IsType should return false: AssertionTesterConformingObject is not the same type as AssertionTesterNonConformingObject") 29 } 30 31 } 32 33 func TestEqualWrapper(t *testing.T) { 34 assert := New(new(testing.T)) 35 36 if !assert.Equal("Hello World", "Hello World") { 37 t.Error("Equal should return true") 38 } 39 if !assert.Equal(123, 123) { 40 t.Error("Equal should return true") 41 } 42 if !assert.Equal(123.5, 123.5) { 43 t.Error("Equal should return true") 44 } 45 if !assert.Equal([]byte("Hello World"), []byte("Hello World")) { 46 t.Error("Equal should return true") 47 } 48 if !assert.Equal(nil, nil) { 49 t.Error("Equal should return true") 50 } 51 } 52 53 func TestEqualValuesWrapper(t *testing.T) { 54 assert := New(new(testing.T)) 55 56 if !assert.EqualValues(uint32(10), int32(10)) { 57 t.Error("EqualValues should return true") 58 } 59 } 60 61 func TestNotNilWrapper(t *testing.T) { 62 assert := New(new(testing.T)) 63 64 if !assert.NotNil(new(AssertionTesterConformingObject)) { 65 t.Error("NotNil should return true: object is not nil") 66 } 67 if assert.NotNil(nil) { 68 t.Error("NotNil should return false: object is nil") 69 } 70 71 } 72 73 func TestNilWrapper(t *testing.T) { 74 assert := New(new(testing.T)) 75 76 if !assert.Nil(nil) { 77 t.Error("Nil should return true: object is nil") 78 } 79 if assert.Nil(new(AssertionTesterConformingObject)) { 80 t.Error("Nil should return false: object is not nil") 81 } 82 83 } 84 85 func TestTrueWrapper(t *testing.T) { 86 assert := New(new(testing.T)) 87 88 if !assert.True(true) { 89 t.Error("True should return true") 90 } 91 if assert.True(false) { 92 t.Error("True should return false") 93 } 94 95 } 96 97 func TestFalseWrapper(t *testing.T) { 98 assert := New(new(testing.T)) 99 100 if !assert.False(false) { 101 t.Error("False should return true") 102 } 103 if assert.False(true) { 104 t.Error("False should return false") 105 } 106 107 } 108 109 func TestExactlyWrapper(t *testing.T) { 110 assert := New(new(testing.T)) 111 112 a := float32(1) 113 b := float64(1) 114 c := float32(1) 115 d := float32(2) 116 117 if assert.Exactly(a, b) { 118 t.Error("Exactly should return false") 119 } 120 if assert.Exactly(a, d) { 121 t.Error("Exactly should return false") 122 } 123 if !assert.Exactly(a, c) { 124 t.Error("Exactly should return true") 125 } 126 127 if assert.Exactly(nil, a) { 128 t.Error("Exactly should return false") 129 } 130 if assert.Exactly(a, nil) { 131 t.Error("Exactly should return false") 132 } 133 134 } 135 136 func TestNotEqualWrapper(t *testing.T) { 137 138 assert := New(new(testing.T)) 139 140 if !assert.NotEqual("Hello World", "Hello World!") { 141 t.Error("NotEqual should return true") 142 } 143 if !assert.NotEqual(123, 1234) { 144 t.Error("NotEqual should return true") 145 } 146 if !assert.NotEqual(123.5, 123.55) { 147 t.Error("NotEqual should return true") 148 } 149 if !assert.NotEqual([]byte("Hello World"), []byte("Hello World!")) { 150 t.Error("NotEqual should return true") 151 } 152 if !assert.NotEqual(nil, new(AssertionTesterConformingObject)) { 153 t.Error("NotEqual should return true") 154 } 155 } 156 157 func TestContainsWrapper(t *testing.T) { 158 159 assert := New(new(testing.T)) 160 list := []string{"Foo", "Bar"} 161 162 if !assert.Contains("Hello World", "Hello") { 163 t.Error("Contains should return true: \"Hello World\" contains \"Hello\"") 164 } 165 if assert.Contains("Hello World", "Salut") { 166 t.Error("Contains should return false: \"Hello World\" does not contain \"Salut\"") 167 } 168 169 if !assert.Contains(list, "Foo") { 170 t.Error("Contains should return true: \"[\"Foo\", \"Bar\"]\" contains \"Foo\"") 171 } 172 if assert.Contains(list, "Salut") { 173 t.Error("Contains should return false: \"[\"Foo\", \"Bar\"]\" does not contain \"Salut\"") 174 } 175 176 } 177 178 func TestNotContainsWrapper(t *testing.T) { 179 180 assert := New(new(testing.T)) 181 list := []string{"Foo", "Bar"} 182 183 if !assert.NotContains("Hello World", "Hello!") { 184 t.Error("NotContains should return true: \"Hello World\" does not contain \"Hello!\"") 185 } 186 if assert.NotContains("Hello World", "Hello") { 187 t.Error("NotContains should return false: \"Hello World\" contains \"Hello\"") 188 } 189 190 if !assert.NotContains(list, "Foo!") { 191 t.Error("NotContains should return true: \"[\"Foo\", \"Bar\"]\" does not contain \"Foo!\"") 192 } 193 if assert.NotContains(list, "Foo") { 194 t.Error("NotContains should return false: \"[\"Foo\", \"Bar\"]\" contains \"Foo\"") 195 } 196 197 } 198 199 func TestConditionWrapper(t *testing.T) { 200 201 assert := New(new(testing.T)) 202 203 if !assert.Condition(func() bool { return true }, "Truth") { 204 t.Error("Condition should return true") 205 } 206 207 if assert.Condition(func() bool { return false }, "Lie") { 208 t.Error("Condition should return false") 209 } 210 211 } 212 213 func TestDidPanicWrapper(t *testing.T) { 214 215 if funcDidPanic, _ := didPanic(func() { 216 panic("Panic!") 217 }); !funcDidPanic { 218 t.Error("didPanic should return true") 219 } 220 221 if funcDidPanic, _ := didPanic(func() { 222 }); funcDidPanic { 223 t.Error("didPanic should return false") 224 } 225 226 } 227 228 func TestPanicsWrapper(t *testing.T) { 229 230 assert := New(new(testing.T)) 231 232 if !assert.Panics(func() { 233 panic("Panic!") 234 }) { 235 t.Error("Panics should return true") 236 } 237 238 if assert.Panics(func() { 239 }) { 240 t.Error("Panics should return false") 241 } 242 243 } 244 245 func TestNotPanicsWrapper(t *testing.T) { 246 247 assert := New(new(testing.T)) 248 249 if !assert.NotPanics(func() { 250 }) { 251 t.Error("NotPanics should return true") 252 } 253 254 if assert.NotPanics(func() { 255 panic("Panic!") 256 }) { 257 t.Error("NotPanics should return false") 258 } 259 260 } 261 262 func TestNoErrorWrapper(t *testing.T) { 263 assert := New(t) 264 mockAssert := New(new(testing.T)) 265 266 // start with a nil error 267 var err error 268 269 assert.True(mockAssert.NoError(err), "NoError should return True for nil arg") 270 271 // now set an error 272 err = errors.New("Some error") 273 274 assert.False(mockAssert.NoError(err), "NoError with error should return False") 275 276 } 277 278 func TestErrorWrapper(t *testing.T) { 279 assert := New(t) 280 mockAssert := New(new(testing.T)) 281 282 // start with a nil error 283 var err error 284 285 assert.False(mockAssert.Error(err), "Error should return False for nil arg") 286 287 // now set an error 288 err = errors.New("Some error") 289 290 assert.True(mockAssert.Error(err), "Error with error should return True") 291 292 } 293 294 func TestEqualErrorWrapper(t *testing.T) { 295 assert := New(t) 296 mockAssert := New(new(testing.T)) 297 298 // start with a nil error 299 var err error 300 assert.False(mockAssert.EqualError(err, ""), 301 "EqualError should return false for nil arg") 302 303 // now set an error 304 err = errors.New("some error") 305 assert.False(mockAssert.EqualError(err, "Not some error"), 306 "EqualError should return false for different error string") 307 assert.True(mockAssert.EqualError(err, "some error"), 308 "EqualError should return true") 309 } 310 311 func TestEmptyWrapper(t *testing.T) { 312 assert := New(t) 313 mockAssert := New(new(testing.T)) 314 315 assert.True(mockAssert.Empty(""), "Empty string is empty") 316 assert.True(mockAssert.Empty(nil), "Nil is empty") 317 assert.True(mockAssert.Empty([]string{}), "Empty string array is empty") 318 assert.True(mockAssert.Empty(0), "Zero int value is empty") 319 assert.True(mockAssert.Empty(false), "False value is empty") 320 321 assert.False(mockAssert.Empty("something"), "Non Empty string is not empty") 322 assert.False(mockAssert.Empty(errors.New("something")), "Non nil object is not empty") 323 assert.False(mockAssert.Empty([]string{"something"}), "Non empty string array is not empty") 324 assert.False(mockAssert.Empty(1), "Non-zero int value is not empty") 325 assert.False(mockAssert.Empty(true), "True value is not empty") 326 327 } 328 329 func TestNotEmptyWrapper(t *testing.T) { 330 assert := New(t) 331 mockAssert := New(new(testing.T)) 332 333 assert.False(mockAssert.NotEmpty(""), "Empty string is empty") 334 assert.False(mockAssert.NotEmpty(nil), "Nil is empty") 335 assert.False(mockAssert.NotEmpty([]string{}), "Empty string array is empty") 336 assert.False(mockAssert.NotEmpty(0), "Zero int value is empty") 337 assert.False(mockAssert.NotEmpty(false), "False value is empty") 338 339 assert.True(mockAssert.NotEmpty("something"), "Non Empty string is not empty") 340 assert.True(mockAssert.NotEmpty(errors.New("something")), "Non nil object is not empty") 341 assert.True(mockAssert.NotEmpty([]string{"something"}), "Non empty string array is not empty") 342 assert.True(mockAssert.NotEmpty(1), "Non-zero int value is not empty") 343 assert.True(mockAssert.NotEmpty(true), "True value is not empty") 344 345 } 346 347 func TestLenWrapper(t *testing.T) { 348 assert := New(t) 349 mockAssert := New(new(testing.T)) 350 351 assert.False(mockAssert.Len(nil, 0), "nil does not have length") 352 assert.False(mockAssert.Len(0, 0), "int does not have length") 353 assert.False(mockAssert.Len(true, 0), "true does not have length") 354 assert.False(mockAssert.Len(false, 0), "false does not have length") 355 assert.False(mockAssert.Len('A', 0), "Rune does not have length") 356 assert.False(mockAssert.Len(struct{}{}, 0), "Struct does not have length") 357 358 ch := make(chan int, 5) 359 ch <- 1 360 ch <- 2 361 ch <- 3 362 363 cases := []struct { 364 v interface{} 365 l int 366 }{ 367 {[]int{1, 2, 3}, 3}, 368 {[...]int{1, 2, 3}, 3}, 369 {"ABC", 3}, 370 {map[int]int{1: 2, 2: 4, 3: 6}, 3}, 371 {ch, 3}, 372 373 {[]int{}, 0}, 374 {map[int]int{}, 0}, 375 {make(chan int), 0}, 376 377 {[]int(nil), 0}, 378 {map[int]int(nil), 0}, 379 {(chan int)(nil), 0}, 380 } 381 382 for _, c := range cases { 383 assert.True(mockAssert.Len(c.v, c.l), "%#v have %d items", c.v, c.l) 384 } 385 } 386 387 func TestWithinDurationWrapper(t *testing.T) { 388 assert := New(t) 389 mockAssert := New(new(testing.T)) 390 a := time.Now() 391 b := a.Add(10 * time.Second) 392 393 assert.True(mockAssert.WithinDuration(a, b, 10*time.Second), "A 10s difference is within a 10s time difference") 394 assert.True(mockAssert.WithinDuration(b, a, 10*time.Second), "A 10s difference is within a 10s time difference") 395 396 assert.False(mockAssert.WithinDuration(a, b, 9*time.Second), "A 10s difference is not within a 9s time difference") 397 assert.False(mockAssert.WithinDuration(b, a, 9*time.Second), "A 10s difference is not within a 9s time difference") 398 399 assert.False(mockAssert.WithinDuration(a, b, -9*time.Second), "A 10s difference is not within a 9s time difference") 400 assert.False(mockAssert.WithinDuration(b, a, -9*time.Second), "A 10s difference is not within a 9s time difference") 401 402 assert.False(mockAssert.WithinDuration(a, b, -11*time.Second), "A 10s difference is not within a 9s time difference") 403 assert.False(mockAssert.WithinDuration(b, a, -11*time.Second), "A 10s difference is not within a 9s time difference") 404 } 405 406 func TestInDeltaWrapper(t *testing.T) { 407 assert := New(new(testing.T)) 408 409 True(t, assert.InDelta(1.001, 1, 0.01), "|1.001 - 1| <= 0.01") 410 True(t, assert.InDelta(1, 1.001, 0.01), "|1 - 1.001| <= 0.01") 411 True(t, assert.InDelta(1, 2, 1), "|1 - 2| <= 1") 412 False(t, assert.InDelta(1, 2, 0.5), "Expected |1 - 2| <= 0.5 to fail") 413 False(t, assert.InDelta(2, 1, 0.5), "Expected |2 - 1| <= 0.5 to fail") 414 False(t, assert.InDelta("", nil, 1), "Expected non numerals to fail") 415 416 cases := []struct { 417 a, b interface{} 418 delta float64 419 }{ 420 {uint8(2), uint8(1), 1}, 421 {uint16(2), uint16(1), 1}, 422 {uint32(2), uint32(1), 1}, 423 {uint64(2), uint64(1), 1}, 424 425 {int(2), int(1), 1}, 426 {int8(2), int8(1), 1}, 427 {int16(2), int16(1), 1}, 428 {int32(2), int32(1), 1}, 429 {int64(2), int64(1), 1}, 430 431 {float32(2), float32(1), 1}, 432 {float64(2), float64(1), 1}, 433 } 434 435 for _, tc := range cases { 436 True(t, assert.InDelta(tc.a, tc.b, tc.delta), "Expected |%V - %V| <= %v", tc.a, tc.b, tc.delta) 437 } 438 } 439 440 func TestInEpsilonWrapper(t *testing.T) { 441 assert := New(new(testing.T)) 442 443 cases := []struct { 444 a, b interface{} 445 epsilon float64 446 }{ 447 {uint8(2), uint16(2), .001}, 448 {2.1, 2.2, 0.1}, 449 {2.2, 2.1, 0.1}, 450 {-2.1, -2.2, 0.1}, 451 {-2.2, -2.1, 0.1}, 452 {uint64(100), uint8(101), 0.01}, 453 {0.1, -0.1, 2}, 454 } 455 456 for _, tc := range cases { 457 True(t, assert.InEpsilon(tc.a, tc.b, tc.epsilon, "Expected %V and %V to have a relative difference of %v", tc.a, tc.b, tc.epsilon)) 458 } 459 460 cases = []struct { 461 a, b interface{} 462 epsilon float64 463 }{ 464 {uint8(2), int16(-2), .001}, 465 {uint64(100), uint8(102), 0.01}, 466 {2.1, 2.2, 0.001}, 467 {2.2, 2.1, 0.001}, 468 {2.1, -2.2, 1}, 469 {2.1, "bla-bla", 0}, 470 {0.1, -0.1, 1.99}, 471 } 472 473 for _, tc := range cases { 474 False(t, assert.InEpsilon(tc.a, tc.b, tc.epsilon, "Expected %V and %V to have a relative difference of %v", tc.a, tc.b, tc.epsilon)) 475 } 476 } 477 478 func TestRegexpWrapper(t *testing.T) { 479 480 assert := New(new(testing.T)) 481 482 cases := []struct { 483 rx, str string 484 }{ 485 {"^start", "start of the line"}, 486 {"end$", "in the end"}, 487 {"[0-9]{3}[.-]?[0-9]{2}[.-]?[0-9]{2}", "My phone number is 650.12.34"}, 488 } 489 490 for _, tc := range cases { 491 True(t, assert.Regexp(tc.rx, tc.str)) 492 True(t, assert.Regexp(regexp.MustCompile(tc.rx), tc.str)) 493 False(t, assert.NotRegexp(tc.rx, tc.str)) 494 False(t, assert.NotRegexp(regexp.MustCompile(tc.rx), tc.str)) 495 } 496 497 cases = []struct { 498 rx, str string 499 }{ 500 {"^asdfastart", "Not the start of the line"}, 501 {"end$", "in the end."}, 502 {"[0-9]{3}[.-]?[0-9]{2}[.-]?[0-9]{2}", "My phone number is 650.12a.34"}, 503 } 504 505 for _, tc := range cases { 506 False(t, assert.Regexp(tc.rx, tc.str), "Expected \"%s\" to not match \"%s\"", tc.rx, tc.str) 507 False(t, assert.Regexp(regexp.MustCompile(tc.rx), tc.str)) 508 True(t, assert.NotRegexp(tc.rx, tc.str)) 509 True(t, assert.NotRegexp(regexp.MustCompile(tc.rx), tc.str)) 510 } 511 } 512 513 func TestZeroWrapper(t *testing.T) { 514 assert := New(t) 515 mockAssert := New(new(testing.T)) 516 517 for _, test := range zeros { 518 assert.True(mockAssert.Zero(test), "Zero should return true for %v", test) 519 } 520 521 for _, test := range nonZeros { 522 assert.False(mockAssert.Zero(test), "Zero should return false for %v", test) 523 } 524 } 525 526 func TestNotZeroWrapper(t *testing.T) { 527 assert := New(t) 528 mockAssert := New(new(testing.T)) 529 530 for _, test := range zeros { 531 assert.False(mockAssert.NotZero(test), "Zero should return true for %v", test) 532 } 533 534 for _, test := range nonZeros { 535 assert.True(mockAssert.NotZero(test), "Zero should return false for %v", test) 536 } 537 } 538 539 func TestJSONEqWrapper_EqualSONString(t *testing.T) { 540 assert := New(new(testing.T)) 541 if !assert.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"hello": "world", "foo": "bar"}`) { 542 t.Error("JSONEq should return true") 543 } 544 545 } 546 547 func TestJSONEqWrapper_EquivalentButNotEqual(t *testing.T) { 548 assert := New(new(testing.T)) 549 if !assert.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) { 550 t.Error("JSONEq should return true") 551 } 552 553 } 554 555 func TestJSONEqWrapper_HashOfArraysAndHashes(t *testing.T) { 556 assert := New(new(testing.T)) 557 if !assert.JSONEq("{\r\n\t\"numeric\": 1.5,\r\n\t\"array\": [{\"foo\": \"bar\"}, 1, \"string\", [\"nested\", \"array\", 5.5]],\r\n\t\"hash\": {\"nested\": \"hash\", \"nested_slice\": [\"this\", \"is\", \"nested\"]},\r\n\t\"string\": \"foo\"\r\n}", 558 "{\r\n\t\"numeric\": 1.5,\r\n\t\"hash\": {\"nested\": \"hash\", \"nested_slice\": [\"this\", \"is\", \"nested\"]},\r\n\t\"string\": \"foo\",\r\n\t\"array\": [{\"foo\": \"bar\"}, 1, \"string\", [\"nested\", \"array\", 5.5]]\r\n}") { 559 t.Error("JSONEq should return true") 560 } 561 } 562 563 func TestJSONEqWrapper_Array(t *testing.T) { 564 assert := New(new(testing.T)) 565 if !assert.JSONEq(`["foo", {"hello": "world", "nested": "hash"}]`, `["foo", {"nested": "hash", "hello": "world"}]`) { 566 t.Error("JSONEq should return true") 567 } 568 569 } 570 571 func TestJSONEqWrapper_HashAndArrayNotEquivalent(t *testing.T) { 572 assert := New(new(testing.T)) 573 if assert.JSONEq(`["foo", {"hello": "world", "nested": "hash"}]`, `{"foo": "bar", {"nested": "hash", "hello": "world"}}`) { 574 t.Error("JSONEq should return false") 575 } 576 } 577 578 func TestJSONEqWrapper_HashesNotEquivalent(t *testing.T) { 579 assert := New(new(testing.T)) 580 if assert.JSONEq(`{"foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) { 581 t.Error("JSONEq should return false") 582 } 583 } 584 585 func TestJSONEqWrapper_ActualIsNotJSON(t *testing.T) { 586 assert := New(new(testing.T)) 587 if assert.JSONEq(`{"foo": "bar"}`, "Not JSON") { 588 t.Error("JSONEq should return false") 589 } 590 } 591 592 func TestJSONEqWrapper_ExpectedIsNotJSON(t *testing.T) { 593 assert := New(new(testing.T)) 594 if assert.JSONEq("Not JSON", `{"foo": "bar", "hello": "world"}`) { 595 t.Error("JSONEq should return false") 596 } 597 } 598 599 func TestJSONEqWrapper_ExpectedAndActualNotJSON(t *testing.T) { 600 assert := New(new(testing.T)) 601 if assert.JSONEq("Not JSON", "Not JSON") { 602 t.Error("JSONEq should return false") 603 } 604 } 605 606 func TestJSONEqWrapper_ArraysOfDifferentOrder(t *testing.T) { 607 assert := New(new(testing.T)) 608 if assert.JSONEq(`["foo", {"hello": "world", "nested": "hash"}]`, `[{ "hello": "world", "nested": "hash"}, "foo"]`) { 609 t.Error("JSONEq should return false") 610 } 611 }