BucketTests.java revision ec183966232468c02440a5d81764c3c1a076e217
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