#!/usr/bin/perl

use strict;
use warnings;

use inc::testplan(1, 8);
use test_inc::loginit;

# TODO migrate this to the dtRdrTestUtil::GUI framework?

# a little hack to let this be a quick way to test the editor box
my $testing = scalar(@ARGV);

BEGIN { use_ok('dtRdr::GUI::Wx::NoteEditor') };

use Wx;
use Wx::Event qw(
  EVT_IDLE
  );

my $package = eval { require("./client/app.pl") };
ok((not $@), "require ok") or
  BAIL_OUT("error: " . join('\n', split(/\n+/, $@)));
ok($package, $package || 'got a package') or
  BAIL_OUT("app.pl failed to load...STOP");

# NOTE: crash will typically happen here.  If it does, we're dead in
# the water (probably a syntax error.)
my $app = eval {$package->new(); };
ok((not $@), "$package constructor") or
  BAIL_OUT("error: " . join('\n', split(/\n+/, $@)));
ok($app, 'application');

my $editor;
{
my $main_frame = $package->_main_frame;
$editor = dtRdr::GUI::Wx::NoteEditor->new($main_frame);
$editor->set_saver(sub {$app->ExitMainLoop});
$editor->set_reverter(sub {$app->ExitMainLoop});
# TODO set a callback and find a way to fire it
#   EVT_BUTTON( $this, $button, sub { $var = 1 } );
#   my $event = Wx::CommandEvent->new(
#     &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
#     $button->GetId()
#   );
#   $button->GetEventHandler->ProcessEvent( $event );
# TODO check focus
# TODO check the 3 ways of closing?
$editor->Show(1);
}

my $idle_ok = 0;
EVT_IDLE($app, sub {
  my ($foo, $event) = @_;
  $idle_ok++;
  #warn "idle $idle_ok\n";
  if($idle_ok >= 1) {
    if($idle_ok == 1) {
      $editor->Raise(); # not really needed... err?
    }
    $testing or $app->ExitMainLoop;
  }
  else {
  }
  $event->Skip;
  1;
});

eval { $app->MainLoop(); };
ok((not $@), "MainLoop done") or
  BAIL_OUT("error: " . join('\n', split(/\n+/, $@)));
ok(1, 'MainLoop');
ok($idle_ok, 'exit');

done;
# vim:ts=2:sw=2:et:sta