r21428: Handle representation types in Needed().
[Samba/ekacnet.git] / source / pidl / tests / ndr.pl
blobbaf06b1eae5ba34529e0d7e85d40c755b2065efc
1 #!/usr/bin/perl
2 # (C) 2007 Jelmer Vernooij <jelmer@samba.org>
3 # Published under the GNU General Public License
4 use strict;
5 use warnings;
7 use Test::More tests => 12;
8 use FindBin qw($RealBin);
9 use lib "$RealBin";
10 use Util;
11 use Parse::Pidl::Util qw(MyDumper);
12 use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement);
14 # Case 1
16 my $e = {
17 'FILE' => 'foo.idl',
18 'NAME' => 'v',
19 'PROPERTIES' => {},
20 'POINTERS' => 0,
21 'TYPE' => 'uint8',
22 'PARENT' => { TYPE => 'STRUCT' },
23 'LINE' => 42 };
25 is_deeply(GetElementLevelTable($e), [
27 'IS_DEFERRED' => 0,
28 'LEVEL_INDEX' => 0,
29 'DATA_TYPE' => 'uint8',
30 'CONVERT_FROM' => undef,
31 'CONTAINS_DEFERRED' => 0,
32 'TYPE' => 'DATA',
33 'IS_SURROUNDING' => 0,
34 'CONVERT_TO' => undef
36 ]);
38 my $ne = ParseElement($e);
39 is($ne->{ORIGINAL}, $e);
40 is($ne->{NAME}, "v");
41 is($ne->{ALIGN}, 1);
42 is($ne->{TYPE}, "uint8");
43 is_deeply($ne->{LEVELS}, [
45 'IS_DEFERRED' => 0,
46 'LEVEL_INDEX' => 0,
47 'DATA_TYPE' => 'uint8',
48 'CONVERT_FROM' => undef,
49 'CONTAINS_DEFERRED' => 0,
50 'TYPE' => 'DATA',
51 'IS_SURROUNDING' => 0,
52 'CONVERT_TO' => undef
54 ]);
56 # Case 2 : pointers
58 $e = {
59 'FILE' => 'foo.idl',
60 'NAME' => 'v',
61 'PROPERTIES' => {"unique" => 1},
62 'POINTERS' => 1,
63 'PARENT' => { TYPE => 'STRUCT' },
64 'TYPE' => 'uint8',
65 'LINE' => 42 };
67 is_deeply(GetElementLevelTable($e), [
69 LEVEL_INDEX => 0,
70 IS_DEFERRED => 0,
71 TYPE => 'POINTER',
72 POINTER_TYPE => "unique",
73 POINTER_INDEX => 0,
74 LEVEL => 'EMBEDDED'
77 'IS_DEFERRED' => 1,
78 'LEVEL_INDEX' => 1,
79 'DATA_TYPE' => 'uint8',
80 'CONVERT_FROM' => undef,
81 'CONTAINS_DEFERRED' => 0,
82 'TYPE' => 'DATA',
83 'IS_SURROUNDING' => 0,
84 'CONVERT_TO' => undef
86 ]);
88 # Case 3 : double pointers
90 $e = {
91 'FILE' => 'foo.idl',
92 'NAME' => 'v',
93 'PROPERTIES' => {"unique" => 1},
94 'POINTERS' => 2,
95 'TYPE' => 'uint8',
96 'PARENT' => { TYPE => 'STRUCT' },
97 'LINE' => 42 };
99 is_deeply(GetElementLevelTable($e), [
101 LEVEL_INDEX => 0,
102 IS_DEFERRED => 0,
103 TYPE => 'POINTER',
104 POINTER_TYPE => "unique",
105 POINTER_INDEX => 0,
106 LEVEL => 'EMBEDDED'
109 LEVEL_INDEX => 1,
110 IS_DEFERRED => 1,
111 TYPE => 'POINTER',
112 POINTER_TYPE => "unique",
113 POINTER_INDEX => 1,
114 LEVEL => 'EMBEDDED'
117 'IS_DEFERRED' => 1,
118 'LEVEL_INDEX' => 2,
119 'DATA_TYPE' => 'uint8',
120 'CONVERT_FROM' => undef,
121 'CONTAINS_DEFERRED' => 0,
122 'TYPE' => 'DATA',
123 'IS_SURROUNDING' => 0,
124 'CONVERT_TO' => undef
128 # Case 3 : ref pointers
130 $e = {
131 'FILE' => 'foo.idl',
132 'NAME' => 'v',
133 'PROPERTIES' => {"ref" => 1},
134 'POINTERS' => 1,
135 'TYPE' => 'uint8',
136 'PARENT' => { TYPE => 'STRUCT' },
137 'LINE' => 42 };
139 is_deeply(GetElementLevelTable($e), [
141 LEVEL_INDEX => 0,
142 IS_DEFERRED => 0,
143 TYPE => 'POINTER',
144 POINTER_TYPE => "ref",
145 POINTER_INDEX => 0,
146 LEVEL => 'EMBEDDED'
149 'IS_DEFERRED' => 1,
150 'LEVEL_INDEX' => 1,
151 'DATA_TYPE' => 'uint8',
152 'CONVERT_FROM' => undef,
153 'CONTAINS_DEFERRED' => 0,
154 'TYPE' => 'DATA',
155 'IS_SURROUNDING' => 0,
156 'CONVERT_TO' => undef
161 # Case 4 : top-level ref pointers
163 $e = {
164 'FILE' => 'foo.idl',
165 'NAME' => 'v',
166 'PROPERTIES' => {"ref" => 1},
167 'POINTERS' => 1,
168 'TYPE' => 'uint8',
169 'PARENT' => { TYPE => 'FUNCTION' },
170 'LINE' => 42 };
172 is_deeply(GetElementLevelTable($e), [
174 LEVEL_INDEX => 0,
175 IS_DEFERRED => 0,
176 TYPE => 'POINTER',
177 POINTER_TYPE => "ref",
178 POINTER_INDEX => 0,
179 LEVEL => 'TOP'
182 'IS_DEFERRED' => 0,
183 'LEVEL_INDEX' => 1,
184 'DATA_TYPE' => 'uint8',
185 'CONVERT_FROM' => undef,
186 'CONTAINS_DEFERRED' => 0,
187 'TYPE' => 'DATA',
188 'IS_SURROUNDING' => 0,
189 'CONVERT_TO' => undef
193 # representation_type
194 $e = {
195 'FILE' => 'foo.idl',
196 'NAME' => 'v',
197 'PROPERTIES' => { represent_as => "bar" },
198 'POINTERS' => 0,
199 'TYPE' => 'uint8',
200 'PARENT' => { TYPE => 'STRUCT' },
201 'LINE' => 42 };
203 $ne = ParseElement($e);
204 is($ne->{REPRESENTATION_TYPE}, "bar");
206 # representation_type
207 $e = {
208 'FILE' => 'foo.idl',
209 'NAME' => 'v',
210 'PROPERTIES' => { },
211 'POINTERS' => 0,
212 'TYPE' => 'uint8',
213 'PARENT' => { TYPE => 'STRUCT' },
214 'LINE' => 42 };
216 $ne = ParseElement($e);
217 is($ne->{REPRESENTATION_TYPE}, "uint8");