Author: jelmer
Date: 2007-02-18 12:54:03 +0000 (Sun, 18 Feb 2007)
New Revision: 21427

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21427

Log:
Add tests for Needed*(), in preparation of refactoring.
Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
   branches/SAMBA_4_0/source/pidl/tests/samba-ndr.pl


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:merge
   - [EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]

   + [EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]


Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm  
2007-02-18 12:22:58 UTC (rev 21426)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm  
2007-02-18 12:54:03 UTC (rev 21427)
@@ -11,7 +11,8 @@
 @ISA = qw(Exporter);
 @EXPORT = qw(is_charset_array);
 @EXPORT_OK = qw(check_null_pointer GenerateFunctionInEnv 
-   GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv);
+   GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv NeededFunction
+   NeededElement NeededTypedef);
 
 use strict;
 use Parse::Pidl::Typelist qw(hasType getType mapType);
@@ -2483,6 +2484,14 @@
        return ($res_hdr, $res);
 }
 
+sub NeededElement($$$)
+{
+       my ($e, $dir, $needed) = @_;
+
+       return if (defined($needed->{"$dir\_$e->{TYPE}"}));
+       $needed->{"$dir\_$e->{TYPE}"} = 1;
+}
+
 sub NeededFunction($$)
 {
        my ($fn,$needed) = @_;
@@ -2491,15 +2500,7 @@
        $needed->{"print_$fn->{NAME}"} = 1;
        foreach my $e (@{$fn->{ELEMENTS}}) {
                $e->{PARENT} = $fn;
-               unless(defined($needed->{"pull_$e->{TYPE}"})) {
-                       $needed->{"pull_$e->{TYPE}"} = 1;
-               }
-               unless(defined($needed->{"push_$e->{TYPE}"})) {
-                       $needed->{"push_$e->{TYPE}"} = 1;
-               }
-               unless(defined($needed->{"print_$e->{TYPE}"})) {
-                       $needed->{"print_$e->{TYPE}"} = 1;
-               }
+               NeededElement($e, $_, $needed) foreach ("pull", "push", 
"print");
        }
 }
 
@@ -2522,18 +2523,9 @@
                        if (has_property($e, "compression")) { 
                                $needed->{"compression"} = 1;
                        }
-                       if ($needed->{"pull_$t->{NAME}"} and
-                               not defined($needed->{"pull_$e->{TYPE}"})) {
-                               $needed->{"pull_$e->{TYPE}"} = 1;
-                       }
-                       if ($needed->{"push_$t->{NAME}"} and
-                               not defined($needed->{"push_$e->{TYPE}"})) {
-                               $needed->{"push_$e->{TYPE}"} = 1;
-                       }
-                       if ($needed->{"print_$t->{NAME}"} and 
-                               not defined($needed->{"print_$e->{TYPE}"})) {
-                               $needed->{"print_$e->{TYPE}"} = 1;
-                       }
+                       NeededElement($e, "pull", $needed) if 
($needed->{"pull_$t->{NAME}"});
+                       NeededElement($e, "push", $needed) if 
($needed->{"push_$t->{NAME}"});
+                       NeededElement($e, "print", $needed) if 
($needed->{"print_$t->{NAME}"});
                }
        }
 }

Modified: branches/SAMBA_4_0/source/pidl/tests/samba-ndr.pl
===================================================================
--- branches/SAMBA_4_0/source/pidl/tests/samba-ndr.pl   2007-02-18 12:22:58 UTC 
(rev 21426)
+++ branches/SAMBA_4_0/source/pidl/tests/samba-ndr.pl   2007-02-18 12:54:03 UTC 
(rev 21427)
@@ -4,12 +4,14 @@
 use strict;
 use warnings;
 
-use Test::More tests => 20;
+use Test::More tests => 29;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
 use Parse::Pidl::Util qw(MyDumper);
-use Parse::Pidl::Samba4::NDR::Parser qw(check_null_pointer 
GenerateFunctionInEnv GenerateFunctionOutEnv GenerateStructEnv 
EnvSubstituteValue); 
+use Parse::Pidl::Samba4::NDR::Parser qw(check_null_pointer 
+       GenerateFunctionInEnv GenerateFunctionOutEnv GenerateStructEnv 
+       EnvSubstituteValue NeededFunction NeededElement NeededTypedef); 
 
 my $output;
 sub print_fn($) { my $x = shift; $output.=$x; }
@@ -172,3 +174,57 @@
 $env = GenerateStructEnv($fn);
 EnvSubstituteValue($env, $fn);
 is_deeply($env, { foo => 0, this => "r" });
+
+my $needed = {};
+NeededElement({ TYPE => "foo" }, "pull", $needed); 
+is_deeply($needed, { pull_foo => 1 });
+
+# old settings should be kept
+$needed = { pull_foo => 0 };
+NeededElement({ TYPE => "foo" }, "pull", $needed); 
+is_deeply($needed, { pull_foo => 0 });
+
+# print/pull/push are independent of each other
+$needed = { pull_foo => 0 };
+NeededElement({ TYPE => "foo" }, "print", $needed); 
+is_deeply($needed, { pull_foo => 0, print_foo => 1 });
+
+$needed = { };
+NeededFunction({ NAME => "foo", ELEMENTS => [ { TYPE => "bar" } ] }, $needed); 
+is_deeply($needed, { pull_foo => 1, print_foo => 1, push_foo => 1,
+                        pull_bar => 1, print_bar => 1, push_bar => 1});
+
+# push/pull/print are always set for functions
+$needed = { pull_foo => 0 };
+NeededFunction({ NAME => "foo", ELEMENTS => [ { TYPE => "bar" } ] }, $needed); 
+is_deeply($needed, { pull_foo => 1, print_foo => 1, push_foo => 1,
+                        pull_bar => 1, push_bar => 1, print_bar => 1});
+
+# public structs are always needed
+$needed = {};
+NeededTypedef({ NAME => "bla", DATA => { TYPE => "STRUCT", ELEMENTS => [] } },
+                         $needed);
+is_deeply($needed, { });
+
+$needed = {};
+NeededTypedef({ PROPERTIES => { public => 1 }, NAME => "bla", 
+                   DATA => { TYPE => "STRUCT", ELEMENTS => [] } },
+                         $needed);
+is_deeply($needed, { pull_bla => 1, print_bla => 1, push_bla => 1 });
+
+# make sure types for elements are set too
+$needed = {};
+NeededTypedef({ PROPERTIES => { public => 1 }, NAME => "bla", 
+                   DATA => { TYPE => "STRUCT", 
+                                                 ELEMENTS => [ { TYPE => "bar" 
} ] } },
+                         $needed);
+is_deeply($needed, { pull_bla => 1, print_bla => 1, push_bla => 1,
+                        pull_bar => 1, print_bar => 1, push_bar => 1});
+
+$needed = {};
+NeededTypedef({ PROPERTIES => { gensize => 1}, NAME => "bla", 
+                   DATA => { TYPE => "STRUCT", 
+                                                 ELEMENTS => [ { TYPE => "bar" 
} ] } },
+                         $needed);
+is_deeply($needed, { ndr_size_bla => 1 });
+                        

Reply via email to