| 1 | require File.expand_path(File.join(File.dirname(__FILE__), "..", "helper"))
|
|---|
| 2 | require "ruwin/popup_menu"
|
|---|
| 3 |
|
|---|
| 4 | class 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
|
|---|
| 131 | end
|
|---|
| 132 |
|
|---|
| 133 | __END__
|
|---|
| 134 | setState(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 |
|
|---|
| 142 | getState(idItem)
|
|---|
| 143 |
|
|---|
| 144 | * 引数
|
|---|
| 145 | o idItem : Integer
|
|---|
| 146 | * 返値 Integer
|
|---|
| 147 | * メニューの項目の状態を取得します。idItemにその項目のidを指定します。
|
|---|