The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl

# Copyright (c) 2015 Paulo Custodio. All Rights Reserved.
# May be used/distributed under the GPL.

use strict;
use warnings;
use Test::More;

my $ms;
use_ok 'Text::MacroScript';
require_ok 't/mytests.pl';

# API call
$ms = new_ok('Text::MacroScript');
is $ms->expand("#X"), "#X";
$ms->define_variable('X', 123);
is $ms->expand("#X"), "123";
$ms->undefine_variable('X');
is $ms->expand("#X"), "#X";
$ms->undefine_variable('X');
is $ms->expand("#X"), "#X";

$ms = new_ok('Text::MacroScript');
is $ms->expand("#X"), "#X";
$ms->define(-variable, 'X', 123);
is $ms->expand("#X"), "123";
$ms->undefine(-variable, 'X');
is $ms->expand("#X"), "#X";
$ms->undefine(-variable, 'X');
is $ms->expand("#X"), "#X";

# syntax errors
$ms = new_ok('Text::MacroScript');
eval {$ms->expand("%UNDEFINE_VARIABLE")};
is $@, "Error at file - line 1: Expected NAME\n";

$ms = new_ok('Text::MacroScript');
eval {$ms->expand("%UNDEFINE_VARIABLE", "file.asm", 10)};
is $@, "Error at file file.asm line 10: Expected NAME\n";

$ms = new_ok('Text::MacroScript');
eval { $ms->undefine(-xxx, "xxx") };
check_error(__LINE__-1, $@, "-xxx method not supported __LOC__.\n");

# define and undefine variable
is $ms->expand("#X"), "#X";
is $ms->expand("%UNDEFINE_VARIABLE X #X"), "#X";
is $ms->expand("#X"), "#X";
is $ms->expand("%UNDEFINE_VARIABLE X #X"), "#X";
is $ms->expand("#X"), "#X";
is $ms->expand("%DEFINE_VARIABLE X[123]#X"), "123";
is $ms->expand("%DEFINE_VARIABLE X[123]#X\\\n%UNDEFINE_VARIABLE X #X"), "123 #X";

done_testing;