root/lang/ruby/ruwin/test/ruwin/test_window.rb @ 28881

Revision 28881, 7.0 kB (checked in by isaisstillalive, 4 years ago)
  • Windowに、自分のサイズが変わった場合に子全てのparent_resizedを呼ぶ機能を追加。
Line 
1require File.expand_path(File.join(File.dirname(__FILE__), "..", "helper"))
2require "ruwin/control"
3
4class 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
242end
Note: See TracBrowser for help on using the browser.