AlertDialogTest.java revision 4219823fcaadde15ed2f1d4a422aa62eb9eadd93
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
113874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingPositiveButtonDismissesDialog() throws Exception {
114874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
115591fbfde3bbcdebd4ddd52c73edfc176eef2247bMike Mazur & Tyler Schultz        .setPositiveButton("Positive", null).create();
116874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
117874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
118874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
119874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
120874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
121874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
122874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
123874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
124874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingNeutralButtonDismissesDialog() throws Exception {
125874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
126874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        .setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
127874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            @Override public void onClick(DialogInterface dialog, int which) {
128874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            }
129874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        }).create();
130874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
131874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
132874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
133874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).performClick();
134874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
135874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
136874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
137874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
138874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingNegativeButtonDismissesDialog() throws Exception {
139874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
140874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        .setNegativeButton("Negative", new DialogInterface.OnClickListener() {
141874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            @Override public void onClick(DialogInterface dialog, int which) {
142874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz            }
143874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        }).create();
144874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
145874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
146874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
147874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick();
148874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
149874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
150874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
151874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
15272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    public void testBuilderWithItemArrayViaResourceId() throws Exception {
15372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
15472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
15572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setTitle("title");
15672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setItems(R.array.alertDialogTestItems, new DialogInterface.OnClickListener() {
157ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard            @Override
15872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin            public void onClick(DialogInterface dialog, int item) {
15972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                if (item == 0) {
16072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
16172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                } else if (item == 1) {
16272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
16372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                }
16472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin                dialog.dismiss();
16572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin            }
16672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        });
16772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog alert = builder.create();
16872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        alert.show();
16972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
17072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(alert.isShowing(), equalTo(true));
17172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
17272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
173ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowAlertDialog.getTitle().toString(), equalTo("title"));
17472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(shadowAlertDialog.getItems().length, equalTo(2));
17572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertEquals(shadowAlertDialog.getItems()[0], "Aloha");
176ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowOf(ShadowAlertDialog.getLatestAlertDialog()), sameInstance(shadowAlertDialog));
177ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
17872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    }
1791258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
1801258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    @Test
1819c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin    public void show_setsLatestAlertDialogAndLatestDialog() {
1825117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        AlertDialog alertDialog = new AlertDialog.Builder(Robolectric.application).create();
1839c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        assertNull(ShadowDialog.getLatestDialog());
1845117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertNull(ShadowAlertDialog.getLatestAlertDialog());
185753d062a9106040be10c39595219774ae656b8f9Mike Grafton
1869c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        alertDialog.show();
1879c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin
1885117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertEquals(alertDialog, ShadowDialog.getLatestDialog());
1895117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertEquals(alertDialog, ShadowAlertDialog.getLatestAlertDialog());
1909c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin    }
1919c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin
192753d062a9106040be10c39595219774ae656b8f9Mike Grafton    @Test
193753d062a9106040be10c39595219774ae656b8f9Mike Grafton    public void shouldReturnTheIndexOfTheCheckedItemInASingleChoiceDialog() throws Exception {
194753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
195753d062a9106040be10c39595219774ae656b8f9Mike Grafton
196753d062a9106040be10c39595219774ae656b8f9Mike Grafton        builder.setSingleChoiceItems(new String[]{"foo", "bar"}, 1, new DialogInterface.OnClickListener() {
197753d062a9106040be10c39595219774ae656b8f9Mike Grafton            public void onClick(DialogInterface dialog, int item) {
198753d062a9106040be10c39595219774ae656b8f9Mike Grafton
199753d062a9106040be10c39595219774ae656b8f9Mike Grafton            }
200753d062a9106040be10c39595219774ae656b8f9Mike Grafton        });
201753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog alert = builder.create();
202753d062a9106040be10c39595219774ae656b8f9Mike Grafton        alert.show();
203753d062a9106040be10c39595219774ae656b8f9Mike Grafton
204753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(alert.isShowing(), equalTo(true));
205753d062a9106040be10c39595219774ae656b8f9Mike Grafton
206753d062a9106040be10c39595219774ae656b8f9Mike Grafton        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
207753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertEquals(shadowAlertDialog.getCheckedItemIndex(), 1);
208753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertEquals(shadowAlertDialog.getItems()[0], "foo");
209753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(shadowAlertDialog.getItems().length, equalTo(2));
2105117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
211753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
212753d062a9106040be10c39595219774ae656b8f9Mike Grafton
213753d062a9106040be10c39595219774ae656b8f9Mike Grafton    @Test
214753d062a9106040be10c39595219774ae656b8f9Mike Grafton    public void shouldCallTheClickListenerOfTheCheckedItemInASingleChoiceDialog() throws Exception {
215753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
216753d062a9106040be10c39595219774ae656b8f9Mike Grafton
217753d062a9106040be10c39595219774ae656b8f9Mike Grafton        TestDialogOnClickListener listener = new TestDialogOnClickListener();
218753d062a9106040be10c39595219774ae656b8f9Mike Grafton        builder.setSingleChoiceItems(new String[]{"foo", "bar"}, 1, listener);
219753d062a9106040be10c39595219774ae656b8f9Mike Grafton
220753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog alert = builder.create();
221753d062a9106040be10c39595219774ae656b8f9Mike Grafton        alert.show();
222753d062a9106040be10c39595219774ae656b8f9Mike Grafton
223753d062a9106040be10c39595219774ae656b8f9Mike Grafton        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
224753d062a9106040be10c39595219774ae656b8f9Mike Grafton        shadowAlertDialog.clickOnItem(0);
225753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(listener.clickedItem, equalTo(0));
226753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(shadowAlertDialog.getCheckedItemIndex(), equalTo(0));
227753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
228753d062a9106040be10c39595219774ae656b8f9Mike Grafton
2295117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard    @Test
2301258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    public void shouldFindViewsByIdIfAViewIsSet() throws Exception {
2311258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        ContextWrapper context = new ContextWrapper(null);
2321258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        AlertDialog dialog = new AlertDialog.Builder(context).create();
2331258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2341258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(99), nullValue());
2351258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2361258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        View view = new View(context);
2371258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        view.setId(99);
2381258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        dialog.setView(view);
2391258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(99), sameInstance(view));
2401258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2411258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(66), nullValue());
2421258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    }
2436a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2446a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    @Test
2456a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    public void shouldDelegateToDialogFindViewByIdIfViewIsNull() {
2466a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        AlertDialog dialog = new AlertDialog(Robolectric.application) {
2476a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        };
2486a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2496a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        assertThat(dialog.findViewById(99), nullValue());
2506a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2516a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        dialog.setContentView(R.layout.main);
2526a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        assertNotNull(dialog.findViewById(R.id.title));
2536a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    }
2546a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
2556a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
256753d062a9106040be10c39595219774ae656b8f9Mike Grafton    private static class TestDialogOnClickListener implements DialogInterface.OnClickListener {
257753d062a9106040be10c39595219774ae656b8f9Mike Grafton        private DialogInterface dialog;
258753d062a9106040be10c39595219774ae656b8f9Mike Grafton        private int clickedItem;
259753d062a9106040be10c39595219774ae656b8f9Mike Grafton
260753d062a9106040be10c39595219774ae656b8f9Mike Grafton        public void onClick(DialogInterface dialog, int item) {
261753d062a9106040be10c39595219774ae656b8f9Mike Grafton            this.dialog = dialog;
262753d062a9106040be10c39595219774ae656b8f9Mike Grafton            this.clickedItem = item;
263753d062a9106040be10c39595219774ae656b8f9Mike Grafton        }
264753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
26550e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richard}
266