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

$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') unless $SETUP_LOADED
require 'unittests/setup'

class TC_CheckBox_XPath < Test::Unit::TestCase
    

    def setup
        goto_page("checkboxes1.html")
    end

    def test_checkbox_properties
       assert_raises(UnknownObjectException) {   browser.checkbox(:xpath , "//input[@name='noName']").id   }  
       assert_raises(UnknownObjectException) {   browser.checkbox(:xpath , "//input[@name='noName']").name   }  
       assert_raises(UnknownObjectException) {   browser.checkbox(:xpath , "//input[@name='noName']").disabled   }  
       assert_raises(UnknownObjectException) {   browser.checkbox(:xpath , "//input[@name='noName']").type   }  
       assert_raises(UnknownObjectException) {   browser.checkbox(:xpath , "//input[@name='noName']").value   }  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    end
end