r6856: Add a couple of tests that test for the behaviour described in
[samba.git] / source / build / pidl / test.pm
1 # Simple system for running tests against pidl
2 # (C) 2005 Jelmer Vernooij <jelmer@samba.org>
3 # Published under the GNU General Public License
4
5 package Test;
6
7 use strict;
8 use util;
9
10 my $idl_path = "./build/pidl/pidl.pl";
11
12 sub generate_cfile($$$)
13 {
14         my ($filename, $fragment, $incfiles) = @_;
15
16         unless (open (OUT, ">$filename")) {
17                 print STDERR "Unable to open $filename\n";
18                 return -1;
19         }
20         print OUT '
21 /* This file was autogenerated. All changes made will be lost! */
22 #include "include/includes.h"
23 ';
24
25         foreach (@$incfiles) {
26                 print OUT "#include \"$_\"\n";
27         }
28
29         print OUT '
30 int main(int argc, char **argv)
31 {
32         TALLOC_CTX *mem_ctx = talloc_init(NULL);
33         int ndr_flags = 0;
34         ';
35         print OUT $fragment;
36         print OUT "\treturn 0;\n}\n";
37         close OUT;
38
39         return 0;
40 }
41
42 sub generate_idlfile($$)
43 {
44         my ($filename,$fragment) = @_;
45
46         unless (open(OUT, ">$filename")) {
47                 print STDERR "Unable to open $filename\n";
48                 return -1;
49         }
50         
51         print OUT '
52 [uuid("1-2-3-4-5")] interface test_if
53 {
54 ';
55         print OUT $fragment;
56         print OUT "\n}\n";
57         close OUT;
58
59         return 0;
60 }
61
62 sub compile_idl($$)
63 {
64         my ($filename,$idlargs) = @_;
65
66         my @args = @$idlargs;
67         push (@args, $filename);
68
69         unless (system($idl_path, @args) == 0) {
70                 print STDERR "Error compiling IDL file $filename: $!\n";
71                 return -1;
72         }
73 }
74
75 sub compile_cfile($)
76 {
77         my ($filename) = @_;
78
79         print "Compiling C file $filename\n";
80
81         return system("cc", '-I.', '-Iinclude', '-c', $filename);
82 }
83
84 sub link_files($$)
85 {
86         my ($exe_name,$objs) = @_;
87
88         return system("cc", '-I.', '-Iinclude', '-Lbin', '-lrpc', '-o', $exe_name, @$objs);
89 }
90
91 sub test_idl($$$$)
92 {
93         my ($name,$settings,$idl,$c) = @_;
94
95         $| = 1;
96
97         print "Running test $name... ";
98
99         my $c_filename = $name."_test.c";
100         my $idl_filename = $name."_idl.idl";
101         my $exe_filename = $name."_exe";
102
103         return -1 if (generate_cfile($c_filename, $c, $settings->{IncludeFiles}) == -1);
104
105         return -1 if (generate_idlfile($idl_filename, $idl) == -1);
106
107         return -1 if (compile_idl($idl_filename, $settings->{'IDL-Arguments'}) == -1);
108
109         my @srcs = ($c_filename);
110         push (@srcs, @{$settings->{'ExtraFiles'}});
111
112 #       foreach (@srcs) {
113 #               return -1 if (compile_cfile($_) == -1);
114 #       }
115
116         return -1 if (link_files($exe_filename, \@srcs) == -1);
117
118         my $ret = system("./$exe_filename");
119         if ($ret != 0) {
120                 print STDERR "$name failed with return value $ret\n";
121                 return $ret;
122         }
123
124         print "Ok\n";
125
126         return $ret;
127 }
128
129 1;