root/lang/ruby/ruwin/test/ruwin/test_popup_menu.rb @ 29474

Revision 29474, 4.9 kB (checked in by isaisstillalive, 4 years ago)
  • PopupMenuでセパレータを作成できるようにした。
Line 
1require File.expand_path(File.join(File.dirname(__FILE__), "..", "helper"))
2require "ruwin/popup_menu"
3
4class TestRuwinPopupMenu < Test::Unit::TestCase
5  include Ruwin::Const::Menu
6 
7  def setup
8    @klass = Class.new(Ruwin::PopupMenu)
9    @klass.class_eval <<-"END"
10      item("text1"){ [self, :item1] }
11      item("text2"){ [self, :item2] }
12    END
13   
14    @window = Ruwin::Component.new
15    @instance = @klass.new @window
16  end
17 
18 
19  def test_inherit
20    baseklass = Class.new(Ruwin::PopupMenu)
21    klass = baseklass.inherit("name"){ item("item1"){} }
22    assert_equal -1, (klass <=> baseklass)
23    assert_equal  1, klass.items.size
24  end
25 
26  def test_subclass_should_have_empty_items
27    klass = Class.new(Ruwin::PopupMenu)
28    assert_equal 0, klass.items.size
29  end
30 
31 
32  def test_item_class_method_should_append_item
33    assert_equal 2, @klass.items.size
34    assert_equal "text1", @klass.items[0]
35    assert_equal "text2", @klass.items[1]
36  end
37 
38  def test_item_class_method_should_convert_caption_utf8_to_sjis
39    klass = Class.new(Ruwin::PopupMenu)
40    klass.class_eval 'item("アイテム"){}'
41    assert_equal NKF.nkf("-Ws", "アイテム"), klass.items[0]
42  end
43 
44  def test_item_class_method_should_append_action
45    assert_equal 2, @klass.actions.size
46    assert_equal [@klass, :item1], @klass.actions[0].call
47    assert_equal [@klass, :item2], @klass.actions[1].call
48  end
49 
50  def test_separator_class_method_should_append_nil_named_item
51    klass = Class.new(Ruwin::PopupMenu)
52    klass.class_eval 'item("text1"){ [self, :item1] }'
53    klass.class_eval 'separator'
54    klass.class_eval 'item("text2"){ [self, :item2] }'
55    assert_equal 3, klass.items.size
56    assert_equal "text1", klass.items[0]
57    assert_nil            klass.items[1]
58    assert_equal "text2", klass.items[2]
59  end
60 
61  def test_separator_class_method_should_append_nil_action
62    klass = Class.new(Ruwin::PopupMenu)
63    klass.class_eval 'item("text1"){ [self, :item1] }'
64    klass.class_eval 'separator'
65    klass.class_eval 'item("text2"){ [self, :item2] }'
66    assert_equal 3, klass.items.size
67    assert_equal [klass, :item1], klass.actions[0].call
68    assert_nil                    klass.actions[1]
69    assert_equal [klass, :item2], klass.actions[2].call
70  end
71 
72 
73  def test_initialize_should_call_newpopup
74    assert_instance_of @klass, @instance
75    assert_instance_of SWin::Menu, @instance.instance_variable_get(:@menu)
76    assert_equal       2,          @instance.instance_variable_get(:@menu).count
77  end
78 
79  def test_initialize_should_create_separator
80    klass = Class.new(Ruwin::PopupMenu)
81    klass.class_eval 'item("text1"){ [self, :item1] }'
82    klass.class_eval 'separator'
83    klass.class_eval 'item("text2"){ [self, :item2] }'
84    instance = klass.new @window
85    assert_equal 3, instance.instance_variable_get(:@menu).count
86    assert_equal MF_SEPARATOR, (instance.instance_variable_get(:@menu).getState(1)&MF_SEPARATOR)
87  end
88 
89  def test_show_should_show_popup_menu
90    @instance.instance_eval <<-"END"
91      self.class::TrackPopupMenu = Proc.new{|*args| @track_args = args; @track_menu = @window.instance_variable_get(:@_menu) }
92    END
93   
94    @instance.show 10, 20
95   
96    track_args = @instance.instance_variable_get(:@track_args)
97    assert_equal @instance.instance_variable_get(:@menu).hmenu,  track_args[0]
98    assert_equal 10, track_args[2]
99    assert_equal 20, track_args[3]
100    assert_equal @instance.instance_variable_get(:@window).hWnd, track_args[5]
101   
102    assert_equal @instance, @instance.instance_variable_get(:@track_menu)
103  end
104 
105 
106  def test_action_should_window_context_call_proc
107    assert_equal [@window, :item1], @instance.action(0)
108  end
109 
110 
111  def test_enable_true
112    @instance.enable 1, true
113   
114    assert_equal 0, @instance.instance_variable_get(:@menu).getState(0)
115    assert_equal 0, @instance.instance_variable_get(:@menu).getState(1)
116  end
117 
118  def test_enable_false
119    @instance.enable 1, false
120   
121    assert_equal 0, @instance.instance_variable_get(:@menu).getState(0)
122    assert_equal 1, @instance.instance_variable_get(:@menu).getState(1)
123  end
124 
125  def test_disable
126    @instance.disable 1
127   
128    assert_equal 0, @instance.instance_variable_get(:@menu).getState(0)
129    assert_equal 1, @instance.instance_variable_get(:@menu).getState(1)
130  end
131end
132
133__END__
134setState(idItem,state)
135
136    * 引数
137          o idItem : Integer
138          o state : Integer
139    * 返値 true/false
140    * メニューの項目の状態をセットします。idItemにその項目のidを指定します。 stateは 0(MF_ENABLED), 1(MF_GRAYED),それ以外(MF_DISABLED)となります。
141
142getState(idItem)
143
144    * 引数
145          o idItem : Integer
146    * 返値 Integer
147    * メニューの項目の状態を取得します。idItemにその項目のidを指定します。
Note: See TracBrowser for help on using the browser.