Вкусности Perl 6.

Jun 13, 2010 21:52

Ну даже в урезаном варианте NQP.


Пишу я тут компайлер PIR'а на NQP. Пока больше для развлечения. И захотелось мне данные для тестов держать в отдельных файлах. В виде:

# TEST Some test
.sub foo
.end

# TEST Another test
.sub bar
...
.end

Сначала хотел писать построчную читалку, fsm ручками и всё такое. Но потом до меня дошло, что всё это нафиг не нужно. В итоге родил такой код:

grammar TestDataGrammar {
rule TOP {
+
$ || <.panic: "Can't parse test data">
};

token testcase {
\n

}

token start { ^^ '# TEST ' }
token name { \N+ }
token body { + }
token line { > .*? \n }
};

our sub parse_tests($file)
{
pir::load_bytecode('nqp-setting.pbc');
my $data := slurp($file);
my $match := TestDataGrammar.parse($data);
$match;
}

Красота да и только!

А потом совсем обленился и написал такую функцию:

our sub run_tests_from_datafile($file)
{
my $c := pir::compreg__Ps('PIRATE');
my $tests := parse_tests($file);

for $tests -> $t {
ok(parse($c, $t), $t);
}

done_testing();
}

Теперь содержимое самого теста состоит из 2-х строчек :)

Update: поправил разметку

parrot, perl, tech

Previous post Next post
Up