...

Source file src/github.com/DATA-DOG/go-sqlmock/expectations_before_go18.go

Documentation: github.com/DATA-DOG/go-sqlmock

     1  //go:build !go1.8
     2  // +build !go1.8
     3  
     4  package sqlmock
     5  
     6  import (
     7  	"database/sql/driver"
     8  	"fmt"
     9  	"reflect"
    10  )
    11  
    12  // WillReturnRows specifies the set of resulting rows that will be returned
    13  // by the triggered query
    14  func (e *ExpectedQuery) WillReturnRows(rows *Rows) *ExpectedQuery {
    15  	e.rows = &rowSets{sets: []*Rows{rows}, ex: e}
    16  	return e
    17  }
    18  
    19  func (e *queryBasedExpectation) argsMatches(args []namedValue) error {
    20  	if nil == e.args {
    21  		if e.noArgs && len(args) > 0 {
    22  			return fmt.Errorf("expected 0, but got %d arguments", len(args))
    23  		}
    24  		return nil
    25  	}
    26  	if len(args) != len(e.args) {
    27  		return fmt.Errorf("expected %d, but got %d arguments", len(e.args), len(args))
    28  	}
    29  	for k, v := range args {
    30  		// custom argument matcher
    31  		matcher, ok := e.args[k].(Argument)
    32  		if ok {
    33  			// @TODO: does it make sense to pass value instead of named value?
    34  			if !matcher.Match(v.Value) {
    35  				return fmt.Errorf("matcher %T could not match %d argument %T - %+v", matcher, k, args[k], args[k])
    36  			}
    37  			continue
    38  		}
    39  
    40  		dval := e.args[k]
    41  		// convert to driver converter
    42  		darg, err := e.converter.ConvertValue(dval)
    43  		if err != nil {
    44  			return fmt.Errorf("could not convert %d argument %T - %+v to driver value: %s", k, e.args[k], e.args[k], err)
    45  		}
    46  
    47  		if !driver.IsValue(darg) {
    48  			return fmt.Errorf("argument %d: non-subset type %T returned from Value", k, darg)
    49  		}
    50  
    51  		if !reflect.DeepEqual(darg, v.Value) {
    52  			return fmt.Errorf("argument %d expected [%T - %+v] does not match actual [%T - %+v]", k, darg, darg, v.Value, v.Value)
    53  		}
    54  	}
    55  	return nil
    56  }
    57  
    58  func (e *queryBasedExpectation) attemptArgMatch(args []namedValue) (err error) {
    59  	// catch panic
    60  	defer func() {
    61  		if e := recover(); e != nil {
    62  			_, ok := e.(error)
    63  			if !ok {
    64  				err = fmt.Errorf(e.(string))
    65  			}
    66  		}
    67  	}()
    68  
    69  	err = e.argsMatches(args)
    70  	return
    71  }
    72  

View as plain text