use strict;
use Test;

unless( -f "xml_parser.res" ) {
    plan tests => 1;
    skip(1,1,1);
    exit 0;
}

use Games::RolePlay::MapGen;

my $pid = fork;

unless( $pid ) {
    my ($x, $y) = (15, 15);
    my $tmp = new Games::RolePlay::MapGen({ tile_size=>10, num_rooms=>"2d4", bounding_box=>join("x", $x, $y) });
       $tmp->set_generator( "Basic" );
       $tmp->add_generator_plugin( "FiveSplit" );
       $tmp->add_generator_plugin( "BasicDoors" );
       $tmp->generate; 
       $tmp->set_exporter( "XML" );
       $tmp->export( "08_map.xml" );

    exit 0;
}

waitpid($pid,0) or die "waiting for $pid: $!";

open my $in, "<", "08_map.xml" or die $!;
my $xml = do {local $/; <$in>};
my $map = new Games::RolePlay::MapGen;
   $map->set_generator("XMLImport");
   $map->generate( xml_input => $xml );

my ($x,$y) = $map->size;
plan tests => ( 2*4 * $x*$y );

CHECK_OPEN_DIRECTIONS_FOR_SANITY: { # they should really be the same from each direction ... or there's a problem.
    my $m = $map->{_the_map};
    for my $i (0..$y-1) {
        for my $j (0..$x-1) {
            my $e = $m->[$i][$j];

            for my $ar ( [n=>[y=>$i-1]], [s=>[y=>$i+1]], [e=>[x=>$j+1]], [w=>[x=>$j-1]] ) {
                my $d = $ar->[0];
                my ($k, $v) = @{$ar->[1]};

                if( my $n = $e->{nb}{$d} ) {
                    my $o = $Games::RolePlay::MapGen::opp{$d};
                    my $r = $n->{nb}{$o} == $e;

                    # warn "$d:[$k,$v]-($j,$i)-($e->{x},$e->{y})-($n->{x},$n->{y})";

                    ok( $r );
                    ok( $n->{$k}, $v );

                } else {
                    ok(1);
                    ok(1);
                }
            }
        }
    }
}