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 19ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport static android.support.v7.graphics.TestUtils.assertCloseColors; 20ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport static android.support.v7.graphics.TestUtils.loadSampleBitmap; 21ec183966232468c02440a5d81764c3c1a076e217Chris Banes 22ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport static org.junit.Assert.assertEquals; 23ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport static org.junit.Assert.assertFalse; 24434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes 25f78a300c82748e29a3890c8f17a13726aacf33beChris Banesimport android.graphics.Bitmap; 26ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport android.graphics.Canvas; 27f78a300c82748e29a3890c8f17a13726aacf33beChris Banesimport android.graphics.Color; 28434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport android.support.test.runner.AndroidJUnit4; 29434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banesimport android.test.suitebuilder.annotation.SmallTest; 30f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 31ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport org.junit.Test; 32ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport org.junit.runner.RunWith; 33f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 34ec183966232468c02440a5d81764c3c1a076e217Chris Banesimport java.util.ArrayList; 35f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 36434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes@RunWith(AndroidJUnit4.class) 37434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banespublic class BucketTests { 38f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 39434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 40434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 41f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testSourceBitmapNotRecycled() { 42434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Bitmap sample = loadSampleBitmap(); 43434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes 44434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes Palette.from(sample).generate(); 45434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes assertFalse(sample.isRecycled()); 46f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 47f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 48434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test(expected = UnsupportedOperationException.class) 49434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 50f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testSwatchesUnmodifiable() { 51434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes Palette p = Palette.from(loadSampleBitmap()).generate(); 52434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes p.getSwatches().remove(0); 53f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 54f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 55434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 56434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 57f78a300c82748e29a3890c8f17a13726aacf33beChris Banes public void testSwatchesBuilder() { 58f78a300c82748e29a3890c8f17a13726aacf33beChris Banes ArrayList<Palette.Swatch> swatches = new ArrayList<>(); 59f78a300c82748e29a3890c8f17a13726aacf33beChris Banes swatches.add(new Palette.Swatch(Color.BLACK, 40)); 60f78a300c82748e29a3890c8f17a13726aacf33beChris Banes swatches.add(new Palette.Swatch(Color.GREEN, 60)); 61f78a300c82748e29a3890c8f17a13726aacf33beChris Banes swatches.add(new Palette.Swatch(Color.BLUE, 10)); 62f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 63f78a300c82748e29a3890c8f17a13726aacf33beChris Banes Palette p = Palette.from(swatches); 64f78a300c82748e29a3890c8f17a13726aacf33beChris Banes 65f78a300c82748e29a3890c8f17a13726aacf33beChris Banes assertEquals(swatches, p.getSwatches()); 66f78a300c82748e29a3890c8f17a13726aacf33beChris Banes } 67d27ec041be0a4251176e5daaea526f231b03f38eChris Banes 68434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 69434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 70d27ec041be0a4251176e5daaea526f231b03f38eChris Banes public void testRegionWhole() { 71434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Bitmap sample = loadSampleBitmap(); 72434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes 73434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes Palette.Builder b = new Palette.Builder(sample); 74434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.setRegion(0, 0, sample.getWidth(), sample.getHeight()); 75434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.generate(); 76d27ec041be0a4251176e5daaea526f231b03f38eChris Banes } 77d27ec041be0a4251176e5daaea526f231b03f38eChris Banes 78434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 79434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 80d27ec041be0a4251176e5daaea526f231b03f38eChris Banes public void testRegionUpperLeft() { 81434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Bitmap sample = loadSampleBitmap(); 82434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes 83434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes Palette.Builder b = new Palette.Builder(sample); 84434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.setRegion(0, 0, sample.getWidth() / 2, sample.getHeight() / 2); 85434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.generate(); 86d27ec041be0a4251176e5daaea526f231b03f38eChris Banes } 87d27ec041be0a4251176e5daaea526f231b03f38eChris Banes 88434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 89434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 90d27ec041be0a4251176e5daaea526f231b03f38eChris Banes public void testRegionBottomRight() { 91434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Bitmap sample = loadSampleBitmap(); 92434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes 93434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes Palette.Builder b = new Palette.Builder(sample); 94434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.setRegion(sample.getWidth() / 2, sample.getHeight() / 2, 95434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes sample.getWidth(), sample.getHeight()); 96434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.generate(); 97d27ec041be0a4251176e5daaea526f231b03f38eChris Banes } 98039044aee1fc6dbd42b8b472c54122d268656939Chris Banes 99434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 100434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 101039044aee1fc6dbd42b8b472c54122d268656939Chris Banes public void testOnePixelTallBitmap() { 102434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Bitmap bitmap = Bitmap.createBitmap(1000, 1, Bitmap.Config.ARGB_8888); 103039044aee1fc6dbd42b8b472c54122d268656939Chris Banes 104039044aee1fc6dbd42b8b472c54122d268656939Chris Banes Palette.Builder b = new Palette.Builder(bitmap); 105434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.generate(); 106039044aee1fc6dbd42b8b472c54122d268656939Chris Banes } 107039044aee1fc6dbd42b8b472c54122d268656939Chris Banes 108434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @Test 109434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes @SmallTest 110039044aee1fc6dbd42b8b472c54122d268656939Chris Banes public void testOnePixelWideBitmap() { 111434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes final Bitmap bitmap = Bitmap.createBitmap(1, 1000, Bitmap.Config.ARGB_8888); 112039044aee1fc6dbd42b8b472c54122d268656939Chris Banes 113039044aee1fc6dbd42b8b472c54122d268656939Chris Banes Palette.Builder b = new Palette.Builder(bitmap); 114434696ff29b2680bff5cb9e0ab98c7b20f5ea5b2Chris Banes b.generate(); 115039044aee1fc6dbd42b8b472c54122d268656939Chris Banes } 116ec183966232468c02440a5d81764c3c1a076e217Chris Banes 117ec183966232468c02440a5d81764c3c1a076e217Chris Banes @Test 118ec183966232468c02440a5d81764c3c1a076e217Chris Banes @SmallTest 119ec183966232468c02440a5d81764c3c1a076e217Chris Banes public void testBlueBitmapReturnsBlueSwatch() { 120ec183966232468c02440a5d81764c3c1a076e217Chris Banes final Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); 121ec183966232468c02440a5d81764c3c1a076e217Chris Banes Canvas canvas = new Canvas(bitmap); 122ec183966232468c02440a5d81764c3c1a076e217Chris Banes canvas.drawColor(Color.BLUE); 123ec183966232468c02440a5d81764c3c1a076e217Chris Banes 124ec183966232468c02440a5d81764c3c1a076e217Chris Banes final Palette palette = Palette.from(bitmap).generate(); 125ec183966232468c02440a5d81764c3c1a076e217Chris Banes 126ec183966232468c02440a5d81764c3c1a076e217Chris Banes assertEquals(1, palette.getSwatches().size()); 127ec183966232468c02440a5d81764c3c1a076e217Chris Banes 128ec183966232468c02440a5d81764c3c1a076e217Chris Banes final Palette.Swatch swatch = palette.getSwatches().get(0); 129ec183966232468c02440a5d81764c3c1a076e217Chris Banes assertCloseColors(Color.BLUE, swatch.getRgb()); 130ec183966232468c02440a5d81764c3c1a076e217Chris Banes } 131ec183966232468c02440a5d81764c3c1a076e217Chris Banes 132ec183966232468c02440a5d81764c3c1a076e217Chris Banes @Test 133ec183966232468c02440a5d81764c3c1a076e217Chris Banes @SmallTest 134ec183966232468c02440a5d81764c3c1a076e217Chris Banes public void testBlueBitmapWithRegionReturnsBlueSwatch() { 135ec183966232468c02440a5d81764c3c1a076e217Chris Banes final Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); 136ec183966232468c02440a5d81764c3c1a076e217Chris Banes Canvas canvas = new Canvas(bitmap); 137ec183966232468c02440a5d81764c3c1a076e217Chris Banes canvas.drawColor(Color.BLUE); 138ec183966232468c02440a5d81764c3c1a076e217Chris Banes 139ec183966232468c02440a5d81764c3c1a076e217Chris Banes final Palette palette = Palette.from(bitmap) 140ec183966232468c02440a5d81764c3c1a076e217Chris Banes .setRegion(0, bitmap.getHeight() / 2, bitmap.getWidth(), bitmap.getHeight()) 141ec183966232468c02440a5d81764c3c1a076e217Chris Banes .generate(); 142ec183966232468c02440a5d81764c3c1a076e217Chris Banes 143ec183966232468c02440a5d81764c3c1a076e217Chris Banes assertEquals(1, palette.getSwatches().size()); 144ec183966232468c02440a5d81764c3c1a076e217Chris Banes 145ec183966232468c02440a5d81764c3c1a076e217Chris Banes final Palette.Swatch swatch = palette.getSwatches().get(0); 146ec183966232468c02440a5d81764c3c1a076e217Chris Banes assertCloseColors(Color.BLUE, swatch.getRgb()); 147ec183966232468c02440a5d81764c3c1a076e217Chris Banes } 148ec183966232468c02440a5d81764c3c1a076e217Chris Banes 149f78a300c82748e29a3890c8f17a13726aacf33beChris Banes} 150