• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.providers.tv;
2 
3 import android.content.pm.ProviderInfo;
4 import android.database.Cursor;
5 import android.media.tv.TvContract;
6 import android.media.tv.TvContract.Programs;
7 import android.os.Bundle;
8 import android.provider.Settings;
9 import android.test.AndroidTestCase;
10 import android.test.mock.MockContentProvider;
11 import android.test.mock.MockContentResolver;
12 import com.android.providers.tv.Utils.Program;
13 import java.util.Arrays;
14 
15 import com.google.android.collect.Sets;
16 
17 public class UnrecognizedColumnsTest extends AndroidTestCase {
18     private static final String PERMISSION_ACCESS_ALL_EPG_DATA =
19             "com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA";
20     private static final String PERMISSION_READ_TV_LISTINGS = "android.permission.READ_TV_LISTINGS";
21 
22     private static final String MY_PACKAGE = "example.my";
23     private static final String ANOTHER_PACKAGE = "example.another";
24 
25     private MockContentResolver mResolver;
26     private TvProviderForTesting mProvider;
27     private MockTvProviderContext mContext;
28     private Program mProgram;
29 
30     @Override
setUp()31     protected void setUp() throws Exception {
32         super.setUp();
33 
34         mResolver = new MockContentResolver();
35         mResolver.addProvider(Settings.AUTHORITY, new MockContentProvider() {
36             @Override
37             public Bundle call(String method, String request, Bundle args) {
38                 return new Bundle();
39             }
40         });
41 
42         mProvider = new TvProviderForTesting();
43         mResolver.addProvider(TvContract.AUTHORITY, mProvider);
44 
45         mContext = new MockTvProviderContext(mResolver, getContext());
46         // get data of the calling package only
47         mContext.grantOrRejectPermission(PERMISSION_ACCESS_ALL_EPG_DATA, false);
48         mContext.grantOrRejectPermission(PERMISSION_READ_TV_LISTINGS, false);
49 
50         setContext(mContext);
51 
52         final ProviderInfo info = new ProviderInfo();
53         info.authority = TvContract.AUTHORITY;
54         mProvider.attachInfoForTesting(getContext(), info);
55     }
56 
57 
58     @Override
tearDown()59     protected void tearDown() throws Exception {
60         Utils.clearTvProvider(mResolver);
61         mProvider.setOpenHelper(null, true);
62         mProvider.shutdown();
63         super.tearDown();
64     }
65 
testUnrecognizedColumns()66     public void testUnrecognizedColumns() {
67         insertPrograms();
68 
69         String[] projection = new String[] {
70             TvContract.Programs._ID,
71             "_random_name",
72             " with spaces ",
73             "\' in single quotes \'",
74             "\" in double quotes \"",
75             "quotes \' inside \' this \" name \"",
76         };
77 
78         Cursor cursor =
79             mResolver.query(TvContract.Programs.CONTENT_URI, projection, null, null, null);
80         assertNotNull(cursor);
81         cursor.moveToNext();
82         assertEquals(1, cursor.getCount());
83 
84         assertEquals(
85             "Column names don't match.",
86             Arrays.asList(
87                     Programs._ID,
88                     "_random_name",
89                     " with spaces ",
90                     "\' in single quotes \'",
91                     "\" in double quotes \"",
92                     "quotes \' inside \' this \" name \""),
93             Arrays.asList(cursor.getColumnNames()));
94 
95         assertEquals(mProgram.id, cursor.getLong(0));
96         assertNull(cursor.getString(1));
97         assertNull(cursor.getString(2));
98         assertNull(cursor.getString(3));
99         assertNull(cursor.getString(4));
100         assertNull(cursor.getString(5));
101     }
102 
insertPrograms()103     private void insertPrograms() {
104         mProvider.callingPackage = MY_PACKAGE;
105         long myChannelId = Utils.insertChannel(mResolver);
106         mProgram = new Program(1, MY_PACKAGE);
107         Utils.insertPrograms(mResolver, myChannelId, mProgram);
108 
109         mProvider.callingPackage = ANOTHER_PACKAGE;
110         long anotherChannelId = Utils.insertChannel(mResolver);
111         Program anotherProgram = new Program(2, ANOTHER_PACKAGE);
112         Utils.insertPrograms(mResolver, anotherChannelId, anotherProgram);
113 
114         mProvider.callingPackage = MY_PACKAGE;
115     }
116 }
117