/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.util; import junit.framework.TestCase; import android.test.suitebuilder.annotation.SmallTest; /** * Tests for {@link StateSet} */ public class StateSetTest extends TestCase { @SmallTest public void testStateSetPositiveMatches() throws Exception { int[] stateSpec = new int[2]; int[] stateSet = new int[3]; // Single states in both sets - match stateSpec[0] = 1; stateSet[0] = 1; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); // Single states in both sets - non-match stateSet[0] = 2; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // Add another state to the spec which the stateSet doesn't match stateSpec[1] = 2; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // Add the missing matching element to the stateSet stateSet[1] = 1; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); // Add an irrelevent state to the stateSpec stateSet[2] = 12345; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); } @SmallTest public void testStatesSetMatchMixEmUp() throws Exception { int[] stateSpec = new int[2]; int[] stateSet = new int[2]; // One element in stateSpec which we must match and one which we must // not match. stateSet only contains the match. stateSpec[0] = 1; stateSpec[1] = -2; stateSet[0] = 1; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); // stateSet now contains just the element we must not match stateSet[0] = 2; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // Add another matching state to the the stateSet. We still fail // because stateSet contains a must-not-match element stateSet[1] = 1; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // Switch the must-not-match element in stateSet with a don't care stateSet[0] = 12345; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); } @SmallTest public void testStateSetNegativeMatches() throws Exception { int[] stateSpec = new int[2]; int[] stateSet = new int[3]; // Single states in both sets - match stateSpec[0] = -1; stateSet[0] = 2; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); // Add another arrelevent state to the stateSet stateSet[1] = 12345; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); // Single states in both sets - non-match stateSet[0] = 1; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // Add another state to the spec which the stateSet doesn't match stateSpec[1] = -2; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // Add an irrelevent state to the stateSet stateSet[2] = 12345; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); } @SmallTest public void testEmptySetMatchesNegtives() throws Exception { int[] stateSpec = {-12345, -6789}; int[] stateSet = new int[0]; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); int[] stateSet2 = {0}; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet2)); } @SmallTest public void testEmptySetFailsPositives() throws Exception { int[] stateSpec = {12345}; int[] stateSet = new int[0]; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); int[] stateSet2 = {0}; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet2)); } @SmallTest public void testEmptySetMatchesWildcard() throws Exception { int[] stateSpec = StateSet.WILD_CARD; int[] stateSet = new int[0]; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); int[] stateSet2 = {0}; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet2)); } @SmallTest public void testSingleStatePositiveMatches() throws Exception { int[] stateSpec = new int[2]; int state; // match stateSpec[0] = 1; state = 1; assertTrue(StateSet.stateSetMatches(stateSpec, state)); // non-match state = 2; assertFalse(StateSet.stateSetMatches(stateSpec, state)); // add irrelevant must-not-match stateSpec[1] = -12345; assertFalse(StateSet.stateSetMatches(stateSpec, state)); } @SmallTest public void testSingleStateNegativeMatches() throws Exception { int[] stateSpec = new int[2]; int state; // match stateSpec[0] = -1; state = 1; assertFalse(StateSet.stateSetMatches(stateSpec, state)); // non-match state = 2; assertTrue(StateSet.stateSetMatches(stateSpec, state)); // add irrelevant must-not-match stateSpec[1] = -12345; assertTrue(StateSet.stateSetMatches(stateSpec, state)); } @SmallTest public void testZeroStateOnlyMatchesDefault() throws Exception { int[] stateSpec = new int[3]; int state = 0; // non-match stateSpec[0] = 1; assertFalse(StateSet.stateSetMatches(stateSpec, state)); // non-match stateSpec[1] = -1; assertFalse(StateSet.stateSetMatches(stateSpec, state)); // match stateSpec = StateSet.WILD_CARD; assertTrue(StateSet.stateSetMatches(stateSpec, state)); } @SmallTest public void testNullStateOnlyMatchesDefault() throws Exception { int[] stateSpec = new int[3]; int[] stateSet = null; // non-match stateSpec[0] = 1; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // non-match stateSpec[1] = -1; assertFalse(StateSet.stateSetMatches(stateSpec, stateSet)); // match stateSpec = StateSet.WILD_CARD; assertTrue(StateSet.stateSetMatches(stateSpec, stateSet)); } }