100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam/*
200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * Copyright (C) 2016 The Android Open Source Project
300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam *
400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License");
500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * you may not use this file except in compliance with the License.
600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * You may obtain a copy of the License at
700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam *
800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam *      http://www.apache.org/licenses/LICENSE-2.0
900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam *
1000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * Unless required by applicable law or agreed to in writing, software
1100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS,
1200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * See the License for the specific language governing permissions and
1400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam * limitations under the License.
1500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam */
1600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
1700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lampackage com.android.setupwizardlib.test;
1800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
192614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport static org.junit.Assert.assertEquals;
202614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport static org.junit.Assert.assertNull;
212614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport static org.junit.Assert.fail;
222614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam
232614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport android.support.test.InstrumentationRegistry;
242614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport android.support.test.filters.SmallTest;
252614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport android.support.test.runner.AndroidJUnit4;
2600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport android.view.ViewGroup;
2700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport android.widget.Button;
2800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport android.widget.LinearLayout;
2900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
3000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport com.android.setupwizardlib.items.ButtonBarItem;
3100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport com.android.setupwizardlib.items.ButtonItem;
3200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport com.android.setupwizardlib.items.Item;
3300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lamimport com.android.setupwizardlib.items.ItemHierarchy;
3400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
352614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport org.junit.Before;
362614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport org.junit.Test;
372614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lamimport org.junit.runner.RunWith;
382614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam
392614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam@RunWith(AndroidJUnit4.class)
402614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam@SmallTest
412614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lampublic class ButtonBarItemTest {
4200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
4300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    private ButtonItem mChild1;
4400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    private ButtonItem mChild2;
4500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    private ButtonItem mChild3;
4600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
472614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam    @Before
482614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam    public void setUp() throws Exception {
4900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild1 = new ButtonItem();
5000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild2 = new ButtonItem();
5100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild3 = new ButtonItem();
5200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    }
5300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
542614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam    @Test
5500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    public void testFindItemById() {
5600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        ButtonBarItem item = new ButtonBarItem();
5700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.setId(888);
5800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
5900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild1.setId(123);
6000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild2.setId(456);
6100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild3.setId(789);
6200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.addChild(mChild1);
6300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.addChild(mChild2);
6400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.addChild(mChild3);
6500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
6600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Finding 123 should return child1", mChild1, item.findItemById(123));
6700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Finding 456 should return child2", mChild2, item.findItemById(456));
6800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Finding 789 should return child3", mChild3, item.findItemById(789));
6900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
7000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Finding 888 should return ButtonBarItem itself", item,
7100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam                item.findItemById(888));
7200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
7300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertNull("Finding 999 should return null", item.findItemById(999));
7400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    }
7500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
762614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam    @Test
7700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    public void testBindEmpty() {
7800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        ButtonBarItem item = new ButtonBarItem();
7900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        final ViewGroup layout = createLayout();
8000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.onBindView(layout);
8100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
8200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Binding empty ButtonBar should not create any children", 0,
8300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam                layout.getChildCount());
8400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    }
8500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
862614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam    @Test
8700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    public void testBind() {
8800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        ButtonBarItem item = new ButtonBarItem();
8900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
9000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.addChild(mChild1);
9100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild1.setText("child1");
9200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.addChild(mChild2);
9300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild2.setText("child2");
9400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.addChild(mChild3);
9500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        mChild3.setText("child3");
9600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
9700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        final ViewGroup layout = createLayout();
9800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        item.onBindView(layout);
9900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
10000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Binding ButtonBar should create 3 children", 3, layout.getChildCount());
10100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("First button should have text \"child1\"", "child1",
10200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam                ((Button) layout.getChildAt(0)).getText());
10300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Second button should have text \"child2\"", "child2",
10400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam                ((Button) layout.getChildAt(1)).getText());
10500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        assertEquals("Third button should have text \"child3\"", "child3",
10600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam                ((Button) layout.getChildAt(2)).getText());
10700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    }
10800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
1092614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam    @Test
11000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    public void testAddInvalidChild() {
11100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        ButtonBarItem item = new ButtonBarItem();
11200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
11300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        ItemHierarchy invalidChild = new Item();
11400358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
11500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        try {
11600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam            item.addChild(invalidChild);
11700358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam            fail("Adding non ButtonItem to ButtonBarItem should throw exception");
11800358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        } catch (UnsupportedOperationException e) {
11900358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam            // pass
12000358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam        }
12100358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    }
12200358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam
12300358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    private ViewGroup createLayout() {
1242614260933341bd4ea7bb37a3435f46f82cacef7Maurice Lam        return new LinearLayout(InstrumentationRegistry.getContext());
12500358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam    }
12600358e4d12e6c7ba0f1da1fa9ad57f87da9b3b1aMaurice Lam}
127