blob: 58e69b82a7f6b0332e2a9a3a80a206c27f6dc958 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app.cts;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Instrumentation;
import android.app.AlertDialog.Builder;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnKeyListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.cts.util.PollingCheck;
import android.database.Cursor;
import android.database.CursorWrapper;
import android.graphics.drawable.Drawable;
import android.provider.Contacts.People;
import android.test.ActivityInstrumentationTestCase2;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemSelectedListener;
public class AlertDialog_BuilderTest extends ActivityInstrumentationTestCase2<DialogStubActivity> {
private Builder mBuilder;
private Context mContext;
private Instrumentation mInstrumentation;
private final CharSequence mTitle = "title";
private Drawable mDrawable;
private AlertDialog mDialog;
private Button mButton;
private boolean mResult;
private boolean mItemSelected;
private CharSequence mSelectedItem;
private final String[] mPROJECTION = new String[] {
People._ID, People.NAME
};
private View mView;
private ListView mListView;
private ArrayList<Integer> mSelectedItems;
private FrameLayout mFrameLayout;
private OnClickListener mOnClickListener = new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mResult = true;
}
};
private OnCancelListener mOnCancelListener = new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
mResult = true;
}
};
private OnKeyListener mOnKeyListener = new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int key, KeyEvent envnt) {
mResult = true;
return true;
}
};
private OnItemSelectedListener mOnItemSelectedListener = new OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View v, int position, long id) {
mItemSelected = true;
}
public void onNothingSelected(AdapterView parent) {
}
};
private OnMultiChoiceClickListener mOnMultiChoiceClickListener =
new OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
mSelectedItems.add(which);
mResult = true;
}
};
@Override
protected void setUp() throws Exception {
super.setUp();
mBuilder = null;
mInstrumentation = getInstrumentation();
mContext = getActivity();
final Activity activity = getActivity();
new PollingCheck() {
@Override
protected boolean check() {
return activity.hasWindowFocus();
}
}.run();
mButton = null;
mView = null;
mListView = null;
mDialog = null;
mItemSelected = false;
mSelectedItem = null;
mSelectedItems = new ArrayList<Integer>();
}
public AlertDialog_BuilderTest() {
super("com.android.cts.app.stub", DialogStubActivity.class);
}
public void testConstructor() {
new AlertDialog.Builder(mContext);
}
public void testSetIconWithParamInt() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mDrawable = mContext.getResources().getDrawable(android.R.drawable.btn_default);
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setIcon(android.R.drawable.btn_default);
mDialog = mBuilder.show();
}
});
mInstrumentation.waitForIdleSync();
}
public void testSetIconWithParamDrawable() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mDrawable = mContext.getResources().getDrawable(android.R.drawable.btn_default);
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setIcon(mDrawable);
mDialog = mBuilder.show();
}
});
mInstrumentation.waitForIdleSync();
}
public void testSetPositiveButtonWithParamInt() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setPositiveButton(android.R.string.yes, mOnClickListener);
mDialog = mBuilder.show();
mButton = mDialog.getButton(DialogInterface.BUTTON_POSITIVE);
mButton.performClick();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(mContext.getText(android.R.string.yes), mButton.getText());
assertTrue(mResult);
}
public void testSetPositiveButtonWithParamCharSequence() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setPositiveButton(android.R.string.yes, mOnClickListener);
mDialog = mBuilder.show();
mButton = mDialog.getButton(DialogInterface.BUTTON_POSITIVE);
mButton.performClick();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(mContext.getText(android.R.string.yes), mButton.getText());
assertTrue(mResult);
}
public void testSetNegativeButtonWithParamCharSequence() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setNegativeButton(mTitle, mOnClickListener);
mDialog = mBuilder.show();
mButton = mDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
mButton.performClick();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(mTitle, mButton.getText());
assertTrue(mResult);
}
public void testSetNegativeButtonWithParamInt() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setNegativeButton(com.android.cts.app.stub.R.string.notify, mOnClickListener);
mDialog = mBuilder.show();
mButton = mDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
mButton.performClick();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(mContext.getText(com.android.cts.app.stub.R.string.notify), mButton.getText());
assertTrue(mResult);
}
public void testSetNeutralButtonWithParamInt() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setNeutralButton(com.android.cts.app.stub.R.string.notify, mOnClickListener);
mDialog = mBuilder.show();
mButton = mDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
mButton.performClick();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(mContext.getText(com.android.cts.app.stub.R.string.notify), mButton.getText());
assertTrue(mResult);
}
public void testSetNeutralButtonWithParamCharSequence() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setNeutralButton(mTitle, mOnClickListener);
mDialog = mBuilder.show();
mButton = mDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
mButton.performClick();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(mTitle, mButton.getText());
assertTrue(mResult);
}
private void testCancelable(final boolean cancelable) throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setCancelable(cancelable);
mDialog = mBuilder.show();
}
});
mInstrumentation.waitForIdleSync();
new PollingCheck() {
@Override
protected boolean check() {
return mDialog.isShowing();
}
}.run();
mInstrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
mInstrumentation.waitForIdleSync();
new PollingCheck() {
@Override
protected boolean check() {
boolean showing = mDialog.isShowing();
if (cancelable) {
// if the dialog is cancelable, then pressing back
// should cancel it. Thus it should not be showing
return !showing;
} else {
// if the dialog is not cancelable, pressing back
// should so nothing and it should still be showing
return showing;
}
}
}.run();
}
public void testSetCancelable() throws Throwable {
testCancelable(true);
}
public void testDisableCancelable() throws Throwable {
testCancelable(false);
}
public void testSetOnCancelListener() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setOnCancelListener(mOnCancelListener);
mDialog = mBuilder.show();
mDialog.cancel();
}
});
mInstrumentation.waitForIdleSync();
assertTrue(mResult);
}
public void testSetOnKeyListener() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setOnKeyListener(mOnKeyListener);
mDialog = mBuilder.show();
}
});
mInstrumentation.waitForIdleSync();
sendKeys(KeyEvent.ACTION_DOWN, KeyEvent.ACTION_DOWN);
assertTrue(mResult);
}
public void testSetItemsWithParamInt() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setItems(com.android.cts.app.stub.R.array.difficultyLevel, mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
}
});
mInstrumentation.waitForIdleSync();
final CharSequence[] levels = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
assertEquals(levels[0], mListView.getItemAtPosition(0));
}
public void testSetItemsWithParamCharSequence() throws Throwable {
final CharSequence[] expect = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setItems(expect, mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(expect[0], mListView.getItemAtPosition(0));
}
public void testSetAdapter() throws Throwable {
final ListAdapter adapter = new AdapterTest();
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setAdapter(adapter, mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
}
});
mInstrumentation.waitForIdleSync();
assertEquals(adapter, mListView.getAdapter());
}
public void testSetCursor() throws Throwable {
preparePeople();
final Cursor c = mContext.getContentResolver().query(People.CONTENT_URI, mPROJECTION, null,
null, null);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setCursor(c, mOnClickListener, People.NAME);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mListView.performItemClick(null, 0, 0);
}
});
mInstrumentation.waitForIdleSync();
final CursorWrapper selected = (CursorWrapper)mListView.getSelectedItem();
assertEquals(c.getString(1), selected.getString(1));
assertTrue(mResult);
}
public void testSetMultiChoiceItemsWithParamInt() throws Throwable {
final CharSequence[] items = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setMultiChoiceItems(com.android.cts.app.stub.R.array.difficultyLevel, null,
mOnMultiChoiceClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mSelectedItem = (CharSequence)mListView.getSelectedItem();
mListView.performItemClick(null, 0, 0);
mListView.performItemClick(null, 1, 0);
}
});
mInstrumentation.waitForIdleSync();
assertEquals(items[0], mSelectedItem);
assertEquals(2, mSelectedItems.size());
assertEquals(items[0], mListView.getItemAtPosition(0));
assertTrue(mResult);
}
public void testSetMultiChoiceItemsWithParamCharSequence() throws Throwable {
final CharSequence[] items = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setMultiChoiceItems(items, null, mOnMultiChoiceClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mSelectedItem = (CharSequence)mListView.getSelectedItem();
mListView.performItemClick(null, 0, 0);
mListView.performItemClick(null, 1, 0);
}
});
mInstrumentation.waitForIdleSync();
assertEquals(items[0], mSelectedItem);
assertEquals(2, mSelectedItems.size());
assertEquals(items[0], mListView.getItemAtPosition(0));
assertTrue(mResult);
}
public void testSetMultiChoiceItemsWithParamCursor() throws Throwable {
preparePeople();
final Cursor c = mContext.getContentResolver().query(People.CONTENT_URI, mPROJECTION, null,
null, null);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setMultiChoiceItems(c, People.NAME, People.NAME,
mOnMultiChoiceClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mListView.performItemClick(null, 0, 0);
mListView.performItemClick(null, 1, 0);
}
});
mInstrumentation.waitForIdleSync();
final CursorWrapper selected = (CursorWrapper)mListView.getSelectedItem();
assertEquals(c.getString(1), selected.getString(1));
assertEquals(2, mSelectedItems.size());
assertTrue(mResult);
}
public void testSetSingleChoiceItemsWithParamInt() throws Throwable {
final CharSequence[] items = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setSingleChoiceItems(com.android.cts.app.stub.R.array.difficultyLevel, 0,
mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mSelectedItem = (CharSequence)mListView.getSelectedItem();
mListView.performItemClick(null, 0, 0);
}
});
mInstrumentation.waitForIdleSync();
assertEquals(items[0], mSelectedItem);
assertEquals(items[0], mListView.getItemAtPosition(0));
assertTrue(mResult);
}
private void preparePeople() {
final ContentResolver mResolver = mContext.getContentResolver();
mResolver.delete(People.CONTENT_URI, null, null);
final ContentValues valuse = new ContentValues();
valuse.put(People._ID, "1");
valuse.put(People.NAME, "name");
mResolver.insert(People.CONTENT_URI, valuse);
}
public void testSetSingleChoiceItemsWithParamCursor() throws Throwable {
final String[] PROJECTION = new String[] {
People._ID, People.NAME
};
preparePeople();
final Cursor c = mContext.getContentResolver().query(People.CONTENT_URI, PROJECTION, null,
null, null);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setSingleChoiceItems(c, 0, People.NAME, mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mListView.performItemClick(null, 0, 0);
}
});
mInstrumentation.waitForIdleSync();
final CursorWrapper selected = (CursorWrapper)mListView.getSelectedItem();
assertEquals(c.getString(1), selected.getString(1));
assertTrue(mResult);
}
public void testSetSingleChoiceItemsWithParamCharSequence() throws Throwable {
final CharSequence[] items = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setSingleChoiceItems(items, 0, mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mSelectedItem = (CharSequence)mListView.getSelectedItem();
mListView.performItemClick(null, 0, 0);
}
});
mInstrumentation.waitForIdleSync();
assertEquals(items[0], mSelectedItem);
assertEquals(items[0], mListView.getItemAtPosition(0));
assertTrue(mResult);
}
public void testSetSingleChoiceItems() throws Throwable {
final CharSequence[] items = mContext.getResources().getTextArray(
com.android.cts.app.stub.R.array.difficultyLevel);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setSingleChoiceItems(new ArrayAdapter<CharSequence>(mContext,
android.R.layout.select_dialog_singlechoice, android.R.id.text1, items), 0,
mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mSelectedItem = (CharSequence)mListView.getSelectedItem();
mListView.performItemClick(null, 0, 0);
}
});
mInstrumentation.waitForIdleSync();
assertEquals(items[0], mSelectedItem);
assertEquals(items[0], mListView.getItemAtPosition(0));
assertTrue(mResult);
}
public void testSetOnItemSelectedListener() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setOnItemSelectedListener(mOnItemSelectedListener);
mBuilder.setItems(com.android.cts.app.stub.R.array.difficultyLevel, mOnClickListener);
mDialog = mBuilder.show();
mListView = mDialog.getListView();
mListView.pointToPosition(0, 0);
}
});
mInstrumentation.waitForIdleSync();
assertTrue(mItemSelected);
}
public void testSetView() throws Throwable {
final View view = new View(mContext);
view.setId(100);
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setView(view);
mDialog = mBuilder.show();
mView = mDialog.getWindow().findViewById(100);
}
});
mInstrumentation.waitForIdleSync();
assertEquals(view, mView);
}
public void testSetInverseBackgroundForced() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setInverseBackgroundForced(true);
mDialog = mBuilder.create();
mDialog.show();
}
});
mInstrumentation.waitForIdleSync();
}
public void testCreate() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mDialog = mBuilder.create();
mDialog.show();
}
});
mInstrumentation.waitForIdleSync();
assertNotNull(mDialog);
assertTrue(mDialog.isShowing());
}
public void testShow() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
mBuilder = new AlertDialog.Builder(mContext);
mDialog = mBuilder.show();
}
});
mInstrumentation.waitForIdleSync();
assertTrue(mDialog.isShowing());
}
private static class AdapterTest implements android.widget.ListAdapter {
public boolean areAllItemsEnabled() {
return true;
}
public boolean isEnabled(int position) {
return false;
}
public int getCount() {
return 0;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public int getItemViewType(int position) {
return 0;
}
public android.view.View getView( int position,
android.view.View convertView,
android.view.ViewGroup parent){
return null;
}
public int getViewTypeCount() {
return 1;
}
public boolean hasStableIds() {
return false;
}
public boolean isEmpty() {
return true;
}
public void registerDataSetObserver(
android.database.DataSetObserver observer) {
}
public void unregisterDataSetObserver(
android.database.DataSetObserver observer) {
}
}
}