BaseDataBinderTest.java revision 71eb6908f2689bd17000237eb645896c36da0138
1dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar/*
2dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * Copyright (C) 2015 The Android Open Source Project
3dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
4dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * you may not use this file except in compliance with the License.
5dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * You may obtain a copy of the License at
6dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
7dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * Unless required by applicable law or agreed to in writing, software
8dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
9dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * See the License for the specific language governing permissions and
11dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * limitations under the License.
12dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar */
13dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
14dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarpackage com.android.databinding.testapp;
15dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
16dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarimport com.android.databinding.library.DataBinder;
17dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarimport com.android.databinding.library.IViewDataBinder;
18dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
195bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyarimport android.content.pm.ActivityInfo;
200fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyarimport android.os.Looper;
21dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarimport android.test.ActivityInstrumentationTestCase2;
22dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
23dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarpublic class BaseDataBinderTest<T extends IViewDataBinder>
24dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        extends ActivityInstrumentationTestCase2<TestActivity> {
2571eb6908f2689bd17000237eb645896c36da0138George Mount    protected Class<T> mBinderClass;
26dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    private int mLayoutId;
275bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    private int mOrientation;
28dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    protected T mBinder;
29dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
30dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    public BaseDataBinderTest(final Class<T> binderClass, final int layoutId) {
315bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        this(binderClass, layoutId, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
325bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
335bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
345bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    public BaseDataBinderTest(final Class<T> binderClass, final int layoutId, final int orientation) {
35dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        super(TestActivity.class);
36dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        mBinderClass = binderClass;
37dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        mLayoutId = layoutId;
385bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        mOrientation = orientation;
39dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    }
40dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
41dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    @Override
42dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    protected void setUp() throws Exception {
43dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        super.setUp();
445bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        getActivity().setRequestedOrientation(mOrientation);
450fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        createBinder();
460fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    }
470fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar
480fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    public boolean isMainThread() {
490fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        return Looper.myLooper() == Looper.getMainLooper();
500fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    }
510fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar
520fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    protected void createBinder() {
530fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        mBinder = null;
54dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        getActivity().runOnUiThread(new Runnable() {
55dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar            @Override
56dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar            public void run() {
57dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar                mBinder = DataBinder.createBinder(mBinderClass, getActivity(), mLayoutId, null);
585bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar                getActivity().setContentView(mBinder.getRoot());
59dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar            }
60dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        });
610fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        if (!isMainThread()) {
620fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar            getInstrumentation().waitForIdleSync();
630fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        }
64dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        assertNotNull(mBinder);
65dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    }
665bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
675bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    protected void assertMethod(Class<?> klass, String methodName) throws NoSuchMethodException {
685bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        assertEquals(klass, mBinder.getClass().getDeclaredMethod(methodName).getReturnType());
695bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
705bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
715bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    protected void assertField(Class<?> klass, String fieldName) throws NoSuchFieldException {
725bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        assertEquals(klass, mBinder.getClass().getDeclaredField(fieldName).getType());
735bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
745bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
755bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    protected void assertNoField(String fieldName) {
765bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        Exception[] ex = new Exception[1];
775bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        try {
785bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar            mBinder.getClass().getDeclaredField(fieldName);
795bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        } catch (NoSuchFieldException e) {
805bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar            ex[0] = e;
815bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        }
825bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        assertNotNull(ex[0]);
835bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
84dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar}
85