1/*
2 * Copyright (C) 2007 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.util;
18
19import junit.framework.TestCase;
20import android.test.suitebuilder.annotation.SmallTest;
21
22/**
23 * Tests for {@link StateSet}
24 */
25
26public class StateSetTest extends TestCase {
27
28    @SmallTest
29    public void testStateSetPositiveMatches() throws Exception {
30         int[] stateSpec = new int[2];
31         int[] stateSet = new int[3];
32         // Single states in both sets - match
33         stateSpec[0] = 1;
34         stateSet[0] = 1;
35         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
36         // Single states in both sets - non-match
37         stateSet[0] = 2;
38         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
39         // Add another state to the spec which the stateSet doesn't match
40         stateSpec[1] = 2;
41         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
42         // Add the missing matching element to the stateSet
43         stateSet[1] = 1;
44         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
45         // Add an irrelevent state to the stateSpec
46         stateSet[2] = 12345;
47         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
48     }
49
50     @SmallTest
51     public void testStatesSetMatchMixEmUp() throws Exception {
52         int[] stateSpec = new int[2];
53         int[] stateSet = new int[2];
54         // One element in stateSpec which we must match and one which we must
55         // not match.  stateSet only contains the match.
56         stateSpec[0] = 1;
57         stateSpec[1] = -2;
58         stateSet[0] = 1;
59         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
60         // stateSet now contains just the element we must not match
61         stateSet[0] = 2;
62         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
63         // Add another matching state to the the stateSet.  We still fail
64         // because stateSet contains a must-not-match element
65         stateSet[1] = 1;
66         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
67         // Switch the must-not-match element in stateSet with a don't care
68         stateSet[0] = 12345;
69         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
70     }
71
72     @SmallTest
73     public void testStateSetNegativeMatches() throws Exception {
74         int[] stateSpec = new int[2];
75         int[] stateSet = new int[3];
76         // Single states in both sets - match
77         stateSpec[0] = -1;
78         stateSet[0] = 2;
79         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
80         // Add another arrelevent state to the stateSet
81         stateSet[1] = 12345;
82         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
83         // Single states in both sets - non-match
84         stateSet[0] = 1;
85         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
86         // Add another state to the spec which the stateSet doesn't match
87         stateSpec[1] = -2;
88         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
89         // Add an irrelevent state to the stateSet
90         stateSet[2] = 12345;
91         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
92     }
93
94     @SmallTest
95     public void testEmptySetMatchesNegtives() throws Exception {
96         int[] stateSpec = {-12345, -6789};
97         int[] stateSet = new int[0];
98         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
99         int[] stateSet2 = {0};
100         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet2));
101     }
102
103     @SmallTest
104     public void testEmptySetFailsPositives() throws Exception {
105         int[] stateSpec = {12345};
106         int[] stateSet = new int[0];
107         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
108         int[] stateSet2 = {0};
109         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet2));
110     }
111
112     @SmallTest
113     public void testEmptySetMatchesWildcard() throws Exception {
114         int[] stateSpec = StateSet.WILD_CARD;
115         int[] stateSet = new int[0];
116         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
117         int[] stateSet2 = {0};
118         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet2));
119     }
120
121     @SmallTest
122     public void testSingleStatePositiveMatches() throws Exception {
123         int[] stateSpec = new int[2];
124         int state;
125         //  match
126         stateSpec[0] = 1;
127         state = 1;
128         assertTrue(StateSet.stateSetMatches(stateSpec, state));
129         // non-match
130         state = 2;
131         assertFalse(StateSet.stateSetMatches(stateSpec, state));
132         // add irrelevant must-not-match
133         stateSpec[1] = -12345;
134         assertFalse(StateSet.stateSetMatches(stateSpec, state));
135     }
136
137     @SmallTest
138     public void testSingleStateNegativeMatches() throws Exception {
139         int[] stateSpec = new int[2];
140         int state;
141         //  match
142         stateSpec[0] = -1;
143         state = 1;
144         assertFalse(StateSet.stateSetMatches(stateSpec, state));
145         // non-match
146         state = 2;
147         assertTrue(StateSet.stateSetMatches(stateSpec, state));
148         // add irrelevant must-not-match
149         stateSpec[1] = -12345;
150         assertTrue(StateSet.stateSetMatches(stateSpec, state));
151     }
152
153     @SmallTest
154     public void testZeroStateOnlyMatchesDefault() throws Exception {
155         int[] stateSpec = new int[3];
156         int state = 0;
157         //  non-match
158         stateSpec[0] = 1;
159         assertFalse(StateSet.stateSetMatches(stateSpec, state));
160         // non-match
161         stateSpec[1] = -1;
162         assertFalse(StateSet.stateSetMatches(stateSpec, state));
163         // match
164         stateSpec = StateSet.WILD_CARD;
165         assertTrue(StateSet.stateSetMatches(stateSpec, state));
166     }
167
168     @SmallTest
169     public void testNullStateOnlyMatchesDefault() throws Exception {
170         int[] stateSpec = new int[3];
171         int[] stateSet = null;
172         //  non-match
173         stateSpec[0] = 1;
174         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
175         // non-match
176         stateSpec[1] = -1;
177         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
178         // match
179         stateSpec = StateSet.WILD_CARD;
180         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
181     }
182}
183