1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package androidx.core.graphics 18 19import android.graphics.Color 20import android.graphics.ColorSpace 21import android.support.test.filters.SdkSuppress 22import org.junit.Assert.assertEquals 23import org.junit.Assert.assertFalse 24import org.junit.Assert.assertTrue 25import org.junit.Test 26 27class ColorTest { 28 @SdkSuppress(minSdkVersion = 26) 29 @Test fun destructuringColor() { 30 val (r, g, b, a) = 0x337f3010.toColor() 31 assertEquals(0.5f, r, 1e-2f) 32 assertEquals(0.19f, g, 1e-2f) 33 assertEquals(0.06f, b, 1e-2f) 34 assertEquals(0.2f, a, 1e-2f) 35 } 36 37 @Test fun destructuringInt() { 38 val (a, r, g, b) = 0x337f3010 39 assertEquals(0x33, a) 40 assertEquals(0x7f, r) 41 assertEquals(0x30, g) 42 assertEquals(0x10, b) 43 } 44 45 @SdkSuppress(minSdkVersion = 26) 46 @Test fun intToColor() = assertEquals(Color.valueOf(0x337f3010), 0x337f3010.toColor()) 47 48 @SdkSuppress(minSdkVersion = 26) 49 @Test fun intToColorLong() = assertEquals(Color.pack(0x337f3010), 0x337f3010.toColorLong()) 50 51 @Test fun alpha() = assertEquals(0x33, 0x337f3010.alpha) 52 @Test fun red() = assertEquals(0x7f, 0x337f3010.red) 53 @Test fun green() = assertEquals(0x30, 0x337f3010.green) 54 @Test fun blue() = assertEquals(0x10, 0x337f3010.blue) 55 56 @SdkSuppress(minSdkVersion = 26) 57 @Test fun luminance() = assertEquals(0.212f, 0xff7f7f7f.toInt().luminance, 1e-3f) 58 59 @SdkSuppress(minSdkVersion = 26) 60 @Test fun longToColor() { 61 assertEquals(Color.valueOf(0x337f3010), Color.pack(0x337f3010).toColor()) 62 } 63 64 @SdkSuppress(minSdkVersion = 26) 65 @Test fun longToColorInt() = assertEquals(0x337f3010, Color.pack(0x337f3010).toColorInt()) 66 67 @SdkSuppress(minSdkVersion = 26) 68 @Test fun destructuringLong() { 69 val (r, g, b, a) = Color.pack(0x337f3010) 70 assertEquals(0.20f, a, 1e-2f) 71 assertEquals(0.50f, r, 1e-2f) 72 assertEquals(0.19f, g, 1e-2f) 73 assertEquals(0.06f, b, 1e-2f) 74 } 75 76 @SdkSuppress(minSdkVersion = 26) 77 @Test fun alphaLong() = assertEquals(0.20f, Color.pack(0x337f3010).alpha, 1e-2f) 78 79 @SdkSuppress(minSdkVersion = 26) 80 @Test fun redLong() = assertEquals(0.50f, Color.pack(0x337f3010).red, 1e-2f) 81 82 @SdkSuppress(minSdkVersion = 26) 83 @Test fun greenLong() = assertEquals(0.19f, Color.pack(0x337f3010).green, 1e-2f) 84 85 @SdkSuppress(minSdkVersion = 26) 86 @Test fun blueLong() = assertEquals(0.06f, Color.pack(0x337f3010).blue, 1e-2f) 87 88 @SdkSuppress(minSdkVersion = 26) 89 @Test fun luminanceLong() { 90 assertEquals(0.212f, Color.pack(0xff7f7f7f.toInt()).luminance, 1e-3f) 91 } 92 93 @SdkSuppress(minSdkVersion = 26) 94 @Test fun isSrgb() { 95 assertTrue(0x337f3010.toColorLong().isSrgb) 96 val c = Color.pack(1.0f, 0.0f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.BT2020)) 97 assertFalse(c.isSrgb) 98 } 99 100 @SdkSuppress(minSdkVersion = 26) 101 @Test fun isWideGamut() { 102 assertFalse(0x337f3010.toColorLong().isWideGamut) 103 val c = Color.pack(1.0f, 0.0f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.BT2020)) 104 assertTrue(c.isWideGamut) 105 } 106 107 @SdkSuppress(minSdkVersion = 26) 108 @Test fun getColorSpace() { 109 val sRGB = ColorSpace.get(ColorSpace.Named.SRGB) 110 assertEquals(sRGB, 0x337f3010.toColorLong().colorSpace) 111 112 val bt2020 = ColorSpace.get(ColorSpace.Named.BT2020) 113 val c = Color.pack(1.0f, 0.0f, 0.0f, 1.0f, bt2020) 114 assertEquals(bt2020, c.colorSpace) 115 } 116 117 @SdkSuppress(minSdkVersion = 26) 118 @Test fun addColorsSameColorSpace() { 119 val (r, g, b, a) = 0x7f7f0000.toColor() + 0x7f007f00.toColor() 120 assertEquals(0.16f, r, 1e-2f) 121 assertEquals(0.33f, g, 1e-2f) 122 assertEquals(0.00f, b, 1e-2f) 123 assertEquals(0.75f, a, 1e-2f) 124 } 125 126 @Test fun stringToColorInt() = assertEquals(Color.GREEN, "#00ff00".toColorInt()) 127} 128