/* Generated by apex-mocks-generator version 4.0.0 */
@isTest
public class fflib_SObjectMocks
{
	public virtual class SObjectDomain implements fflib_ISObjectDomain
	{
		private fflib_ApexMocks mocks;

		public SObjectDomain(fflib_ApexMocks mocks)
		{
			this.mocks = mocks;
		}

		public Schema.SObjectType sObjectType()
		{
			return (Schema.SObjectType) mocks.mockNonVoidMethod(this, 'sObjectType', new List<Type> {}, new List<Object> {});
		}

		public List<SObject> getRecords()
		{
			return (List<SObject>) mocks.mockNonVoidMethod(this, 'getRecords', new List<Type> {}, new List<Object> {});
		}
	}

	public virtual class SObjectSelector implements fflib_ISObjectSelector
	{
		private fflib_ApexMocks mocks;

		public SObjectSelector(fflib_ApexMocks mocks)
		{
			this.mocks = mocks;
		}

		public Schema.SObjectType sObjectType()
		{
			return (Schema.SObjectType) mocks.mockNonVoidMethod(this, 'sObjectType', new List<Type> {}, new List<Object> {});
		}

		public List<SObject> selectSObjectsById(Set<Id> idSet)
		{
			return (List<SObject>) mocks.mockNonVoidMethod(this, 'selectSObjectsById', new List<Type> {Set<Id>.class}, new List<Object> {idSet});
		}
	}

	public virtual class SObjectUnitOfWork implements fflib_ISObjectUnitOfWork
	{
		private fflib_ApexMocks mocks;

		public SObjectUnitOfWork(fflib_ApexMocks mocks)
		{
			this.mocks = mocks;
		}

		public void registerNew(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerNew', new List<Type> {SObject.class}, new List<Object> {record});
		}

		public void registerNew(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerNew', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}

		public void registerNew(SObject record, Schema.sObjectField relatedToParentField, SObject relatedToParentRecord)
		{
			mocks.mockVoidMethod(this, 'registerNew', new List<Type> {SObject.class, Schema.sObjectField.class, SObject.class}, new List<Object> {record, relatedToParentField, relatedToParentRecord});
		}

		public void registerRelationship(SObject record, Schema.sObjectField relatedToField, SObject relatedTo)
		{
			mocks.mockVoidMethod(this, 'registerRelationship', new List<Type> {SObject.class, Schema.sObjectField.class, SObject.class}, new List<Object> {record, relatedToField, relatedTo});
		}

		public void registerRelationship(Messaging.SingleEmailMessage email, SObject relatedTo)
		{
			mocks.mockVoidMethod(this, 'registerRelationship', new List<Type> {Messaging.SingleEmailMessage.class, SObject.class}, new List<Object> {email, relatedTo});
		}

		public void registerDirty(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerDirty', new List<Type> {SObject.class}, new List<Object> {record});
		}

		public void registerDirty(SObject record, List<SObjectField> dirtyFields)
		{
			mocks.mockVoidMethod(this, 'registerDirty', new List<Type> {
					SObject.class, System.Type.forName('List<SObjectField>')
			}, new List<Object> {
					record, dirtyFields
			});
		}

        public void registerDirty(SObject record, Schema.sObjectField relatedToParentField, SObject relatedToParentRecord)
        {
            mocks.mockVoidMethod(this, 'registerDirty', new List<Type> {SObject.class}, new List<Object> {record});
        }

		public void registerDirty(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerDirty', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}

		public void registerUpsert(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerUpsert', new List<Type> {List<SObject>.class}, new List<Object> {record});
		}


		public void registerUpsert(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerUpsert', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}

		public void registerDeleted(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerDeleted', new List<Type> {SObject.class}, new List<Object> {record});
		}

		public void registerDeleted(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerDeleted', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}

		public void registerPublishBeforeTransaction(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerPublishBeforeTransaction', new List<Type> {SObject.class}, new List<Object> {record});
		}

		public void registerPublishBeforeTransaction(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerPublishBeforeTransaction', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}

		public void registerPublishAfterSuccessTransaction(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerPublishAfterSuccessTransaction', new List<Type> {SObject.class}, new List<Object> {record});
		}
		public void registerPublishAfterSuccessTransaction(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerPublishAfterSuccessTransaction', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}
		public void registerPublishAfterFailureTransaction(SObject record)
		{
			mocks.mockVoidMethod(this, 'registerPublishAfterFailureTransaction', new List<Type> {SObject.class}, new List<Object> {record});
		}
		public void registerPublishAfterFailureTransaction(List<SObject> records)
		{
			mocks.mockVoidMethod(this, 'registerPublishAfterFailureTransaction', new List<Type> {List<SObject>.class}, new List<Object> {records});
		}


	public void commitWork()
	{
		mocks.mockVoidMethod(this, 'commitWork', new List<Type> {}, new List<Object> {});
	}

	public void registerWork(fflib_SObjectUnitOfWork.IDoWork work)
	{
		mocks.mockVoidMethod(this, 'registerWork', new List<Type> {fflib_SObjectUnitOfWork.IDoWork.class}, new List<Object> {work});
	}

	public void registerEmail(Messaging.Email email)
	{
		mocks.mockVoidMethod(this, 'registerEmail', new List<Type> {Messaging.Email.class}, new List<Object> {email});
	}
	}

}