1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.databinding.testapp; 18 19import android.annotation.TargetApi; 20import android.databinding.ObservableField; 21import android.databinding.ObservableInt; 22import android.databinding.testapp.BR; 23import android.databinding.testapp.databinding.BindableObservablesBinding; 24import android.databinding.testapp.databinding.CallbacksBinding; 25import android.databinding.testapp.vo.ViewModel; 26import android.os.Build; 27import android.support.test.runner.AndroidJUnit4; 28import static org.hamcrest.MatcherAssert.assertThat; 29import static org.hamcrest.CoreMatchers.*; 30import org.junit.Rule; 31import org.junit.Test; 32import org.junit.runner.RunWith; 33 34@RunWith(AndroidJUnit4.class) 35public class BindableObservablesTest { 36 @Rule 37 public DataBindingTestRule<BindableObservablesBinding> mBindingRule = new DataBindingTestRule<>( 38 R.layout.bindable_observables 39 ); 40 41 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 42 @Test 43 public void publicBinding() { 44 ViewModel model = new ViewModel(); 45 model.publicObservable.set(40); 46 BindableObservablesBinding binding = mBindingRule.getBinding(); 47 binding.setModel(model); 48 mBindingRule.executePending(); 49 assertThat(binding.view1.getMaxLines(), is(40)); 50 model.publicObservable.set(20); 51 mBindingRule.executePending(); 52 assertThat(binding.view1.getMaxLines(), is(20)); 53 } 54 55 @Test 56 public void fieldBinding() { 57 ViewModel model = new ViewModel(); 58 model.getFieldObservable().set("abc"); 59 BindableObservablesBinding binding = mBindingRule.getBinding(); 60 binding.setModel(model); 61 mBindingRule.executePending(); 62 assertThat(binding.view2.getText().toString(), is("abc")); 63 model.getFieldObservable().set("def"); 64 mBindingRule.executePending(); 65 assertThat(binding.view2.getText().toString(), is("def")); 66 } 67 68 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 69 @Test 70 public void methodBinding() { 71 ViewModel model = new ViewModel(); 72 model.getMethodObservable().set(30); 73 BindableObservablesBinding binding = mBindingRule.getBinding(); 74 binding.setModel(model); 75 mBindingRule.executePending(); 76 assertThat(binding.view3.getMaxLines(), is(30)); 77 model.getMethodObservable().set(15); 78 mBindingRule.executePending(); 79 assertThat(binding.view3.getMaxLines(), is(15)); 80 } 81 82 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 83 @Test 84 public void publicBindingChangeObservable() { 85 ViewModel model = new ViewModel(); 86 model.publicObservable.set(40); 87 BindableObservablesBinding binding = mBindingRule.getBinding(); 88 binding.setModel(model); 89 mBindingRule.executePending(); 90 assertThat(binding.view1.getMaxLines(), is(40)); 91 92 model.publicObservable = new ObservableInt(20); 93 94 mBindingRule.executePending(); 95 assertThat(binding.view1.getMaxLines(), is(40)); 96 97 model.notifyPropertyChanged(BR.publicObservable); 98 mBindingRule.executePending(); 99 assertThat(binding.view1.getMaxLines(), is(20)); 100 101 } 102 103 @Test 104 public void fieldBindingChangeObservable() { 105 ViewModel model = new ViewModel(); 106 model.getFieldObservable().set("abc"); 107 BindableObservablesBinding binding = mBindingRule.getBinding(); 108 binding.setModel(model); 109 mBindingRule.executePending(); 110 assertThat(binding.view2.getText().toString(), is("abc")); 111 112 model.setFieldObservable(new ObservableField<String>("def")); 113 114 mBindingRule.executePending(); 115 assertThat(binding.view2.getText().toString(), is("abc")); 116 117 model.notifyPropertyChanged(BR.fieldObservable); 118 mBindingRule.executePending(); 119 assertThat(binding.view2.getText().toString(), is("def")); 120 } 121 122 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 123 @Test 124 public void methodBindingChangeObservable() { 125 ViewModel model = new ViewModel(); 126 model.getMethodObservable().set(30); 127 BindableObservablesBinding binding = mBindingRule.getBinding(); 128 binding.setModel(model); 129 mBindingRule.executePending(); 130 assertThat(binding.view3.getMaxLines(), is(30)); 131 132 model.setMethodObservable(new ObservableInt(15)); 133 134 mBindingRule.executePending(); 135 assertThat(binding.view3.getMaxLines(), is(30)); 136 137 model.notifyPropertyChanged(BR.methodObservable); 138 mBindingRule.executePending(); 139 assertThat(binding.view3.getMaxLines(), is(15)); 140 } 141} 142