android - peformClick() on an AlertDialog in an InstrumentationTestCase2 doesn't work -


i want click on alertdialog in activityinstrumentationtestcase2. dialoginterface.onclicklistener() execute, after test finished , not during test (i know that, because debugged test).

my test checks delete button. if delete button pressed, alertdialog appear , ask user again. if user accepts alertdialog, database row deleted.

public class shifttest2 extends activityinstrumentationtestcase2<shift> {    @uithreadtest   public void testdeletebutton() {       shift shift = getactivity();       button deletebutton = (button) shift.findviewbyid(r.id.shift_delete);        deletebutton.performclick(); // works fine        alertdialog alertdialog = shift.getalertdialog();        // thread execute performclick() after test finished       alertdialog.getbutton(dialoginterface.button_positive).performclick();        final bundle savedshift = mdb.getshiftbyid("1");       assertnull(savedshift); // assert fail   } } 

the onclicklistener delete button.

public void ondeletebutton(view view) {     if (mdeletedialog != null) {         malert = mdeletedialog.create();         malert.show();     } } 

and here listeners alertdialog.

@override public void oncreate(bundle savedinstancestate) {      ...      mdeletedialog = new alertdialog.builder(this);     mdeletedialog.setmessage(getstring(r.string.delete_shift_really));      mdeletedialog.setpositivebutton(getstring(r.string.delete), new dialoginterface.onclicklistener() {         @override         public void onclick(dialoginterface dialoginterface, int i) {             mdb.deleteshift(mid);             resetallpreferences();              intent parentactivity = new intent(context, workingtimesettings.class);             startactivity(parentactivity);         }     });      mdeletedialog.setnegativebutton(getstring(r.string.cancel), new dialoginterface.onclicklistener() {         @override         public void onclick(dialoginterface dialoginterface, int i) {             // nothing here         }     }); } 

i tried thread.sleep(10000) in test, changes nothing. problem is, thread don't jump out of test execute positive button listener. perhaps because of @uithreadtest annotation?

i solve problem myself. @uithreadtest annotation. run critical parts in method shift.runonuithread().

public void testdeletebutton() {     final shift shift = getactivity();     final button deletebutton = (button) shift.findviewbyid(r.id.shift_delete);      final int deletebuttonviewmode = deletebutton.getvisibility();     assertequals(view.visible, deletebuttonviewmode);      shift.runonuithread(new runnable() {         @override         public void run() {             deletebutton.performclick();             shift.getalertdialog().getbutton(dialoginterface.button_positive).performclick();         }     });     getinstrumentation().waitforidlesync();      final bundle savedshift = mdb.getshiftbyid("1");     assertnull(savedshift); } 

hint: have removed annotation other tests, too. otherwise not green.