Simon Strandgaard wrote:
> I use fxruby ;-)
Here's how far I got with a quick experiment in that totally proper GUI
Toolkit.
Note I'm not asking how to finish this example. I hardly bothered to
research it. But it illustrates the "maybe mainloop" pattern for RubyFox.
#!/usr/bin/env ruby
require "fox"
include Fox
def assert(q)
puts "this app broke" if not q
end
class HelloWorld
def initialize()
@application = FXApp.new("Hello", "FoxTest")
@main = FXMainWindow.new( @application, "Hello",
nil, nil, DECOR_ALL )
FXButton.new( @main, "&Hello, World!",
nil, @application, FXApp::ID_QUIT )
@application.create()
@main.show(PLACEMENT_SCREEN)
end
attr :main
def show()
@application.run()
end
end
def test_printHelloWorld()
hello = HelloWorld.new()
button = hello.main.children[0]
assert "Hello, World!" == button.getText
# hello.show()
end
def test_clickButton()
hello = HelloWorld.new()
button = hello.main.children[0]
button.onEnter
# TODO put assertion here that proves
# onEnter did the right thing
end
def main()
test_printHelloWorld()
test_clickButton()
end
main()
That program is the hello.rbw file from the Pragmatic Programmer's
Installer's RubyFox sample folder, converted into a test rig for a
hypothetically brainless class called HelloWorld. But it illustrates
important test topics.
I did not bother to throw in a test-rig, because the only features we need
were assert().
The test works by promising Fox that we are just about to display a window,
but only if Fox works with us and gets ready to display it. Then we throw
the window away.
The first test, test_printHelloWorld(), simulates looking at the window, and
querying its visual state. We expect a button containing that astounding
statement, "Hello, World!". But because we don't call hello.show(), the
window does not flash while the test runs.
The second test, test_clickButton(), is incomplete. Firstly, it only calls
the callback that would have called if we had clicked on the button. I don't
know if the FXButton class has a reliable Click() method here, to get more
abstract.
Secondly, that test aborts the test run, due to the FXApp::ID_QUIT flag.
Just a little research is required to put a mock event handler in place, to
assert true if our test clicked the button, and if it were properly wired.
All GUI Toolkits should support testing themselves directly, in code, as
efficiently as possible. Most contain many of the primitives required. But
not all make how to do this easy, or obvious.
--
Phlip
http://www.xpsd.org/cgi-bin/wiki?TestFirstUserInterfaces