133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
250e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richard
36cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
46cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport static junit.framework.Assert.assertFalse;
56cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport static junit.framework.Assert.assertNull;
66cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport static org.hamcrest.CoreMatchers.*;
76cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport static org.junit.Assert.*;
86cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
96cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport java.util.ArrayList;
106cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport java.util.List;
116cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
126cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport org.junit.Test;
136cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport org.junit.runner.RunWith;
146cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1511db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultzimport android.app.Activity;
162595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport android.app.AlertDialog;
172595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport android.content.ContextWrapper;
182595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport android.content.DialogInterface;
191258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richardimport android.view.View;
20f1db8d709d4596bde52bcead212b396b81635123pivotalimport android.widget.ArrayAdapter;
216cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilsonimport android.widget.Button;
2266ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultzimport android.widget.EditText;
236cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
242595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport com.xtremelabs.robolectric.R;
252595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport com.xtremelabs.robolectric.Robolectric;
262595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysserimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
272595367a5bc40f7f104ad0d78139b9a7edcf8b61Ronald Dehuysser
2807257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
2950e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richardpublic class AlertDialogTest {
3040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
3172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    @Test
3272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    public void testBuilder() throws Exception {
3372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
3472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setTitle("title").setMessage("message");
353e6fa4f57f88547cc237624a6827d14e557fcee9Rich Humphrey        builder.setCancelable(true);
3672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog alert = builder.create();
3772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        alert.show();
3872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
3972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(alert.isShowing(), equalTo(true));
4072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
4172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
429c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        assertEquals("title", shadowAlertDialog.getTitle());
4372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(shadowAlertDialog.getMessage(), equalTo("message"));
443e6fa4f57f88547cc237624a6827d14e557fcee9Rich Humphrey        assertThat(shadowAlertDialog.isCancelable(), equalTo(true));
45ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowOf(ShadowAlertDialog.getLatestAlertDialog()), sameInstance(shadowAlertDialog));
46ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
47ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard    }
48ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard
49ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard    @Test
50ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard    public void getLatestAlertDialog_shouldReturnARealAlertDialog() throws Exception {
51ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), nullValue());
52ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard
53ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        AlertDialog dialog = new AlertDialog.Builder(new ContextWrapper(null)).show();
54ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(dialog));
5572ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    }
5672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
5772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    @Test
584219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz    public void shouldOnlyCreateRequestedButtons() throws Exception {
594219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
604219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        builder.setPositiveButton("OK", null);
614219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        AlertDialog dialog = builder.create();
624219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        dialog.show();
634219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        assertThat(shadowOf(dialog).getButton(AlertDialog.BUTTON_POSITIVE), not(nullValue()));
644219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz        assertThat(shadowOf(dialog).getButton(AlertDialog.BUTTON_NEGATIVE), nullValue());
654219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz    }
664219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz
674219823fcaadde15ed2f1d4a422aa62eb9eadd93Mike Mazur & Tyler Schultz    @Test
68fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard    public void shouldAllowNullButtonListeners() throws Exception {
69fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
70fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        builder.setPositiveButton("OK", null);
71fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        AlertDialog dialog = builder.create();
72fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        dialog.show();
73fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard        Robolectric.clickOn(dialog.getButton(AlertDialog.BUTTON_POSITIVE));
74fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard    }
75fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard
76fd6517720932e1d9c426d15edbb81b8213b1f8f5Lowell Kirsh & Ryan Richard    @Test
7728dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai    public void testSetMessageAfterCreation() {
7828dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
7928dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        builder.setTitle("title").setMessage("message");
8028dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        AlertDialog alert = builder.create();
8128dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
8228dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
8328dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        assertThat(shadowAlertDialog.getMessage(), equalTo("message"));
8428dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
8528dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        shadowAlertDialog.setMessage("new message");
8628dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        assertThat(shadowAlertDialog.getMessage(), equalTo("new message"));
8728dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
8828dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        shadowAlertDialog.setMessage(null);
8928dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai        assertThat(shadowAlertDialog.getMessage(), nullValue());
9028dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai    }
9128dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai
9228dfcd9a7137bc117ca50634314848c0b1d4403cronald.mai    @Test
9311db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz    public void shouldSetMessageFromResourceId() throws Exception {
9411db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(new Activity());
9511db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        builder.setTitle("title").setMessage(R.string.hello);
9611db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz
9711db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        AlertDialog alert = builder.create();
9811db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
9911db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz        assertThat(shadowAlertDialog.getMessage(), equalTo("Hello"));
10011db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz    }
10111db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz
10211db6a280db0d49750ca6b3f2a51083110dd020eJoe Moore & Tyler Schultz    @Test
10366ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz    public void shouldSetView() throws Exception {
104874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        ContextWrapper context = new ContextWrapper(null);
10566ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(context);
10666ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        EditText view = new EditText(context);
10766ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        builder.setView(view);
10866ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz
10966ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        AlertDialog alert = builder.create();
11066ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz        assertThat(shadowOf(alert).getView(), equalTo((View) view));
11166ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz    }
11266ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz
11366ab50f46c79da589f2b5419407ecce9d44c99a3Mike Mazur & Tyler Schultz    @Test
114d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz    public void shouldSetCustomTitleView() throws Exception {
115d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        ContextWrapper context = new ContextWrapper(null);
116d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(context);
117d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        View view = new View(context);
118d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        assertThat(builder.setCustomTitle(view), sameInstance(builder));
119d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz
120d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        AlertDialog alert = builder.create();
121d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz        assertThat(shadowOf(alert).getCustomTitleView(), equalTo((View) view));
122d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz    }
1236cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1246cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    @Test
1256cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    public void shouldSetThePositiveButtonAfterCreation() throws Exception {
1266cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        final AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
1276cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson            .setPositiveButton("Positive", null).create();
1286cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1296cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        TestDialogOnClickListener listener = new TestDialogOnClickListener();
1306cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "More Positive", listener);
1316cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1326cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        final Button positiveButton = shadowOf(alertDialog).getButton(AlertDialog.BUTTON_POSITIVE);
1336cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        positiveButton.performClick();
1346cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1356cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        assertThat(positiveButton.getText().toString(), equalTo("More Positive"));
1366cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        assertThat(listener.clickedItem, equalTo(AlertDialog.BUTTON_POSITIVE));
1376cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    }
1386cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1396cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    @Test
1406cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    public void shouldSetTheNegativeButtonAfterCreation() throws Exception {
1416cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        final AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
1426cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson            .setNegativeButton("Negative", null).create();
1436cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1446cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        TestDialogOnClickListener listener = new TestDialogOnClickListener();
1456cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "More Negative", listener);
1466cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1476cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        final Button negativeButton = shadowOf(alertDialog).getButton(AlertDialog.BUTTON_NEGATIVE);
1486cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        negativeButton.performClick();
1496cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1506cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        assertThat(negativeButton.getText().toString(), equalTo("More Negative"));
1516cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        assertThat(listener.clickedItem, equalTo(AlertDialog.BUTTON_NEGATIVE));
1526cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    }
1536cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1546cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    @Test
1556cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    public void shouldSetTheNeutralButtonAfterCreation() throws Exception {
1566cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        final AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
1576cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson            .setNegativeButton("Neutral", null).create();
1586cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1596cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        TestDialogOnClickListener listener = new TestDialogOnClickListener();
1606cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Still Neutral", listener);
1616cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1626cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        final Button neutralButton = shadowOf(alertDialog).getButton(AlertDialog.BUTTON_NEUTRAL);
1636cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        neutralButton.performClick();
1646cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson
1656cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        assertThat(neutralButton.getText().toString(), equalTo("Still Neutral"));
1666cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson        assertThat(listener.clickedItem, equalTo(AlertDialog.BUTTON_NEUTRAL));
1676cb8eb7fc51d514539d865529cb849a035ab7498Levi Wilson    }
168d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz
169d9715ea3daabfd16495e39d4af2a37b400a35150Tyler Schultz    @Test
170874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingPositiveButtonDismissesDialog() throws Exception {
171874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
172f1db8d709d4596bde52bcead212b396b81635123pivotal                .setPositiveButton("Positive", null).create();
173874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
174874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
175874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
176874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
177874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
178874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
179f1db8d709d4596bde52bcead212b396b81635123pivotal
180874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
181874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingNeutralButtonDismissesDialog() throws Exception {
182874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
183f1db8d709d4596bde52bcead212b396b81635123pivotal                .setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
184f1db8d709d4596bde52bcead212b396b81635123pivotal                    @Override
185f1db8d709d4596bde52bcead212b396b81635123pivotal                    public void onClick(DialogInterface dialog, int which) {
186f1db8d709d4596bde52bcead212b396b81635123pivotal                    }
187f1db8d709d4596bde52bcead212b396b81635123pivotal                }).create();
188874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
189874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
190874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
191874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).performClick();
192874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
193874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
194f1db8d709d4596bde52bcead212b396b81635123pivotal
195874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
196874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    public void clickingNegativeButtonDismissesDialog() throws Exception {
197874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        AlertDialog alertDialog = new AlertDialog.Builder(new ContextWrapper(null))
198f1db8d709d4596bde52bcead212b396b81635123pivotal                .setNegativeButton("Negative", new DialogInterface.OnClickListener() {
199f1db8d709d4596bde52bcead212b396b81635123pivotal                    @Override
200f1db8d709d4596bde52bcead212b396b81635123pivotal                    public void onClick(DialogInterface dialog, int which) {
201f1db8d709d4596bde52bcead212b396b81635123pivotal                    }
202f1db8d709d4596bde52bcead212b396b81635123pivotal                }).create();
203874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.show();
204874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
205874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertTrue(alertDialog.isShowing());
206874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick();
207874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz        assertFalse(alertDialog.isShowing());
208874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    }
209874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz
210874759fdce29cf153192eb86bf2e4d2d5dd1d5aaMike Mazur & Tyler Schultz    @Test
21172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    public void testBuilderWithItemArrayViaResourceId() throws Exception {
21272ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
21372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
21472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        builder.setTitle("title");
2154382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        builder.setItems(R.array.alertDialogTestItems, new TestDialogOnClickListener());
21672ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        AlertDialog alert = builder.create();
21772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        alert.show();
21872ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
21972ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(alert.isShowing(), equalTo(true));
22072ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin
22172ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
222ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowAlertDialog.getTitle().toString(), equalTo("title"));
22372ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertThat(shadowAlertDialog.getItems().length, equalTo(2));
22472ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin        assertEquals(shadowAlertDialog.getItems()[0], "Aloha");
225ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(shadowOf(ShadowAlertDialog.getLatestAlertDialog()), sameInstance(shadowAlertDialog));
226ec07ffb13702733c07a846308de902a6f68977f2David Farber & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
22772ee6c0e205c424f0706051d89e1c7f184bf8269Phil Goodwin    }
2281258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
2294382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
2304382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//    @Test
2314382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//    public void testBuilderWithItemArrayCanPerformClickOnItem() throws Exception {
2324382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//        TestDialogOnClickListener listener = new TestDialogOnClickListener();
2334382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//        AlertDialog alert = new AlertDialog.Builder(new ContextWrapper(Robolectric.application))
2344382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//                .setItems(R.array.alertDialogTestItems, listener)
2354382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//                .create();
2364382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//
2374382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//        alert.show();
2384382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
2394382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//        shadowAlertDialog.clickOnItem(1);
2404382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//
2414382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//
2424382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz//    }
2434382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
2441258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    @Test
245f1db8d709d4596bde52bcead212b396b81635123pivotal    public void testBuilderWithAdapter() throws Exception {
246f1db8d709d4596bde52bcead212b396b81635123pivotal        List<Integer> list = new ArrayList<Integer>();
247f1db8d709d4596bde52bcead212b396b81635123pivotal        list.add(99);
248f1db8d709d4596bde52bcead212b396b81635123pivotal        list.add(88);
249f1db8d709d4596bde52bcead212b396b81635123pivotal        list.add(77);
25043d4a611b7ee5c0548119b746baf4da97d8cecceTim Labeeuw & Tyler Schultz        ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(Robolectric.application, R.layout.main, R.id.title, list);
251f1db8d709d4596bde52bcead212b396b81635123pivotal
252f1db8d709d4596bde52bcead212b396b81635123pivotal        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(null));
253f1db8d709d4596bde52bcead212b396b81635123pivotal        builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
254f1db8d709d4596bde52bcead212b396b81635123pivotal            @Override
255f1db8d709d4596bde52bcead212b396b81635123pivotal            public void onClick(DialogInterface dialog, int item) {
256f1db8d709d4596bde52bcead212b396b81635123pivotal                dialog.dismiss();
257f1db8d709d4596bde52bcead212b396b81635123pivotal            }
258f1db8d709d4596bde52bcead212b396b81635123pivotal        });
259f1db8d709d4596bde52bcead212b396b81635123pivotal        AlertDialog alert = builder.create();
260f1db8d709d4596bde52bcead212b396b81635123pivotal        alert.show();
261f1db8d709d4596bde52bcead212b396b81635123pivotal
262f1db8d709d4596bde52bcead212b396b81635123pivotal        assertTrue(alert.isShowing());
263f1db8d709d4596bde52bcead212b396b81635123pivotal        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
264f1db8d709d4596bde52bcead212b396b81635123pivotal        assertEquals(shadowAlertDialog.getAdapter().getCount(), 3);
265f1db8d709d4596bde52bcead212b396b81635123pivotal        assertEquals(shadowAlertDialog.getAdapter().getItem(0), 99);
266f1db8d709d4596bde52bcead212b396b81635123pivotal    }
267f1db8d709d4596bde52bcead212b396b81635123pivotal
268f1db8d709d4596bde52bcead212b396b81635123pivotal    @Test
2699c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin    public void show_setsLatestAlertDialogAndLatestDialog() {
2705117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        AlertDialog alertDialog = new AlertDialog.Builder(Robolectric.application).create();
2719c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        assertNull(ShadowDialog.getLatestDialog());
2725117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertNull(ShadowAlertDialog.getLatestAlertDialog());
273753d062a9106040be10c39595219774ae656b8f9Mike Grafton
2749c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin        alertDialog.show();
2759c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin
2765117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertEquals(alertDialog, ShadowDialog.getLatestDialog());
2775117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertEquals(alertDialog, ShadowAlertDialog.getLatestAlertDialog());
2789c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin    }
2799c6f1b1bf3d0bb2c6bb2abbf7fe8f21a137891f3Glenn Jahnke & Phil Goodwin
280753d062a9106040be10c39595219774ae656b8f9Mike Grafton    @Test
281753d062a9106040be10c39595219774ae656b8f9Mike Grafton    public void shouldReturnTheIndexOfTheCheckedItemInASingleChoiceDialog() throws Exception {
282753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
283753d062a9106040be10c39595219774ae656b8f9Mike Grafton
284753d062a9106040be10c39595219774ae656b8f9Mike Grafton        builder.setSingleChoiceItems(new String[]{"foo", "bar"}, 1, new DialogInterface.OnClickListener() {
285753d062a9106040be10c39595219774ae656b8f9Mike Grafton            public void onClick(DialogInterface dialog, int item) {
286753d062a9106040be10c39595219774ae656b8f9Mike Grafton
287753d062a9106040be10c39595219774ae656b8f9Mike Grafton            }
288753d062a9106040be10c39595219774ae656b8f9Mike Grafton        });
289753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog alert = builder.create();
290753d062a9106040be10c39595219774ae656b8f9Mike Grafton        alert.show();
291753d062a9106040be10c39595219774ae656b8f9Mike Grafton
292753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(alert.isShowing(), equalTo(true));
293753d062a9106040be10c39595219774ae656b8f9Mike Grafton
294753d062a9106040be10c39595219774ae656b8f9Mike Grafton        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
295753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertEquals(shadowAlertDialog.getCheckedItemIndex(), 1);
296753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertEquals(shadowAlertDialog.getItems()[0], "foo");
297753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(shadowAlertDialog.getItems().length, equalTo(2));
2985117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        assertThat(ShadowAlertDialog.getLatestAlertDialog(), sameInstance(alert));
299753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
300753d062a9106040be10c39595219774ae656b8f9Mike Grafton
301753d062a9106040be10c39595219774ae656b8f9Mike Grafton    @Test
302753d062a9106040be10c39595219774ae656b8f9Mike Grafton    public void shouldCallTheClickListenerOfTheCheckedItemInASingleChoiceDialog() throws Exception {
303753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
304753d062a9106040be10c39595219774ae656b8f9Mike Grafton
305753d062a9106040be10c39595219774ae656b8f9Mike Grafton        TestDialogOnClickListener listener = new TestDialogOnClickListener();
306753d062a9106040be10c39595219774ae656b8f9Mike Grafton        builder.setSingleChoiceItems(new String[]{"foo", "bar"}, 1, listener);
307753d062a9106040be10c39595219774ae656b8f9Mike Grafton
308753d062a9106040be10c39595219774ae656b8f9Mike Grafton        AlertDialog alert = builder.create();
309753d062a9106040be10c39595219774ae656b8f9Mike Grafton        alert.show();
310753d062a9106040be10c39595219774ae656b8f9Mike Grafton
311753d062a9106040be10c39595219774ae656b8f9Mike Grafton        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
312753d062a9106040be10c39595219774ae656b8f9Mike Grafton        shadowAlertDialog.clickOnItem(0);
313753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(listener.clickedItem, equalTo(0));
314753d062a9106040be10c39595219774ae656b8f9Mike Grafton        assertThat(shadowAlertDialog.getCheckedItemIndex(), equalTo(0));
3154382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3164382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        shadowAlertDialog.clickOnItem(1);
3174382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        assertThat(listener.clickedItem, equalTo(1));
3184382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        assertThat(shadowAlertDialog.getCheckedItemIndex(), equalTo(1));
3194382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3204382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz    }
3214382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3224382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz    @Test
3234382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz    public void shouldCallTheClickListenerOfTheCheckedAdapterInASingleChoiceDialog() throws Exception {
3244382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        AlertDialog.Builder builder = new AlertDialog.Builder(new ContextWrapper(Robolectric.application));
3254382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3264382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        TestDialogOnClickListener listener = new TestDialogOnClickListener();
3274382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        List<Integer> list = new ArrayList<Integer>();
3284382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        list.add(1);
3294382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        list.add(2);
3304382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        list.add(3);
3314382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        ArrayAdapter<Integer> arrayAdapter = new ArrayAdapter<Integer>(Robolectric.application, R.layout.main, R.id.title, list);
3324382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        builder.setSingleChoiceItems(arrayAdapter, 1, listener);
3334382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3344382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        AlertDialog alert = builder.create();
3354382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        alert.show();
3364382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3374382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        ShadowAlertDialog shadowAlertDialog = shadowOf(alert);
3384382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        shadowAlertDialog.clickOnItem(0);
3394382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        assertThat(listener.clickedItem, equalTo(0));
3404382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        assertThat(shadowAlertDialog.getCheckedItemIndex(), equalTo(0));
3414382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
3424382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        shadowAlertDialog.clickOnItem(1);
3434382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        assertThat(listener.clickedItem, equalTo(1));
3444382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz        assertThat(shadowAlertDialog.getCheckedItemIndex(), equalTo(1));
3454382bee277815157a5279318af06e47eb7e599eeTim Labeeuw & Tyler Schultz
346753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
347753d062a9106040be10c39595219774ae656b8f9Mike Grafton
3485117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard    @Test
3491258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    public void shouldFindViewsByIdIfAViewIsSet() throws Exception {
3501258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        ContextWrapper context = new ContextWrapper(null);
3511258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        AlertDialog dialog = new AlertDialog.Builder(context).create();
352f1db8d709d4596bde52bcead212b396b81635123pivotal
3531258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(99), nullValue());
3541258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard
3551258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        View view = new View(context);
3561258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        view.setId(99);
3571258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        dialog.setView(view);
3581258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(99), sameInstance(view));
359f1db8d709d4596bde52bcead212b396b81635123pivotal
3601258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard        assertThat(dialog.findViewById(66), nullValue());
3611258bd4f817130a401a5a234354b95fe3bf7e4eeDavid Farber & Ryan Richard    }
3626a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
3636a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    @Test
3646a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    public void shouldDelegateToDialogFindViewByIdIfViewIsNull() {
3656a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        AlertDialog dialog = new AlertDialog(Robolectric.application) {
3666a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        };
3676a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
3686a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        assertThat(dialog.findViewById(99), nullValue());
3696a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
3706a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        dialog.setContentView(R.layout.main);
3716a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala        assertNotNull(dialog.findViewById(R.id.title));
3726a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala    }
3736a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
3746a89c2aeb7fd6ad6abea8614ef54a450cb0a5211Joe Moore, Phil Goodwin & Rick Kawala
375753d062a9106040be10c39595219774ae656b8f9Mike Grafton    private static class TestDialogOnClickListener implements DialogInterface.OnClickListener {
376753d062a9106040be10c39595219774ae656b8f9Mike Grafton        private DialogInterface dialog;
377753d062a9106040be10c39595219774ae656b8f9Mike Grafton        private int clickedItem;
378753d062a9106040be10c39595219774ae656b8f9Mike Grafton
379753d062a9106040be10c39595219774ae656b8f9Mike Grafton        public void onClick(DialogInterface dialog, int item) {
380753d062a9106040be10c39595219774ae656b8f9Mike Grafton            this.dialog = dialog;
381753d062a9106040be10c39595219774ae656b8f9Mike Grafton            this.clickedItem = item;
382753d062a9106040be10c39595219774ae656b8f9Mike Grafton        }
383753d062a9106040be10c39595219774ae656b8f9Mike Grafton    }
38450e71a2777cae2b5f630448c5ab22be4066d4d6dChristian Williams & Ryan Richard}
385