The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Capture::Tiny 'capture';

use Set::FA::Element;

use Test::More;

# --------------------------------------

my($dfa) = Set::FA::Element -> new
(
	accepting	=> ['baz'],
	maxlevel	=> 'debug',
	start		=> 'foo',
	transitions	=>
	[
		['foo', 'b', 'bar'],
		['foo', '.', 'foo'],
		['bar', 'a', 'foo'],
		['bar', 'b', 'bar'],
		['bar', 'c', 'baz'],
		['baz', '.', 'baz'],
	],
);

my($expect) = <<EOS;
Entered report()
State Transition Table
State: bar
Rule => Next state
/a/ => foo
/b/ => bar
/c/ => baz
State: baz. This is an accepting state
Rule => Next state
/./ => baz
State: foo. This is the start state
Rule => Next state
/b/ => bar
/./ => foo
EOS
my(@expect)				= split(/\n/, $expect);
my($stdout, $stderr)	= capture{$dfa -> report};
my(@output)				= split(/\n/, $stdout);

ok($output[5] eq $expect[5], 'Reports as expected');

done_testing;