test/unit/widget_test.rb in apotomo-0.1.1 vs test/unit/widget_test.rb in apotomo-0.1.2

- old
+ new

@@ -19,6 +19,102 @@ should "not inherit trees for now" do assert_equal [], @kid.children end end + + context "A stateless widget" do + setup do + @mum = Apotomo::Widget.new('mum', :squeak) + end + + context "responding to #address_for_event" do + should "accept an event :type" do + assert_equal({:type => :squeak, :source => 'mum'}, @mum.address_for_event(:type => :squeak)) + end + + should "accept a :source" do + assert_equal({:type => :squeak, :source => 'kid'}, @mum.address_for_event(:type => :squeak, :source => 'kid')) + end + + should "accept arbitrary options" do + assert_equal({:type => :squeak, :volume => 'loud', :source => 'mum'}, @mum.address_for_event(:type => :squeak, :volume => 'loud')) + end + + should "complain if no type given" do + assert_raises RuntimeError do + @mum.address_for_event(:source => 'mum') + end + end + end + + context "implementing visibility" do + should "per default respond to #visible?" do + assert @mum.visible? + end + + should "expose a setter therefore" do + @mum.visible = false + assert_not @mum.visible? + end + + context "in a widget family" do + setup do + @mum << @jerry = mouse_mock('jerry') + @mum << @berry = mouse_mock('berry') + end + + should "per default return all #visible_children" do + assert_equal [@jerry, @berry], @mum.visible_children + assert_equal [], @jerry.visible_children + end + + should "hide berry in #visible_children if he's invisible" do + @berry.visible = false + assert_equal [@jerry], @mum.visible_children + end + end + end + + should "respond to #find_widget" do + mum_and_kid! + assert_not @mum.find_widget('pet') + assert @kid, @mum.find_widget('kid') + end + + should "respond to the WidgetShortcuts methods, like #widget" do + assert_respond_to @mum, :widget + end + + context "with initialize_hooks" do + should "expose its class_inheritable_array with #initialize_hooks" do + @mum = mouse_class_mock.new('mum', :eating) + @mum.class.instance_eval { self.initialize_hooks << :initialize_mouse } + assert ::Apotomo::StatefulWidget.initialize_hooks.size + 1 == @mum.class.initialize_hooks.size + end + + should "execute the initialize_hooks in the correct order in #process_initialize_hooks" do + @mum = mouse_class_mock.new('mum', :eating) + @mum.class.instance_eval do + define_method(:executed) { |*args| @executed ||= [] } + define_method(:setup) { |*args| executed << :setup } + define_method(:configure) { |*args| executed << :configure } + initialize_hooks << :setup + initialize_hooks << :configure + end + + assert_equal [:setup, :configure], @mum.class.new('zombie', nil).executed + end + + should "provide after_initialize" do + @mum = mouse_class_mock.new('mum', :eat) + @mum.class.instance_eval do + after_initialize :first + after_initialize :second + end + + assert_equal @mum.class.initialize_hooks[-1], :second + assert_equal @mum.class.initialize_hooks[-2], :first + end + end + end end \ No newline at end of file