require File.dirname(__FILE__) + '/spec_helper'

describe 'browser checkbox_group accesses a group of checkboxes sharing the same name on a page' do

  before :each do
    @browser = Watirloo.browser
    @browser.goto testfile('checkbox_group1.html')
  end

  it 'browser responds to checkbox_group' do
    @browser.should respond_to(:checkbox_group)
  end

  it 'access by name as default returns CheckboxGroup' do
    if @browser.kind_of?(FireWatir::Firefox)
      @browser.checkbox_group('pets').should be_kind_of(FireWatir::CheckboxGroup)
    elsif  @browser.kind_of?(Watir::IE)
      @browser.checkbox_group('pets').should be_kind_of(Watir::CheckboxGroup)
    end
  end

  it 'size retuns checkboxes as items count in a group' do
    @browser.checkbox_group('pets').size.should == 5
  end

  it 'values returns array of value attributes for each checkbox in a group' do
    @browser.checkbox_group('pets').values.should == ["cat", "dog", "zook", "zebra", "wumpa"]
  end

end

describe "checkbox_group values when no checkbox is checked in a group" do

  before :each do
    @browser = Watirloo.browser
    @browser.goto testfile('checkbox_group1.html')
  end


  it 'selected should return nil' do
    @browser.checkbox_group('pets').selected.should be_nil
  end
  it 'selected_value should return nil' do
    @browser.checkbox_group('pets').selected_value.should be_nil
  end
  it 'selected_values should return empty array' do
    @browser.checkbox_group('pets').selected_values.should be_empty
  end

  it "set? should return false when no checkbox is checked in a group" do
    @browser.checkbox_group("pets").should_not be_set
  end

end

describe "checkbox_group values when set string selecs one item only" do

  before :each do
    @browser = Watirloo.browser
    @browser.goto testfile('checkbox_group1.html')
  end


  it "selected should return the string used to select it" do
    @browser.checkbox_group('pets').set 'dog'
    @browser.checkbox_group('pets').selected.should == 'dog'
  end

  it "selected_value should return the string when one item is selected" do
    @browser.checkbox_group('pets').set 'dog'
    @browser.checkbox_group('pets').selected_value.should == 'dog'
  end

  it 'selected values returns array with one element' do
    @browser.checkbox_group('pets').set 'dog'
    @browser.checkbox_group('pets').selected_values.should == ['dog']
  end

  it "set? should return truee when 1 checkbox is checked in a group" do
    @browser.checkbox_group('pets').set 'dog'
    @browser.checkbox_group("pets").should be_set
  end

end


describe "checkbox_group set array of strings selects multiple values in a group" do

  before :each do
    @browser = Watirloo.browser
    @browser.goto testfile('checkbox_group1.html')
  end


  it "selected returns array of strings when multiple values are selected" do
    @browser.checkbox_group('pets').set ['dog', 'zebra', 'cat'] # not in order
    @browser.checkbox_group('pets').selected.should == ['cat', 'dog', 'zebra']
  end

  it 'selected_value returns the same array of strings by position in a group' do
    @browser.checkbox_group('pets').set ['zebra', 'dog', 'cat'] # not in order
    @browser.checkbox_group('pets').selected_value.should == ['cat', 'dog', 'zebra'] # bypass filter
  end

  it "selected_values returns the same array of strings by position in a group" do
    @browser.checkbox_group('pets').set ['cat', 'zebra', 'dog'] # not in order
    @browser.checkbox_group('pets').selected_values.should == ['cat', 'dog', 'zebra']
  end

  it "set? should return truee when more than 1 checkbox is checked in a group" do
    @browser.checkbox_group('pets').set ['cat', 'zebra', 'dog'] # not in order
    @browser.checkbox_group("pets").should be_set
  end

end

describe "checkbox_group set by numberical position" do

  before :each do
    @browser = Watirloo::browser
    @browser.goto testfile('checkbox_group1.html')
  end


  it 'set Fixnum checks checkbox by position in a group. Position is 1 based.' do
    #Behaves like select by single value
    @browser.checkbox_group('pets').set 3
    @browser.checkbox_group('pets').selected_value.should == 'zook'
  end

  it 'set array of Fixnums checks each checkbox by position' do
    #behaves like select multiple strings
    @browser.checkbox_group('pets').set [4,1,2] # not in order
    @browser.checkbox_group('pets').selected.should == ["cat", "dog", "zebra"]
  end
end