require File.expand_path(File.dirname(__FILE__)) + '/helper'

class TestKeyframe < Test::Unit::TestCase
  def test_supports_block_init
    keyframe = Tracksperanto::Keyframe.new do |k| 
      k.frame = 0
      k.abs_x = 10.3
      k.abs_y = 12.5
    end
    
    assert_equal 0, keyframe.frame
    assert_equal 10.3, keyframe.abs_x
    assert_equal 12.5, keyframe.abs_y
  end
  
  def test_sorts_on_frame
    kf = Tracksperanto::Keyframe.new(:frame => 4, :abs_x => 10, :abs_y => 12.0)
    kf2 = Tracksperanto::Keyframe.new(:frame => 2, :abs_x => 10, :abs_y => 12.0)
    assert_equal [kf2, kf], [kf, kf2].sort
  end
  
  def test_compares_equally_with_same_values
    kf = Tracksperanto::Keyframe.new(:frame => 2, :abs_x => 10, :abs_y => 12.0)
    kf2 = Tracksperanto::Keyframe.new(:frame => 2, :abs_x => 10, :abs_y => 12.0)
    assert_equal kf, kf2
  end
  
  def test_dup
    kf = Tracksperanto::Keyframe.new(:frame => 2, :abs_x => 10, :abs_y => 12.0)
    kf2 = kf.dup
    kf2.frame = 15
    assert_not_equal kf, kf2
  end
  
  def test_inspect
    kf = Tracksperanto::Keyframe.new(:frame => 0, :abs_x => 10, :abs_y => 12.0)
    assert_equal "#< 10.0x12.0 @0 ~0.00) >", kf.inspect
  end
  
  def test_frame_translated_to_int
    kf = Tracksperanto::Keyframe.new {|k|  k.frame = '0' }
    assert_equal 0, kf.frame
  end
  
  def test_residual_defaults_to_zero
    kf = Tracksperanto::Keyframe.new
    assert_in_delta 0.0, kf.residual, 0.01
  end

  def test_abs_x_abs_y_translated_to_float
    kf = Tracksperanto::Keyframe.new {|k|  k.abs_x = '123.45678'; k.abs_y = '321.45678' }
    assert_kind_of Float, kf.abs_x
    assert_kind_of Float, kf.abs_y
  end

end
