1 /* 2 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package test.javafx.scene.paint; 27 28 import javafx.animation.Interpolatable; 29 import java.lang.reflect.Field; 30 import java.lang.reflect.Modifier; 31 import java.util.ArrayList; 32 import com.sun.javafx.util.Utils; 33 import javafx.scene.paint.Color; 34 import org.junit.Test; 35 import static org.junit.Assert.assertEquals; 36 import static org.junit.Assert.assertFalse; 37 import static org.junit.Assert.assertNotNull; 38 import static org.junit.Assert.assertTrue; 39 40 public class ColorTest { 41 42 @Test 43 public void testRedIsBoundedBy0And1() { 44 try { 45 Color c = new Color(-1, 0, 0, 0); 46 assertTrue(false); 47 } catch (Exception e) {} 48 49 try { 50 Color c = new Color(100, 0, 0, 0); 51 assertTrue(false); 52 } catch (Exception ee) {} 53 } 54 55 @Test 56 public void testGreenIsBoundedBy0And1() { 57 try { 58 Color c = new Color(0, -1, 0, 0); 59 assertTrue(false); 60 } catch (Exception e) {} 61 62 try { 63 Color c = new Color(0, 100, 0, 0); 64 assertTrue(false); 65 } catch (Exception ee) {} 66 } 67 68 @Test 69 public void testBlueIsBoundedBy0And1() { 70 try { 71 Color c = new Color(0, 0, -1, 0); 72 assertTrue(false); 73 } catch (Exception e) {} 74 75 try { 76 Color c = new Color(0, 0, 100, 0); 77 assertTrue(false); 78 } catch (Exception ee) {} 79 } 80 81 @Test 82 public void testOpacityIsBoundedBy0And1() { 83 try { 84 Color c = new Color(0, 0, 0, -1); 85 assertTrue(false); 86 } catch (Exception e) {} 87 88 try { 89 Color c = new Color(0, 0, 0, 100); 90 assertTrue(false); 91 } catch (Exception ee) {} 92 } 93 94 @Test 95 public void testOfTheWay() { 96 Color start = new Color(0, 0, 0, 0); 97 Color end = new Color(1, 1, 1, 1); 98 Color mid = start.interpolate(end, .5); 99 assertEquals(mid.getRed(), .5, 0.0001); 100 assertEquals(mid.getGreen(), .5, 0.0001); 101 assertEquals(mid.getBlue(), .5, 0.0001); 102 assertEquals(mid.getOpacity(), .5, 0.0001); 103 } 104 105 @Test 106 public void testOfTheWayAll() 107 throws IllegalArgumentException, IllegalAccessException 108 { 109 ArrayList<Color> colors = new ArrayList<Color>(); 110 for (Field f : Color.class.getDeclaredFields()) { 111 if (Modifier.isStatic(f.getModifiers()) && 112 f.getType() == Color.class) 113 { 114 Color c = (Color) f.get(null); 115 colors.add(c); 116 } 117 } 118 for (Color c1 : colors) { 119 for (Color c2 : colors) { 120 c1.interpolate(c2, 0.0); 121 c1.interpolate(c2, Double.MIN_VALUE); 122 c1.interpolate(c2, 0.5); 123 c1.interpolate(c2, 1.0 - Double.MIN_VALUE); 124 c1.interpolate(c2, 1.0); 125 } 126 } 127 } 128 129 @Test 130 public void testOfTheWayIndirect() { 131 Interpolatable<Color> start = new Color(0, 0, 0, 0); 132 Color end = new Color(1, 1, 1, 1); 133 Color mid = start.interpolate(end, .5); 134 assertEquals(mid.getRed(), .5, 0.0001); 135 assertEquals(mid.getGreen(),.5, 0.0001); 136 assertEquals(mid.getBlue(), .5, 0.0001); 137 assertEquals(mid.getOpacity(), .5, 0.0001); 138 } 139 140 @Test 141 public void testColorIsBoundedBy0And1() { 142 try { 143 Color color = Color.color(-1, 0, 0, 0); 144 assertTrue(false); 145 } catch (Exception e) {} 146 147 try { 148 Color color = Color.color(0, -1, 0, 0); 149 assertTrue(false); 150 } catch (Exception ee) {} 151 152 try { 153 Color color = Color.color(0, 0, -1, 0); 154 assertTrue(false); 155 } catch (Exception eee) {} 156 157 try { 158 Color color = Color.color(0, 0, 0, -1); 159 assertTrue(false); 160 } catch (Exception eeee) {} 161 162 try { 163 Color color = Color.color(2, 0, 0, 0); 164 assertTrue(false); 165 } catch (Exception eeeee) {} 166 167 try { 168 Color color = Color.color(0, 2, 0, 0); 169 assertTrue(false); 170 } catch (Exception eeeeee) {} 171 172 try { 173 Color color = Color.color(0, 0, 2, 0); 174 assertTrue(false); 175 } catch (Exception eeeeeee) {} 176 177 try { 178 Color color = Color.color(0, 0, 0, 2); 179 assertTrue(false); 180 } catch (Exception eeeeeeee) {} 181 } 182 183 @Test 184 public void testColor() { 185 Color color = Color.color(.1, .2, .3); 186 assertEquals(.1, color.getRed(), 0.0001); 187 assertEquals(.2, color.getGreen(), 0.0001); 188 assertEquals(.3, color.getBlue(), 0.0001); 189 assertEquals(1, color.getOpacity(), 0.0001); 190 } 191 192 @Test 193 public void testColorWithOpacity() { 194 Color color = Color.color(.1, .2, .3, .4); 195 assertEquals(.1, color.getRed(), 0.0001); 196 assertEquals(.2, color.getGreen(), 0.0001); 197 assertEquals(.3, color.getBlue(), 0.0001); 198 assertEquals(.4, color.getOpacity(), 0.0001); 199 } 200 201 @Test 202 public void testRgbIsBoundedBy0And255() { 203 try { 204 Color color = Color.rgb(-1, 0, 0, 0); 205 assertTrue(false); 206 } catch (Exception e) {} 207 208 try { 209 Color color = Color.rgb(0, -1, 0, 0); 210 assertTrue(false); 211 } catch (Exception ee) {} 212 213 try { 214 Color color = Color.rgb(0, 0, -1, 0); 215 assertTrue(false); 216 } catch (Exception eee) {} 217 218 try { 219 Color color = Color.rgb(0, 0, 0, -1); 220 assertTrue(false); 221 } catch (Exception eeee) {} 222 223 try { 224 Color color = Color.rgb(300, 0, 0, 0); 225 assertTrue(false); 226 } catch (Exception eeeee) {} 227 228 try { 229 Color color = Color.rgb(0, 300, 0, 0); 230 assertTrue(false); 231 } catch (Exception eeeeee) {} 232 233 try { 234 Color color = Color.rgb(0, 0, 300, 0); 235 assertTrue(false); 236 } catch (Exception eeeeeee) {} 237 238 try { 239 Color color = Color.rgb(0, 0, 0, 300); 240 assertTrue(false); 241 } catch (Exception eeeeeeee) {} 242 } 243 244 @Test 245 public void testRgb() { 246 Color color = Color.rgb(255, 0, 255, 0); 247 assertTrue(color.getRed() == 1); 248 assertTrue(color.getGreen() == 0); 249 assertTrue(color.getBlue() == 1); 250 assertTrue(color.getOpacity() == 0); 251 double[] hsb = Utils.RGBtoHSB(1.0, 0.0, 1.0); 252 assertEquals(hsb[0], color.getHue(), 0.0001); 253 assertEquals(hsb[1], color.getSaturation(), 0.0001); 254 assertEquals(hsb[2], color.getBrightness(), 0.0001); 255 } 256 257 @Test 258 public void testGray() { 259 Color color = Color.gray(0.5); 260 assertEquals(0.5, color.getRed(), 0.0001); 261 assertEquals(0.5, color.getGreen(), 0.0001); 262 assertEquals(0.5, color.getBlue(), 0.0001); 263 assertEquals(1.0, color.getOpacity(), 0.0001); 264 } 265 266 @Test 267 public void testGrayWithOpacity() { 268 Color color = Color.gray(0.5, 0.3); 269 assertEquals(0.5, color.getRed(), 0.0001); 270 assertEquals(0.5, color.getGreen(), 0.0001); 271 assertEquals(0.5, color.getBlue(), 0.0001); 272 assertEquals(0.3, color.getOpacity(), 0.0001); 273 } 274 275 @Test 276 public void testGrayRgb() { 277 Color color = Color.grayRgb(255, 0.5); 278 assertEquals(1.0, color.getRed(), 0.0001); 279 assertEquals(1.0, color.getGreen(), 0.0001); 280 assertEquals(1.0, color.getBlue(), 0.0001); 281 assertEquals(0.5, color.getOpacity(), 0.0001); 282 } 283 284 @Test 285 public void testHsbIsBounded() { 286 Color.hsb(10000, 0, 0); // this should work! 287 288 try { 289 Color color = Color.hsb(100, -1, 0); 290 assertTrue(false); 291 } catch (Exception ee) {} 292 293 try { 294 Color color = Color.hsb(100, 0, -1); 295 assertTrue(false); 296 } catch (Exception eee) {} 297 298 try { 299 Color color = Color.hsb(100, 2, 0); 300 assertTrue(false); 301 } catch (Exception eeee) {} 302 303 try { 304 Color color = Color.hsb(100, 0, 2); 305 assertTrue(false); 306 } catch (Exception eeeee) {} 307 } 308 309 @Test 310 public void testHsb() { 311 Color color = Color.hsb(210, 1, .5); 312 assertEquals(0.0, color.getRed(), .0001); 313 assertEquals(0.25, color.getGreen(), .0001); 314 assertEquals(0.5, color.getBlue(), .0001); 315 assertEquals(1.0, color.getOpacity(), .0001); 316 assertEquals(210, color.getHue(), 0.0001); 317 assertEquals(1.0, color.getSaturation(), 0.0001); 318 assertEquals(0.5, color.getBrightness(), 0.0001); 319 } 320 321 @Test 322 public void testHsbWithOpacity() { 323 Color color = Color.hsb(210, 1, .5, .4); 324 assertEquals(0.0, color.getRed(), .0001); 325 assertEquals(0.25, color.getGreen(), .0001); 326 assertEquals(0.5, color.getBlue(), .0001); 327 assertEquals(0.4, color.getOpacity(), .0001); 328 assertEquals(210, color.getHue(), 0.0001); 329 assertEquals(1.0, color.getSaturation(), 0.0001); 330 assertEquals(0.5, color.getBrightness(), 0.0001); 331 } 332 333 @Test 334 public void testWebPoundNotation() { 335 Color color = Color.web("#aabbcc"); 336 assertEquals(color.getRed(), 170.0/255.0, 0.0001); 337 assertEquals(color.getGreen(), 187.0/255.0, 0.0001); 338 assertEquals(color.getBlue(), 204.0/255.0, 0.0001); 339 } 340 341 @Test 342 public void testWebPoundNotationShort() { 343 Color color = Color.web("#abc"); 344 assertEquals(color.getRed(), 10.0/15.0, 0.0001); 345 assertEquals(color.getGreen(), 11.0/15.0, 0.0001); 346 assertEquals(color.getBlue(), 12.0/15.0, 0.0001); 347 } 348 349 @Test 350 public void testWebPoundNotationWithAlphaAndOpacity() { 351 Color color = Color.web("#aabbcc80", 0.5); 352 assertEquals(color.getRed(), 170.0/255.0, 0.0001); 353 assertEquals(color.getGreen(), 187.0/255.0, 0.0001); 354 assertEquals(color.getBlue(), 204.0/255.0, 0.0001); 355 assertEquals((128.0/255.0)/2.0, color.getOpacity(), 0.0001); 356 } 357 358 @Test(expected=IllegalArgumentException.class) 359 public void testWebPoundNotationIllegalValue() { 360 Color.web("#aabbccddee"); 361 } 362 363 @Test(expected=NullPointerException.class) 364 public void testWebNullValue() { 365 Color.web(null); 366 } 367 368 @Test(expected=IllegalArgumentException.class) 369 public void testWebEmptyColor() { 370 Color.web("", 0.5); 371 } 372 373 @Test 374 public void testWebHexNotation() { 375 Color color = Color.web("0xaabbcc"); 376 assertEquals(color.getRed(), 170.0/255.0, 0.0001); 377 assertEquals(color.getGreen(), 187.0/255.0, 0.0001); 378 assertEquals(color.getBlue(), 204.0/255.0, 0.0001); 379 } 380 381 @Test 382 public void testWebHexNotationWithAlpha() { 383 Color color = Color.web("0xaabbcc80"); 384 assertEquals(color.getRed(), 170.0/255.0, 0.0001); 385 assertEquals(color.getGreen(), 187.0/255.0, 0.0001); 386 assertEquals(color.getBlue(), 204.0/255.0, 0.0001); 387 assertEquals(128.0/255.0, color.getOpacity(), 0.0001); 388 } 389 390 @Test(expected=IllegalArgumentException.class) 391 public void testWebHexNotationIllegalValue() { 392 Color.web("0xaabbccddee"); 393 } 394 395 @Test 396 public void testWebNamed() { 397 Color color = Color.web("orangered"); 398 Color expected = Color.rgb(0xFF, 0x45, 0x00); 399 assertTrue(expected.getRed() == color.getRed()); 400 assertTrue(expected.getGreen() == color.getGreen()); 401 assertTrue(expected.getBlue() == color.getBlue()); 402 assertTrue(expected.getOpacity() == color.getOpacity()); 403 double[] hsb = Utils.RGBtoHSB(1.0, 69.0/255.0, 0.0); 404 assertEquals(hsb[0], color.getHue(), 0.001); 405 assertEquals(hsb[1], color.getSaturation(), 0.001); 406 assertEquals(hsb[2], color.getBrightness(), 0.001); 407 } 408 409 @Test 410 public void testWebNamedWithOpacity() { 411 Color color = Color.web("orangered", 0.4); 412 Color expected = Color.rgb(0xFF, 0x45, 0x00, 0.4); 413 assertTrue(expected.getRed() == color.getRed()); 414 assertTrue(expected.getGreen() == color.getGreen()); 415 assertTrue(expected.getBlue() == color.getBlue()); 416 assertTrue(expected.getOpacity() == color.getOpacity()); 417 } 418 419 @Test 420 public void testWebNamedMixedCase() { 421 Color color = Color.web("oRAngEReD"); 422 Color expected = Color.rgb(0xFF, 0x45, 0x00); 423 assertTrue(expected.getRed() == color.getRed()); 424 assertTrue(expected.getGreen() == color.getGreen()); 425 assertTrue(expected.getBlue() == color.getBlue()); 426 assertTrue(expected.getOpacity() == color.getOpacity()); 427 } 428 429 @Test(expected=IllegalArgumentException.class) 430 public void testWebNamedWrongName() { 431 Color.web("foobar"); 432 } 433 434 @Test 435 public void testWebHex0xNotation() { 436 Color color = Color.web("0xaabbcc"); 437 assertEquals(color.getRed(), 170.0/255.0, 0.0001); 438 assertEquals(color.getGreen(), 187.0/255.0, 0.0001); 439 assertEquals(color.getBlue(), 204.0/255.0, 0.0001); 440 } 441 442 @Test 443 public void testWebHex0xNotationShort() { 444 Color color = Color.web("0xabc"); 445 assertEquals(color.getRed(), 10.0/15.0, 0.0001); 446 assertEquals(color.getGreen(), 11.0/15.0, 0.0001); 447 assertEquals(color.getBlue(), 12.0/15.0, 0.0001); 448 } 449 450 @Test 451 public void testWebHexNoLeadingSymbol() { 452 Color color = Color.web("aAbBcC"); 453 assertEquals(color.getRed(), 170.0/255.0, 0.0001); 454 assertEquals(color.getGreen(), 187.0/255.0, 0.0001); 455 assertEquals(color.getBlue(), 204.0/255.0, 0.0001); 456 } 457 458 @Test 459 public void testWebHexNoLeadingSymbolShort() { 460 Color color = Color.web("aBc"); 461 assertEquals(color.getRed(), 10.0/15.0, 0.0001); 462 assertEquals(color.getGreen(), 11.0/15.0, 0.0001); 463 assertEquals(color.getBlue(), 12.0/15.0, 0.0001); 464 } 465 466 @Test 467 public void testWebHexNoLeadingSymbolShortWithAlpha() { 468 Color color = Color.web("aBc9"); 469 assertEquals(color.getRed(), 10.0/15.0, 0.0001); 470 assertEquals(color.getGreen(), 11.0/15.0, 0.0001); 471 assertEquals(color.getBlue(), 12.0/15.0, 0.0001); 472 assertEquals(0.6, color.getOpacity(), 0.0001); 473 } 474 475 @Test 476 public void testWebRgb() { 477 Color color = Color.web("rgb(128, 64, 192)"); 478 assertEquals(128.0/255.0, color.getRed(), 0.0001); 479 assertEquals( 64.0/255.0, color.getGreen(), 0.0001); 480 assertEquals(192.0/255.0, color.getBlue(), 0.0001); 481 assertEquals(1.0, color.getOpacity(), 0.0001); 482 } 483 484 @Test 485 public void testWebRgbRange() { 486 Color c1 = Color.web("rgb(255, 0, 255)"); 487 Color c2 = Color.web("rgb(256, -1, 256)"); 488 assertEquals(c1, c2); 489 Color c3 = Color.web("rgb(0, 255, 0)"); 490 Color c4 = Color.web("rgb(-1, 256, -1)"); 491 assertEquals(c3, c4); 492 } 493 494 @Test 495 public void testWebRgba() { 496 Color color = Color.web("rgba(128, 64, 192, 0.6)"); 497 assertEquals(128.0/255.0, color.getRed(), 0.0001); 498 assertEquals( 64.0/255.0, color.getGreen(), 0.0001); 499 assertEquals(192.0/255.0, color.getBlue(), 0.0001); 500 assertEquals(0.6, color.getOpacity(), 0.0001); 501 } 502 503 @Test 504 public void testWebRgbaRange() { 505 Color c1 = Color.web("rgba(255, 0, 255, 1.0)"); 506 Color c2 = Color.web("rgba(256, -1, 256, 1.1)"); 507 assertEquals(c1, c2); 508 Color c3 = Color.web("rgba(0, 255, 0, 1.0)"); 509 Color c4 = Color.web("rgba(-1, 256, -1, 1.1)"); 510 assertEquals(c3, c4); 511 Color c5 = Color.web("rgba(0, 0, 0, 0.0)"); 512 Color c6 = Color.web("rgba(0, 0, 0, -1)"); 513 assertEquals(c5, c6); 514 } 515 516 @Test 517 public void testWebRgbPercent() { 518 Color color = Color.web("rgb(60%, 40%, 100%)"); 519 assertEquals(0.6, color.getRed(), 0.0001); 520 assertEquals(0.4, color.getGreen(), 0.0001); 521 assertEquals(1.0, color.getBlue(), 0.0001); 522 assertEquals(1.0, color.getOpacity(), 0.0001); 523 } 524 525 @Test 526 public void testWebRgbPercentFloat() { 527 Color color = Color.web("rgb(60.0%, 40.0%, 100.0%)"); 528 assertEquals(0.6, color.getRed(), 0.0001); 529 assertEquals(0.4, color.getGreen(), 0.0001); 530 assertEquals(1.0, color.getBlue(), 0.0001); 531 assertEquals(1.0, color.getOpacity(), 0.0001); 532 } 533 534 @Test 535 public void testWebRgbPercentRange() { 536 Color c1 = Color.web("rgb(100%, 0%, 100%)"); 537 Color c2 = Color.web("rgb(101%, -1%, 101%)"); 538 assertEquals(c1, c2); 539 Color c3 = Color.web("rgb( 0%, 100%, 0%)"); 540 Color c4 = Color.web("rgb(-1%, 101%, -1%)"); 541 assertEquals(c3, c4); 542 } 543 544 @Test 545 public void testWebRgbaPercent() { 546 Color color = Color.web("rgba(60%, 40%, 100%, 0.6)"); 547 assertEquals(0.6, color.getRed(), 0.0001); 548 assertEquals(0.4, color.getGreen(), 0.0001); 549 assertEquals(1.0, color.getBlue(), 0.0001); 550 assertEquals(0.6, color.getOpacity(), 0.0001); 551 } 552 553 @Test 554 public void testWebRgbaPercentFloat() { 555 Color color = Color.web("rgba(60.0%, 40.0%, 100.0%, 0.6)"); 556 assertEquals(0.6, color.getRed(), 0.0001); 557 assertEquals(0.4, color.getGreen(), 0.0001); 558 assertEquals(1.0, color.getBlue(), 0.0001); 559 assertEquals(0.6, color.getOpacity(), 0.0001); 560 } 561 562 @Test 563 public void testWebRgbaPercentRange() { 564 Color c1 = Color.web("rgba(100%, 0%, 100%, 1.0)"); 565 Color c2 = Color.web("rgba(101%, -1%, 101%, 1.1)"); 566 assertEquals(c1, c2); 567 Color c3 = Color.web("rgba( 0%, 100%, 0%, 1.0)"); 568 Color c4 = Color.web("rgba(-1%, 101%, -1%, 1.1)"); 569 assertEquals(c3, c4); 570 Color c5 = Color.web("rgba(0%, 0%, 0%, 0.0)"); 571 Color c6 = Color.web("rgba(0%, 0%, 0%, -1)"); 572 assertEquals(c5, c6); 573 } 574 575 @Test 576 public void testWebRgbPercentMix() { 577 Color color = Color.web("rgb(60%, 40.0%, 192)"); 578 assertEquals(0.6, color.getRed(), 0.0001); 579 assertEquals(0.4, color.getGreen(), 0.0001); 580 assertEquals(192.0/255.0, color.getBlue(), 0.0001); 581 assertEquals(1.0, color.getOpacity(), 0.0001); 582 } 583 584 @Test 585 public void testWebRgbaPercentMix() { 586 Color color = Color.web("rgba(60%, 40.0%, 192, 0.6)"); 587 assertEquals(0.6, color.getRed(), 0.0001); 588 assertEquals(0.4, color.getGreen(), 0.0001); 589 assertEquals(192.0/255.0, color.getBlue(), 0.0001); 590 assertEquals(0.6, color.getOpacity(), 0.0001); 591 } 592 593 @Test 594 public void testWebHsl() { 595 Color color = Color.web("hsl(180, 50%, 100%)"); 596 Color ref = Color.hsb(180, 0.5, 1.0); 597 assertEquals(ref.getRed(), color.getRed(), 0.0001); 598 assertEquals(ref.getGreen(), color.getGreen(), 0.0001); 599 assertEquals(ref.getBlue(), color.getBlue(), 0.0001); 600 assertEquals(ref.getOpacity(), color.getOpacity(), 0.0001); 601 } 602 603 @Test 604 public void testWebHslFloat() { 605 Color color = Color.web("hsl(180.0, 50.0%, 100.0%)"); 606 Color ref = Color.hsb(180, 0.5, 1.0); 607 assertEquals(ref.getRed(), color.getRed(), 0.0001); 608 assertEquals(ref.getGreen(), color.getGreen(), 0.0001); 609 assertEquals(ref.getBlue(), color.getBlue(), 0.0001); 610 assertEquals(ref.getOpacity(), color.getOpacity(), 0.0001); 611 } 612 613 @Test 614 public void testWebHslRange() { 615 Color c1 = Color.web("hsl( 240, 0%, 100%)"); 616 Color c2 = Color.web("hsl(-120, -1%, 101%)"); 617 assertEquals(c1, c2); 618 Color c3 = Color.web("hsl(240, 100%, 0%)"); 619 Color c4 = Color.web("hsl(600, 101%, -1%)"); 620 assertEquals(c3, c4); 621 } 622 623 @Test 624 public void testWebHsla() { 625 Color color = Color.web("hsla(180, 50%, 100%, 0.6)"); 626 Color ref = Color.hsb(180, 0.5, 1.0, 0.6); 627 assertEquals(ref.getRed(), color.getRed(), 0.0001); 628 assertEquals(ref.getGreen(), color.getGreen(), 0.0001); 629 assertEquals(ref.getBlue(), color.getBlue(), 0.0001); 630 assertEquals(ref.getOpacity(), color.getOpacity(), 0.0001); 631 } 632 633 @Test 634 public void testWebHslaFloat() { 635 Color color = Color.web("hsla(180.0, 50.0%, 100.0%, 0.6)"); 636 Color ref = Color.hsb(180, 0.5, 1.0, 0.6); 637 assertEquals(ref.getRed(), color.getRed(), 0.0001); 638 assertEquals(ref.getGreen(), color.getGreen(), 0.0001); 639 assertEquals(ref.getBlue(), color.getBlue(), 0.0001); 640 assertEquals(ref.getOpacity(), color.getOpacity(), 0.0001); 641 } 642 643 @Test 644 public void testWebHslaRange() { 645 Color c1 = Color.web("hsla( 240, 0%, 100%, 1.0)"); 646 Color c2 = Color.web("hsla(-120, -1%, 101%, 1.1)"); 647 assertEquals(c1, c2); 648 Color c3 = Color.web("hsla(240, 100%, 0%, 1.0)"); 649 Color c4 = Color.web("hsla(600, 101%, -1%, 1.1)"); 650 assertEquals(c3, c4); 651 Color c5 = Color.web("hsla(240, 0%, 0%, 0.0)"); 652 Color c6 = Color.web("hsla(240, 0%, 0%, -1)"); 653 assertEquals(c5, c6); 654 } 655 656 @Test(expected=IllegalArgumentException.class) 657 public void testWebRgb2Param() { 658 Color.web("rgb(100, 100)"); 659 } 660 661 @Test(expected=IllegalArgumentException.class) 662 public void testWebRgb1Param() { 663 Color.web("rgb(100)"); 664 } 665 666 @Test(expected=IllegalArgumentException.class) 667 public void testWebRgb0Param() { 668 Color.web("rgb()"); 669 } 670 671 @Test(expected=IllegalArgumentException.class) 672 public void testWebRgbNoParen() { 673 Color.web("rgb 100, 100, 100"); 674 } 675 676 @Test(expected=IllegalArgumentException.class) 677 public void testWebRgbNoCloseParen() { 678 Color.web("rgb(100, 100, 100"); 679 } 680 681 @Test(expected=IllegalArgumentException.class) 682 public void testWebRgba3Param() { 683 Color.web("rgba(100, 100, 100)"); 684 } 685 686 @Test(expected=IllegalArgumentException.class) 687 public void testWebRgba2Param() { 688 Color.web("rgba(100, 100)"); 689 } 690 691 @Test(expected=IllegalArgumentException.class) 692 public void testWebRgba1Param() { 693 Color.web("rgba(100)"); 694 } 695 696 @Test(expected=IllegalArgumentException.class) 697 public void testWebRgba0Param() { 698 Color.web("rgba()"); 699 } 700 701 @Test(expected=IllegalArgumentException.class) 702 public void testWebRgbaNoParen() { 703 Color.web("rgba 100, 100, 100"); 704 } 705 706 @Test(expected=IllegalArgumentException.class) 707 public void testWebRgbaNoCloseParen() { 708 Color.web("rgba(100, 100, 100, 0.5"); 709 } 710 711 @Test(expected=IllegalArgumentException.class) 712 public void testWebHsl2Param() { 713 Color.web("hsl(240, 50%)"); 714 } 715 716 @Test(expected=IllegalArgumentException.class) 717 public void testWebHsl1Param() { 718 Color.web("hsl(240)"); 719 } 720 721 @Test(expected=IllegalArgumentException.class) 722 public void testWebHsl0Param() { 723 Color.web("hsl()"); 724 } 725 726 @Test(expected=IllegalArgumentException.class) 727 public void testWebHslNoParen() { 728 Color.web("hsl 240, 50%, 50%"); 729 } 730 731 @Test(expected=IllegalArgumentException.class) 732 public void testWebHslNoCloseParen() { 733 Color.web("hsl(240, 50%, 50%"); 734 } 735 736 @Test(expected=IllegalArgumentException.class) 737 public void testWebHsla3Param() { 738 Color.web("hsla(240, 50%, 50%)"); 739 } 740 741 @Test(expected=IllegalArgumentException.class) 742 public void testWebHsla2Param() { 743 Color.web("hsla(240, 50%)"); 744 } 745 746 @Test(expected=IllegalArgumentException.class) 747 public void testWebHsla1Param() { 748 Color.web("hsla(240)"); 749 } 750 751 @Test(expected=IllegalArgumentException.class) 752 public void testWebHsla0Param() { 753 Color.web("hsla()"); 754 } 755 756 @Test(expected=IllegalArgumentException.class) 757 public void testWebHslaNoParen() { 758 Color.web("hsla 240, 50%, 50%, 0.5"); 759 } 760 761 @Test(expected=IllegalArgumentException.class) 762 public void testWebHslaNoCloseParen() { 763 Color.web("hsla(240, 50%, 50%, 0.5"); 764 } 765 766 @Test 767 public void testDeriveColor() { 768 Color original = Color.hsb(180, 0.4, 0.8, 0.5); 769 Color color = original.deriveColor(-90, 2, 0.5, 2); 770 assertEquals(90, color.getHue(), 0.0001); 771 assertEquals(0.8, color.getSaturation(), 0.0001); 772 assertEquals(0.4, color.getBrightness(), 0.0001); 773 assertEquals(1.0, color.getOpacity(), 0.0001); 774 } 775 776 @Test 777 public void testDeriveColorFromRgb() { 778 Color original = Color.rgb(128, 0, 255); 779 double[] hsb = Utils.RGBtoHSB(128.0/255.0, 0.0, 1.0); 780 Color color = original.deriveColor(-30, 0.5, 0.5, 0.5); 781 assertEquals((hsb[0] - 30), color.getHue(), 0.0001); 782 assertEquals(hsb[1] / 2, color.getSaturation(), 0.0001); 783 assertEquals(hsb[2] / 2, color.getBrightness(), 0.0001); 784 assertEquals(0.5, color.getOpacity(), 0.0001); 785 } 786 787 @Test 788 public void testDeriveColorClipS() { 789 Color original = Color.hsb(180, 0.4, 0.8, 0.5); 790 Color color = original.deriveColor(-1170, -5, 20, -5); 791 assertEquals(0, color.getHue(), 0.0001); 792 assertEquals(0.0, color.getSaturation(), 0.0001); 793 assertEquals(1.0, color.getBrightness(), 0.0001); 794 assertEquals(0.0, color.getOpacity(), 0.0001); 795 } 796 797 @Test 798 public void testDeriveColorClipHB() { 799 Color original = Color.hsb(180, 0.4, 0.8, 0.5); 800 Color color = original.deriveColor(-1170, 1.0, 20, -5); 801 assertEquals(90, color.getHue(), 0.0001); 802 assertEquals(0.4, color.getSaturation(), 0.0001); 803 assertEquals(1.0, color.getBrightness(), 0.0001); 804 assertEquals(0.0, color.getOpacity(), 0.0001); 805 } 806 807 @Test 808 public void testDarker() { 809 Color original = Color.hsb(180, 0.4, 0.8, 0.5); 810 Color color = original.darker(); 811 assertEquals(180, color.getHue(), 0.0001); 812 assertEquals(0.4, color.getSaturation(), 0.0001); 813 assertEquals(0.56, color.getBrightness(), 0.0001); 814 assertEquals(0.5, color.getOpacity(), 0.0001); 815 } 816 817 @Test 818 public void testBrighter() { 819 Color original = Color.hsb(180, 0.4, 0.4, 0.5); 820 Color color = original.brighter(); 821 assertEquals(180, color.getHue(), 0.0001); 822 assertEquals(0.4, color.getSaturation(), 0.0001); 823 assertEquals(0.5714, color.getBrightness(), 0.0001); 824 assertEquals(0.5, color.getOpacity(), 0.0001); 825 } 826 827 @Test 828 public void testBlackBrighter() { 829 Color color = Color.BLACK.brighter(); 830 assertTrue(color.getBrightness() > 0.0); 831 assertEquals(color.getRed(), color.getGreen(), 0.0001); 832 assertEquals(color.getRed(), color.getBlue(), 0.0001); 833 } 834 835 @Test 836 public void testSaturate() { 837 Color original = Color.hsb(180, 0.4, 0.4, 0.5); 838 Color color = original.saturate(); 839 assertEquals(180, color.getHue(), 0.0001); 840 assertEquals(0.5714, color.getSaturation(), 0.0001); 841 assertEquals(0.4, color.getBrightness(), 0.0001); 842 assertEquals(0.5, color.getOpacity(), 0.0001); 843 } 844 845 @Test 846 public void testDesaturate() { 847 Color original = Color.hsb(180, 0.8, 0.4, 0.5); 848 Color color = original.desaturate(); 849 assertEquals(180, color.getHue(), 0.0001); 850 assertEquals(0.56, color.getSaturation(), 0.0001); 851 assertEquals(0.4, color.getBrightness(), 0.0001); 852 assertEquals(0.5, color.getOpacity(), 0.0001); 853 } 854 855 @Test 856 public void testInvert() { 857 Color original = Color.color(0.2, 0.3, 0.4, 0.6); 858 Color color = original.invert(); 859 assertEquals(0.8, color.getRed(), 0.0001); 860 assertEquals(0.7, color.getGreen(), 0.0001); 861 assertEquals(0.6, color.getBlue(), 0.0001); 862 assertEquals(0.6, color.getOpacity(), 0.0001); 863 } 864 865 @Test 866 public void testGreyscale() { 867 Color original = Color.color(0.2, 0.3, 0.4, 0.6); 868 Color color = original.grayscale(); 869 assertEquals(0.283, color.getRed(), 0.0001); 870 assertEquals(0.283, color.getGreen(), 0.0001); 871 assertEquals(0.283, color.getBlue(), 0.0001); 872 assertEquals(0.6, color.getOpacity(), 0.0001); 873 } 874 875 @Test 876 public void testEquals() { 877 Color basic = Color.rgb(0, 0, 0, 0.5); 878 Color equal = Color.rgb(0, 0, 0, 0.5); 879 Color color1 = Color.rgb(0xAA, 0, 0, 0.5); 880 Color color2 = Color.rgb(0, 0xAA, 0, 0.5); 881 Color color3 = Color.rgb(0, 0, 0xAA, 0.5); 882 Color color4 = Color.rgb(0, 0, 0, 0.6); 883 884 assertFalse(basic.equals(null)); 885 assertFalse(basic.equals(new Object())); 886 assertTrue(basic.equals(basic)); 887 assertTrue(basic.equals(equal)); 888 assertFalse(basic.equals(color1)); 889 assertFalse(basic.equals(color2)); 890 assertFalse(basic.equals(color3)); 891 assertFalse(basic.equals(color4)); 892 } 893 894 @Test 895 public void testHashCode() { 896 Color basic = Color.rgb(0, 0, 0, 0.5); 897 Color equal = Color.rgb(0, 0, 0, 0.5); 898 Color diffColor = Color.rgb(0, 0xAA, 0, 0.5); 899 Color diffOpacity = Color.rgb(0, 0, 0, 0.7); 900 Color transparent = Color.rgb(0, 0, 0, 0.0); 901 902 int code = basic.hashCode(); 903 int second = basic.hashCode(); 904 assertTrue(code == second); 905 assertTrue(code == equal.hashCode()); 906 assertFalse(code == diffColor.hashCode()); 907 assertFalse(code == diffOpacity.hashCode()); 908 assertEquals(0, Color.TRANSPARENT.hashCode()); 909 assertEquals(0, transparent.hashCode()); 910 } 911 912 @Test 913 public void testToString() { 914 Color color = Color.rgb(0, 0, 0, 0.0); 915 916 String s = color.toString(); 917 assertNotNull(s); 918 assertFalse(s.isEmpty()); 919 } 920 921 @Test 922 public void testToStringEquals() { 923 Color color = Color.web("#aabbcc"); 924 assertEquals(color, Color.valueOf(color.toString())); 925 color = Color.web("#abc"); 926 assertEquals(color, Color.valueOf(color.toString())); 927 color = Color.web("#aabbcc80", 0.5); 928 assertEquals(color, Color.valueOf(color.toString())); 929 color = Color.web("0xaabbcc"); 930 assertEquals(color, Color.valueOf(color.toString())); 931 color = Color.web("0xaabbcc80"); 932 assertEquals(color, Color.valueOf(color.toString())); 933 color = Color.web("orangered"); 934 assertEquals(color, Color.valueOf(color.toString())); 935 color = Color.web("orangered", 0.4); 936 assertEquals(color, Color.valueOf(color.toString())); 937 color = Color.web("oRAngEReD"); 938 assertEquals(color, Color.valueOf(color.toString())); 939 color = Color.web("0xaabbcc"); 940 assertEquals(color, Color.valueOf(color.toString())); 941 color = Color.web("0xabc"); 942 assertEquals(color, Color.valueOf(color.toString())); 943 color = Color.web("aAbBcC"); 944 assertEquals(color, Color.valueOf(color.toString())); 945 color = Color.web("aBc"); 946 assertEquals(color, Color.valueOf(color.toString())); 947 color = Color.web("aBc9"); 948 assertEquals(color, Color.valueOf(color.toString())); 949 } 950 951 //function testOfTheWayHandlesNegatives() { 952 // TODO should this be tested? What does it mean? 953 //} 954 955 //function testOfTheWayHandlesLargeNumbers() { 956 // TODO What should happen for numbers > 1? 957 //} 958 }