The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
#!perl

# $Id$

use strict;
use warnings;

use CPU::Z80::Assembler;
use Test::More tests => 12;
use File::Slurp;
use File::Spec;

my $infile =  		't/data/list.asm';
my $bmkoutfile = 	't/data/list.hex';
my $bmklstfile = 	't/data/list.lst';
my $outfile = 		't/list.o';
my $lstfile = 		't/list.lst';

	unlink $outfile, $lstfile;
	for ($infile, $bmkoutfile, $bmklstfile) {
		ok	-f $_, "$_ exists";
	}
	for ($outfile, $lstfile) {
		ok	! -f $_, "$_ should not exist";
	}
	
is	system($^X." -I".File::Spec->catfile("blib", "lib")." ". 
			         File::Spec->catfile("blib", "script", "z80masm")." ".
			         $infile." ".
			         $outfile." > ".$lstfile), 0, 
	"bin/z80masm $infile $outfile > $lstfile";

	for ($outfile, $lstfile) {
		ok	-f $_, "$_ exists";
	}

	# insert version number in lst file as variable
	# handle \r 
	my $lst = read_file($lstfile);
	$lst =~ s/\A([^\n]*v)$CPU::Z80::Assembler::VERSION/$1\$CPU::Z80::Assembler::VERSION/;
	$lst =~ s/\r//g;
	write_file($lstfile, $lst);
	
	my $bmklst = read_file($bmklstfile);
	$bmklst =~ s/\r//g;
	
	my $lst_ok = $lst eq $bmklst;
ok 	$lst_ok, "files equal : $bmklstfile $lstfile";

	my $out_hex = join(' ', map { sprintf("%02X", ord($_)) } split(//, 
												read_file($outfile, binmode => ':raw')));
	my $bmk_hex = read_file($bmkoutfile); 
	for ($bmk_hex) {
		s/\s+/ /g;
		s/^\s+//;
		s/\s+$//g;
	}

	my $obj_ok = $out_hex eq $bmk_hex;
is 	$out_hex, $bmk_hex, "$outfile OK";

	unlink $outfile, $lstfile if ($lst_ok && $obj_ok);
	for ($outfile, $lstfile) {
		ok	! -f $_, "$_ should not exist";
	}