From ea4d928228560fb2447a6f119ae07c877146c156 Mon Sep 17 00:00:00 2001 From: Donnie Tognazzini Date: Fri, 4 Jan 2013 17:57:46 -0800 Subject: [PATCH 1/3] removing HasOne --- lib/ae_page_objects.rb | 1 - .../core/dsl/nested_element.rb | 2 +- lib/ae_page_objects/elements/collection.rb | 2 +- lib/ae_page_objects/elements/has_one.rb | 11 ---- test/unit/collection_test.rb | 4 +- .../nested_node_test.rb | 36 +++++------ .../{attribute_methods => dsl}/node_test.rb | 2 +- .../{attribute_methods => dsl}/nodes_test.rb | 54 ++++++++--------- test/unit/form_dsl_test.rb | 60 +++++++++---------- 9 files changed, 80 insertions(+), 92 deletions(-) delete mode 100644 lib/ae_page_objects/elements/has_one.rb rename test/unit/{attribute_methods => dsl}/nested_node_test.rb (88%) rename test/unit/{attribute_methods => dsl}/node_test.rb (99%) rename test/unit/{attribute_methods => dsl}/nodes_test.rb (89%) diff --git a/lib/ae_page_objects.rb b/lib/ae_page_objects.rb index 83083082..df5ce7ca 100644 --- a/lib/ae_page_objects.rb +++ b/lib/ae_page_objects.rb @@ -38,7 +38,6 @@ module Concerns autoload :Element, 'ae_page_objects/element' autoload :ElementProxy, 'ae_page_objects/element_proxy' - autoload :HasOne, 'ae_page_objects/elements/has_one' autoload :Collection, 'ae_page_objects/elements/collection' autoload :Form, 'ae_page_objects/elements/form' autoload :Select, 'ae_page_objects/elements/select' diff --git a/lib/ae_page_objects/core/dsl/nested_element.rb b/lib/ae_page_objects/core/dsl/nested_element.rb index 7570b86b..bf4e6205 100644 --- a/lib/ae_page_objects/core/dsl/nested_element.rb +++ b/lib/ae_page_objects/core/dsl/nested_element.rb @@ -10,7 +10,7 @@ def element(name, options = {}, &block) raise ArgumentError, ":is option and block not supported together" if options[:is].present? && block_given? if block_given? - klass = ::AePageObjects::HasOne.new_subclass(&block) + klass = ::AePageObjects::Element.new_subclass(&block) options = options.dup options[:is] = klass diff --git a/lib/ae_page_objects/elements/collection.rb b/lib/ae_page_objects/elements/collection.rb index 867676c8..07fa93c3 100644 --- a/lib/ae_page_objects/elements/collection.rb +++ b/lib/ae_page_objects/elements/collection.rb @@ -1,5 +1,5 @@ module AePageObjects - class Collection < HasOne + class Collection < Element class_attribute :item_class, :instance_writer => false self.item_class = Element diff --git a/lib/ae_page_objects/elements/has_one.rb b/lib/ae_page_objects/elements/has_one.rb deleted file mode 100644 index e3655e44..00000000 --- a/lib/ae_page_objects/elements/has_one.rb +++ /dev/null @@ -1,11 +0,0 @@ -module AePageObjects - class HasOne < Element - def __full_name__ - if parent.respond_to?(:__full_name__) - "#{parent.__full_name__}_#{__name__}_attributes" - else - "#{__name__}_attributes" - end - end - end -end diff --git a/test/unit/collection_test.rb b/test/unit/collection_test.rb index e1304985..26a1c1a7 100644 --- a/test/unit/collection_test.rb +++ b/test/unit/collection_test.rb @@ -12,7 +12,7 @@ def test_empty parent = mock magazine_stub = mock - parent.expects(:find).with("#18_holder_attributes").returns(magazine_stub) + parent.expects(:find).with("#18_holder").returns(magazine_stub) magazine = clip.new(parent, "18_holder") magazine_stub.stubs(:all).with(:xpath, magazine.row_xpath).returns([]) @@ -39,7 +39,7 @@ def test_non_empty parent = mock magazine_stub = mock - parent.expects(:find).with("#18_holder_attributes").returns(magazine_stub) + parent.expects(:find).with("#18_holder").returns(magazine_stub) magazine = clip.new(parent, "18_holder") bullet1_stub = mock diff --git a/test/unit/attribute_methods/nested_node_test.rb b/test/unit/dsl/nested_node_test.rb similarity index 88% rename from test/unit/attribute_methods/nested_node_test.rb rename to test/unit/dsl/nested_node_test.rb index 5531c82e..1bed1eae 100644 --- a/test/unit/attribute_methods/nested_node_test.rb +++ b/test/unit/dsl/nested_node_test.rb @@ -1,14 +1,14 @@ require 'unit_helper' module AePageObjects - module AttributeMethods + module Dsl class NestedNodeTest < ActiveSupport::TestCase def test_nested_element__block kitty = ::AePageObjects::Document.new_subclass do - element :tail do + element :tail, :name => "tail_attributes" do element :color - element :size do + element :size, :name => "size_attributes" do element :length element :width @@ -27,7 +27,7 @@ def grow! tail_page_object = mock document_stub.expects(:find).with("#tail_attributes").returns(tail_page_object) - tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::HasOne, tail_page_object) + tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::Element, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) @@ -35,7 +35,7 @@ def grow! size_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) - size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::HasOne, size_page_object) + size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) assert_equal "Growing!", size.grow! @@ -51,10 +51,10 @@ def grow! raise e end - def test_nested_element__as - tail_class = ::AePageObjects::HasOne.new_subclass do + def test_nested_element__is + tail_class = ::AePageObjects::Element.new_subclass do element :color - element :size do + element :size, :name => "size_attributes" do element :length element :width @@ -65,7 +65,7 @@ def grow! end kitty = ::AePageObjects::Document.new_subclass do - element :tail, :is => tail_class + element :tail, :is => tail_class, :name => 'tail_attributes' end verify_kitty_structure(kitty) @@ -84,7 +84,7 @@ def grow! size_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) - size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::HasOne, size_page_object) + size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) assert_equal "Growing!", size.grow! @@ -109,9 +109,9 @@ def test_nested_element__as_block_mutual_exclusion def test_nested_element__locator kitty = ::AePageObjects::Document.new_subclass do - element :tail, :locator => "what ever you want, baby" do + element :tail, :locator => "what ever you want, baby", :name => 'tail_attributes' do element :color - element :size, :locator => "Size" do + element :size, :locator => "Size", :name => 'size_attributes' do element :length element :width, :locator => "Fatness" @@ -130,7 +130,7 @@ def grow! tail_page_object = mock document_stub.expects(:find).with("what ever you want, baby").returns(tail_page_object) - tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::HasOne, tail_page_object) + tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::Element, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) @@ -138,7 +138,7 @@ def grow! size_page_object = mock tail_page_object.expects(:find).with("Size").returns(size_page_object) - size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::HasOne, size_page_object) + size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) assert_equal "Growing!", size.grow! @@ -153,9 +153,9 @@ def grow! def test_nested_element__locator__proc kitty = ::AePageObjects::Document.new_subclass do - element :tail do + element :tail, :name => 'tail_attributes' do element :color - element :size do + element :size, :name => 'size_attributes' do element :length element :width, :locator => Proc.new { parent.page_local_context } @@ -174,7 +174,7 @@ def grow! tail_page_object = mock document_stub.expects(:find).with("#tail_attributes").returns(tail_page_object) - tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::HasOne, tail_page_object) + tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::Element, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) @@ -182,7 +182,7 @@ def grow! size_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) - size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::HasOne, size_page_object) + size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) assert_equal "Growing!", size.grow! diff --git a/test/unit/attribute_methods/node_test.rb b/test/unit/dsl/node_test.rb similarity index 99% rename from test/unit/attribute_methods/node_test.rb rename to test/unit/dsl/node_test.rb index 6e2dc5ef..589a61a7 100644 --- a/test/unit/attribute_methods/node_test.rb +++ b/test/unit/dsl/node_test.rb @@ -1,7 +1,7 @@ require 'unit_helper' module AePageObjects - module AttributeMethods + module Dsl class NodeTest < ActiveSupport::TestCase def test_element__basic diff --git a/test/unit/attribute_methods/nodes_test.rb b/test/unit/dsl/nodes_test.rb similarity index 89% rename from test/unit/attribute_methods/nodes_test.rb rename to test/unit/dsl/nodes_test.rb index 6a5ea430..2452db09 100644 --- a/test/unit/attribute_methods/nodes_test.rb +++ b/test/unit/dsl/nodes_test.rb @@ -1,7 +1,7 @@ require 'unit_helper' module AePageObjects - module AttributeMethods + module Dsl class NodesTest < ActiveSupport::TestCase def test_collection__no_as__no_contains__block @@ -18,7 +18,7 @@ def test_collection__no_as__no_contains__block jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field_with_intermediary_class(jon, :previous_owners, ::AePageObjects::Collection, previous_owners_page_object) @@ -28,11 +28,11 @@ def test_collection__no_as__no_contains__block first_owner = verify_item_field_with_intermediary_class(previous_owners, 0, ::AePageObjects::Element, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end @@ -53,7 +53,7 @@ def test_collection__as__no_contains__block jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field_with_intermediary_class(jon, :previous_owners, previous_owners_class, previous_owners_page_object) @@ -64,11 +64,11 @@ def test_collection__as__no_contains__block first_owner = verify_item_field_with_intermediary_class(previous_owners, 0, previous_owners_class.item_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end @@ -91,7 +91,7 @@ def test_collection__as__no_contains__no_block jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field(jon, :previous_owners, previous_owners_class, previous_owners_page_object) @@ -101,11 +101,11 @@ def test_collection__as__no_contains__no_block first_owner = verify_item_field(previous_owners, 0, previous_owner_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end @@ -128,7 +128,7 @@ def test_collection__as__contains__no_block__same_item_class jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field(jon, :previous_owners, previous_owners_class, previous_owners_page_object) @@ -138,11 +138,11 @@ def test_collection__as__contains__no_block__same_item_class first_owner = verify_item_field(previous_owners, 0, previous_owner_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end @@ -164,7 +164,7 @@ def test_collection__as__contains__no_block__different_item_class jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field_with_intermediary_class(jon, :previous_owners, previous_owners_class, previous_owners_page_object) @@ -174,11 +174,11 @@ def test_collection__as__contains__no_block__different_item_class first_owner = verify_item_field(previous_owners, 0, previous_owner_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end @@ -198,7 +198,7 @@ def test_collection__no_as__contains__no_block jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field_with_intermediary_class(jon, :previous_owners, ::AePageObjects::Collection, previous_owners_page_object) @@ -208,11 +208,11 @@ def test_collection__no_as__contains__no_block first_owner = verify_item_field(previous_owners, 0, previous_owner_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end @@ -233,7 +233,7 @@ def test_collection__no_as__contains__block jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field_with_intermediary_class(jon, :previous_owners, ::AePageObjects::Collection, previous_owners_page_object) @@ -243,11 +243,11 @@ def test_collection__no_as__contains__block first_owner = verify_item_field_with_intermediary_class(previous_owners, 0, previous_owner_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) rescue => e puts e.backtrace.join("\n") @@ -276,7 +276,7 @@ def test_collection__as__contains__block jon = kitty.new(document_stub) previous_owners_page_object = mock - document_stub.expects(:find).with("#previous_owners_attributes").returns(previous_owners_page_object) + document_stub.expects(:find).with("#previous_owners").returns(previous_owners_page_object) previous_owners = verify_field_with_intermediary_class(jon, :previous_owners, previous_owners_class, previous_owners_page_object) @@ -286,11 +286,11 @@ def test_collection__as__contains__block first_owner = verify_item_field_with_intermediary_class(previous_owners, 0, previous_owner_class, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_kitty_name_during_ownership").returns(kitty_name_during_ownership_page_object) verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) rescue => e puts e.backtrace.join("\n") @@ -330,7 +330,7 @@ def test_collection__locator first_owner = verify_item_field_with_intermediary_class(previous_owners, 0, ::AePageObjects::Element, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock @@ -364,7 +364,7 @@ def test_nested_element__locator__proc first_owner = verify_item_field_with_intermediary_class(previous_owners, 0, ::AePageObjects::Element, first_owner_page_object) owner_name_page_object = mock - first_owner_page_object.expects(:find).with("#previous_owners_attributes_0_owner_name").returns(owner_name_page_object) + first_owner_page_object.expects(:find).with("#previous_owners_0_owner_name").returns(owner_name_page_object) verify_field(first_owner, :owner_name, ::AePageObjects::Element, owner_name_page_object) kitty_name_during_ownership_page_object = mock diff --git a/test/unit/form_dsl_test.rb b/test/unit/form_dsl_test.rb index c7bdb402..34cba2a7 100644 --- a/test/unit/form_dsl_test.rb +++ b/test/unit/form_dsl_test.rb @@ -28,61 +28,61 @@ def test_form verify_top_level_form_field(jon, :age, document_stub) verify_top_level_form_field(jon, :owner, document_stub) do |field_xpath, field_page_object| - document_stub.stubs(:find).with("#kitty_owner_attributes", anything).returns(field_page_object) + document_stub.stubs(:find).with("#kitty_owner", anything).returns(field_page_object) end - + verify_top_level_form_field(jon, :past_lives, document_stub) do |field_xpath, field_page_object| - document_stub.stubs(:find).with("#kitty_past_lives_attributes", anything).returns(field_page_object) + document_stub.stubs(:find).with("#kitty_past_lives", anything).returns(field_page_object) end end - + def test_form__using kitty_class = ::AePageObjects::Document.new_subclass do form_for "kitty", :name => "the_kat" do element :name element :age - + element :owner do element :name end - + collection :past_lives do element :died_at end end end - + verify_kitty_structure(kitty_class) - + document_stub = mock jon = kitty_class.new(document_stub) - + verify_top_level_form_field(jon, :name, document_stub) do |field_xpath, field_page_object| document_stub.stubs(:find).with("#the_kat_name").returns(field_page_object) end - + verify_top_level_form_field(jon, :age, document_stub) do |field_xpath, field_page_object| document_stub.stubs(:find).with("#the_kat_age").returns(field_page_object) end - + verify_top_level_form_field(jon, :owner, document_stub) do |field_xpath, field_page_object| - document_stub.stubs(:find).with("#the_kat_owner_attributes", anything).returns(field_page_object) + document_stub.stubs(:find).with("#the_kat_owner", anything).returns(field_page_object) end - + verify_top_level_form_field(jon, :past_lives, document_stub) do |field_xpath, field_page_object| - document_stub.stubs(:find).with("#the_kat_past_lives_attributes", anything).returns(field_page_object) + document_stub.stubs(:find).with("#the_kat_past_lives", anything).returns(field_page_object) end rescue => e puts e.backtrace.join("\n") raise e - end - + end + def test_form__using__locator kitty_class = ::AePageObjects::Document.new_subclass do form_for "kitty", :locator => [:css, "#my_kitty_box"], :name => "the_kat" do element :name element :age - + element :owner do element :name end @@ -92,32 +92,32 @@ def test_form__using__locator end end end - + verify_kitty_structure(kitty_class) - + document_stub = mock jon = kitty_class.new(document_stub) - + kitty_box_page_stub = mock - + document_stub.expects(:find).with(:css, '#my_kitty_box').returns(kitty_box_page_stub).times(2) verify_top_level_form_field(jon, :name, kitty_box_page_stub) do |field_xpath, field_page_object, times| kitty_box_page_stub.stubs(:find).with("#the_kat_name").returns(field_page_object) end - + document_stub.expects(:find).with(:css, '#my_kitty_box').returns(kitty_box_page_stub).times(2) verify_top_level_form_field(jon, :age, kitty_box_page_stub) do |field_xpath, field_page_object| kitty_box_page_stub.stubs(:find).with("#the_kat_age").returns(field_page_object) end - + document_stub.expects(:find).with(:css, '#my_kitty_box').returns(kitty_box_page_stub).times(2) verify_top_level_form_field(jon, :owner, kitty_box_page_stub) do |field_xpath, field_page_object| - kitty_box_page_stub.stubs(:find).with("#the_kat_owner_attributes", anything).returns(field_page_object) + kitty_box_page_stub.stubs(:find).with("#the_kat_owner", anything).returns(field_page_object) end - + document_stub.expects(:find).with(:css, '#my_kitty_box').returns(kitty_box_page_stub).times(2) verify_top_level_form_field(jon, :past_lives, kitty_box_page_stub) do |field_xpath, field_page_object| - kitty_box_page_stub.stubs(:find).with("#the_kat_past_lives_attributes", anything).returns(field_page_object) + kitty_box_page_stub.stubs(:find).with("#the_kat_past_lives", anything).returns(field_page_object) end rescue => e puts e.backtrace.join("\n") @@ -125,12 +125,12 @@ def test_form__using__locator end private - + def verify_top_level_form_field(kitty, field_method, document_stub, &prepare_for_field_reference) prepare_for_field_reference ||= Proc.new do |field_xpath, field_page_object| document_stub.stubs(:find).with("#kitty_#{field_method}").returns(field_page_object) end - + form = verify_field(kitty, :kitty, kitty.class.element_attributes[:kitty], document_stub) field_xpath = "kitty_#{field_method}_xpath" @@ -146,10 +146,10 @@ def verify_top_level_form_field(kitty, field_method, document_stub, &prepare_for def verify_kitty_structure(kitty_class) assert_sets_equal [:kitty, :name, :age, :owner, :past_lives], kitty_class.element_attributes.keys assert_sets_equal [:name, :age, :owner, :past_lives], kitty_class.element_attributes[:kitty].element_attributes.keys - + owner_class = kitty_class.element_attributes[:kitty].element_attributes[:owner] assert_sets_equal [:name], owner_class.element_attributes.keys - + past_lives_item_class = kitty_class.element_attributes[:kitty].element_attributes[:past_lives].item_class assert_sets_equal [:died_at], past_lives_item_class.element_attributes.keys From ce25d910c858b86e4397fc3c6e14a794e71e41cb Mon Sep 17 00:00:00 2001 From: Donnie Tognazzini Date: Mon, 7 Jan 2013 21:45:51 -0800 Subject: [PATCH 2/3] collapsing nested_element dsl into element dsl --- lib/ae_page_objects.rb | 1 - lib/ae_page_objects/core/dsl/element.rb | 18 +- .../core/dsl/nested_element.rb | 24 -- lib/ae_page_objects/node.rb | 1 - .../test/page_objects/authors/new_page.rb | 7 +- .../test/page_objects/books/new_page.rb | 4 +- .../dsl/{nodes_test.rb => collection_test.rb} | 20 +- .../{nested_node_test.rb => element_test.rb} | 249 ++++++++++++++---- test/unit/dsl/node_test.rb | 162 ------------ 9 files changed, 227 insertions(+), 259 deletions(-) delete mode 100644 lib/ae_page_objects/core/dsl/nested_element.rb rename test/unit/dsl/{nodes_test.rb => collection_test.rb} (97%) rename test/unit/dsl/{nested_node_test.rb => element_test.rb} (60%) delete mode 100644 test/unit/dsl/node_test.rb diff --git a/lib/ae_page_objects.rb b/lib/ae_page_objects.rb index df5ce7ca..3e0e1af0 100644 --- a/lib/ae_page_objects.rb +++ b/lib/ae_page_objects.rb @@ -22,7 +22,6 @@ module AePageObjects module Dsl autoload :Element, 'ae_page_objects/core/dsl/element' - autoload :NestedElement, 'ae_page_objects/core/dsl/nested_element' autoload :Collection, 'ae_page_objects/core/dsl/collection' autoload :FormFor, 'ae_page_objects/core/dsl/form_for' end diff --git a/lib/ae_page_objects/core/dsl/element.rb b/lib/ae_page_objects/core/dsl/element.rb index 93f317e3..7f312f63 100644 --- a/lib/ae_page_objects/core/dsl/element.rb +++ b/lib/ae_page_objects/core/dsl/element.rb @@ -15,9 +15,11 @@ def element_attributes end end - def element(name, options = {}) - options = options.dup - klass = field_klass(options) + def element(name, options = {}, &block) + raise ArgumentError, ":is option and block not supported together" if options[:is].present? && block_given? + + options = options.dup + klass = field_klass(options, &block) self.element_attributes[name.to_sym] = klass @@ -30,13 +32,11 @@ def element(name, options = {}) private - def field_klass(options) - field_type = options.delete(:is) - - if field_type.is_a? Class - field_type + def field_klass(options, &block) + if block_given? + ::AePageObjects::Element.new_subclass(&block) else - ::AePageObjects::Element + options.delete(:is) || ::AePageObjects::Element end end end diff --git a/lib/ae_page_objects/core/dsl/nested_element.rb b/lib/ae_page_objects/core/dsl/nested_element.rb deleted file mode 100644 index bf4e6205..00000000 --- a/lib/ae_page_objects/core/dsl/nested_element.rb +++ /dev/null @@ -1,24 +0,0 @@ -module AePageObjects - module Dsl - module NestedElement - extend ActiveSupport::Concern - include Dsl::Element - - module ClassMethods - - def element(name, options = {}, &block) - raise ArgumentError, ":is option and block not supported together" if options[:is].present? && block_given? - - if block_given? - klass = ::AePageObjects::Element.new_subclass(&block) - - options = options.dup - options[:is] = klass - end - - super(name, options) - end - end - end - end -end diff --git a/lib/ae_page_objects/node.rb b/lib/ae_page_objects/node.rb index bd23aecf..592212ca 100644 --- a/lib/ae_page_objects/node.rb +++ b/lib/ae_page_objects/node.rb @@ -4,7 +4,6 @@ module Methods extend ActiveSupport::Concern include Dsl::Element - include Dsl::NestedElement include Dsl::Collection include Dsl::FormFor diff --git a/test/test_apps/shared/test/page_objects/authors/new_page.rb b/test/test_apps/shared/test/page_objects/authors/new_page.rb index a15224d9..568f59b5 100644 --- a/test/test_apps/shared/test/page_objects/authors/new_page.rb +++ b/test/test_apps/shared/test/page_objects/authors/new_page.rb @@ -9,7 +9,10 @@ class NewPage < ::AePageObjects::Document element :first_name element :last_name - collection :books, :locator => "#author_books", :row_xpath => ".//*[contains(@class, 'some-books-fool')]//*[contains(@class,'row') and not(contains(@style,'display'))]" do + collection :books, + :name => "books_attributes", + :locator => "#author_books", + :row_xpath => ".//*[contains(@class, 'some-books-fool')]//*[contains(@class,'row') and not(contains(@style,'display'))]" do element :title end end @@ -34,7 +37,7 @@ def remove_star element :rating, :is => Rating, :locator => "#rating" - element :nested_rating, :locator => "#rating" do + element :nested_rating, :name => "nested_rating_attributes", :locator => "#rating" do element :star, :locator => ".star" def show_star diff --git a/test/test_apps/shared/test/page_objects/books/new_page.rb b/test/test_apps/shared/test/page_objects/books/new_page.rb index 30714157..2006813a 100644 --- a/test/test_apps/shared/test/page_objects/books/new_page.rb +++ b/test/test_apps/shared/test/page_objects/books/new_page.rb @@ -12,11 +12,11 @@ def loaded_locator form_for "book" do element :title - element :index, :locator => "#book_index" do + element :index, :name => "index_attributes", :locator => "#book_index" do element :pages end - element :author do + element :author, :name => "author_attributes" do element :first_name end end diff --git a/test/unit/dsl/nodes_test.rb b/test/unit/dsl/collection_test.rb similarity index 97% rename from test/unit/dsl/nodes_test.rb rename to test/unit/dsl/collection_test.rb index 2452db09..0e1faea4 100644 --- a/test/unit/dsl/nodes_test.rb +++ b/test/unit/dsl/collection_test.rb @@ -2,9 +2,9 @@ module AePageObjects module Dsl - class NodesTest < ActiveSupport::TestCase + class CollectionTest < ActiveSupport::TestCase - def test_collection__no_as__no_contains__block + def test_collection__no_is__no_contains__block kitty = ::AePageObjects::Document.new_subclass do collection :previous_owners do element :owner_name @@ -36,7 +36,7 @@ def test_collection__no_as__no_contains__block verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end - def test_collection__as__no_contains__block + def test_collection__is__no_contains__block previous_owners_class = ::AePageObjects::Collection.new_subclass previous_owners_class.item_class = ::AePageObjects::Element.new_subclass @@ -72,7 +72,7 @@ def test_collection__as__no_contains__block verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end - def test_collection__as__no_contains__no_block + def test_collection__is__no_contains__no_block previous_owner_class = ::AePageObjects::Element.new_subclass do element :owner_name element :kitty_name_during_ownership @@ -109,7 +109,7 @@ def test_collection__as__no_contains__no_block verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end - def test_collection__as__contains__no_block__same_item_class + def test_collection__is__contains__no_block__same_item_class previous_owner_class = ::AePageObjects::Element.new_subclass do element :owner_name element :kitty_name_during_ownership @@ -146,7 +146,7 @@ def test_collection__as__contains__no_block__same_item_class verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end - def test_collection__as__contains__no_block__different_item_class + def test_collection__is__contains__no_block__different_item_class previous_owner_class = ::AePageObjects::Element.new_subclass do element :owner_name element :kitty_name_during_ownership @@ -182,7 +182,7 @@ def test_collection__as__contains__no_block__different_item_class verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end - def test_collection__no_as__contains__no_block + def test_collection__no_is__contains__no_block previous_owner_class = ::AePageObjects::Element.new_subclass do element :owner_name element :kitty_name_during_ownership @@ -216,7 +216,7 @@ def test_collection__no_as__contains__no_block verify_field(first_owner, :kitty_name_during_ownership, ::AePageObjects::Element, kitty_name_during_ownership_page_object) end - def test_collection__no_as__contains__block + def test_collection__no_is__contains__block previous_owner_class = ::AePageObjects::Element.new_subclass do element :owner_name end @@ -254,7 +254,7 @@ def test_collection__no_as__contains__block raise e end - def test_collection__as__contains__block + def test_collection__is__contains__block previous_owner_class = ::AePageObjects::Element.new_subclass do element :owner_name end @@ -297,7 +297,7 @@ def test_collection__as__contains__block raise e end - def test_collection__no_as__no_contains__no_block + def test_collection__no_is__no_contains__no_block assert_raises ArgumentError do kitty = ::AePageObjects::Document.new_subclass do collection :previous_owners diff --git a/test/unit/dsl/nested_node_test.rb b/test/unit/dsl/element_test.rb similarity index 60% rename from test/unit/dsl/nested_node_test.rb rename to test/unit/dsl/element_test.rb index 1bed1eae..3ea46009 100644 --- a/test/unit/dsl/nested_node_test.rb +++ b/test/unit/dsl/element_test.rb @@ -2,8 +2,161 @@ module AePageObjects module Dsl - class NestedNodeTest < ActiveSupport::TestCase + class NodeTest < ActiveSupport::TestCase + def test_element__basic + kitty = ::AePageObjects::Document.new_subclass do + element :kind + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("#kind").returns(kind_page_object) + verify_field(jon, :kind, ::AePageObjects::Element, kind_page_object) + rescue => e + puts e.backtrace.join("\n") + raise e + end + + def test_element__accessor_yields_to_block + kitty = ::AePageObjects::Document.new_subclass do + element :kind + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("#kind").returns(kind_page_object) + + kind_in_block = nil + kind = jon.kind do |kind| + kind_in_block = kind + "hello" + end + + assert_false kind_in_block.is_a?(AePageObjects::ElementProxy) + assert kind_in_block.is_a?(AePageObjects::Element) + + assert kind.is_a?(AePageObjects::ElementProxy) + assert kind.is_a?(AePageObjects::Element) + + assert_equal kind, kind_in_block + rescue => e + puts e.backtrace.join("\n") + raise e + end + def test_element__locator + kitty = ::AePageObjects::Document.new_subclass do + element :kind, :locator => "Kind Homie" + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("Kind Homie").returns(kind_page_object) + verify_field(jon, :kind, ::AePageObjects::Element, kind_page_object) + end + + def test_element__locator__proc + kitty = ::AePageObjects::Document.new_subclass do + element :kind, :locator => Proc.new { parent.page_local_context } + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + jon.expects(:page_local_context).returns("hello") + + kind_page_object = mock + document_stub.expects(:find).with("hello").returns(kind_page_object) + verify_field(jon, :kind, ::AePageObjects::Element, kind_page_object) + end + + def test_element__is__select + kitty = ::AePageObjects::Document.new_subclass do + element :kind, :is => ::AePageObjects::Select + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("#kind").returns(kind_page_object) + verify_field(jon, :kind, ::AePageObjects::Select, kind_page_object) + end + + def test_element__is__checkbox + kitty = ::AePageObjects::Document.new_subclass do + element :kind, :is => ::AePageObjects::Checkbox + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("#kind").returns(kind_page_object) + verify_field(jon, :kind, ::AePageObjects::Checkbox, kind_page_object) + end + + def test_element__is__special_widget + special_widget = ::AePageObjects::Element.new_subclass + + kitty = ::AePageObjects::Document.new_subclass do + element :kind, :is => special_widget + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("#kind").returns(kind_page_object) + + verify_field(jon, :kind, special_widget, kind_page_object) + end + + def test_element__is__special_widget__with_locator + special_widget = ::AePageObjects::Element.new_subclass + + kitty = ::AePageObjects::Document.new_subclass do + element :kind, :is => special_widget, :locator => "As If!" + end + + assert kitty.method_defined?(:kind) + assert_sets_equal [:kind], kitty.element_attributes.keys + + document_stub = mock + jon = kitty.new(document_stub) + + kind_page_object = mock + document_stub.expects(:find).with("As If!").returns(kind_page_object) + + verify_field(jon, :kind, special_widget, kind_page_object) + end + def test_nested_element__block kitty = ::AePageObjects::Document.new_subclass do element :tail, :name => "tail_attributes" do @@ -11,38 +164,38 @@ def test_nested_element__block element :size, :name => "size_attributes" do element :length element :width - + def grow! "Growing!" end end end end - + verify_kitty_structure(kitty) - + document_stub = mock jon = kitty.new(document_stub) - + tail_page_object = mock document_stub.expects(:find).with("#tail_attributes").returns(tail_page_object) - + tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::Element, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) verify_field(tail, :color, ::AePageObjects::Element, color_page_object) - + size_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) - + assert_equal "Growing!", size.grow! - + length_page_object = mock size_page_object.expects(:find).with("#tail_attributes_size_attributes_length").returns(length_page_object) verify_field(size, :length, ::AePageObjects::Element, length_page_object) - + width_page_object = mock size_page_object.expects(:find).with("#tail_attributes_size_attributes_width").returns(width_page_object) verify_field(size, :width, ::AePageObjects::Element, width_page_object) @@ -50,57 +203,57 @@ def grow! puts e.backtrace.join("\n") raise e end - + def test_nested_element__is tail_class = ::AePageObjects::Element.new_subclass do element :color element :size, :name => "size_attributes" do element :length element :width - + def grow! "Growing!" end end end - + kitty = ::AePageObjects::Document.new_subclass do element :tail, :is => tail_class, :name => 'tail_attributes' end - + verify_kitty_structure(kitty) - + document_stub = mock jon = kitty.new(document_stub) - + tail_page_object = mock document_stub.expects(:find).with("#tail_attributes").returns(tail_page_object) - + tail = verify_field(jon, :tail, tail_class, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) verify_field(tail, :color, ::AePageObjects::Element, color_page_object) - + size_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) - + assert_equal "Growing!", size.grow! - + length_page_object = mock size_page_object.expects(:find).with("#tail_attributes_size_attributes_length").returns(length_page_object) verify_field(size, :length, ::AePageObjects::Element, length_page_object) - + width_page_object = mock size_page_object.expects(:find).with("#tail_attributes_size_attributes_width", anything).returns(width_page_object) verify_field(size, :width, ::AePageObjects::Element, width_page_object) end - - def test_nested_element__as_block_mutual_exclusion + + def test_nested_element__is_block_mutual_exclusion assert_raises ArgumentError do kitty = ::AePageObjects::Document.new_subclass do - element :tail, :is => :select do + element :tail, :is => ::AePageObjects::Select do raise "You will never see this" end end @@ -114,43 +267,43 @@ def test_nested_element__locator element :size, :locator => "Size", :name => 'size_attributes' do element :length element :width, :locator => "Fatness" - + def grow! "Growing!" end end end end - + verify_kitty_structure(kitty) - + document_stub = mock jon = kitty.new(document_stub) - + tail_page_object = mock document_stub.expects(:find).with("what ever you want, baby").returns(tail_page_object) - + tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::Element, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) verify_field(tail, :color, ::AePageObjects::Element, color_page_object) - + size_page_object = mock tail_page_object.expects(:find).with("Size").returns(size_page_object) size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) - + assert_equal "Growing!", size.grow! - + length_page_object = mock size_page_object.expects(:find).with("#tail_attributes_size_attributes_length").returns(length_page_object) verify_field(size, :length, ::AePageObjects::Element, length_page_object) - + width_page_object = mock size_page_object.expects(:find).with("Fatness").returns(width_page_object) verify_field(size, :width, ::AePageObjects::Element, width_page_object) end - + def test_nested_element__locator__proc kitty = ::AePageObjects::Document.new_subclass do element :tail, :name => 'tail_attributes' do @@ -158,54 +311,54 @@ def test_nested_element__locator__proc element :size, :name => 'size_attributes' do element :length element :width, :locator => Proc.new { parent.page_local_context } - + def grow! "Growing!" end end end end - + verify_kitty_structure(kitty) - + document_stub = mock jon = kitty.new(document_stub) - + tail_page_object = mock document_stub.expects(:find).with("#tail_attributes").returns(tail_page_object) - + tail = verify_field_with_intermediary_class(jon, :tail, ::AePageObjects::Element, tail_page_object) color_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) verify_field(tail, :color, ::AePageObjects::Element, color_page_object) - + size_page_object = mock tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) - + assert_equal "Growing!", size.grow! - + length_page_object = mock size_page_object.expects(:find).with("#tail_attributes_size_attributes_length").returns(length_page_object) verify_field(size, :length, ::AePageObjects::Element, length_page_object) - + size.expects(:page_local_context).returns("hello") - + width_page_object = mock size_page_object.expects(:find).with("hello").returns(width_page_object) verify_field(size, :width, ::AePageObjects::Element, width_page_object) end - + private - + def verify_kitty_structure(kitty_class) assert_sets_equal [:tail], kitty_class.element_attributes.keys assert_sets_equal [:color, :size], kitty_class.element_attributes[:tail].element_attributes.keys - + size_class = kitty_class.element_attributes[:tail].element_attributes[:size] assert_sets_equal [:length, :width], size_class.element_attributes.keys - assert_include size_class.instance_methods(false).map(&:to_sym), "grow!".to_sym + assert_include size_class.instance_methods(false), "grow!" end end end diff --git a/test/unit/dsl/node_test.rb b/test/unit/dsl/node_test.rb deleted file mode 100644 index 589a61a7..00000000 --- a/test/unit/dsl/node_test.rb +++ /dev/null @@ -1,162 +0,0 @@ -require 'unit_helper' - -module AePageObjects - module Dsl - class NodeTest < ActiveSupport::TestCase - - def test_element__basic - kitty = ::AePageObjects::Document.new_subclass do - element :kind - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("#kind").returns(kind_page_object) - verify_field(jon, :kind, ::AePageObjects::Element, kind_page_object) - rescue => e - puts e.backtrace.join("\n") - raise e - end - - def test_element__accessor_yields_to_block - kitty = ::AePageObjects::Document.new_subclass do - element :kind - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("#kind").returns(kind_page_object) - - kind_in_block = nil - kind = jon.kind do |kind| - kind_in_block = kind - "hello" - end - - assert_false kind_in_block.is_a?(AePageObjects::ElementProxy) - assert kind_in_block.is_a?(AePageObjects::Element) - - assert kind.is_a?(AePageObjects::ElementProxy) - assert kind.is_a?(AePageObjects::Element) - - assert_equal kind, kind_in_block - rescue => e - puts e.backtrace.join("\n") - raise e - end - - def test_element__locator - kitty = ::AePageObjects::Document.new_subclass do - element :kind, :locator => "Kind Homie" - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("Kind Homie").returns(kind_page_object) - verify_field(jon, :kind, ::AePageObjects::Element, kind_page_object) - end - - def test_element__locator__proc - kitty = ::AePageObjects::Document.new_subclass do - element :kind, :locator => Proc.new { parent.page_local_context } - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - jon.expects(:page_local_context).returns("hello") - - kind_page_object = mock - document_stub.expects(:find).with("hello").returns(kind_page_object) - verify_field(jon, :kind, ::AePageObjects::Element, kind_page_object) - end - - def test_element__as__select - kitty = ::AePageObjects::Document.new_subclass do - element :kind, :is => ::AePageObjects::Select - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("#kind").returns(kind_page_object) - verify_field(jon, :kind, ::AePageObjects::Select, kind_page_object) - end - - def test_element__as__checkbox - kitty = ::AePageObjects::Document.new_subclass do - element :kind, :is => ::AePageObjects::Checkbox - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("#kind").returns(kind_page_object) - verify_field(jon, :kind, ::AePageObjects::Checkbox, kind_page_object) - end - - def test_element__as__special_widget - special_widget = ::AePageObjects::Element.new_subclass - - kitty = ::AePageObjects::Document.new_subclass do - element :kind, :is => special_widget - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("#kind").returns(kind_page_object) - - verify_field(jon, :kind, special_widget, kind_page_object) - end - - def test_element__as__special_widget__with_locator - special_widget = ::AePageObjects::Element.new_subclass - - kitty = ::AePageObjects::Document.new_subclass do - element :kind, :is => special_widget, :locator => "As If!" - end - - assert kitty.method_defined?(:kind) - assert_sets_equal [:kind], kitty.element_attributes.keys - - document_stub = mock - jon = kitty.new(document_stub) - - kind_page_object = mock - document_stub.expects(:find).with("As If!").returns(kind_page_object) - - verify_field(jon, :kind, special_widget, kind_page_object) - end - end - end -end From 25ab5b8073fc32e29f0dcd51b443b813a58ae32c Mon Sep 17 00:00:00 2001 From: Donnie Tognazzini Date: Mon, 7 Jan 2013 21:57:24 -0800 Subject: [PATCH 3/3] add support for both :is and block passed to element() --- lib/ae_page_objects/core/dsl/element.rb | 8 ++--- lib/ae_page_objects/core/dsl/form_for.rb | 6 ++-- test/unit/dsl/element_test.rb | 46 +++++++++++++++++++++--- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/lib/ae_page_objects/core/dsl/element.rb b/lib/ae_page_objects/core/dsl/element.rb index 7f312f63..ed375194 100644 --- a/lib/ae_page_objects/core/dsl/element.rb +++ b/lib/ae_page_objects/core/dsl/element.rb @@ -16,8 +16,6 @@ def element_attributes end def element(name, options = {}, &block) - raise ArgumentError, ":is option and block not supported together" if options[:is].present? && block_given? - options = options.dup klass = field_klass(options, &block) @@ -33,10 +31,12 @@ def element(name, options = {}, &block) private def field_klass(options, &block) + klass = options.delete(:is) || ::AePageObjects::Element + if block_given? - ::AePageObjects::Element.new_subclass(&block) + klass.new_subclass(&block) else - options.delete(:is) || ::AePageObjects::Element + klass end end end diff --git a/lib/ae_page_objects/core/dsl/form_for.rb b/lib/ae_page_objects/core/dsl/form_for.rb index a578973e..b72d643c 100644 --- a/lib/ae_page_objects/core/dsl/form_for.rb +++ b/lib/ae_page_objects/core/dsl/form_for.rb @@ -19,9 +19,9 @@ def form_for(form_name, options = {}, &block) element(form_name, options) - klass.element_attributes.each do |node_name, node_klazz| - delegate node_name, :to => form_name - self.element_attributes[node_name] = node_klazz + klass.element_attributes.each do |element_name, element_klazz| + delegate element_name, :to => form_name + self.element_attributes[element_name] = element_klazz end end end diff --git a/test/unit/dsl/element_test.rb b/test/unit/dsl/element_test.rb index 3ea46009..39ba1f81 100644 --- a/test/unit/dsl/element_test.rb +++ b/test/unit/dsl/element_test.rb @@ -250,14 +250,50 @@ def grow! verify_field(size, :width, ::AePageObjects::Element, width_page_object) end - def test_nested_element__is_block_mutual_exclusion - assert_raises ArgumentError do - kitty = ::AePageObjects::Document.new_subclass do - element :tail, :is => ::AePageObjects::Select do - raise "You will never see this" + def test_nested_element__is__block + tail_base_class = ::AePageObjects::Element.new_subclass + + kitty = ::AePageObjects::Document.new_subclass do + element :tail, :name => "tail_attributes", :is => tail_base_class do + element :color + element :size, :name => "size_attributes" do + element :length + element :width + + def grow! + "Growing!" + end end end end + + verify_kitty_structure(kitty) + + document_stub = mock + jon = kitty.new(document_stub) + + tail_page_object = mock + document_stub.expects(:find).with("#tail_attributes").returns(tail_page_object) + + tail = verify_field_with_intermediary_class(jon, :tail, tail_base_class, tail_page_object) + + color_page_object = mock + tail_page_object.expects(:find).with("#tail_attributes_color").returns(color_page_object) + verify_field(tail, :color, ::AePageObjects::Element, color_page_object) + + size_page_object = mock + tail_page_object.expects(:find).with("#tail_attributes_size_attributes").returns(size_page_object) + size = verify_field_with_intermediary_class(tail, :size, ::AePageObjects::Element, size_page_object) + + assert_equal "Growing!", size.grow! + + length_page_object = mock + size_page_object.expects(:find).with("#tail_attributes_size_attributes_length").returns(length_page_object) + verify_field(size, :length, ::AePageObjects::Element, length_page_object) + + width_page_object = mock + size_page_object.expects(:find).with("#tail_attributes_size_attributes_width").returns(width_page_object) + verify_field(size, :width, ::AePageObjects::Element, width_page_object) end def test_nested_element__locator