require "spec_helper" RSpec.describe Element do html <<-HTML
Hey there

Erm

Hello
Hello as well
HTML describe '#[]' do it 'should retrieve the attr value from the element' do Element.find('#attr-foo')[:title].should == "Hello there!" end it 'should return nil for a missing attribute' do expect(Element.find('#attr-missing')['attr-missing-value']).to be_nil end it 'should return "" for an attribute with empty value' do expect(Element.find('#attr-empty')['attr-empty-value']).to eq("") # Not sure if this is browser dependant expect(Element.find('#attr-missing')['attr-auto-value']).to eq("") end end describe '#attr' do it 'returns attributes from elements' do expect(Element.find('#attr-foo').attr(:title)).to eq('Hello there!') end it 'should return nil for a missing attribute' do expect(Element.find('#attr-missing').attr('attr-missing-value')).to be_nil end it 'should return "" for an attribute with empty value' do expect(Element.find('#attr-empty').attr('attr-empty-value')).to eq("") # Not sure if this is browser dependant expect(Element.find('#attr-missing').attr('attr-auto-value')).to eq("") end end describe '#[]=' do it 'should set the attr value on the element' do woosh = Element.find '#attr-woosh' expect(woosh[:title]).to be_nil woosh[:title] = "Oranges" expect(woosh[:title]).to eq('Oranges') end it 'should replace the old value for the attribute' do kapow = Element.find '#attr-kapow' kapow[:title].should == "Apples" kapow[:title] = "Pineapple" kapow[:title].should == "Pineapple" end end describe "#add_class" do it "should add the given class name to the element" do foo = Element.find '#foo' expect(foo).to_not have_class('lemons') foo.add_class 'lemons' expect(foo).to have_class('lemons') end it "should not duplicate class names on an element" do bar = Element.find '#bar' expect(bar).to have_class('apples') bar.add_class 'apples' expect(bar.class_name).to eq('apples') end it "should return self" do baz = Element.find '#baz' expect(baz.add_class('oranges')).to eq(baz) end end describe '#has_class?' do it "should return true if the element has the given class" do expect(Element.find('#has-foo')).to have_class('apples') expect(Element.find('#has-bar')).to have_class('lemons') expect(Element.find('#has-foo')).to_not have_class('oranges') end end describe '#html' do it "should return the html content of the element" do Element.find('#html-foo').html.should == "Hey there" Element.find('#html-bar').html.downcase.should == "

erm

" end it "should only return html for first matched element" do Element.find('.html-bridge').html.should == "Hello" end it "should return empty string for empty set" do Element.find('.html-nothing-here').html.should == "" end end describe '#remove_class' do it "should have no effect on elements without class" do foo = Element.find '#remove-foo' foo.class_name.should == '' foo.remove_class 'blah' foo.class_name.should == '' end it "should remove the given class from the element" do bar = Element.find '#remove-bar' bar.remove_class "lemons" bar.class_name.should == '' baz = Element.find '#remove-baz' baz.remove_class 'lemons' baz.class_name.should == 'apples oranges' baz.remove_class 'apples' baz.class_name.should == 'oranges' buz = Element.find '#remove-buz' buz.remove_class 'mangos' buz.class_name.should == 'pineapples' buz.remove_class 'pineapples' buz.class_name.should == '' end it "should return self" do bleh = Element.find '#remove-bleh' bleh.remove_class('fruit').should equal(bleh) bleh.remove_class('hmmmm').should equal(bleh) end end describe '#toggle_class' do it 'adds the given class name to the element if not already present' do foo = Element.find('#foo') foo.has_class?('oranges').should eq(false) foo.toggle_class 'oranges' foo.has_class?('oranges').should eq(true) end it 'removes the class if the element already has it' do bar = Element.find('#bar') bar.has_class?('apples').should eq(true) bar.toggle_class 'apples' bar.has_class?('apples').should eq(false) end end describe "#value" do it "should return the selected value of select elements" do Element.find('#value-foo').value.should == "Hello" end it "should return the value of normal input fields" do Element.find('#value-bar').value.should == "Blah" end it "should return an empty string for elements with no value attr" do Element.find('#value-baz').value.should == "" end end describe "#value=" do it "should set the value of the element to the given value" do foo = Element.find '#value-woosh' foo.value.should == "" foo.value = "Hi" foo.value.should == "Hi" foo.value = "There" foo.value.should == "There" end end end