The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Data::Dumper;
use Test::More;
use Image::DS9;
use Cwd;

BEGIN { plan( tests => 68 ) ;}

require 't/common.pl';

my $ds9 = start_up();
$ds9->file( cwd() . '/m31.fits.gz' );
$ds9->zoom(0);
$ds9->mode( 'crosshair' );

$ds9->wcs( 'reset' );

my @coords = qw( wcs fk5 );

my $coords = $ds9->crosshair( @coords );

my $wcs = "
  CRPIX1  =               257.75
  CRPIX2  =               258.93
  CRVAL1  =      -201.94541667302
  CRVAL2  =             -47.45444
  CDELT1  =        -2.1277777E-4
  CDELT2  =         2.1277777E-4
  CTYPE1  = 'RA---TAN'
  CTYPE2  = 'DEC--TAN'
";

$ds9->wcs( 'reset' );
$ds9->wcs( replace => $wcs );
my $ncoords = $ds9->crosshair( @coords );
ok( ! eq_array( $coords, $ncoords ), 'wcs scalar' );
$ds9->wcs( 'reset' );
ok( eq_array( $coords, scalar $ds9->crosshair( @coords ) ), 'wcs reset' );

$ds9->wcs( 'reset' );
$ds9->wcs( replace => \$wcs );
ok( eq_array( $ncoords, scalar $ds9->crosshair( @coords ) ), 'wcs scalarref' );

my @wcs = split(/\n/, $wcs );

$ds9->wcs( 'reset' );
$ds9->wcs( replace => \@wcs );
ok( eq_array( $ncoords, scalar $ds9->crosshair( @coords ) ), 'wcs arrayref' );

my %wcs = 
   (
    CRPIX1  =>               257.75,
    CRPIX2  =>               258.93,
    CRVAL1  =>      -201.94541667302,
    CRVAL2  =>             -47.45444,
    CDELT1  =>        -2.1277777E-4,
    CDELT2  =>         2.1277777E-4,
    CTYPE1  => 'RA---TAN',
    CTYPE2  => 'DEC--TAN',
   );

$ds9->wcs( 'reset' );
$ds9->wcs( replace => \%wcs );
ok( eq_array( $ncoords, scalar $ds9->crosshair( @coords ) ), 'wcs hashref' );


test_stuff( $ds9, (
		   wcs =>
		   [
		    ( map { ( system => $_ ) }
		      ( (map { 'wcs' . $_ } ('a'..'z')), 'wcs' )
		    ),
		    ( map { ( [] => $_ ) }
		      ( (map { 'wcs' . $_ } ('a'..'z')), 'wcs' )
		    ),
		    ( map { (sky => $_) } 
		         qw( fk4 icrs galactic ecliptic fk5 ) 
		    ),
		    ( map { (skyformat => $_) } 
		         qw( degrees sexagesimal ) 
		    ),
		    align => 1,
		    align => 0,
		   ],
		  ) );