toMatchPosition( received, position, target, counterpart, source ) {
      const a = received.target,
            b = received.counterpart;
      let pass;
      switch ( position ) {
        case "above":
          pass = a.y + a.height <= b.y;
          if ( !pass ) {
            return expectReturn( pass, `[${ source }] expected ${ target } (y=${ a.y }, height=${ a.height }) `
              + `to be above ${ counterpart } (y=${ b.y })` );
          }
          break;
        case "below":
          pass = a.y >= b.y + b.height;
          if ( !pass ) {
            return expectReturn( pass, `[${ source }] expected ${ target } (y=${ a.y }) to be below ${ counterpart } `
              + `(y=${ b.y }, height=${ b.height }) ` );
          }
          break;
        case "left":
          pass = a.x + a.width <= b.x;
          if ( !pass ) {
            return expectReturn( pass, `[${ source }] expected ${ target } `
              + `(x=${ a.x }, width=${ a.width }) `
              + `to be left to ${ counterpart } (x=${ b.x })` );
          }
          break;
        case "right":
          pass = a.x >= b.x + b.width;
          if ( !pass ) {
            return expectReturn( pass, `[${ source }] expected ${ target } (x=${ a.x }) `
              + `to be right to ${ counterpart } `
              + `(x=${ b.x }, width=${ b.width })` );
          }
          break;
      }
      return expectReturn( true, `` );
    }
Assert position

@param {Object} received
@param {String} position
@param {Object} target
@param {Object} counterpart
@param {String} source
@returns {Object}