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