| 1 | require File.expand_path(File.join(File.dirname(__FILE__), "..", "helper"))
|
|---|
| 2 | require "ruwin/control"
|
|---|
| 3 |
|
|---|
| 4 | class TestRuwinWindow < Test::Unit::TestCase
|
|---|
| 5 | include Ruwin::Const::Window
|
|---|
| 6 |
|
|---|
| 7 | def test_window_should_have_controls
|
|---|
| 8 | assert Ruwin::Window.instance_variable_get(:@controls)
|
|---|
| 9 | end
|
|---|
| 10 |
|
|---|
| 11 | def test_window_subclass_should_have_controls
|
|---|
| 12 | klass = Class.new(Ruwin::Window)
|
|---|
| 13 | assert klass.instance_variable_get(:@controls)
|
|---|
| 14 | end
|
|---|
| 15 |
|
|---|
| 16 | def test_component_subclass_proparty_should_have_unduplicated_value
|
|---|
| 17 | symbol = :test
|
|---|
| 18 | baseklass = Class.new(Ruwin::Window)
|
|---|
| 19 | baseklass.instance_variable_get(:@controls)[:test] = symbol
|
|---|
| 20 | klass = Class.new(baseklass)
|
|---|
| 21 | assert_equal symbol, klass.instance_variable_get(:@controls)[:test]
|
|---|
| 22 | assert_same symbol, klass.instance_variable_get(:@controls)[:test]
|
|---|
| 23 | end
|
|---|
| 24 |
|
|---|
| 25 | def test_size
|
|---|
| 26 | assert_equal 512, Ruwin::Window.width
|
|---|
| 27 | assert_equal 512, Ruwin::Window.height
|
|---|
| 28 | end
|
|---|
| 29 |
|
|---|
| 30 | def test_add_control
|
|---|
| 31 | klass = Class.new(Ruwin::Window)
|
|---|
| 32 | klass.class_eval <<-'END'
|
|---|
| 33 | add_control Ruwin::Control, "control_name" do
|
|---|
| 34 | style 16
|
|---|
| 35 | end
|
|---|
| 36 | END
|
|---|
| 37 |
|
|---|
| 38 | assert_equal true, klass.instance_methods(false).include?("control_name")
|
|---|
| 39 |
|
|---|
| 40 | control = klass.instance_variable_get(:@controls)["control_name"]
|
|---|
| 41 | assert_equal -1, (control <=> Ruwin::Control)
|
|---|
| 42 | assert_equal 16, control.style
|
|---|
| 43 | end
|
|---|
| 44 |
|
|---|
| 45 | %w{Button CheckBox RadioButton EditField ListBox ComboBox}.each do |klass|
|
|---|
| 46 | class_eval <<-"END2"
|
|---|
| 47 | def test_add_control_syntaxsugar_#{klass}
|
|---|
| 48 | assert_respond_to Ruwin::Window, :Button
|
|---|
| 49 |
|
|---|
| 50 | klass = Class.new(Ruwin::Window)
|
|---|
| 51 | klass.class_eval <<-'END'
|
|---|
| 52 | #{klass} "control_name" do
|
|---|
| 53 | end
|
|---|
| 54 | END
|
|---|
| 55 |
|
|---|
| 56 | assert_equal true, klass.instance_methods(false).include?("control_name")
|
|---|
| 57 |
|
|---|
| 58 | control = klass.instance_variable_get(:@controls)["control_name"]
|
|---|
| 59 | assert_equal -1, (control <=> Ruwin::#{klass})
|
|---|
| 60 | end
|
|---|
| 61 | END2
|
|---|
| 62 | end
|
|---|
| 63 |
|
|---|
| 64 |
|
|---|
| 65 | def test_new
|
|---|
| 66 | klass = Class.new(Ruwin::Window)
|
|---|
| 67 | instance = klass.new
|
|---|
| 68 | assert_instance_of klass, instance
|
|---|
| 69 | assert_equal WS_CLIPSIBLINGS, instance.style&WS_CLIPSIBLINGS
|
|---|
| 70 | assert_equal WS_OVERLAPPEDWINDOW, instance.style&WS_OVERLAPPEDWINDOW
|
|---|
| 71 | assert_equal WS_VISIBLE, instance.style&WS_VISIBLE
|
|---|
| 72 | assert_equal WS_EX_COMPOSITED, instance.exstyle&WS_EX_COMPOSITED
|
|---|
| 73 | end
|
|---|
| 74 |
|
|---|
| 75 | def test_new_created_event
|
|---|
| 76 | klass = Class.new(Ruwin::Window)
|
|---|
| 77 |
|
|---|
| 78 | klass.class_eval <<-END
|
|---|
| 79 | attr_reader :created_called
|
|---|
| 80 | def created
|
|---|
| 81 | @created_called = hWnd
|
|---|
| 82 | end
|
|---|
| 83 | END
|
|---|
| 84 |
|
|---|
| 85 | instance = klass.new
|
|---|
| 86 | assert_equal instance.hWnd, instance.created_called
|
|---|
| 87 | end
|
|---|
| 88 |
|
|---|
| 89 | def test_new_create_controls
|
|---|
| 90 | klass = Class.new(Ruwin::Window)
|
|---|
| 91 | klass.class_eval <<-'END'
|
|---|
| 92 | add_control Ruwin::Control, "control_name" do
|
|---|
| 93 | style 16
|
|---|
| 94 | end
|
|---|
| 95 | END
|
|---|
| 96 | instance = klass.new
|
|---|
| 97 |
|
|---|
| 98 | assert_equal 1, instance.controls.size
|
|---|
| 99 | instance.controls.each do |hWnd, (name, control)|
|
|---|
| 100 | assert_equal control.hWnd, hWnd
|
|---|
| 101 | assert_instance_of klass.instance_variable_get(:@controls)[name], control
|
|---|
| 102 | assert_equal control, instance.instance_variable_get(:"@#{name}")
|
|---|
| 103 | end
|
|---|
| 104 | end
|
|---|
| 105 |
|
|---|
| 106 | DummyMSG = Struct.new(:hWnd, :msg, :wParam, :lParam)
|
|---|
| 107 |
|
|---|
| 108 | {
|
|---|
| 109 | WM_COMMAND => :wm_command,
|
|---|
| 110 | WM_ACTIVATE => :wm_activate,
|
|---|
| 111 | WM_SIZE => :wm_size,
|
|---|
| 112 | }.each do |command, event|
|
|---|
| 113 | class_eval <<-"END2"
|
|---|
| 114 | def test_handling_#{command}
|
|---|
| 115 | klass = Class.new(Ruwin::Window)
|
|---|
| 116 | instance = klass.new
|
|---|
| 117 | assert instance.capturedEvents.include?(#{command})
|
|---|
| 118 | end
|
|---|
| 119 |
|
|---|
| 120 | def test_msghandler_#{command}
|
|---|
| 121 | klass = Class.new(Ruwin::Window)
|
|---|
| 122 | klass.class_eval <<-'END'
|
|---|
| 123 | attr_reader :called_event_msg
|
|---|
| 124 | def #{event} msg
|
|---|
| 125 | @called_event_msg = msg
|
|---|
| 126 | end
|
|---|
| 127 | END
|
|---|
| 128 | instance = klass.new
|
|---|
| 129 |
|
|---|
| 130 | msg = DummyMSG.new nil, #{command}
|
|---|
| 131 | instance.msghandler msg
|
|---|
| 132 | assert_equal msg, instance.called_event_msg
|
|---|
| 133 | end
|
|---|
| 134 | END2
|
|---|
| 135 | end
|
|---|
| 136 |
|
|---|
| 137 | def test_wm_command
|
|---|
| 138 | klass = Class.new(Ruwin::Window)
|
|---|
| 139 | klass.class_eval <<-'END'
|
|---|
| 140 | add_control Ruwin::Control, "button" do
|
|---|
| 141 | attr_reader :wm_command_msg
|
|---|
| 142 | def wm_command msg
|
|---|
| 143 | @wm_command_msg = msg
|
|---|
| 144 | :updated
|
|---|
| 145 | end
|
|---|
| 146 | end
|
|---|
| 147 |
|
|---|
| 148 | attr_reader :button_updated_called
|
|---|
| 149 | def button_updated
|
|---|
| 150 | @button_updated_called = true
|
|---|
| 151 | end
|
|---|
| 152 | END
|
|---|
| 153 | instance = klass.new
|
|---|
| 154 |
|
|---|
| 155 | msg = DummyMSG.new nil, WM_COMMAND, 1, instance.button.hWnd
|
|---|
| 156 | instance.wm_command msg
|
|---|
| 157 | assert_equal msg, instance.button.wm_command_msg
|
|---|
| 158 | assert_equal true, instance.button_updated_called
|
|---|
| 159 | end
|
|---|
| 160 |
|
|---|
| 161 | {
|
|---|
| 162 | WA_INACTIVE => :inactivated,
|
|---|
| 163 | WA_ACTIVE => :activated,
|
|---|
| 164 | WA_CLICKACTIVE => :activated,
|
|---|
| 165 | }.each do |command, event|
|
|---|
| 166 | class_eval <<-"END2"
|
|---|
| 167 | def test_wm_activate_#{command}
|
|---|
| 168 | klass = Class.new(Ruwin::Window)
|
|---|
| 169 | klass.class_eval <<-'END'
|
|---|
| 170 | attr_reader :wm_active_called
|
|---|
| 171 | def #{event}
|
|---|
| 172 | @wm_active_called = :#{event}
|
|---|
| 173 | end
|
|---|
| 174 | END
|
|---|
| 175 | instance = klass.new
|
|---|
| 176 |
|
|---|
| 177 | msg = DummyMSG.new nil, WM_COMMAND, #{command}
|
|---|
| 178 | instance.wm_activate msg
|
|---|
| 179 | assert_equal :#{event}, instance.wm_active_called
|
|---|
| 180 | end
|
|---|
| 181 | END2
|
|---|
| 182 | end
|
|---|
| 183 |
|
|---|
| 184 | {
|
|---|
| 185 | WA_ACTIVE => :false,
|
|---|
| 186 | WA_CLICKACTIVE => :true,
|
|---|
| 187 | }.each do |command, clicked|
|
|---|
| 188 | class_eval <<-"END2"
|
|---|
| 189 | def test_wm_activate_#{command}_with_clicked
|
|---|
| 190 | klass = Class.new(Ruwin::Window)
|
|---|
| 191 | klass.class_eval <<-'END'
|
|---|
| 192 | attr_reader :wm_active_called
|
|---|
| 193 | def activated clicked
|
|---|
| 194 | @wm_active_called = clicked
|
|---|
| 195 | end
|
|---|
| 196 | END
|
|---|
| 197 | instance = klass.new
|
|---|
| 198 |
|
|---|
| 199 | msg = DummyMSG.new nil, WM_COMMAND, #{command}
|
|---|
| 200 | instance.wm_activate msg
|
|---|
| 201 | assert_equal #{clicked}, instance.wm_active_called
|
|---|
| 202 | end
|
|---|
| 203 | END2
|
|---|
| 204 | end
|
|---|
| 205 |
|
|---|
| 206 | def test_wm_size
|
|---|
| 207 | klass = Class.new(Ruwin::Window)
|
|---|
| 208 | klass.class_eval <<-'END'
|
|---|
| 209 | attr_reader :wm_size_called
|
|---|
| 210 | def resized width, height
|
|---|
| 211 | @wm_size_called = [width, height]
|
|---|
| 212 | end
|
|---|
| 213 | END
|
|---|
| 214 | instance = klass.new
|
|---|
| 215 |
|
|---|
| 216 | msg = DummyMSG.new nil, WM_COMMAND, WM_SIZE, 100|200<<16
|
|---|
| 217 | instance.wm_size msg
|
|---|
| 218 | assert_equal [100, 200], instance.wm_size_called
|
|---|
| 219 | end
|
|---|
| 220 |
|
|---|
| 221 | def test_wm_size_call_children_parent_resized
|
|---|
| 222 | klass = Class.new(Ruwin::Window)
|
|---|
| 223 | klass.class_eval <<-'END'
|
|---|
| 224 | add_control(Button, "button1"){}
|
|---|
| 225 | add_control(Button, "button2"){}
|
|---|
| 226 | END
|
|---|
| 227 | instance = klass.new
|
|---|
| 228 |
|
|---|
| 229 | def (instance.button1).parent_resized *args
|
|---|
| 230 | @parent_resized = args
|
|---|
| 231 | end
|
|---|
| 232 | def (instance.button2).parent_resized *args
|
|---|
| 233 | @parent_resized = args
|
|---|
| 234 | end
|
|---|
| 235 |
|
|---|
| 236 | msg = DummyMSG.new nil, WM_COMMAND, WM_SIZE, 100|200<<16
|
|---|
| 237 | instance.wm_size msg
|
|---|
| 238 |
|
|---|
| 239 | assert_equal [100, 200], instance.button1.instance_variable_get(:@parent_resized)
|
|---|
| 240 | assert_equal [100, 200], instance.button2.instance_variable_get(:@parent_resized)
|
|---|
| 241 | end
|
|---|
| 242 | end
|
|---|