blob: a38eff088544fd94858e25c0952f0665978567c4 [file] [log] [blame]
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -07001%%
2%% Licensed to the Apache Software Foundation (ASF) under one
3%% or more contributor license agreements. See the NOTICE file
4%% distributed with this work for additional information
5%% regarding copyright ownership. The ASF licenses this file
6%% to you under the Apache License, Version 2.0 (the
7%% "License"); you may not use this file except in compliance
8%% with the License. You may obtain a copy of the License at
9%%
10%% http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing,
13%% software distributed under the License is distributed on an
14%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15%% KIND, either express or implied. See the License for the
16%% specific language governing permissions and limitations
17%% under the License.
18%%
19
Jens Geyer6d15c302014-10-02 10:03:09 +020020-module(name_conflict_test).
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070021-compile(export_all).
22
23-include_lib("eunit/include/eunit.hrl").
24
Jens Geyer6d15c302014-10-02 10:03:09 +020025-include("name_conflict_test_constants.hrl").
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070026
27record_generation_test_() ->
28 [
29 {"using record", ?_assertMatch(
30 {using, _, _},
31 #using{single=null,integer=null}
32 )},
33 {"delegate record", ?_assertMatch(
34 {delegate, _, _},
35 #delegate{partial=null,delegate=null}
36 )},
37 {"get record", ?_assertMatch(
38 {get, _},
39 #get{sbyte=null}
40 )},
41 {"partial record", ?_assertMatch(
42 {partial, _},
43 #partial{using=null}
44 )},
45 {"ClassAndProp record", ?_assertMatch(
Jens Geyercc4ac492014-10-01 21:13:39 +020046 {'ClassAndProp', _, _, _, _},
47 #'ClassAndProp'{
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070048 'ClassAndProp'=null,
49 'ClassAndProp_'=null,
50 'ClassAndProp__'=null,
51 'ClassAndProper'=null
52 }
53 )},
54 {"second_chance record", ?_assertMatch(
55 {second_chance, _, _, _, _},
56 #second_chance{
57 'SECOND_CHANCE'=null,
58 'SECOND_CHANCE_'=null,
59 'SECOND_CHANCE__'=null,
60 'SECOND_CHANCES'=null
61 }
62 )},
63 {"NOW_EAT_THIS record", ?_assertMatch(
Jens Geyercc4ac492014-10-01 21:13:39 +020064 {'NOW_EAT_THIS', _, _, _, _},
65 #'NOW_EAT_THIS'{
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070066 now_eat_this=null,
67 now_eat_this_=null,
68 now_eat_this__=null,
69 now_eat_this_and_this=null
70 }
71 )},
72 {"TheEdgeCase record", ?_assertMatch(
Jens Geyercc4ac492014-10-01 21:13:39 +020073 {'TheEdgeCase', _, _, _, _, _, _},
74 #'TheEdgeCase'{
75 theEdgeCase=null,
76 theEdgeCase_=null,
77 theEdgeCase__=null,
78 'TheEdgeCase'=null,
79 'TheEdgeCase_'=null,
80 'TheEdgeCase__'=null
81 }
82 )},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070083 {"Tricky_ record", ?_assertMatch(
Jens Geyercc4ac492014-10-01 21:13:39 +020084 {'Tricky_', _, _},
85 #'Tricky_'{tricky=null,'Tricky'=null}
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070086 )},
87 {"Nested record", ?_assertMatch(
Jens Geyercc4ac492014-10-01 21:13:39 +020088 {'Nested', _, _, _, _, _, _},
89 #'Nested'{
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -070090 'ClassAndProp'=null,
91 second_chance=null,
92 'NOW_EAT_THIS'=null,
93 'TheEdgeCase'=null,
94 'Tricky_'=null,
95 'Nested'=null
96 }
97 )},
98 {"Problem_ record", ?_assertMatch(
Jens Geyercc4ac492014-10-01 21:13:39 +020099 {'Problem_', _, _},
100 #'Problem_'{problem=null,'Problem'=null}
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700101 )}
102 ].
103
104struct_info_test_() ->
105 [
106 {"using definition", ?_assertEqual(
107 {struct, [{1, double},{2, double}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200108 name_conflict_test_types:struct_info(using)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700109 )},
110 {"delegate definition", ?_assertEqual(
111 {struct, [
112 {1, string},
Jens Geyer6d15c302014-10-02 10:03:09 +0200113 {2, {struct, {name_conflict_test_types, delegate}}}
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700114 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200115 name_conflict_test_types:struct_info(delegate)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700116 )},
117 {"get definition", ?_assertEqual(
118 {struct, [{1, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200119 name_conflict_test_types:struct_info(get)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700120 )},
121 {"partial definition", ?_assertEqual(
Jens Geyer6d15c302014-10-02 10:03:09 +0200122 {struct, [{1, {struct, {name_conflict_test_types, using}}}]},
123 name_conflict_test_types:struct_info(partial)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700124 )},
125 {"ClassAndProp definition", ?_assertEqual(
126 {struct, [{1, bool},{2, bool},{3, bool},{4, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200127 name_conflict_test_types:struct_info('ClassAndProp')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700128 )},
129 {"second_chance definition", ?_assertEqual(
130 {struct, [{1, bool},{2, bool},{3, bool},{4, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200131 name_conflict_test_types:struct_info(second_chance)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700132 )},
133 {"NOW_EAT_THIS definition", ?_assertEqual(
134 {struct, [{1, bool},{2, bool},{3, bool},{4, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200135 name_conflict_test_types:struct_info('NOW_EAT_THIS')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700136 )},
137 {"TheEdgeCase definition", ?_assertEqual(
138 {struct, [{1, bool},{2, bool},{3, bool},{4, bool},{5, bool},{6, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200139 name_conflict_test_types:struct_info('TheEdgeCase')
Jens Geyercc4ac492014-10-01 21:13:39 +0200140 )},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700141 {"Tricky_ definition", ?_assertEqual(
142 {struct, [{1, bool},{2, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200143 name_conflict_test_types:struct_info('Tricky_')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700144 )},
145 {"Nested definition", ?_assertEqual(
146 {struct, [
Jens Geyer6d15c302014-10-02 10:03:09 +0200147 {1, {struct, {name_conflict_test_types, 'ClassAndProp'}}},
148 {2, {struct, {name_conflict_test_types, second_chance}}},
149 {3, {struct, {name_conflict_test_types, 'NOW_EAT_THIS'}}},
150 {4, {struct, {name_conflict_test_types, 'TheEdgeCase'}}},
151 {5, {struct, {name_conflict_test_types, 'Tricky_'}}},
152 {6, {struct, {name_conflict_test_types, 'Nested'}}}
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700153 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200154 name_conflict_test_types:struct_info('Nested')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700155 )},
156 {"Problem_ definition", ?_assertEqual(
157 {struct, [{1, bool},{2, bool}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200158 name_conflict_test_types:struct_info('Problem_')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700159 )},
160 {"using extended definition", ?_assertEqual(
161 {struct, [
162 {1, undefined, double, single, undefined},
163 {2, undefined, double, integer, undefined}
164 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200165 name_conflict_test_types:struct_info_ext(using)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700166 )},
167 {"delegate extended definition", ?_assertEqual(
168 {struct, [
169 {1, undefined, string, partial, undefined},
Jens Geyer6d15c302014-10-02 10:03:09 +0200170 {2, undefined, {struct, {name_conflict_test_types, delegate}}, delegate, undefined}
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700171 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200172 name_conflict_test_types:struct_info_ext(delegate)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700173 )},
174 {"get extended definition", ?_assertEqual(
175 {struct, [{1, undefined, bool, sbyte, undefined}]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200176 name_conflict_test_types:struct_info_ext(get)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700177 )},
178 {"partial extended definition", ?_assertEqual(
179 {struct, [
Jens Geyer6d15c302014-10-02 10:03:09 +0200180 {1, undefined, {struct, {name_conflict_test_types, using}}, using, #using{}}
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700181 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200182 name_conflict_test_types:struct_info_ext(partial)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700183 )},
184 {"ClassAndProp extended definition", ?_assertEqual(
185 {struct, [
186 {1, undefined, bool, 'ClassAndProp', undefined},
187 {2, undefined, bool, 'ClassAndProp_', undefined},
188 {3, undefined, bool, 'ClassAndProp__', undefined},
189 {4, undefined, bool, 'ClassAndProper', undefined}
190 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200191 name_conflict_test_types:struct_info_ext('ClassAndProp')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700192 )},
193 {"second_chance extended definition", ?_assertEqual(
194 {struct, [
195 {1, undefined, bool, 'SECOND_CHANCE', undefined},
196 {2, undefined, bool, 'SECOND_CHANCE_', undefined},
197 {3, undefined, bool, 'SECOND_CHANCE__', undefined},
198 {4, undefined, bool, 'SECOND_CHANCES', undefined}
199 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200200 name_conflict_test_types:struct_info_ext(second_chance)
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700201 )},
202 {"NOW_EAT_THIS extended definition", ?_assertEqual(
203 {struct, [
204 {1, undefined, bool, now_eat_this, undefined},
205 {2, undefined, bool, now_eat_this_, undefined},
206 {3, undefined, bool, now_eat_this__, undefined},
207 {4, undefined, bool, now_eat_this_and_this, undefined}
208 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200209 name_conflict_test_types:struct_info_ext('NOW_EAT_THIS')
Jens Geyercc4ac492014-10-01 21:13:39 +0200210 )},
211 {"TheEdgeCase extended definition", ?_assertEqual(
212 {struct, [
213 {1, undefined, bool, theEdgeCase, undefined},
214 {2, undefined, bool, theEdgeCase_, undefined},
215 {3, undefined, bool, theEdgeCase__, undefined},
216 {4, undefined, bool, 'TheEdgeCase', undefined},
217 {5, undefined, bool, 'TheEdgeCase_', undefined},
218 {6, undefined, bool, 'TheEdgeCase__', undefined}
219 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200220 name_conflict_test_types:struct_info_ext('TheEdgeCase')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700221 )},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700222 {"Tricky_ extended definition", ?_assertEqual(
223 {struct, [
224 {1, undefined, bool, tricky, undefined},
225 {2, undefined, bool, 'Tricky', undefined}
226 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200227 name_conflict_test_types:struct_info_ext('Tricky_')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700228 )},
229 {"Nested extended definition", ?_assertEqual(
230 {struct, [
231 {1, undefined, {struct, {
Jens Geyer6d15c302014-10-02 10:03:09 +0200232 name_conflict_test_types,
Jens Geyercc4ac492014-10-01 21:13:39 +0200233 'ClassAndProp'
234 }}, 'ClassAndProp', #'ClassAndProp'{}},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700235 {2, undefined, {struct, {
Jens Geyer6d15c302014-10-02 10:03:09 +0200236 name_conflict_test_types,
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700237 second_chance
238 }}, second_chance, #second_chance{}},
239 {3, undefined, {struct, {
Jens Geyer6d15c302014-10-02 10:03:09 +0200240 name_conflict_test_types,
Jens Geyercc4ac492014-10-01 21:13:39 +0200241 'NOW_EAT_THIS'
242 }}, 'NOW_EAT_THIS', #'NOW_EAT_THIS'{}},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700243 {4, undefined, {struct, {
Jens Geyer6d15c302014-10-02 10:03:09 +0200244 name_conflict_test_types,
Jens Geyercc4ac492014-10-01 21:13:39 +0200245 'TheEdgeCase'
246 }}, 'TheEdgeCase', #'TheEdgeCase'{}},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700247 {5, undefined, {struct, {
Jens Geyer6d15c302014-10-02 10:03:09 +0200248 name_conflict_test_types,
Jens Geyercc4ac492014-10-01 21:13:39 +0200249 'Tricky_'
250 }}, 'Tricky_', #'Tricky_'{}},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700251 {6, undefined, {struct, {
Jens Geyer6d15c302014-10-02 10:03:09 +0200252 name_conflict_test_types,
Jens Geyercc4ac492014-10-01 21:13:39 +0200253 'Nested'
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700254 }}, 'Nested', undefined}
255 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200256 name_conflict_test_types:struct_info_ext('Nested')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700257 )},
258 {"Problem_ extended definition", ?_assertEqual(
259 {struct, [
260 {1, undefined, bool, problem, undefined},
261 {2, undefined, bool, 'Problem', undefined}
262 ]},
Jens Geyer6d15c302014-10-02 10:03:09 +0200263 name_conflict_test_types:struct_info_ext('Problem_')
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700264 )}
265 ].
266
267service_info_test_() ->
268 [
269 {"event params", ?_assertEqual(
Jens Geyer6d15c302014-10-02 10:03:09 +0200270 {struct, [{1, {struct, {name_conflict_test_types, partial}}}]},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700271 extern_thrift:function_info(event, params_type)
272 )},
273 {"event reply", ?_assertEqual(
Jens Geyer6d15c302014-10-02 10:03:09 +0200274 {struct, {name_conflict_test_types, delegate}},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700275 extern_thrift:function_info(event, reply_type)
276 )},
277 {"event exceptions", ?_assertEqual(
278 {struct, []},
279 extern_thrift:function_info(event, exceptions)
280 )},
281 {"Foo params", ?_assertEqual(
Jens Geyer6d15c302014-10-02 10:03:09 +0200282 {struct, [{1, {struct, {name_conflict_test_types, 'Nested'}}}]},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700283 extern_thrift:function_info('Foo', params_type)
284 )},
285 {"Foo reply", ?_assertEqual(
286 {struct, []},
287 extern_thrift:function_info('Foo', reply_type)
288 )},
289 {"Foo exceptions", ?_assertEqual(
Jens Geyer6d15c302014-10-02 10:03:09 +0200290 {struct, [{1, {struct, {name_conflict_test_types, 'Problem_'}}}]},
alisdair sullivanfb6ed7e2014-07-22 23:40:44 -0700291 extern_thrift:function_info('Foo', exceptions)
292 )}
293 ].