AlertDialogTest.java revision d9715ea3daabfd16495e39d4af2a37b400a35150
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
250e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richard
311db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultzimport android.app.Activity;
42595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport android.app.AlertDialog;
52595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport android.content.ContextWrapper;
62595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport android.content.DialogInterface;
71258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richardimport android.view.View;
866ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultzimport android.widget.EditText;
92595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport com.xtremelabs.robolectric.R;
102595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport com.xtremelabs.robolectric.Robolectric;
112595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
1272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwinimport org.junit.Test;
1372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwinimport org.junit.runner.RunWith;
1472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
1572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwinimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
16874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultzimport static junit.framework.Assert.assertFalse;
179c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwinimport static junit.framework.Assert.assertNull;
18ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richardimport static org.hamcrest.CoreMatchers.equalTo;
194219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultzimport static org.hamcrest.CoreMatchers.not;
20ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richardimport static org.hamcrest.CoreMatchers.nullValue;
21ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richardimport static org.hamcrest.CoreMatchers.sameInstance;
2272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwinimport static org.junit.Assert.assertEquals;
236a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawalaimport static org.junit.Assert.assertNotNull;
2472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwinimport static org.junit.Assert.assertThat;
25874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultzimport static org.junit.Assert.assertTrue;
262595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysser
2707257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
2850e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richardpublic class AlertDialogTest {
2940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
3072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    @Test
3172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    public void testBuilder() throws Exception {
3272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
3372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setTitle("title").setMessage("message");
343e6fa4f57f88547cc237624a6827d14e557fcee9Rich Humphrey        builder.setCancelable(true);
3572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog alert = builder.create();
3672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        alert.show();
3772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
3872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(alert.isShowing(), equalTo(true));
3972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
4072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
419c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        assertEquals("title", shadowAlertDialog.getTitle());
4272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(shadowAlertDialog.getMessage(), equalTo("message"));
433e6fa4f57f88547cc237624a6827d14e557fcee9Rich Humphrey        assertThat(shadowAlertDialog.isCancelable(), equalTo(true));
44ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowOf(ShadowAlertDialog.getLatestAlertDialog()), sameInstance(shadowAlertDialog));
45ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
46ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard    }
47ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard
48ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard    @Test
49ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard    public void getLatestAlertDialog_shouldReturnARealAlertDialog() throws Exception {
50ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), nullValue());
51ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard
52ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        AlertDialog dialog = new AlertDialog.Builder(new ContextWrapper(null)).show();
53ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(dialog));
5472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    }
5572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
5672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    @Test
574219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz    public void shouldOnlyCreateRequestedButtons() throws Exception {
584219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
594219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        builder.setPositiveButton("OK", null);
604219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        AlertDialog dialog = builder.create();
614219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        dialog.show();
624219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        assertThat(shadowOf(dialog).getButton(AlertDialog.BUTTON_POSITIVE), not(nullValue()));
634219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        assertThat(shadowOf(dialog).getButton(AlertDialog.BUTTON_NEGATIVE), nullValue());
644219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz    }
654219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz
664219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz    @Test
67fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard    public void shouldAllowNullButtonListeners() throws Exception {
68fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
69fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        builder.setPositiveButton("OK", null);
70fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        AlertDialog dialog = builder.create();
71fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        dialog.show();
72fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        Robolectric.clickOn(dialog.getButton(AlertDialog.BUTTON_POSITIVE));
73fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard    }
74fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard
75fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard    @Test
7628dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai    public void testSetMessageAfterCreation() {
7728dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
7828dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        builder.setTitle("title").setMessage("message");
7928dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        AlertDialog alert = builder.create();
8028dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
8128dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
8228dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        assertThat(shadowAlertDialog.getMessage(), equalTo("message"));
8328dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
8428dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        shadowAlertDialog.setMessage("new message");
8528dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        assertThat(shadowAlertDialog.getMessage(), equalTo("new message"));
8628dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
8728dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        shadowAlertDialog.setMessage(null);
8828dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        assertThat(shadowAlertDialog.getMessage(), nullValue());
8928dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai    }
9028dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
9128dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai    @Test
9211db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz    public void shouldSetMessageFromResourceId() throws Exception {
9311db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(new Activity());
9411db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        builder.setTitle("title").setMessage(R.string.hello);
9511db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz
9611db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        AlertDialog alert = builder.create();
9711db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
9811db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        assertThat(shadowAlertDialog.getMessage(), equalTo("Hello"));
9911db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz    }
10011db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz
10111db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz    @Test
10266ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz    public void shouldSetView() throws Exception {
103874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        ContextWrapper context = new ContextWrapper(null);
10466ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(context);
10566ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        EditText view = new EditText(context);
10666ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        builder.setView(view);
10766ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz
10866ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        AlertDialog alert = builder.create();
10966ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        assertThat(shadowOf(alert).getView(), equalTo((View) view));
11066ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz    }
11166ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz
11266ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz    @Test
113d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz    public void shouldSetCustomTitleView() throws Exception {
114d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        ContextWrapper context = new ContextWrapper(null);
115d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(context);
116d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        View view = new View(context);
117d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        assertThat(builder.setCustomTitle(view), sameInstance(builder));
118d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz
119d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        AlertDialog alert = builder.create();
120d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        assertThat(shadowOf(alert).getCustomTitleView(), equalTo((View) view));
121d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz    }
122d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz
123d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz    @Test
124874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingPositiveButtonDismissesDialog() throws Exception {
125874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
126591fbfde3bbcdebd4ddd52c73edfc176eef2247bMike Mazur & Tyler Schultz        .setPositiveButton("Positive", null).create();
127874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
128874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
129874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
130874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
131874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
132874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
133874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
134874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
135874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingNeutralButtonDismissesDialog() throws Exception {
136874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
137874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        .setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
138874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            @Override public void onClick(DialogInterface dialog, int which) {
139874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            }
140874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        }).create();
141874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
142874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
143874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
144874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).performClick();
145874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
146874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
147874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
148874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
149874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingNegativeButtonDismissesDialog() throws Exception {
150874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
151874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        .setNegativeButton("Negative", new DialogInterface.OnClickListener() {
152874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            @Override public void onClick(DialogInterface dialog, int which) {
153874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            }
154874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        }).create();
155874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
156874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
157874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
158874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick();
159874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
160874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
161874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
162874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
16372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    public void testBuilderWithItemArrayViaResourceId() throws Exception {
16472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
16572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
16672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setTitle("title");
16772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setItems(R.array.alertDialogTestItems, new DialogInterface.OnClickListener() {
168ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard            @Override
16972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin            public void onClick(DialogInterface dialog, int item) {
17072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                if (item == 0) {
17172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
17272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                } else if (item == 1) {
17372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
17472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                }
17572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                dialog.dismiss();
17672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin            }
17772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        });
17872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog alert = builder.create();
17972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        alert.show();
18072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
18172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(alert.isShowing(), equalTo(true));
18272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
18372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
184ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowAlertDialog.getTitle().toString(), equalTo("title"));
18572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(shadowAlertDialog.getItems().length, equalTo(2));
18672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertEquals(shadowAlertDialog.getItems()[0], "Aloha");
187ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowOf(ShadowAlertDialog.getLatestAlertDialog()), sameInstance(shadowAlertDialog));
188ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
18972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    }
1901258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
1911258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    @Test
1929c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin    public void show_setsLatestAlertDialogAndLatestDialog() {
1935117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        AlertDialog alertDialog = new AlertDialog.Builder(Robolectric.application).create();
1949c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        assertNull(ShadowDialog.getLatestDialog());
1955117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertNull(ShadowAlertDialog.getLatestAlertDialog());
196753d062a9106040be10c39595219774ae656b8f9Mike Grafton
1979c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        alertDialog.show();
1989c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin
1995117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertEquals(alertDialog, ShadowDialog.getLatestDialog());
2005117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertEquals(alertDialog, ShadowAlertDialog.getLatestAlertDialog());
2019c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin    }
2029c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin
203753d062a9106040be10c39595219774ae656b8f9Mike Grafton    @Test
204753d062a9106040be10c39595219774ae656b8f9Mike Grafton    public void shouldReturnTheIndexOfTheCheckedItemInASingleChoiceDialog() throws Exception {
205753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
206753d062a9106040be10c39595219774ae656b8f9Mike Grafton
207753d062a9106040be10c39595219774ae656b8f9Mike Grafton        builder.setSingleChoiceItems(new String[]{"foo", "bar"}, 1, new DialogInterface.OnClickListener() {
208753d062a9106040be10c39595219774ae656b8f9Mike Grafton            public void onClick(DialogInterface dialog, int item) {
209753d062a9106040be10c39595219774ae656b8f9Mike Grafton
210753d062a9106040be10c39595219774ae656b8f9Mike Grafton            }
211753d062a9106040be10c39595219774ae656b8f9Mike Grafton        });
212753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog alert = builder.create();
213753d062a9106040be10c39595219774ae656b8f9Mike Grafton        alert.show();
214753d062a9106040be10c39595219774ae656b8f9Mike Grafton
215753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(alert.isShowing(), equalTo(true));
216753d062a9106040be10c39595219774ae656b8f9Mike Grafton
217753d062a9106040be10c39595219774ae656b8f9Mike Grafton        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
218753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertEquals(shadowAlertDialog.getCheckedItemIndex(), 1);
219753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertEquals(shadowAlertDialog.getItems()[0], "foo");
220753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(shadowAlertDialog.getItems().length, equalTo(2));
2215117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
222753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
223753d062a9106040be10c39595219774ae656b8f9Mike Grafton
224753d062a9106040be10c39595219774ae656b8f9Mike Grafton    @Test
225753d062a9106040be10c39595219774ae656b8f9Mike Grafton    public void shouldCallTheClickListenerOfTheCheckedItemInASingleChoiceDialog() throws Exception {
226753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
227753d062a9106040be10c39595219774ae656b8f9Mike Grafton
228753d062a9106040be10c39595219774ae656b8f9Mike Grafton        TestDialogOnClickListener listener = new TestDialogOnClickListener();
229753d062a9106040be10c39595219774ae656b8f9Mike Grafton        builder.setSingleChoiceItems(new String[]{"foo", "bar"}, 1, listener);
230753d062a9106040be10c39595219774ae656b8f9Mike Grafton
231753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog alert = builder.create();
232753d062a9106040be10c39595219774ae656b8f9Mike Grafton        alert.show();
233753d062a9106040be10c39595219774ae656b8f9Mike Grafton
234753d062a9106040be10c39595219774ae656b8f9Mike Grafton        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
235753d062a9106040be10c39595219774ae656b8f9Mike Grafton        shadowAlertDialog.clickOnItem(0);
236753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(listener.clickedItem, equalTo(0));
237753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(shadowAlertDialog.getCheckedItemIndex(), equalTo(0));
238753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
239753d062a9106040be10c39595219774ae656b8f9Mike Grafton
2405117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard    @Test
2411258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    public void shouldFindViewsByIdIfAViewIsSet() throws Exception {
2421258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        ContextWrapper context = new ContextWrapper(null);
2431258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        AlertDialog dialog = new AlertDialog.Builder(context).create();
2441258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2451258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(99), nullValue());
2461258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2471258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        View view = new View(context);
2481258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        view.setId(99);
2491258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        dialog.setView(view);
2501258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(99), sameInstance(view));
2511258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2521258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(66), nullValue());
2531258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    }
2546a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2556a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    @Test
2566a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    public void shouldDelegateToDialogFindViewByIdIfViewIsNull() {
2576a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        AlertDialog dialog = new AlertDialog(Robolectric.application) {
2586a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        };
2596a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2606a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        assertThat(dialog.findViewById(99), nullValue());
2616a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2626a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        dialog.setContentView(R.layout.main);
2636a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        assertNotNull(dialog.findViewById(R.id.title));
2646a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    }
2656a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2666a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
267753d062a9106040be10c39595219774ae656b8f9Mike Grafton    private static class TestDialogOnClickListener implements DialogInterface.OnClickListener {
268753d062a9106040be10c39595219774ae656b8f9Mike Grafton        private DialogInterface dialog;
269753d062a9106040be10c39595219774ae656b8f9Mike Grafton        private int clickedItem;
270753d062a9106040be10c39595219774ae656b8f9Mike Grafton
271753d062a9106040be10c39595219774ae656b8f9Mike Grafton        public void onClick(DialogInterface dialog, int item) {
272753d062a9106040be10c39595219774ae656b8f9Mike Grafton            this.dialog = dialog;
273753d062a9106040be10c39595219774ae656b8f9Mike Grafton            this.clickedItem = item;
274753d062a9106040be10c39595219774ae656b8f9Mike Grafton        }
275753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
27650e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richard}
277