BEGIN{
	  # Set perl to not try to resolve all symbols at startup
	  # The default behavior causes some problems because 
	  # the PGPLOT code defines interfaces for all PGPLOT functions
	  # whether or not they are linked.
	  $ENV{'PERL_DL_NONLAZY'}=0;
}

use strict;

use PDL;
use Test::More;

BEGIN{
   eval "use PDL::Graphics::PGPLOT; use PDL::Graphics::PGPLOT::Window;";
   if ($@) {
      plan skip_all => "Skipped: PDL::Graphics::PGPLOT not installed";
   } elsif (!exists($ENV{'DISPLAY'})) {
      # We have this after the PGPLOT module is loaded so that we test whether the
      # module will at least load, even if we do not test it's
      # functionality.
      #
      plan tests => 1;
      print "ok 1 # skip -- DISPLAY environment variable not set\n";
      exit;
   } else {
      plan tests => 12;
   }
}

sub get_answer () {
    print STDERR "Does this look OK (y/n, y is default)? :";
    my $answer = <STDIN>;
    return $answer !~ m/n/i;
}

sub interactive ($$) {
    my $flag = shift;
    my $num  = shift;
    return unless $flag; # ie not interactive

    if (1 == $num) {
    print STDERR <<'EOD';
PGPLOT X device... you should see a 6 inch (153 mm) x 4 inch (102 mm)
X window with four plots in it.  All four images should have tick marks 
on the outside of the axes.

[ Scaled image of m51; scale        [Square image of m51 with scale from
  in pixels on both axes ]           -3.5 - +3.5 arcmin on both axes, 
				     with cal. wedge, centered in rect. frame]

[ Square image of m51; scale        [Square image of m51 with scale as above,
  in pixels on both axes;            ``shrink-wrapped'']
  ``shrinkwrapped'' ]

EOD
    } elsif (2 == $num) {
    print STDERR <<'EOD';
==============================================================

You should see four plots demonstrating pitch setting, justification,
and alignment:

[ Square image of m51 scaled to         [Short, squat image of m51 with
200 ppi (1.25 inches wide), aligned      aspect ratio 1:2, width 1.25 inch,
to bottom left corner of rect. plot      and height 0.625 inch, shrinkwrapped
box and cropped at the top.        ]     and placed at lower left of plot rgn]

[ Square image of m51 scaled to         [Tall, narrow image of m51 with
200 ppi (1.25 inches wide), aligned      aspect ratio 2:1, width 0.625 inch,
to upper right corner of rect. plot      and height 1.25 inch, shrinkwrapped
box and cropped at the bottom.     ]     and placed at upper right of plot rgn]

EOD
    } else {
      die "Internal error: unknown test number $num for interactive()!\n";
    }
    return get_answer();
}

my $interactive = exists($ENV{'PDL_INT'});
my $skip_interactive_msg = "interactive tests not run since environment var PDL_INT not set";
my $interactive_ctr = 0;

###
### Test code
###

my $dev = $ENV{'PGPLOT_DEV'} ? $ENV{'PGPLOT_DEV'} : "/xw";

my $w = PDL::Graphics::PGPLOT::Window->new(
					   Dev => $dev,
					   Size=> [6,4],
                                           NX=>2, NY=>2,
                                           Ch=>2.5, HardCH=>2.5);
ok( UNIVERSAL::isa($w, "PDL::Graphics::PGPLOT::Window") );

my $a = rfits('m51.fits');

##############################
# Page 1
#
foreach my $str ( (
    '$w->imag($a,{Title=>"\$w->imag(\$a);"} );',
    '$w->fits_imag($a,{Title=>"\$w->fits_imag(\$a);"});',
    '$w->imag($a,{J=>1,Title=>"\$w->imag(\$a,{J=>1});"});',
    '$w->fits_imag($a,{J=>1,Title=>"\$w->imag(\$a,{J=>1});"});'
    ) ) {
    eval $str;
    ok (!$@);
}

$interactive_ctr++;
SKIP: {
   skip $skip_interactive_msg, 1 unless $interactive;
   ok(interactive($interactive, $interactive_ctr), "interactive tests");
}
  
##############################
# Page 2
#
foreach my $str ( (
    '$w->imag($a,{Pitch=>200,Align=>"LB",Title=>"\$w->imag(\$a,{Pitch=>200,Align=>LB})"});',
    '$w->imag($a,{J=>.5,Pitch=>200,Align=>"LB",Title=>"\$w->imag(\$a,{J=>.5,Pitch=>200,Align=>LB})"});',
    '$w->imag($a,{Pitch=>200,Align=>"RT",Title=>"\$w->imag(\$a,{Pitch=>200,Align=>RT})"});',
    '$w->imag($a,{J=>2,Pitch=>400,Align=>"RT",Title=>"\$w->imag(\$a,{J=>1,Pitch=>400,Align=>RT})                     ."});',
    ) ) {
    eval $str;
    ok (!$@);
}

$interactive_ctr++;
SKIP: {
   skip $skip_interactive_msg, 1 unless $interactive;
   ok(interactive($interactive, $interactive_ctr), "interactive tests");
}
  
eval '$w->close';
ok (!$@);

# End


