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