VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "s_ExColor"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

' TODO:
' Public Function ColorGetRGB(nColorID&, aDocument As Object) As Long
' Public Function QueryColor(nColorID&, aDocument As Object) As ColorDetails

Public Function Setup()
  ' Mandatory setup function
End Function

Public Function Teardown()
  ' Mandatory teardown function
End Function

Public Function t_GetLuma()
  On Error GoTo PROPAGATE_ERROR
  
  Call Dev_ExpectEQ(255, ColorGetLuma(RGB(255, 255, 255)), "White")
  Call Dev_ExpectEQ(0, ColorGetLuma(RGB(0, 0, 0)), "Black")
  Call Dev_ExpectEQ(54, ColorGetLuma(RGB(255, 0, 0)), "Red")
  Call Dev_ExpectEQ(182, ColorGetLuma(RGB(0, 255, 0)), "Green")
  Call Dev_ExpectEQ(18, ColorGetLuma(RGB(0, 0, 255)), "Blue")
  
  Exit Function
PROPAGATE_ERROR:
  Call Dev_LogError(Err.Number, Err.Description)
End Function

Public Function t_ColorString()
  On Error GoTo PROPAGATE_ERROR
  
  Call Dev_NewCase("Invalid input")
  Call Dev_ExpectEQ(HC_INVALID, ConvertStringToRGB("99999999999"), "Overflow long")
  Call Dev_ExpectEQ(HC_INVALID, ConvertStringToRGB(RGB(255, 255, 255)), "Overflow integer")
  Call Dev_ExpectEQ(HC_INVALID, ConvertStringToRGB("RGB(256,0,0)"), "Invalid color value")
  Call Dev_ExpectEQ("RGB(255,255,255)", ConvertRGBtoString(&HFFFFFFFF), "Overflow color")
  
  Call Dev_NewCase("White")
  Call Dev_ExpectEQ(RGB(255, 255, 255), ConvertStringToRGB("RGB(255,255,255)"))
  Call Dev_ExpectEQ("RGB(255,255,255)", ConvertRGBtoString(RGB(255, 255, 255)))
  
  Call Dev_NewCase("Black")
  Call Dev_ExpectEQ(RGB(0, 0, 0), ConvertStringToRGB("RGB(0,0,0)"))
  Call Dev_ExpectEQ("RGB(0,0,0)", ConvertRGBtoString(RGB(0, 0, 0)))
  
  Call Dev_NewCase("Generic color")
  Call Dev_ExpectEQ(RGB(165, 137, 99), ConvertStringToRGB("RGB(165,137,99)"))
  Call Dev_ExpectEQ("RGB(55,67,77)", ConvertRGBtoString(RGB(55, 67, 77)))
  
  Exit Function
PROPAGATE_ERROR:
  Call Dev_LogError(Err.Number, Err.Description)
End Function
