# feature tests for Radio Buttons
# revision: $Revision: 1164 $

$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
require 'unittests/setup'

class TC_Radios < Test::Unit::TestCase
  include Watir
  
  def setup
    $ie.goto($htmlRoot + "radioButtons1.html")
  end
  
  def test_Radio_Exists
    assert($ie.radio(:name, "box1").exists?)   
    assert($ie.radio(:id, "box5").exists?)   
    
    assert(!$ie.radio(:name, "missingname").exists?)   
    assert(!$ie.radio(:id, "missingid").exists?)   
  end
  
  def test_radio_class
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "noName").class_name }  
    assert_equal("radio_style" , $ie.radio(:name, "box1").class_name)   
    assert_equal("" , $ie.radio(:id, "box5").class_name)   
    
    
    
  end
  
  def test_Radio_Enabled
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "noName").enabled?  }  
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:id, "noName").enabled?  }  
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "box4" , 6).enabled?  }  
    
    assert(!$ie.radio(:name, "box2").enabled?)   
    assert($ie.radio(:id, "box5").enabled?)   
    assert($ie.radio(:name, "box1").enabled?)   
  end
  
  def test_little
    assert(!$ie.button(:value , "foo").enabled?)
  end
  
  def test_onClick
    
    assert(!$ie.radio(:name, "box5").isSet?)
    assert(!$ie.button(:value , "foo").enabled?)
    
    # first click the button is enabled and the radio is set
    $ie.radio(:name, "box5" , 1).set
    assert($ie.radio(:name, "box5",1).isSet?)
    assert($ie.radio(:name, "box5",1).checked?)    
    assert($ie.button(:value , "foo").enabled?)
    
    # second click the button is disabled and the radio is still set
    $ie.radio(:name, "box5", 1).set
    assert($ie.radio(:name, "box5",1).isSet?)
    assert($ie.radio(:name, "box5",1).checked?)    
    assert(!$ie.button(:value , "foo").enabled?)
    
    # third click the button is enabled and the radio is still set
    $ie.radio(:name, "box5", 1).set
    assert($ie.radio(:name, "box5",1 ).isSet?)
    assert($ie.radio(:name, "box5",1 ).checked?)
    assert($ie.button(:value , "foo").enabled?)
    
    # click the radio with a value of 2 , button is disabled and the radio is still set
    $ie.radio(:name, "box5", 2).set
    assert(!$ie.radio(:name, "box5" ,1).isSet?)
    assert(!$ie.radio(:name, "box5" ,1).checked?)    
    assert($ie.radio(:name, "box5" ,2).isSet?)
    assert($ie.radio(:name, "box5" ,2).checked?)    
    assert(!$ie.button(:value , "foo").enabled?)
  end
  
  def test_Radio_isSet
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "noName").isSet?  }  
    
    assert(!$ie.radio(:name, "box1").isSet?)   
    assert( $ie.radio(:name, "box3").isSet?)   
    assert(!$ie.radio(:name, "box2").isSet?)   
    assert( $ie.radio(:name, "box4" , 1 ).isSet?)   
    assert(!$ie.radio(:name, "box4" , 2 ).isSet?)   

    assert(!$ie.radio(:name, "box1").checked?)   
    assert( $ie.radio(:name, "box3").checked?)   
    assert(!$ie.radio(:name, "box2").checked?)   
    assert( $ie.radio(:name, "box4" , 1 ).checked?)   
    assert(!$ie.radio(:name, "box4" , 2 ).checked?)   
  end
  
  def test_radio_clear
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "noName").clear  }  
    
    $ie.radio(:name, "box1").clear
    assert(!$ie.radio(:name, "box1").isSet?)   
    
    assert_raises(ObjectDisabledException, "ObjectDisabledException was supposed to be thrown" ) {   $ie.radio(:name, "box2").clear  } 
    assert(!$ie.radio(:name, "box2").isSet?)   
    
    $ie.radio(:name, "box3").clear
    assert(!$ie.radio(:name, "box3").isSet?)   
    
    $ie.radio(:name, "box4" , 1).clear
    assert(!$ie.radio(:name, "box4" , 1).isSet?)   
  end
  
  def test_radio_getState
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "noName").getState  }  
    
    assert_equal( false , $ie.radio(:name, "box1").getState )   
    assert_equal( true , $ie.radio(:name, "box3").getState)   
    
    # radioes that have the same name but different values
    assert_equal( false , $ie.radio(:name, "box4" , 2).getState )   
    assert_equal( true , $ie.radio(:name, "box4" , 1).getState)   
  end
  
  def test_radio_set
    assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ie.radio(:name, "noName").set  }  
    $ie.radio(:name, "box1").set
    assert($ie.radio(:name, "box1").isSet?)   
    
    assert_raises(ObjectDisabledException, "ObjectDisabledException was supposed to be thrown" ) {   $ie.radio(:name, "box2").set  }  
    
    $ie.radio(:name, "box3").set
    assert($ie.radio(:name, "box3").isSet?)   
    
    # radioes that have the same name but different values
    $ie.radio(:name, "box4" , 3).set
    assert($ie.radio(:name, "box4" , 3).isSet?)   
  end
  
  def test_radio_properties
    
    assert_raises(UnknownObjectException  , "UnknownObjectException  was supposed to be thrown" ) {   $ie.radio(:index, 199).value}  
    assert_raises(UnknownObjectException  , "UnknownObjectException  was supposed to be thrown" ) {   $ie.radio(:index, 199).name }  
    assert_raises(UnknownObjectException  , "UnknownObjectException  was supposed to be thrown" ) {   $ie.radio(:index, 199).id }  
    assert_raises(UnknownObjectException  , "UnknownObjectException  was supposed to be thrown" ) {   $ie.radio(:index, 199).disabled }  
    assert_raises(UnknownObjectException  , "UnknownObjectException  was supposed to be thrown" ) {   $ie.radio(:index, 199).type }  
    
    assert_equal("on"   ,    $ie.radio(:index, 1).value)  
    assert_equal("box1" ,    $ie.radio(:index, 1).name )  
    assert_equal(""     ,    $ie.radio(:index, 1).id )  
    assert_equal("radio",    $ie.radio(:index, 1).type )  
    
    assert_equal( false, $ie.radio(:index, 1).disabled )
    assert_equal( true,  $ie.radio(:index, 3).disabled )
    
    assert_equal("box5"  ,    $ie.radio(:index, 2).id )  
    assert_equal(""      ,    $ie.radio(:index, 2).name )  
    
    assert_equal("box4-value5", $ie.radio(:name , "box4" , 5 ).title  )
    assert_equal("", $ie.radio(:name , "box4" , 4 ).title  )
    
    
  end
  
  def test_radio_iterators
    
    assert_equal(13, $ie.radios.length)
    assert_equal("box5" , $ie.radios[2].id )
    assert_equal(true ,  $ie.radios[3].disabled )
    assert_equal(false ,  $ie.radios[1].disabled )
    
    index = 1
    $ie.radios.each do |r|
      assert_equal( $ie.radio(:index, index).name , r.name )
      assert_equal( $ie.radio(:index, index).id , r.id )
      assert_equal( $ie.radio(:index, index).value, r.value)
      assert_equal( $ie.radio(:index, index).disabled , r.disabled )
      index+=1
    end
    assert_equal(index -1, $ie.radios.length)
  end
  
  # test radio buttons that have a string as a value
  def test_value_string
    assert($ie.radio(:name, 'box6', 'Tea').exists?)
    assert($ie.radio(:name, 'box6', 'Milk').exists?)
    $ie.radio(:name, "box6" , 'Milk').set
    assert($ie.radio(:name, "box6" , 'Milk').isSet?)   
    assert(!$ie.radio(:name, "box6" , 'Tea').isSet?)   

    $ie.radio(:name, "box6" , 'Tea').set
    assert(!$ie.radio(:name, "box6" , 'Milk').isSet?)   
    assert($ie.radio(:name, "box6" , 'Tea').isSet?)   
    $ie.radio(:name, "box6", 'Tea').clear
    assert(!$ie.radio(:name, "box6" , 'Tea').isSet?)   
  end
  
  
end