// Code generated by mockery v0.0.0-dev. DO NOT EDIT.

package mocks

import (
	context "context"

	chrome_branch "go.skia.org/infra/go/chrome_branch"

	mock "github.com/stretchr/testify/mock"

	testing "testing"
)

// Client is an autogenerated mock type for the Client type
type Client struct {
	mock.Mock
}

// Get provides a mock function with given fields: _a0
func (_m *Client) Get(_a0 context.Context) (*chrome_branch.Branches, []*chrome_branch.Branch, error) {
	ret := _m.Called(_a0)

	var r0 *chrome_branch.Branches
	if rf, ok := ret.Get(0).(func(context.Context) *chrome_branch.Branches); ok {
		r0 = rf(_a0)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*chrome_branch.Branches)
		}
	}

	var r1 []*chrome_branch.Branch
	if rf, ok := ret.Get(1).(func(context.Context) []*chrome_branch.Branch); ok {
		r1 = rf(_a0)
	} else {
		if ret.Get(1) != nil {
			r1 = ret.Get(1).([]*chrome_branch.Branch)
		}
	}

	var r2 error
	if rf, ok := ret.Get(2).(func(context.Context) error); ok {
		r2 = rf(_a0)
	} else {
		r2 = ret.Error(2)
	}

	return r0, r1, r2
}

// NewClient creates a new instance of Client. It also registers a cleanup function to assert the mocks expectations.
func NewClient(t testing.TB) *Client {
	mock := &Client{}

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}
