#!/usr/bin/env ruby
#--
# Colour management with Ruby.
#
# Copyright 2005 Austin Ziegler
#   http://rubyforge.org/ruby-pdf/
#
#   Licensed under a MIT-style licence.
#
# $Id: test_rgb.rb,v 1.1 2005/08/08 02:44:17 austin Exp $
#++

$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
require 'color'

module TestColor
  class TestRGB < Test::Unit::TestCase
    def test_adjust_brightness
      assert_equal("#1a1aff", Color::RGB::Blue.adjust_brightness(10).html)
      assert_equal("#0000e6", Color::RGB::Blue.adjust_brightness(-10).html)
    end

    def test_adjust_hue
      assert_equal("#6600ff", Color::RGB::Blue.adjust_hue(10).html)
      assert_equal("#0066ff", Color::RGB::Blue.adjust_hue(-10).html)
    end

    def test_adjust_saturation
      assert_equal("#ef9374",
                   Color::RGB::DarkSalmon.adjust_saturation(10).html)
      assert_equal("#e39980",
                   Color::RGB::DarkSalmon.adjust_saturation(-10).html)
    end

    def test_b
      assert_in_delta(1.0, Color::RGB::Blue.b, 1e-4)
    end

    def test_b_equals
      b = Color::RGB::Blue.dup
      assert_in_delta(1.0, b.b, 1e-4)
      assert_nothing_raised { b.b = 0.33 }
      assert_in_delta(0.33, b.b, 1e-4)
      assert_nothing_raised { b.b = 3.3 }
      assert_in_delta(1.0, b.b, 1e-4)
      assert_nothing_raised { b.b = -3.3 }
      assert_in_delta(0.0, b.b, 1e-4)
    end

    def test_brightness
      assert_in_delta(0.0, Color::RGB::Black.brightness, 1e-4)
      assert_in_delta(0.5, Color::RGB::Grey50.brightness, 1e-4)
      assert_in_delta(1.0, Color::RGB::White.brightness, 1e-4)
    end

    def test_darken_by
      assert_in_delta(0.5, Color::RGB::Blue.darken_by(50).b, 1e-4)
    end

    def test_g
      assert_in_delta(1.0, Color::RGB::Lime.g, 1e-4)
    end

    def test_g_equals
      g = Color::RGB::Lime.dup
      assert_in_delta(1.0, g.g, 1e-4)
      assert_nothing_raised { g.g = 0.33 }
      assert_in_delta(0.33, g.g, 1e-4)
      assert_nothing_raised { g.g = 3.3 }
      assert_in_delta(1.0, g.g, 1e-4)
      assert_nothing_raised { g.g = -3.3 }
      assert_in_delta(0.0, g.g, 1e-4)
    end

    def test_html
      assert_equal("#000000", Color::RGB::Black.html)
      assert_equal("#0000ff", Color::RGB::Blue.html)
      assert_equal("#00ff00", Color::RGB::Lime.html)
      assert_equal("#ff0000", Color::RGB::Red.html)
      assert_equal("#ffffff", Color::RGB::White.html)
    end

    def test_lighten_by
      assert_in_delta(1.0, Color::RGB::Blue.lighten_by(50).b, 1e-4)
      assert_in_delta(0.5, Color::RGB::Blue.lighten_by(50).r, 1e-4)
      assert_in_delta(0.5, Color::RGB::Blue.lighten_by(50).g, 1e-4)
    end

    def test_mix_with
      assert_in_delta(0.5, Color::RGB::Red.mix_with(Color::RGB::Blue, 50).r,
                      1e-4)
      assert_in_delta(0.0, Color::RGB::Red.mix_with(Color::RGB::Blue, 50).g,
                      1e-4)
      assert_in_delta(0.5, Color::RGB::Red.mix_with(Color::RGB::Blue, 50).b,
                      1e-4)
      assert_in_delta(0.5, Color::RGB::Blue.mix_with(Color::RGB::Red, 50).r,
                      1e-4)
      assert_in_delta(0.0, Color::RGB::Blue.mix_with(Color::RGB::Red, 50).g,
                      1e-4)
      assert_in_delta(0.5, Color::RGB::Blue.mix_with(Color::RGB::Red, 50).b,
                      1e-4)
    end

    def test_pdf_fill
      assert_equal("0.000 0.000 0.000 rg", Color::RGB::Black.pdf_fill)
      assert_equal("0.000 0.000 1.000 rg", Color::RGB::Blue.pdf_fill)
      assert_equal("0.000 1.000 0.000 rg", Color::RGB::Lime.pdf_fill)
      assert_equal("1.000 0.000 0.000 rg", Color::RGB::Red.pdf_fill)
      assert_equal("1.000 1.000 1.000 rg", Color::RGB::White.pdf_fill)
    end

    def test_pdf_stroke
      assert_equal("0.000 0.000 0.000 RG", Color::RGB::Black.pdf_stroke)
      assert_equal("0.000 0.000 1.000 RG", Color::RGB::Blue.pdf_stroke)
      assert_equal("0.000 1.000 0.000 RG", Color::RGB::Lime.pdf_stroke)
      assert_equal("1.000 0.000 0.000 RG", Color::RGB::Red.pdf_stroke)
      assert_equal("1.000 1.000 1.000 RG", Color::RGB::White.pdf_stroke)
    end

    def test_r
      assert_in_delta(1.0, Color::RGB::Red.r, 1e-4)
    end

    def test_r_equals
      r = Color::RGB::Red.dup
      assert_in_delta(1.0, r.r, 1e-4)
      assert_nothing_raised { r.r = 0.33 }
      assert_in_delta(0.33, r.r, 1e-4)
      assert_nothing_raised { r.r = 3.3 }
      assert_in_delta(1.0, r.r, 1e-4)
      assert_nothing_raised { r.r = -3.3 }
      assert_in_delta(0.0, r.r, 1e-4)
    end

    def test_to_cmyk
      assert_kind_of(Color::CMYK, Color::RGB::Black.to_cmyk)
    end

    def test_to_grayscale
      assert_kind_of(Color::GrayScale, Color::RGB::Black.to_grayscale)
    end

    def test_to_greyscale
      assert_kind_of(Color::GreyScale, Color::RGB::Black.to_greyscale)
    end

    def test_to_hsl
      assert_kind_of(Color::HSL, Color::RGB::Black.to_hsl)
    end

    def test_to_rgb
      assert_equal(Color::RGB::Black, Color::RGB::Black.to_rgb)
    end

    def test_to_yiq
      assert_kind_of(Color::YIQ, Color::RGB::Black.to_yiq)
    end
  end
end
