19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.util;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tests for {@link StateSet}
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class StateSetTest extends TestCase {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStateSetPositiveMatches() throws Exception {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[2];
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = new int[3];
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Single states in both sets - match
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = 1;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 1;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Single states in both sets - non-match
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 2;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add another state to the spec which the stateSet doesn't match
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = 2;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add the missing matching element to the stateSet
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[1] = 1;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add an irrelevent state to the stateSpec
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[2] = 12345;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testStatesSetMatchMixEmUp() throws Exception {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[2];
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = new int[2];
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // One element in stateSpec which we must match and one which we must
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // not match.  stateSet only contains the match.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = 1;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = -2;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 1;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // stateSet now contains just the element we must not match
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 2;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add another matching state to the the stateSet.  We still fail
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // because stateSet contains a must-not-match element
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[1] = 1;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Switch the must-not-match element in stateSet with a don't care
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 12345;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testStateSetNegativeMatches() throws Exception {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[2];
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = new int[3];
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Single states in both sets - match
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = -1;
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 2;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add another arrelevent state to the stateSet
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[1] = 12345;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Single states in both sets - non-match
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[0] = 1;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add another state to the spec which the stateSet doesn't match
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = -2;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // Add an irrelevent state to the stateSet
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSet[2] = 12345;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testEmptySetMatchesNegtives() throws Exception {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = {-12345, -6789};
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = new int[0];
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet2 = {0};
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet2));
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testEmptySetFailsPositives() throws Exception {
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = {12345};
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = new int[0];
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet2 = {0};
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet2));
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testEmptySetMatchesWildcard() throws Exception {
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = StateSet.WILD_CARD;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = new int[0];
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet2 = {0};
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet2));
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testSingleStatePositiveMatches() throws Exception {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[2];
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int state;
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         //  match
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = 1;
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         state = 1;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, state));
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // non-match
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         state = 2;
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, state));
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // add irrelevant must-not-match
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = -12345;
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, state));
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testSingleStateNegativeMatches() throws Exception {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[2];
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int state;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         //  match
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = -1;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         state = 1;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, state));
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // non-match
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         state = 2;
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, state));
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // add irrelevant must-not-match
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = -12345;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, state));
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testZeroStateOnlyMatchesDefault() throws Exception {
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[3];
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int state = 0;
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         //  non-match
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = 1;
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, state));
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // non-match
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = -1;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, state));
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // match
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec = StateSet.WILD_CARD;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, state));
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     @SmallTest
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     public void testNullStateOnlyMatchesDefault() throws Exception {
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSpec = new int[3];
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         int[] stateSet = null;
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         //  non-match
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[0] = 1;
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // non-match
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec[1] = -1;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertFalse(StateSet.stateSetMatches(stateSpec, stateSet));
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         // match
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         stateSpec = StateSet.WILD_CARD;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         assertTrue(StateSet.stateSetMatches(stateSpec, stateSet));
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     }
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
183