blob: f552013698b774089f4cac4d5fde9328c399724e [file] [log] [blame]
package com.android.providers.tv;
import android.content.pm.ProviderInfo;
import android.database.Cursor;
import android.media.tv.TvContract;
import android.media.tv.TvContract.Programs;
import android.os.Bundle;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
import com.android.providers.tv.Utils.Program;
import java.util.Arrays;
import com.google.android.collect.Sets;
public class UnrecognizedColumnsTest extends AndroidTestCase {
private static final String PERMISSION_ACCESS_ALL_EPG_DATA =
"com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA";
private static final String PERMISSION_READ_TV_LISTINGS = "android.permission.READ_TV_LISTINGS";
private static final String MY_PACKAGE = "example.my";
private static final String ANOTHER_PACKAGE = "example.another";
private MockContentResolver mResolver;
private TvProviderForTesting mProvider;
private MockTvProviderContext mContext;
private Program mProgram;
@Override
protected void setUp() throws Exception {
super.setUp();
mResolver = new MockContentResolver();
mResolver.addProvider(Settings.AUTHORITY, new MockContentProvider() {
@Override
public Bundle call(String method, String request, Bundle args) {
return new Bundle();
}
});
mProvider = new TvProviderForTesting();
mResolver.addProvider(TvContract.AUTHORITY, mProvider);
mContext = new MockTvProviderContext(mResolver, getContext());
// get data of the calling package only
mContext.grantOrRejectPermission(PERMISSION_ACCESS_ALL_EPG_DATA, false);
mContext.grantOrRejectPermission(PERMISSION_READ_TV_LISTINGS, false);
setContext(mContext);
final ProviderInfo info = new ProviderInfo();
info.authority = TvContract.AUTHORITY;
mProvider.attachInfoForTesting(getContext(), info);
}
@Override
protected void tearDown() throws Exception {
Utils.clearTvProvider(mResolver);
mProvider.setOpenHelper(null, true);
mProvider.shutdown();
super.tearDown();
}
public void testUnrecognizedColumns() {
insertPrograms();
String[] projection = new String[] {
TvContract.Programs._ID,
"_random_name",
" with spaces ",
"\' in single quotes \'",
"\" in double quotes \"",
"quotes \' inside \' this \" name \"",
};
Cursor cursor =
mResolver.query(TvContract.Programs.CONTENT_URI, projection, null, null, null);
assertNotNull(cursor);
cursor.moveToNext();
assertEquals(1, cursor.getCount());
assertEquals(
"Column names don't match.",
Arrays.asList(
Programs._ID,
"_random_name",
" with spaces ",
"\' in single quotes \'",
"\" in double quotes \"",
"quotes \' inside \' this \" name \""),
Arrays.asList(cursor.getColumnNames()));
assertEquals(mProgram.id, cursor.getLong(0));
assertNull(cursor.getString(1));
assertNull(cursor.getString(2));
assertNull(cursor.getString(3));
assertNull(cursor.getString(4));
assertNull(cursor.getString(5));
}
private void insertPrograms() {
mProvider.callingPackage = MY_PACKAGE;
long myChannelId = Utils.insertChannel(mResolver);
mProgram = new Program(1, MY_PACKAGE);
Utils.insertPrograms(mResolver, myChannelId, mProgram);
mProvider.callingPackage = ANOTHER_PACKAGE;
long anotherChannelId = Utils.insertChannel(mResolver);
Program anotherProgram = new Program(2, ANOTHER_PACKAGE);
Utils.insertPrograms(mResolver, anotherChannelId, anotherProgram);
mProvider.callingPackage = MY_PACKAGE;
}
}