Author: jelmer Date: 2007-01-09 15:50:36 +0000 (Tue, 09 Jan 2007) New Revision: 20631
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20631 Log: Add some tests for the ndr parser. Added: branches/SAMBA_4_0/source/pidl/tests/ndr.pl Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Util.pm Changeset: Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm =================================================================== --- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm 2007-01-09 13:24:33 UTC (rev 20630) +++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm 2007-01-09 15:50:36 UTC (rev 20631) @@ -35,6 +35,7 @@ $VERSION = '0.01'; @ISA = qw(Exporter); @EXPORT = qw(GetPrevLevel GetNextLevel ContainsDeferred ContainsString); [EMAIL PROTECTED] = qw(GetElementLevelTable ParseElement); use strict; use Parse::Pidl qw(warning fatal); @@ -837,7 +838,7 @@ return unless defined $e->{PROPERTIES}; foreach my $key (keys %{$e->{PROPERTIES}}) { - fatal($e, el_name($e) . ": unknown property '$key'") + warning($e, el_name($e) . ": unknown property '$key'") unless defined($property_list{$key}); fatal($e, el_name($e) . ": property '$key' not allowed on '$t'") Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Util.pm =================================================================== --- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Util.pm 2007-01-09 13:24:33 UTC (rev 20630) +++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Util.pm 2007-01-09 15:50:36 UTC (rev 20631) @@ -6,7 +6,7 @@ require Exporter; @ISA = qw(Exporter); [EMAIL PROTECTED] = qw(has_property property_matches ParseExpr is_constant make_str print_uuid); [EMAIL PROTECTED] = qw(has_property property_matches ParseExpr is_constant make_str print_uuid MyDumper); use vars qw($VERSION); $VERSION = '0.01'; Added: branches/SAMBA_4_0/source/pidl/tests/ndr.pl =================================================================== --- branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-01-09 13:24:33 UTC (rev 20630) +++ branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-01-09 15:50:36 UTC (rev 20631) @@ -0,0 +1,154 @@ +#!/usr/bin/perl +# (C) 2007 Jelmer Vernooij <[EMAIL PROTECTED]> +# Published under the GNU General Public License +use strict; +use warnings; + +use Test::More tests => 9; +use FindBin qw($RealBin); +use lib "$RealBin"; +use Util; +use Parse::Pidl::Util qw(MyDumper); +use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement); + +# Case 1 + +my $e = { + 'FILE' => 'foo.idl', + 'NAME' => 'v', + 'PROPERTIES' => {}, + 'POINTERS' => 0, + 'TYPE' => 'uint8', + 'LINE' => 42 }; + +is_deeply(GetElementLevelTable($e), [ + { + 'IS_DEFERRED' => 0, + 'LEVEL_INDEX' => 0, + 'DATA_TYPE' => 'uint8', + 'CONVERT_FROM' => undef, + 'CONTAINS_DEFERRED' => 0, + 'TYPE' => 'DATA', + 'IS_SURROUNDING' => 0, + 'CONVERT_TO' => undef + } +]); + +my $ne = ParseElement($e); +is($ne->{ORIGINAL}, $e); +is($ne->{NAME}, "v"); +is($ne->{ALIGN}, 1); +is($ne->{TYPE}, "uint8"); +is_deeply($ne->{LEVELS}, [ + { + 'IS_DEFERRED' => 0, + 'LEVEL_INDEX' => 0, + 'DATA_TYPE' => 'uint8', + 'CONVERT_FROM' => undef, + 'CONTAINS_DEFERRED' => 0, + 'TYPE' => 'DATA', + 'IS_SURROUNDING' => 0, + 'CONVERT_TO' => undef + } +]); + +# Case 2 : pointers +# +$e = { + 'FILE' => 'foo.idl', + 'NAME' => 'v', + 'PROPERTIES' => {}, + 'POINTERS' => 1, + 'TYPE' => 'uint8', + 'LINE' => 42 }; + +is_deeply(GetElementLevelTable($e), [ + { + LEVEL_INDEX => 0, + IS_DEFERRED => 0, + TYPE => 'POINTER', + POINTER_TYPE => undef, + POINTER_INDEX => 0, + LEVEL => 'EMBEDDED' + }, + { + 'IS_DEFERRED' => 1, + 'LEVEL_INDEX' => 1, + 'DATA_TYPE' => 'uint8', + 'CONVERT_FROM' => undef, + 'CONTAINS_DEFERRED' => 0, + 'TYPE' => 'DATA', + 'IS_SURROUNDING' => 0, + 'CONVERT_TO' => undef + } +]); + +# Case 3 : double pointers +# +$e = { + 'FILE' => 'foo.idl', + 'NAME' => 'v', + 'PROPERTIES' => {}, + 'POINTERS' => 2, + 'TYPE' => 'uint8', + 'LINE' => 42 }; + +is_deeply(GetElementLevelTable($e), [ + { + LEVEL_INDEX => 0, + IS_DEFERRED => 0, + TYPE => 'POINTER', + POINTER_TYPE => undef, + POINTER_INDEX => 0, + LEVEL => 'EMBEDDED' + }, + { + LEVEL_INDEX => 1, + IS_DEFERRED => 1, + TYPE => 'POINTER', + POINTER_TYPE => undef, + POINTER_INDEX => 1, + LEVEL => 'EMBEDDED' + }, + { + 'IS_DEFERRED' => 1, + 'LEVEL_INDEX' => 2, + 'DATA_TYPE' => 'uint8', + 'CONVERT_FROM' => undef, + 'CONTAINS_DEFERRED' => 0, + 'TYPE' => 'DATA', + 'IS_SURROUNDING' => 0, + 'CONVERT_TO' => undef + } +]); + +# Case 2 : ref pointers +# +$e = { + 'FILE' => 'foo.idl', + 'NAME' => 'v', + 'PROPERTIES' => {"ref" => 1}, + 'POINTERS' => 1, + 'TYPE' => 'uint8', + 'LINE' => 42 }; + +is_deeply(GetElementLevelTable($e), [ + { + LEVEL_INDEX => 0, + IS_DEFERRED => 0, + TYPE => 'POINTER', + POINTER_TYPE => "ref", + POINTER_INDEX => 0, + LEVEL => 'EMBEDDED' + }, + { + 'IS_DEFERRED' => 1, + 'LEVEL_INDEX' => 1, + 'DATA_TYPE' => 'uint8', + 'CONVERT_FROM' => undef, + 'CONTAINS_DEFERRED' => 0, + 'TYPE' => 'DATA', + 'IS_SURROUNDING' => 0, + 'CONVERT_TO' => undef + } +]); Property changes on: branches/SAMBA_4_0/source/pidl/tests/ndr.pl ___________________________________________________________________ Name: svn:executable + *