1package com.xtremelabs.robolectric.shadows;
2
3import android.widget.RadioGroup;
4import com.xtremelabs.robolectric.WithTestDefaultsRunner;
5import org.junit.Test;
6import org.junit.runner.RunWith;
7
8import java.util.ArrayList;
9import java.util.Arrays;
10
11import static org.hamcrest.CoreMatchers.equalTo;
12import static org.junit.Assert.assertEquals;
13import static org.junit.Assert.assertThat;
14
15@RunWith(WithTestDefaultsRunner.class)
16public class RadioGroupTest {
17    private static final int BUTTON_ID = 3245;
18
19    @Test
20    public void checkedRadioButtonId() throws Exception {
21        RadioGroup radioGroup = new RadioGroup(null);
22        assertThat(radioGroup.getCheckedRadioButtonId(), equalTo(-1));
23        radioGroup.check(99);
24        assertThat(radioGroup.getCheckedRadioButtonId(), equalTo(99));
25    }
26
27    @Test
28    public void check_shouldCallOnCheckedChangeListener() throws Exception {
29        RadioGroup radioGroup = new RadioGroup(null);
30        TestOnCheckedChangeListener listener = new TestOnCheckedChangeListener();
31        radioGroup.setOnCheckedChangeListener(listener);
32
33        radioGroup.check(BUTTON_ID);
34
35        assertEquals(Arrays.asList(BUTTON_ID), listener.onCheckedChangedCheckedIds);
36        assertEquals(Arrays.asList(radioGroup), listener.onCheckedChangedGroups);
37    }
38
39    @Test
40    public void clearCheck_shouldCallOnCheckedChangeListenerTwice() throws Exception {
41        RadioGroup radioGroup = new RadioGroup(null);
42        TestOnCheckedChangeListener listener = new TestOnCheckedChangeListener();
43
44        radioGroup.check(BUTTON_ID);
45        radioGroup.setOnCheckedChangeListener(listener);
46        radioGroup.clearCheck();
47
48        assertEquals(Arrays.asList(BUTTON_ID, -1), listener.onCheckedChangedCheckedIds);
49        assertEquals(Arrays.asList(radioGroup, radioGroup), listener.onCheckedChangedGroups);
50
51    }
52
53    private static class TestOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {
54        public ArrayList<RadioGroup> onCheckedChangedGroups = new ArrayList<RadioGroup>();
55        public ArrayList<Integer> onCheckedChangedCheckedIds = new ArrayList<Integer>();
56
57        @Override
58        public void onCheckedChanged(RadioGroup group, int checkedId) {
59            onCheckedChangedGroups.add(group);
60            onCheckedChangedCheckedIds.add(checkedId);
61        }
62    }
63}
64