#!/usr/bin/perl -w use Test::More; use strict; BEGIN { plan tests => 83; chdir 't' if -d 't'; use lib '../lib'; use_ok ("Graph::Easy::Parser") or die($@); }; can_ok ("Graph::Easy::Parser", qw/ new from_text from_file reset error _match_edge _match_node _match_attributes _match_optional_attributes /); ############################################################################# # create parser object my $parser = Graph::Easy::Parser->new(); is (ref($parser), 'Graph::Easy::Parser'); is ($parser->error(), '', 'no error yet'); my $line = 0; my $qr_edge = $parser->_match_edge(); my $qr_node = $parser->_match_node(); my $qr_oatr = $parser->_match_optional_attributes(); #my $r = '-- Label --> [ AA ]'; #$r = '--> [ AB ]'; #$r = '<--> [ AB ]'; #$r = '<- Label -> [ AB ]'; #$r = '--> { color: red; } [ AB ]'; foreach my $l () { chomp ($l); next if $l =~ /^\s*\z/; # skip empty ones next if $l =~ /^#/; # skip comments my ($in,$type,$style,$label) = split /\|/, $l; if ($type < 0) { if (!unlike ($in, qr/^$qr_edge\z/, "$in")) { $in =~ /^$qr_edge/; diag ("# '$1' '$2' '$3' '$4' '$5' '$6'\n"); } next; } # XXX TODO check edge style and type: # 0 - undirected # 2 - right # 3 - left and right like ($in, qr/^$qr_edge\z/, "$in"); # $in =~ /^$qr_edge\z/; # diag("# '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'\n"); } __DATA__ # edges without arrows --|0|-- ==|0|== ..|0|.. - |-1| - - - |0| - ---|0|-- ===|0|== ...|0|.. - - |0| - ----|0|-- ====|0|== ....|0|.. <->|3|-- <=>|3|== <.>|3|.. <- >|3| - <-->|3|-- <==>|3|== <..>|3|.. <- - >|3| - <--->|3|-- <===>|3|== <...>|3|.. <- - >|3| - ->|2|-- =>|2|== .>|2|.. - >|2| - -->|2|-- ==>|2|== ..>|2|.. ~~>|2|~~ = >|2|= - - >|2| - --->|2|-- ===>|2|== ...>|2|.. - - >|2| - # with labels <- ->|3| - - Landstrasse --|-1|-- == Autobahn ==>|2|== .. Im Bau ..>|2|.. - Tunnel - >|2| - = label =>|2|==|label <-- Landstrasse -->|3|-- <== Autobahn ==>|3|== <.. Im Bau ..>|3|.. <- Tunnel - >|3| - <- Tunnel -->|-1| <-- Tunnel -->|3| <-- Landstrasse -->|3|-- <~~ Landstrasse ~~>|3|~~ <== Landstrasse ==>|3|== <.- Landstrasse .->|3|.- <..- Landstrasse ..->|3|..- -- Landstrasse -->|2|-- ~~ Landstrasse ~~>|2|~~ == Landstrasse ==>|2|== .- Landstrasse .->|2|.- ..- Landstrasse ..->|2|..- ################## # Failures # no left-only edges allowed <-|-1|-- <=|-1|== <.|-1|.. <- |-1| - <--|-1|-- <==|-1|== <..|-1|.. <- -|-1| - <-- Landstrasse -|-1| <== Autobahn =|-1| <.. Im Bau .|-1| <- - Tunnel -|-1| <--|-1| # mismatching pattern <-- Landstrasse ==>|-1| # double "<<" or ">>" are not good <<--|-1| <<--|-1| <<-->>|-1| <<. -.->>|-1| < - Tunnel - >|-1|