# feature tests for Check Boxes
# revision: $Revision: 1.0 $

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

class TC_CheckBox_XPath < Test::Unit::TestCase
    include FireWatir

    def setup
        $ff.goto($htmlRoot + "checkboxes1.html")
    end

    def test_checkbox_properties
       assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ff.checkbox(:xpath , "//input[@name='noName']").id   }  
       assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ff.checkbox(:xpath , "//input[@name='noName']").name   }  
       assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ff.checkbox(:xpath , "//input[@name='noName']").disabled   }  
       assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ff.checkbox(:xpath , "//input[@name='noName']").type   }  
       assert_raises(UnknownObjectException , "UnknownObjectException was supposed to be thrown" ) {   $ff.checkbox(:xpath , "//input[@name='noName']").value   }  

       assert_equal("1" , $ff.checkbox(:xpath , "//input[@name='box4']").value )
       assert_equal("3" , $ff.checkbox(:xpath , "//input[@name='box4' and @value='3']").value )
       assert_equal("checkbox" , $ff.checkbox(:xpath , "//input[@name='box4' and @value='3']").type )
       assert_equal(false , $ff.checkbox(:xpath , "//input[@name='box4' and @value='3']").disabled )
       assert_equal("" , $ff.checkbox(:xpath , "//input[@name='box4' and @value='3']").id )

       assert_equal("box4-value5" , $ff.checkbox(:xpath , "//input[@name='box4' and @value='5']").title)
       assert_equal("" , $ff.checkbox(:xpath , "//input[@name='box4' and @value='4']").title)
    end

    def test_CheckBox_Exists
       assert($ff.checkbox(:xpath , "//input[@name='box4' and @value='1']").exists?)   
       assert_false($ff.checkbox(:xpath , "//input[@name='box4' and @value='22']").exists?)   
    end

    def test_checkbox_Enabled
       assert_raises(UnknownObjectException) { $ff.checkbox(:xpath , "//input[@name='noName']").enabled? }  
       assert_raises(UnknownObjectException) { $ff.checkbox(:xpath , "//input[@id='noName']").enabled? }  
       assert_raises(UnknownObjectException) { $ff.checkbox(:xpath , "//input[@name='box4' and @value='6']").enabled? }  

       assert($ff.checkbox(:xpath , "//input[@name='box1']").enabled?)   
       assert_false($ff.checkbox(:xpath , "//input[@name='box2']").enabled?)   

       assert($ff.checkbox(:xpath , "//input[@name='box4' and @value='4']").enabled?)   
       assert_false($ff.checkbox(:xpath , "//input[@name='box4' and @value='5']").enabled?)   
    end

    def test_checkbox_isSet
       assert_raises(UnknownObjectException ) { $ff.checkbox(:xpath , "//input[@name='noName']").isSet? }  

       assert_false($ff.checkbox(:xpath , "//input[@name='box1']").isSet?)   
       assert_false($ff.checkbox(:xpath , "//input[@name='box2']").isSet?)   
       assert($ff.checkbox(:xpath , "//input[@name='box3']").isSet?)   

       assert_false($ff.checkbox(:xpath , "//input[@name='box4' and @value='2']").isSet?)   
       assert($ff.checkbox(:xpath , "//input[@name='box4' and @value='1']").isSet?)   
    end

    def test_checkbox_clear
       assert_raises(UnknownObjectException) { $ff.checkbox(:xpath , "//input[@name='noName']").clear }  
       $ff.checkbox(:xpath , "//input[@name='box1']").clear
       assert_false($ff.checkbox(:xpath , "//input[@name='box1']").isSet?)   

       assert_raises(ObjectDisabledException) { $ff.checkbox(:xpath , "//input[@name='box2']").clear } 
       assert_false($ff.checkbox(:xpath , "//input[@name='box2']").isSet?)   

       $ff.checkbox(:xpath , "//input[@name='box3']").clear
       assert_false($ff.checkbox(:xpath , "//input[@name='box3']").isSet?)   

       $ff.checkbox(:xpath , "//input[@name='box4' and @value='1']").clear
       assert_false($ff.checkbox(:xpath , "//input[@name='box4' and @value='1']").isSet?)   
    end

    def test_checkbox_getState
       assert_raises(UnknownObjectException) { $ff.checkbox(:xpath , "//input[@name='noName']").getState }  
       assert_equal( false , $ff.checkbox(:xpath , "//input[@name='box1']").getState )   
       assert_equal( true , $ff.checkbox(:xpath , "//input[@name='box3']").getState)   

       # checkboxes that have the same name but different values
       assert_equal( false , $ff.checkbox(:xpath , "//input[@name='box4' and @value='2']").getState )   
       assert_equal( true , $ff.checkbox(:xpath , "//input[@name='box4' and @value='1']").getState)   
    end

    def test_checkbox_set
       assert_raises(UnknownObjectException) { $ff.checkbox(:xpath , "//input[@name='noName']").set }  
       $ff.checkbox(:xpath , "//input[@name='box1']").set
       assert($ff.checkbox(:xpath , "//input[@name='box1']").isSet?)   

       assert_raises(ObjectDisabledException) { $ff.checkbox(:xpath , "//input[@name='box2']").set }  

       $ff.checkbox(:xpath , "//input[@name='box3']").set
       assert($ff.checkbox(:xpath , "//input[@name='box3']").isSet?)   

       # checkboxes that have the same name but different values
       $ff.checkbox(:xpath , "//input[@name='box4' and @value='3']").set
       assert($ff.checkbox(:xpath , "//input[@name='box4' and @value='3']").isSet?)   

       # test set using the optinal true/false
       # assumes the checkbox is already checked
       $ff.checkbox(:xpath , "//input[@name='box1']").set( false )
       assert_false($ff.checkbox(:xpath , "//input[@name='box1']").isSet?)   

       $ff.checkbox(:xpath , "//input[@name='box1']").set( true )
       assert($ff.checkbox(:xpath , "//input[@name='box1']").isSet?)   

    end
end