BaseDataBinderTest.java revision fead9ca09b117136b35bc5bf137340a754f9eddd
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
14fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.testapp;
15dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.ViewDataBinding;
17dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
184c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mountimport android.content.Context;
195bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyarimport android.content.pm.ActivityInfo;
200fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyarimport android.os.Looper;
21dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarimport android.test.ActivityInstrumentationTestCase2;
22fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.util.Log;
23dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
24fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport java.io.PrintWriter;
25fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport java.io.StringWriter;
264c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mountimport java.lang.reflect.Method;
274c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount
284c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mountpublic class BaseDataBinderTest<T extends ViewDataBinding>
29dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        extends ActivityInstrumentationTestCase2<TestActivity> {
3071eb6908f2689bd17000237eb645896c36da0138George Mount    protected Class<T> mBinderClass;
315bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    private int mOrientation;
32dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    protected T mBinder;
33dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
344c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount    public BaseDataBinderTest(final Class<T> binderClass) {
354c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount        this(binderClass, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
365bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
375bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
384c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount    public BaseDataBinderTest(final Class<T> binderClass, final int orientation) {
39dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        super(TestActivity.class);
40dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        mBinderClass = binderClass;
415bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        mOrientation = orientation;
42dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    }
43dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar
44dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    @Override
45dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    protected void setUp() throws Exception {
46dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        super.setUp();
475bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        getActivity().setRequestedOrientation(mOrientation);
480fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        createBinder();
490fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    }
500fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar
510fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    public boolean isMainThread() {
520fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        return Looper.myLooper() == Looper.getMainLooper();
530fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    }
540fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar
550fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar    protected void createBinder() {
560fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        mBinder = null;
57dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        getActivity().runOnUiThread(new Runnable() {
58dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar            @Override
59dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar            public void run() {
604c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                Method method = null;
614c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                try {
624c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                    method = mBinderClass.getMethod("inflate", Context.class);
634c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                    mBinder = (T) method.invoke(null, getActivity());
644c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                    getActivity().setContentView(mBinder.getRoot());
654c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                } catch (Exception e) {
66fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount                    StringWriter sw = new StringWriter();
67fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount                    PrintWriter pw = new PrintWriter(sw);
68fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount                    e.printStackTrace(pw);
69fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount                    fail("Error creating binder: " + sw.toString());
704c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount                }
71dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar            }
72dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        });
730fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        if (!isMainThread()) {
740fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar            getInstrumentation().waitForIdleSync();
750fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar        }
76dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar        assertNotNull(mBinder);
77dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar    }
785bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
795bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    protected void assertMethod(Class<?> klass, String methodName) throws NoSuchMethodException {
805bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        assertEquals(klass, mBinder.getClass().getDeclaredMethod(methodName).getReturnType());
815bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
825bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
835bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    protected void assertField(Class<?> klass, String fieldName) throws NoSuchFieldException {
845bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        assertEquals(klass, mBinder.getClass().getDeclaredField(fieldName).getType());
855bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
865bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar
875bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    protected void assertNoField(String fieldName) {
885bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        Exception[] ex = new Exception[1];
895bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        try {
905bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar            mBinder.getClass().getDeclaredField(fieldName);
915bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        } catch (NoSuchFieldException e) {
925bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar            ex[0] = e;
935bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        }
945bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar        assertNotNull(ex[0]);
955bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar    }
96dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar}
97