1f78a300c82748e29a3890c8f17a13726aacf33beChris Banes/* 2f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * Copyright (C) 2015 The Android Open Source Project 3f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * 4f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * you may not use this file except in compliance with the License. 6f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * You may obtain a copy of the License at 7f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * 8f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * http://www.apache.org/licenses/LICENSE-2.0 9f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * 10f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * Unless required by applicable law or agreed to in writing, software 11f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * See the License for the specific language governing permissions and 14f78a300c82748e29a3890c8f17a13726aacf33beChris Banes * limitations under the License. 15f78a300c82748e29a3890c8f17a13726aacf33beChris Banes */ 16f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 17f78a300c82748e29a3890c8f17a13726aacf33beChris Banespackage android.support.v7.graphics; 18f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 19434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport org.junit.Test; 20434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport org.junit.runner.RunWith; 21434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes 22f78a300c82748e29a3890c8f17a13726aacf33beChris Banesimport android.graphics.Color; 23434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport android.support.test.runner.AndroidJUnit4; 24434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport android.test.suitebuilder.annotation.SmallTest; 25f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 26f78a300c82748e29a3890c8f17a13726aacf33beChris Banesimport static android.support.v4.graphics.ColorUtils.HSLToColor; 27f78a300c82748e29a3890c8f17a13726aacf33beChris Banesimport static android.support.v4.graphics.ColorUtils.calculateContrast; 28434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport static android.support.v7.graphics.TestUtils.loadSampleBitmap; 29434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport static org.junit.Assert.assertEquals; 30434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport static org.junit.Assert.assertFalse; 31434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport static org.junit.Assert.assertNotNull; 32434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport static org.junit.Assert.assertTrue; 33f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 34434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes@RunWith(AndroidJUnit4.class) 35434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banespublic class SwatchTests { 36f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 37f78a300c82748e29a3890c8f17a13726aacf33beChris Banes private static final float MIN_CONTRAST_TITLE_TEXT = 3.0f; 38f78a300c82748e29a3890c8f17a13726aacf33beChris Banes private static final float MIN_CONTRAST_BODY_TEXT = 4.5f; 39f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 40434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 41434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 42f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testTextColorContrasts() { 43434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Palette p = Palette.from(loadSampleBitmap()).generate(); 44f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 45f78a300c82748e29a3890c8f17a13726aacf33beChris Banes for (Palette.Swatch swatch : p.getSwatches()) { 46f78a300c82748e29a3890c8f17a13726aacf33beChris Banes testSwatchTextColorContrasts(swatch); 47f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 48f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 49f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 50434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 51434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 52f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testHslNotNull() { 53434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Palette p = Palette.from(loadSampleBitmap()).generate(); 54f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 55f78a300c82748e29a3890c8f17a13726aacf33beChris Banes for (Palette.Swatch swatch : p.getSwatches()) { 56f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertNotNull(swatch.getHsl()); 57f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 58f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 59f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 60434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 61434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 62f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testHslIsRgb() { 63434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Palette p = Palette.from(loadSampleBitmap()).generate(); 64f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 65f78a300c82748e29a3890c8f17a13726aacf33beChris Banes for (Palette.Swatch swatch : p.getSwatches()) { 66f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertEquals(HSLToColor(swatch.getHsl()), swatch.getRgb()); 67f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 68f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 69f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 70f78a300c82748e29a3890c8f17a13726aacf33beChris Banes private void testSwatchTextColorContrasts(Palette.Swatch swatch) { 71f78a300c82748e29a3890c8f17a13726aacf33beChris Banes final int bodyTextColor = swatch.getBodyTextColor(); 72f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertTrue(calculateContrast(bodyTextColor, swatch.getRgb()) >= MIN_CONTRAST_BODY_TEXT); 73f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 74f78a300c82748e29a3890c8f17a13726aacf33beChris Banes final int titleTextColor = swatch.getTitleTextColor(); 75f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertTrue(calculateContrast(titleTextColor, swatch.getRgb()) >= MIN_CONTRAST_TITLE_TEXT); 76f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 77f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 78434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 79434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 80f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testEqualsWhenSame() { 81f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch1 = new Palette.Swatch(Color.WHITE, 50); 82f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch2 = new Palette.Swatch(Color.WHITE, 50); 83f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertEquals(swatch1, swatch2); 84f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 85f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 86434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 87434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 88f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testEqualsWhenColorDifferent() { 89f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch1 = new Palette.Swatch(Color.BLACK, 50); 90f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch2 = new Palette.Swatch(Color.WHITE, 50); 91f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertFalse(swatch1.equals(swatch2)); 92f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 93f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 94434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 95434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 96f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testEqualsWhenPopulationDifferent() { 97f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch1 = new Palette.Swatch(Color.BLACK, 50); 98f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch2 = new Palette.Swatch(Color.BLACK, 100); 99f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertFalse(swatch1.equals(swatch2)); 100f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 101f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 102434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 103434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 104f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testEqualsWhenDifferent() { 105f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch1 = new Palette.Swatch(Color.BLUE, 50); 106f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette.Swatch swatch2 = new Palette.Swatch(Color.BLACK, 100); 107f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertFalse(swatch1.equals(swatch2)); 108f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 109f78a300c82748e29a3890c8f17a13726aacf33beChris Banes} 110