184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler/*
284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * Copyright (C) 2016 The Android Open Source Project
384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler *
484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * you may not use this file except in compliance with the License.
684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * You may obtain a copy of the License at
784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler *
884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler *
1084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * Unless required by applicable law or agreed to in writing, software
1184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
1284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * See the License for the specific language governing permissions and
1484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler * limitations under the License
1584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler */
1684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
1784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerpackage android.support.v7.preference.tests;
1884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
1984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.content.Context;
2084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.graphics.Canvas;
2184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.graphics.ColorFilter;
2284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.graphics.drawable.Drawable;
2384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.test.InstrumentationRegistry;
2484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.test.filters.SmallTest;
2584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.test.runner.AndroidJUnit4;
2684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.v7.preference.CheckBoxPreference;
2784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.v7.preference.DropDownPreference;
2884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.v7.preference.Preference;
2984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.v7.preference.PreferenceManager;
3084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport android.support.v7.preference.TwoStatePreference;
3184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
3284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport org.junit.Before;
3384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport org.junit.Test;
3484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport org.junit.runner.RunWith;
3584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
3684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport static org.junit.Assert.assertFalse;
3784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerimport static org.junit.Assert.assertTrue;
3884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
3984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler@RunWith(AndroidJUnit4.class)
4084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler@SmallTest
4184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantlerpublic class SimplePreferenceComparisonCallbackTest {
4284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
4384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    private Preference mPref1;
4484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    private Preference mPref2;
4584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    private PreferenceManager.PreferenceComparisonCallback mComparisonCallback;
4684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
4784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Before
4884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void setup() throws Exception {
4984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Context context = InstrumentationRegistry.getTargetContext();
5084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1 = new Preference(context);
5184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2 = new Preference(context);
5284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mComparisonCallback = new PreferenceManager.SimplePreferenceComparisonCallback();
5384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
5484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
5584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
5684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Basic sanity test, all fields blank should compare the same
5784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
5884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
5984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
6084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testNull() throws Exception {
6184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare all null",
6284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
6384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
6484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
6584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
6684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Two different classes should not compare the same
6784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
6884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
6984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
7084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testClassComparison() throws Exception {
7184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Preference checkboxPreference =
7284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                new CheckBoxPreference(InstrumentationRegistry.getTargetContext());
7384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare class",
7484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, checkboxPreference));
7584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
7684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
7784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
7884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Same instance, but detached and reattached should not compare the same
7984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
8084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
8184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
8284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testDetached() throws Exception {
8384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.onDetached();
8484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.onAttached();
8584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare same, detached",
8684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref1));
8784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
8884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
8984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
9084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Title differences should be detected
9184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
9284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
9384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
9484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testTitleComparison() throws Exception {
9584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setTitle("value 1");
9684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
9784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare non-null to null",
9884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
9984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare null to non-null",
10084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref2, mPref1));
10184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
10284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setTitle("value 1");
10384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
10484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare identical",
10584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
10684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
10784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setTitle("value 2");
10884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
10984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare different",
11084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
11184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
11284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
11384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
11484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Summary differences should be detected
11584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
11684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
11784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
11884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testSummaryComparison() throws Exception {
11984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setSummary("value 1");
12084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
12184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare non-null to null",
12284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
12384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare null to non-null",
12484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref2, mPref1));
12584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
12684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setSummary("value 1");
12784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
12884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare identical",
12984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
13084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
13184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setSummary("value 2");
13284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
13384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare different",
13484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
13584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
13684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
13784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    private static class ComparisonDrawable extends Drawable {
13884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
13984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        private final int mId;
14084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
14184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public ComparisonDrawable(int id) {
14284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler            mId = id;
14384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        }
14484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
14584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public int getId() {
14684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler            return mId;
14784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        }
14884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
14984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        @Override
15084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public void draw(Canvas canvas) {}
15184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
15284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        @Override
15384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public void setAlpha(int alpha) {}
15484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
15584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        @Override
15684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public void setColorFilter(ColorFilter colorFilter) {}
15784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
15884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        @Override
15984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public int getOpacity() {
16084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler            return 0;
16184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        }
16284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
16384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        @Override
16484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public boolean equals(Object o) {
16584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler            return o instanceof ComparisonDrawable && ((ComparisonDrawable)o).getId() == mId;
16684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        }
16784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
16884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        @Override
16984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        public int hashCode() {
17084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler            return mId;
17184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        }
17284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
17384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
17484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
17584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Icon differences should be detected
17684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
17784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
17884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
17984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testIconComparison() throws Exception {
18084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Drawable drawable1 = new ComparisonDrawable(1);
18184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Drawable drawable1a = new ComparisonDrawable(1);
18284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Drawable drawable2 = new ComparisonDrawable(2);
18384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
18484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setIcon(drawable1);
18584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
18684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare non-null to null",
18784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
18884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare null to non-null",
18984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref2, mPref1));
19084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
19184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setIcon(drawable1);
19284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
19384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare aliased",
19484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
19584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
19684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setIcon(drawable1a);
19784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
19884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare equal",
19984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
20084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
20184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setIcon(drawable2);
20284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
20384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare unequal",
20484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
20584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
20684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
20784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
20884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Enabled differences should be detected
20984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
21084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
21184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
21284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testEnabledComparison() throws Exception {
21384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setEnabled(true);
21484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setEnabled(true);
21584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
21684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare enabled",
21784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
21884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
21984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setEnabled(false);
22084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
22184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare enabled/disabled",
22284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
22384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare disable/enabled",
22484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref2, mPref1));
22584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
22684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setEnabled(false);
22784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
22884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare disabled",
22984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
23084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
23184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
23284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
23384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * Selectable differences should be detected
23484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
23584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
23684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
23784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testSelectableComparison() throws Exception {
23884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setSelectable(true);
23984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setSelectable(true);
24084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
24184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare selectable",
24284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
24384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
24484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref2.setSelectable(false);
24584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
24684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare selectable/unselectable",
24784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
24884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare unselectable/selectable",
24984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref2, mPref1));
25084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
25184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        mPref1.setSelectable(false);
25284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
25384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare unselectable",
25484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(mPref1, mPref2));
25584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
25684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
25784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
25884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * For {@link TwoStatePreference} objects, checked state differences should be detected
25984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
26084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
26184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
26284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testTwoStateComparison() throws Exception {
26384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final TwoStatePreference checkbox1 =
26484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                new CheckBoxPreference(InstrumentationRegistry.getTargetContext());
26584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final TwoStatePreference checkbox2 =
26684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                new CheckBoxPreference(InstrumentationRegistry.getTargetContext());
26784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
26884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        checkbox1.setChecked(true);
26984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        checkbox2.setChecked(true);
27084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
27184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare checked",
27284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(checkbox1, checkbox2));
27384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
27484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        checkbox2.setChecked(false);
27584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
27684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare checked/unchecked",
27784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(checkbox1, checkbox2));
27884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare unchecked/checked",
27984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(checkbox2, checkbox1));
28084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
28184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        checkbox1.setChecked(false);
28284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
28384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare unchecked",
28484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(checkbox1, checkbox2));
28584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
28684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
28784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    /**
28884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * {@link DropDownPreference} is a special case, the pref object will need to re-bind the
28984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * spinner when recycled, so distinct instances are never evaluated as equal
29084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     * @throws Exception
29184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler     */
29284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    @Test
29384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    public void testDropDownComparison() throws Exception {
29484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Preference dropdown1 =
29584352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                new DropDownPreference(InstrumentationRegistry.getTargetContext());
29684352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        final Preference dropdown2 =
29784352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                new DropDownPreference(InstrumentationRegistry.getTargetContext());
29884352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler
29984352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertTrue("Compare aliased drop down pref",
30084352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(dropdown1, dropdown1));
30184352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler        assertFalse("Compare distinct drop down prefs",
30284352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler                mComparisonCallback.arePreferenceContentsTheSame(dropdown1, dropdown2));
30384352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler    }
30484352192fbccf572473bb953ba3e9ebede60fbcaTony Mantler}
305