#!perl
# $Id$
use strict;
use warnings;
use Test::More tests => 30;
use_ok 'CPU::Z80::Assembler';
use_ok 'CPU::Z80::Assembler::Segment';
use_ok 'CPU::Z80::Assembler::Expr';
use_ok 'CPU::Z80::Assembler::Opcode';
use_ok 'Asm::Preproc::Line';
our $stream;
my %symbols = ( va => 51 );
isa_ok my $expr = CPU::Z80::Assembler::Expr->new(type => "w"),
'CPU::Z80::Assembler::Expr';
$stream = z80lexer('$+va');
ok $stream = $expr->parse($stream), "parse expr";
is $expr->evaluate(10,\%symbols), 10+51, "eval expr";
isa_ok my $line1 = Asm::Preproc::Line->new("line 1\n", "f.asm", 1),
'Asm::Preproc::Line';
isa_ok my $line2 = Asm::Preproc::Line->new("line 2\n", "f.asm", 2),
'Asm::Preproc::Line';
isa_ok my $line3 = Asm::Preproc::Line->new("line 3\n", "f.asm", 3),
'Asm::Preproc::Line';
isa_ok my $segment = CPU::Z80::Assembler::Segment->new(name => "CODE"),
'CPU::Z80::Assembler::Segment';
is $segment->name, "CODE", "name";
is $segment->address, undef, "address";
is $segment->line->text, undef, "line text";
is $segment->line->line_nr,undef, "line line_nr";
is $segment->line->file, undef, "line file";
is_deeply $segment->child, [], "no children";
my @opcodes;
$segment->add(@opcodes);
is $segment->name, "CODE", "name";
is $segment->address, undef, "address";
is $segment->line->text, undef, "line text";
is $segment->line->line_nr,undef, "line line_nr";
is $segment->line->file, undef, "line file";
is_deeply $segment->child, [], "no children";
@opcodes = (
CPU::Z80::Assembler::Opcode->new(child => [1,2,3], line => $line1 ),
CPU::Z80::Assembler::Opcode->new(child => [4,$expr,undef], line => $line2 ),
CPU::Z80::Assembler::Opcode->new(child => [5,6,7], line => $line3 ),
);
$segment->add(@opcodes);
is $segment->name, "CODE", "name";
is $segment->address, undef, "address";
is $segment->line->text, $line1->text, "line text";
is $segment->line->line_nr,$line1->line_nr,"line line_nr";
is $segment->line->file, $line1->file, "line file";
is_deeply $segment->child, \@opcodes, "children";