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