1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% 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, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20%%
21%%-----------------------------------------------------------------
22%%
23%% Description:
24%% Test suite for the Names Library module
25%%
26%%-----------------------------------------------------------------
27-module(lname_SUITE).
28
29-include_lib("common_test/include/ct.hrl").
30-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
31-include_lib("orber/COSS/CosNaming/lname.hrl").
32
33-define(default_timeout, test_server:minutes(3)).
34
35%%-----------------------------------------------------------------
36%% External exports
37%%-----------------------------------------------------------------
38-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
39	 init_per_group/2,end_per_group/2]).
40
41%%-----------------------------------------------------------------
42%% Internal exports
43%%-----------------------------------------------------------------
44-export([]).
45-compile(export_all).
46
47%%-----------------------------------------------------------------
48%% Func: all/1
49%% Args:
50%% Returns:
51%%-----------------------------------------------------------------
52suite() -> [{ct_hooks,[ts_install_cth]}].
53
54all() ->
55    [lname_component, lname].
56
57groups() ->
58    [].
59
60init_per_suite(Config) ->
61    Config.
62
63end_per_suite(_Config) ->
64    ok.
65
66init_per_group(_GroupName, Config) ->
67    Config.
68
69end_per_group(_GroupName, Config) ->
70    Config.
71
72
73%%-----------------------------------------------------------------
74%% Init and cleanup functions.
75%%-----------------------------------------------------------------
76
77init_per_testcase(_Case, Config) ->
78    Dog=test_server:timetrap(?default_timeout),
79    [{watchdog, Dog}|Config].
80
81
82end_per_testcase(_Case, Config) ->
83    Dog = proplists:get_value(watchdog, Config),
84    test_server:timetrap_cancel(Dog),
85    ok.
86
87
88%%-----------------------------------------------------------------
89%% Test Case: name component handling tests
90%% Description:
91%%-----------------------------------------------------------------
92lname_component(_) ->
93    create_test(),
94    get_tests(),
95    set_tests().
96
97create_test() ->
98    #'CosNaming_NameComponent'{} = lname_component:create(),
99    ok.
100
101get_tests() ->
102    NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
103    NC1 = #'CosNaming_NameComponent'{id="", kind="apple"},
104    NC2 = #'CosNaming_NameComponent'{id="first", kind=""},
105    "first" = lname_component:get_id(NC),
106    "apple" = lname_component:get_kind(NC),
107    {'EXCEPTION', #'LNameComponent_NotSet'{}} =
108	(catch lname_component:get_id(NC1)),
109    {'EXCEPTION', #'LNameComponent_NotSet'{}} =
110	(catch  lname_component:get_kind(NC2)),
111    ok.
112
113set_tests() ->
114    NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
115    #'CosNaming_NameComponent'{id="second", kind="apple"} =
116	lname_component:set_id(NC, "second"),
117    #'CosNaming_NameComponent'{id="first", kind="pear"} =
118	lname_component:set_kind(NC, "pear"),
119    ok.
120
121%%-----------------------------------------------------------------
122%% Test Case: name handling tests
123%% Description:
124%%-----------------------------------------------------------------
125lname(_) ->
126    Name = [#'CosNaming_NameComponent'{id="first", kind="apple"},
127	    #'CosNaming_NameComponent'{id="last", kind="peach"},
128	    #'CosNaming_NameComponent'{id="and", kind="plum"},
129	    #'CosNaming_NameComponent'{id="always", kind="orange"}],
130    insert_tests(Name),
131    get_tests(Name),
132    delete_tests(Name),
133    comparision_tests(Name),
134    convertion_tests(Name).
135
136insert_tests(Name) ->
137    NC = #'CosNaming_NameComponent'{id="new", kind="pear"},
138    [NC, #'CosNaming_NameComponent'{id="first", kind="apple"},
139	   #'CosNaming_NameComponent'{id="last", kind="peach"},
140	   #'CosNaming_NameComponent'{id="and", kind="plum"},
141	   #'CosNaming_NameComponent'{id="always", kind="orange"}] =
142	lname:insert_component(Name, 1, NC),
143    [#'CosNaming_NameComponent'{id="first", kind="apple"},
144	   #'CosNaming_NameComponent'{id="last", kind="peach"},
145	   #'CosNaming_NameComponent'{id="and", kind="plum"},
146	   #'CosNaming_NameComponent'{id="always", kind="orange"}, NC] =
147	lname:insert_component(Name, 5, NC),
148    [#'CosNaming_NameComponent'{id="first", kind="apple"},
149	   #'CosNaming_NameComponent'{id="last", kind="peach"},
150	   #'CosNaming_NameComponent'{id="and", kind="plum"}, NC,
151	   #'CosNaming_NameComponent'{id="always", kind="orange"}] =
152	lname:insert_component(Name, 4, NC),
153    [#'CosNaming_NameComponent'{id="first", kind="apple"},
154	   #'CosNaming_NameComponent'{id="last", kind="peach"}, NC,
155	   #'CosNaming_NameComponent'{id="and", kind="plum"},
156	   #'CosNaming_NameComponent'{id="always", kind="orange"}] =
157	lname:insert_component(Name, 3, NC),
158    {'EXCEPTION', #'LName_NoComponent'{}} =
159	(catch lname:insert_component(Name, 6, NC)),
160    {'EXCEPTION', #'LName_NoComponent'{}} =
161	(catch lname:insert_component(Name, 0, NC)),
162    {'EXCEPTION', #'LName_NoComponent'{}} =
163	(catch lname:insert_component(Name, -2, NC)),
164    ok.
165
166get_tests(Name) ->
167    #'CosNaming_NameComponent'{id="first", kind="apple"} =
168	lname:get_component(Name, 1),
169    #'CosNaming_NameComponent'{id="always", kind="orange"} =
170	lname:get_component(Name, 4),
171    #'CosNaming_NameComponent'{id="and", kind="plum"} =
172	lname:get_component(Name, 3),
173    {'EXCEPTION', #'LName_NoComponent'{}} =
174	(catch lname:get_component(Name, 5)),
175    {'EXCEPTION', #'LName_NoComponent'{}} =
176	(catch lname:get_component(Name, 0)),
177    {'EXCEPTION', #'LName_NoComponent'{}} =
178	(catch lname:get_component(Name, -2)),
179    ok.
180
181delete_tests(Name) ->
182    [#'CosNaming_NameComponent'{id="last", kind="peach"},
183	   #'CosNaming_NameComponent'{id="and", kind="plum"},
184	   #'CosNaming_NameComponent'{id="always", kind="orange"}] =
185	lname:delete_component(Name, 1),
186    [#'CosNaming_NameComponent'{id="first", kind="apple"},
187	   #'CosNaming_NameComponent'{id="last", kind="peach"},
188	   #'CosNaming_NameComponent'{id="and", kind="plum"}] =
189	lname:delete_component(Name, 4),
190    [#'CosNaming_NameComponent'{id="first", kind="apple"},
191	   #'CosNaming_NameComponent'{id="last", kind="peach"},
192	   #'CosNaming_NameComponent'{id="always", kind="orange"}] =
193	lname:delete_component(Name, 3),
194    {'EXCEPTION', #'LName_NoComponent'{}} =
195	(catch lname:delete_component(Name, 6)),
196    {'EXCEPTION', #'LName_NoComponent'{}} =
197	(catch lname:delete_component(Name, 0)),
198    {'EXCEPTION', #'LName_NoComponent'{}} =
199	(catch lname:delete_component(Name, -2)),
200    ok.
201
202comparision_tests(Name) ->
203    true = lname:equal(Name, Name),
204    false = lname:equal(Name, lname:delete_component(Name, 2)),
205    true = lname:less_than(lname:delete_component(Name, 2), Name),
206    false = lname:less_than(Name, Name),
207    false = lname:less_than(Name, lname:delete_component(Name, 2)),
208    ok.
209
210convertion_tests(Name) ->
211    Name = lname:from_idl_form(Name),
212    Name = lname:to_idl_form(Name),
213    ok.
214