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

package mocks

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

	time "time"
)

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

// C provides a mock function with given fields:
func (_m *TimeTicker) C() <-chan time.Time {
	ret := _m.Called()

	if len(ret) == 0 {
		panic("no return value specified for C")
	}

	var r0 <-chan time.Time
	if rf, ok := ret.Get(0).(func() <-chan time.Time); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(<-chan time.Time)
		}
	}

	return r0
}

// Reset provides a mock function with given fields: d
func (_m *TimeTicker) Reset(d time.Duration) {
	_m.Called(d)
}

// Stop provides a mock function with given fields:
func (_m *TimeTicker) Stop() {
	_m.Called()
}

// NewTimeTicker creates a new instance of TimeTicker. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewTimeTicker(t interface {
	mock.TestingT
	Cleanup(func())
}) *TimeTicker {
	mock := &TimeTicker{}
	mock.Mock.Test(t)

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

	return mock
}
