#!perl # $Id$ use strict; use warnings; use Test::More tests => 29; use_ok 'CPU::Z80::Assembler::Program'; use_ok 'Asm::Preproc::Line'; require_ok 't/test_utils.pl'; isa_ok my $program = CPU::Z80::Assembler::Program->new(), 'CPU::Z80::Assembler::Program'; isa_ok my $line1 = Asm::Preproc::Line->new("s1:\n", "f.asm", 1), 'Asm::Preproc::Line'; $program->add_label("s1", $line1); isa_ok $program->symbols->{s1}, 'CPU::Z80::Assembler::Opcode'; is $program->symbols->{s1}->line->text, "s1:\n", "text"; is $program->symbols->{s1}->line->line_nr, 1, "line_nr"; is $program->symbols->{s1}->line->file, "f.asm", "file"; $program->add_opcodes(opcodes('A', 2)); isa_ok my $line5a = Asm::Preproc::Line->new("s1:\n", "f.asm", 5), 'Asm::Preproc::Line'; eval {$program->add_label("s1", $line5a)}; is $@, "f.asm(5) : error: duplicate label definition\n", "duplicate label"; isa_ok my $line5b = Asm::Preproc::Line->new("s5:\n", "f.asm", 5), 'Asm::Preproc::Line'; $program->add_label("s5", $line5b); isa_ok $program->symbols->{s5}, 'CPU::Z80::Assembler::Opcode'; is $program->symbols->{s5}->line->text, "s5:\n", "text"; is $program->symbols->{s5}->line->line_nr, 5, "line_nr"; is $program->symbols->{s5}->line->file, "f.asm", "file"; is $program->bytes, "ABC", "bytes"; is $program->symbols->{s1}->evaluate, 0, "label value"; is $program->symbols->{s5}->evaluate, 3, "label value";