package by.istin.android.xcore.test.common; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.test.ApplicationTestCase; import java.io.InputStream; import by.istin.android.xcore.model.CursorModel; import by.istin.android.xcore.processor.IProcessor; import by.istin.android.xcore.provider.ModelContract; import by.istin.android.xcore.sample.Application; import by.istin.android.xcore.source.DataSourceRequest; import by.istin.android.xcore.utils.AppUtils; import by.istin.android.xcore.utils.CursorUtils; import by.istin.android.xcore.utils.StringUtil; public class AbstractTestProcessor extends ApplicationTestCase<Application> { private TestDataSource testDataSource; public AbstractTestProcessor() { super(Application.class); } @Override public void setUp() throws Exception { super.setUp(); createApplication(); testDataSource = new TestDataSource(); } public void clear(Class<?> ... entities) { for (Class<?> entity : entities) { getApplication().getContentResolver().delete(ModelContract.getUri(entity), null, null); } } protected void checkRequiredFields(Class<?> classEntity, String ... fields) { Uri uri = ModelContract.getUri(classEntity); String[] projection = null; String selection = null; String[] selectionArgs = null; String sortOrder = null; checkRequiredFields(uri, projection, selection, selectionArgs, sortOrder, fields); } protected void checkRequiredFields(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, String... fields) { Cursor cursor = getApplication().getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); CursorModel cursorModel = new CursorModel(cursor); for (int i = 0; i < cursorModel.size(); i++) { CursorModel entity = cursorModel.get(i); for (int j = 0; j < fields.length; j++) { String field = fields[j]; String value = entity.getString(field); assertNotNull(field+ " is required",value); assertFalse(field+ " is required", StringUtil.isEmpty(value)); } } CursorUtils.close(cursor); } protected void checkCount(Class<?> entity, int count) { Uri uri = ModelContract.getUri(entity); String[] projection = null; String selection = null; String[] selectionArgs = null; String sortOrder = null; checkCount(count, uri, projection, selection, selectionArgs, sortOrder); } protected void checkCount(int count, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor cursor = getApplication().getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); if (CursorUtils.isEmpty(cursor)) { assertTrue(count != 0); } else { assertEquals(cursor.getCount(), count); } CursorUtils.close(cursor); } public Object testExecute(String processorKey, String feedUri) throws Exception { return testExecute(getApplication(), processorKey, feedUri); } public Object testExecute(Context context, String processorKey, String feedUri) throws Exception { IProcessor processor = (IProcessor) AppUtils.get(context, processorKey); DataSourceRequest dataSourceRequest = new DataSourceRequest(feedUri); InputStream inputStream = testDataSource.getSource(dataSourceRequest); return processor.execute(dataSourceRequest, testDataSource, inputStream); } }