1 /*
2 * Copyright (C) 2014 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 package android.ui.DrawableTinting.Application.src.test;
17 
18 import android.graphics.Color;
19 import android.graphics.PorterDuff;
20 import android.graphics.PorterDuffColorFilter;
21 import android.test.ActivityInstrumentationTestCase2;
22 import android.test.UiThreadTest;
23 import android.ui.DrawableTinting.Application.src.main.java.com.example.android.drawabletinting.DrawableTintingFragment;
24 import android.view.View;
25 import android.widget.ImageView;
26 import android.widget.SeekBar;
27 import android.widget.Spinner;
28 
29 import com.example.android.drawabletinting.MainActivity;
30 import com.example.android.drawabletinting.R;
31 
32 /**
33  * Tests for drawabletinting sample.
34  */
35 public class SampleTests extends ActivityInstrumentationTestCase2<MainActivity> {
36 
37     private MainActivity mTestActivity;
38     private DrawableTintingFragment mTestFragment;
39 
40     View mFragmentView;
41     SeekBar mAlpha;
42     SeekBar mRed;
43     SeekBar mGreen;
44     SeekBar mBlue;
45     Spinner mBlendMode;
46     ImageView mImage;
47 
SampleTests()48     public SampleTests() {
49         super(MainActivity.class);
50     }
51 
52     @Override
setUp()53     protected void setUp() throws Exception {
54         super.setUp();
55 
56         // Starts the activity under test using the default Intent with:
57         // action = {@link Intent#ACTION_MAIN}
58         // flags = {@link Intent#FLAG_ACTIVITY_NEW_TASK}
59         // All other fields are null or empty.
60         mTestActivity = getActivity();
61         mTestFragment = (DrawableTintingFragment)
62                 mTestActivity.getSupportFragmentManager().getFragments().get(1);
63 
64         final View fragmentView = mTestFragment.getView();
65         mAlpha = (SeekBar) fragmentView.findViewById(R.id.alphaSeek);
66         mRed = (SeekBar) fragmentView.findViewById(R.id.redSeek);
67         mGreen = (SeekBar) fragmentView.findViewById(R.id.greenSeek);
68         mBlue = (SeekBar) fragmentView.findViewById(R.id.blueSeek);
69         mBlendMode = (Spinner) fragmentView.findViewById(R.id.blendSpinner);
70         mImage = (ImageView) fragmentView.findViewById(R.id.image);
71     }
72 
73     /**
74      * Test if the test fixture has been set up correctly.
75      */
testPreconditions()76     public void testPreconditions() {
77         //Try to add a message to add context to your assertions. These messages will be shown if
78         //a tests fails and make it easy to understand why a test failed
79         assertNotNull("mTestActivity is null", mTestActivity);
80         assertNotNull("mTestFragment is null", mTestFragment);
81     }
82 
83     /**
84      * Test the initial state of all UI elements, color and blend mode.
85      */
testInitialState()86     public void testInitialState() {
87         assertEquals(255, mAlpha.getProgress());
88         assertEquals(0, mRed.getProgress());
89         assertEquals(0, mGreen.getProgress());
90         assertEquals(0, mBlue.getProgress());
91         assertEquals("Add", (String) mBlendMode.getSelectedItem());
92 
93         PorterDuffColorFilter colorFilter = (PorterDuffColorFilter) mImage.getColorFilter();
94         assertNotNull(colorFilter);
95         int initialColor = Color.BLACK;
96         assertEquals(initialColor, colorFilter.getColor());
97         assertEquals(PorterDuff.Mode.ADD, colorFilter.getMode());
98     }
99 
100     /**
101      * Test application of blend modes.
102      */
103     @UiThreadTest
testModes()104     public void testModes() {
105         final int testColor = Color.GREEN;
106         // Test that each tint mode can be successfully applied and matches a valid PorterDuff mode
107         final PorterDuff.Mode[] modes = PorterDuff.Mode.values();
108 
109         // Test that each blend mode can be applied
110         for (PorterDuff.Mode m : modes) {
111             mTestFragment.updateTint(testColor, m);
112             final PorterDuffColorFilter filter = (PorterDuffColorFilter) mImage.getColorFilter();
113             assertEquals(m, filter.getMode());
114             assertEquals(testColor, filter.getColor());
115         }
116     }
117 
118     /**
119      * Test the color computation from ARGB Seekbars.
120      */
testColor()121     public void testColor() {
122         // Red
123         mAlpha.setProgress(255);
124         mRed.setProgress(255);
125         mBlue.setProgress(0);
126         mGreen.setProgress(0);
127         assertEquals(Color.RED, mTestFragment.getColor());
128 
129         // Blue
130         mAlpha.setProgress(255);
131         mRed.setProgress(0);
132         mBlue.setProgress(255);
133         mGreen.setProgress(0);
134         assertEquals(Color.BLUE, mTestFragment.getColor());
135 
136         // Green
137         mAlpha.setProgress(255);
138         mRed.setProgress(0);
139         mBlue.setProgress(0);
140         mGreen.setProgress(255);
141         assertEquals(Color.GREEN, mTestFragment.getColor());
142 
143         // Black
144         mAlpha.setProgress(255);
145         mRed.setProgress(0);
146         mBlue.setProgress(0);
147         mGreen.setProgress(0);
148         assertEquals(Color.BLACK, mTestFragment.getColor());
149 
150         // Transparent
151         mAlpha.setProgress(0);
152         mRed.setProgress(0);
153         mBlue.setProgress(0);
154         mGreen.setProgress(0);
155         assertEquals(Color.TRANSPARENT, mTestFragment.getColor());
156     }
157 
158 }
159