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 17 package androidx.core.graphics 18 19 import android.graphics.Color 20 import android.graphics.ColorSpace 21 import androidx.test.filters.SdkSuppress 22 import androidx.test.filters.SmallTest 23 import org.junit.Assert.assertEquals 24 import org.junit.Assert.assertFalse 25 import org.junit.Assert.assertTrue 26 import org.junit.Test 27 28 @SmallTest 29 class ColorTest { 30 @SdkSuppress(minSdkVersion = 26) 31 @Test destructuringColornull32 fun destructuringColor() { 33 val (r, g, b, a) = 0x337f3010.toColor() 34 assertEquals(0.5f, r, 1e-2f) 35 assertEquals(0.19f, g, 1e-2f) 36 assertEquals(0.06f, b, 1e-2f) 37 assertEquals(0.2f, a, 1e-2f) 38 } 39 40 @Test destructuringIntnull41 fun destructuringInt() { 42 val (a, r, g, b) = 0x337f3010 43 assertEquals(0x33, a) 44 assertEquals(0x7f, r) 45 assertEquals(0x30, g) 46 assertEquals(0x10, b) 47 } 48 49 @SdkSuppress(minSdkVersion = 26) 50 @Test intToColornull51 fun intToColor() = assertEquals(Color.valueOf(0x337f3010), 0x337f3010.toColor()) 52 53 @SdkSuppress(minSdkVersion = 26) 54 @Test 55 fun intToColorLong() = assertEquals(Color.pack(0x337f3010), 0x337f3010.toColorLong()) 56 57 @Test fun alpha() = assertEquals(0x33, 0x337f3010.alpha) 58 59 @Test fun red() = assertEquals(0x7f, 0x337f3010.red) 60 61 @Test fun green() = assertEquals(0x30, 0x337f3010.green) 62 63 @Test fun blue() = assertEquals(0x10, 0x337f3010.blue) 64 65 @SdkSuppress(minSdkVersion = 26) 66 @Test 67 fun luminance() = assertEquals(0.212f, 0xff7f7f7f.toInt().luminance, 1e-3f) 68 69 @SdkSuppress(minSdkVersion = 26) 70 @Test 71 fun longToColor() { 72 assertEquals(Color.valueOf(0x337f3010), Color.pack(0x337f3010).toColor()) 73 } 74 75 @SdkSuppress(minSdkVersion = 26) 76 @Test longToColorIntnull77 fun longToColorInt() = assertEquals(0x337f3010, Color.pack(0x337f3010).toColorInt()) 78 79 @SdkSuppress(minSdkVersion = 26) 80 @Test 81 fun destructuringLong() { 82 val (r, g, b, a) = Color.pack(0x337f3010) 83 assertEquals(0.20f, a, 1e-2f) 84 assertEquals(0.50f, r, 1e-2f) 85 assertEquals(0.19f, g, 1e-2f) 86 assertEquals(0.06f, b, 1e-2f) 87 } 88 89 @SdkSuppress(minSdkVersion = 26) 90 @Test alphaLongnull91 fun alphaLong() = assertEquals(0.20f, Color.pack(0x337f3010).alpha, 1e-2f) 92 93 @SdkSuppress(minSdkVersion = 26) 94 @Test 95 fun redLong() = assertEquals(0.50f, Color.pack(0x337f3010).red, 1e-2f) 96 97 @SdkSuppress(minSdkVersion = 26) 98 @Test 99 fun greenLong() = assertEquals(0.19f, Color.pack(0x337f3010).green, 1e-2f) 100 101 @SdkSuppress(minSdkVersion = 26) 102 @Test 103 fun blueLong() = assertEquals(0.06f, Color.pack(0x337f3010).blue, 1e-2f) 104 105 @SdkSuppress(minSdkVersion = 26) 106 @Test 107 fun luminanceLong() { 108 assertEquals(0.212f, Color.pack(0xff7f7f7f.toInt()).luminance, 1e-3f) 109 } 110 111 @SdkSuppress(minSdkVersion = 26) 112 @Test isSrgbnull113 fun isSrgb() { 114 assertTrue(0x337f3010.toColorLong().isSrgb) 115 val c = Color.pack(1.0f, 0.0f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.BT2020)) 116 assertFalse(c.isSrgb) 117 } 118 119 @SdkSuppress(minSdkVersion = 26) 120 @Test isWideGamutnull121 fun isWideGamut() { 122 assertFalse(0x337f3010.toColorLong().isWideGamut) 123 val c = Color.pack(1.0f, 0.0f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.BT2020)) 124 assertTrue(c.isWideGamut) 125 } 126 127 @SdkSuppress(minSdkVersion = 26) 128 @Test getColorSpacenull129 fun getColorSpace() { 130 val sRGB = ColorSpace.get(ColorSpace.Named.SRGB) 131 assertEquals(sRGB, 0x337f3010.toColorLong().colorSpace) 132 133 val bt2020 = ColorSpace.get(ColorSpace.Named.BT2020) 134 val c = Color.pack(1.0f, 0.0f, 0.0f, 1.0f, bt2020) 135 assertEquals(bt2020, c.colorSpace) 136 } 137 138 @SdkSuppress(minSdkVersion = 26) 139 @Test addColorsSameColorSpacenull140 fun addColorsSameColorSpace() { 141 val (r, g, b, a) = 0x7f7f0000.toColor() + 0x7f007f00.toColor() 142 assertEquals(0.16f, r, 1e-2f) 143 assertEquals(0.33f, g, 1e-2f) 144 assertEquals(0.00f, b, 1e-2f) 145 assertEquals(0.75f, a, 1e-2f) 146 } 147 148 @SdkSuppress(minSdkVersion = 26) 149 @Test colorConversionnull150 fun colorConversion() { 151 val bt2020 = ColorSpace.get(ColorSpace.Named.BT2020) 152 153 // Test color ints 154 val c1 = 0x7f102030 convertTo ColorSpace.Named.BT2020 155 assertEquals(bt2020, c1.colorSpace) 156 157 val c2 = 0x7f102030 convertTo bt2020 158 assertEquals(bt2020, c2.colorSpace) 159 160 // Test color longs 161 val colorLong = 162 Color.pack(1.0f, 0.0f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.DISPLAY_P3)) 163 val c3 = colorLong convertTo ColorSpace.Named.BT2020 164 assertEquals(bt2020, c3.colorSpace) 165 166 val c4 = colorLong convertTo bt2020 167 assertEquals(bt2020, c4.colorSpace) 168 169 // Test colors 170 val color = Color.valueOf(colorLong) 171 val c5 = color convertTo ColorSpace.Named.BT2020 172 assertEquals(bt2020, c5.colorSpace) 173 174 val c6 = color convertTo bt2020 175 assertEquals(bt2020, c6.colorSpace) 176 } 177 stringToColorIntnull178 @Test fun stringToColorInt() = assertEquals(Color.GREEN, "#00ff00".toColorInt()) 179 } 180