{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE BlockArguments #-} {-# OPTIONS_GHC -Wno-orphans #-} module Main (main) where import WebColor.Labels import Data.Word (Word8) import GHC.OverloadedLabels import Test.Tasty import Test.Tasty.HUnit instance IsWebColor "gold" where webColor k = k 255 215 0 instance IsWebColorAlpha "gold" where webColorAlpha k = k 255 215 0 255 data RGB = MkRGB Word8 Word8 Word8 deriving (Show, Eq) instance IsWebColor s => IsLabel s RGB where fromLabel = webColor @s MkRGB data RGBA = MkRGBA Word8 Word8 Word8 Word8 deriving (Show, Eq) instance IsWebColorAlpha s => IsLabel s RGBA where fromLabel = webColorAlpha @s MkRGBA main :: IO () main = defaultMain $ testGroup "Tests" [ testGroup "Named colors RGB" [ testCase "white" do #white @?= MkRGB 255 255 255; #FFFFFF @?= MkRGB 255 255 255, testCase "silver" do #silver @?= MkRGB 192 192 192; #C0C0C0 @?= MkRGB 192 192 192, testCase "gray" do #gray @?= MkRGB 128 128 128; #808080 @?= MkRGB 128 128 128, testCase "black" do #black @?= MkRGB 0 0 0; #000000 @?= MkRGB 0 0 0, testCase "red" do #red @?= MkRGB 255 0 0; #FF0000 @?= MkRGB 255 0 0, testCase "maroon" do #maroon @?= MkRGB 128 0 0; #800000 @?= MkRGB 128 0 0, testCase "yellow" do #yellow @?= MkRGB 255 255 0; #FFFF00 @?= MkRGB 255 255 0, testCase "olive" do #olive @?= MkRGB 128 128 0; #808000 @?= MkRGB 128 128 0, testCase "lime" do #lime @?= MkRGB 0 255 0; #00FF00 @?= MkRGB 0 255 0, testCase "green" do #green @?= MkRGB 0 128 0; #008000 @?= MkRGB 0 128 0, testCase "aqua" do #aqua @?= MkRGB 0 255 255; #00FFFF @?= MkRGB 0 255 255, testCase "teal" do #teal @?= MkRGB 0 128 128; #008080 @?= MkRGB 0 128 128, testCase "blue" do #blue @?= MkRGB 0 0 255; #0000FF @?= MkRGB 0 0 255, testCase "navy" do #navy @?= MkRGB 0 0 128; #000080 @?= MkRGB 0 0 128, testCase "fuchsia" do #fuchsia @?= MkRGB 255 0 255; #FF00FF @?= MkRGB 255 0 255, testCase "purple" do #purple @?= MkRGB 128 0 128; #800080 @?= MkRGB 128 0 128 ] , testGroup "Named colors RGBA" [ testCase "white" do #white @?= MkRGBA 255 255 255 255; #FFFFFF @?= MkRGBA 255 255 255 255, testCase "silver" do #silver @?= MkRGBA 192 192 192 255; #C0C0C0 @?= MkRGBA 192 192 192 255, testCase "gray" do #gray @?= MkRGBA 128 128 128 255; #808080 @?= MkRGBA 128 128 128 255, testCase "black" do #black @?= MkRGBA 0 0 0 255; #000000 @?= MkRGBA 0 0 0 255, testCase "red" do #red @?= MkRGBA 255 0 0 255; #FF0000 @?= MkRGBA 255 0 0 255, testCase "maroon" do #maroon @?= MkRGBA 128 0 0 255; #800000 @?= MkRGBA 128 0 0 255, testCase "yellow" do #yellow @?= MkRGBA 255 255 0 255; #FFFF00 @?= MkRGBA 255 255 0 255, testCase "olive" do #olive @?= MkRGBA 128 128 0 255; #808000 @?= MkRGBA 128 128 0 255, testCase "lime" do #lime @?= MkRGBA 0 255 0 255; #00FF00 @?= MkRGBA 0 255 0 255, testCase "green" do #green @?= MkRGBA 0 128 0 255; #008000 @?= MkRGBA 0 128 0 255, testCase "aqua" do #aqua @?= MkRGBA 0 255 255 255; #00FFFF @?= MkRGBA 0 255 255 255, testCase "teal" do #teal @?= MkRGBA 0 128 128 255; #008080 @?= MkRGBA 0 128 128 255, testCase "blue" do #blue @?= MkRGBA 0 0 255 255; #0000FF @?= MkRGBA 0 0 255 255, testCase "navy" do #navy @?= MkRGBA 0 0 128 255; #000080 @?= MkRGBA 0 0 128 255, testCase "fuchsia" do #fuchsia @?= MkRGBA 255 0 255 255; #FF00FF @?= MkRGBA 255 0 255 255, testCase "purple" do #purple @?= MkRGBA 128 0 128 255; #800080 @?= MkRGBA 128 0 128 255 ] , testGroup "Custom colors" [ testCase "rgb gold" do #gold @?= MkRGB 255 215 0; #FFD700 @?= MkRGB 255 215 0, testCase "rgba gold" do #gold @?= MkRGBA 255 215 0 255; #FFD700 @?= MkRGBA 255 215 0 255 ] , testGroup "hex syntax" [ testCase "rgb 3 == 6 chars" $ #fad `rgb` #ffaadd, testCase "rgb 3 == 8 chars" $ #fad `rgb` #ffaaddff, testCase "rgb 4 == 8 chars" $ #eadf `rgb` #eeaaddff, testCase "rgb 6 == 8 chars" $ #fade12 `rgb` #fade12ff, testCase "rgba 3 == 6 chars" $ #fad `rgba` #ffaadd, testCase "rgba 3 == 8 chars" $ #fad `rgba` #ffaaddff, testCase "rgba 4 == 8 chars" $ #fade `rgba` #ffaaddee, testCase "rgba 6 == 8 chars" $ #fade12 `rgba` #fade12ff ] ] where rgb :: RGB -> RGB -> Assertion rgb = (@?=) rgba :: RGBA -> RGBA -> Assertion rgba = (@?=)