|
9 | 9 | "fmt"
|
10 | 10 | "reflect"
|
11 | 11 | "runtime"
|
| 12 | + "strings" |
12 | 13 | "testing"
|
13 | 14 | "time"
|
14 | 15 | )
|
@@ -389,3 +390,85 @@ func TestUserDefinedBytes(t *testing.T) {
|
389 | 390 | t.Fatal("userDefinedBytes got potentially dirty driver memory")
|
390 | 391 | }
|
391 | 392 | }
|
| 393 | + |
| 394 | +type Valuer_V string |
| 395 | + |
| 396 | +func (v Valuer_V) Value() (driver.Value, error) { |
| 397 | + return strings.ToUpper(string(v)), nil |
| 398 | +} |
| 399 | + |
| 400 | +type Valuer_P string |
| 401 | + |
| 402 | +func (p *Valuer_P) Value() (driver.Value, error) { |
| 403 | + if p == nil { |
| 404 | + return "nil-to-str", nil |
| 405 | + } |
| 406 | + return strings.ToUpper(string(*p)), nil |
| 407 | +} |
| 408 | + |
| 409 | +func TestDriverArgs(t *testing.T) { |
| 410 | + var nilValuerVPtr *Valuer_V |
| 411 | + var nilValuerPPtr *Valuer_P |
| 412 | + var nilStrPtr *string |
| 413 | + tests := []struct { |
| 414 | + args []interface{} |
| 415 | + want []driver.NamedValue |
| 416 | + }{ |
| 417 | + 0: { |
| 418 | + args: []interface{}{Valuer_V("foo")}, |
| 419 | + want: []driver.NamedValue{ |
| 420 | + driver.NamedValue{ |
| 421 | + Ordinal: 1, |
| 422 | + Value: "FOO", |
| 423 | + }, |
| 424 | + }, |
| 425 | + }, |
| 426 | + 1: { |
| 427 | + args: []interface{}{nilValuerVPtr}, |
| 428 | + want: []driver.NamedValue{ |
| 429 | + driver.NamedValue{ |
| 430 | + Ordinal: 1, |
| 431 | + Value: nil, |
| 432 | + }, |
| 433 | + }, |
| 434 | + }, |
| 435 | + 2: { |
| 436 | + args: []interface{}{nilValuerPPtr}, |
| 437 | + want: []driver.NamedValue{ |
| 438 | + driver.NamedValue{ |
| 439 | + Ordinal: 1, |
| 440 | + Value: "nil-to-str", |
| 441 | + }, |
| 442 | + }, |
| 443 | + }, |
| 444 | + 3: { |
| 445 | + args: []interface{}{"plain-str"}, |
| 446 | + want: []driver.NamedValue{ |
| 447 | + driver.NamedValue{ |
| 448 | + Ordinal: 1, |
| 449 | + Value: "plain-str", |
| 450 | + }, |
| 451 | + }, |
| 452 | + }, |
| 453 | + 4: { |
| 454 | + args: []interface{}{nilStrPtr}, |
| 455 | + want: []driver.NamedValue{ |
| 456 | + driver.NamedValue{ |
| 457 | + Ordinal: 1, |
| 458 | + Value: nil, |
| 459 | + }, |
| 460 | + }, |
| 461 | + }, |
| 462 | + } |
| 463 | + for i, tt := range tests { |
| 464 | + ds := new(driverStmt) |
| 465 | + got, err := driverArgs(ds, tt.args) |
| 466 | + if err != nil { |
| 467 | + t.Errorf("test[%d]: %v", i, err) |
| 468 | + continue |
| 469 | + } |
| 470 | + if !reflect.DeepEqual(got, tt.want) { |
| 471 | + t.Errorf("test[%d]: got %v, want %v", i, got, tt.want) |
| 472 | + } |
| 473 | + } |
| 474 | +} |
0 commit comments