diff options
Diffstat (limited to 'lib/xmerl/test/xmerl_test_lib.erl')
-rw-r--r-- | lib/xmerl/test/xmerl_test_lib.erl | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/xmerl/test/xmerl_test_lib.erl b/lib/xmerl/test/xmerl_test_lib.erl new file mode 100644 index 0000000000..16f438ca84 --- /dev/null +++ b/lib/xmerl/test/xmerl_test_lib.erl @@ -0,0 +1,92 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2006-2010. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +%%%------------------------------------------------------------------- +%%% File : xmerl_test_lib.erl +%%% Author : Bertil Karlsson <bertil@finrod> +%%% Description : +%%% +%%% Created : 28 Apr 2006 by Bertil Karlsson <bertil@finrod> +%%%------------------------------------------------------------------- +-module(xmerl_test_lib). + +-compile(export_all). + +-include_lib("test_server/include/test_server.hrl"). +-include_lib("xmerl/include/xmerl.hrl"). + +%% cmp_element/2 +%% First argument result after parsing +%% Second argument result after validation +cmp_element(E,E) -> + ok; +cmp_element(#xmlElement{name=N,attributes=A1,content=C1}, + #xmlElement{name=N,attributes=A2,content=C2}) -> + case cmp_attributes(A1,A2) of + ok -> + cmp_elements(C1,C2); + Err -> Err + end; +cmp_element(#xmlText{},#xmlText{}) -> + ok; +cmp_element(A,B) -> + {error,{A,does_not_match,B}}. + +cmp_elements([H1|T1],[H2|T2]) -> + case cmp_element(H1,H2) of + ok -> + cmp_elements(T1,T2); + Err -> + Err + end; +cmp_elements([],[]) -> + ok. + +%% All attributes in argument 1 must be present in 2 +cmp_attributes([A1|T1],Atts2) -> + case keysearch_delete(A1#xmlAttribute.name,#xmlAttribute.name,Atts2) of + {A2,NewAtts2} -> + case A1#xmlAttribute.value == A2#xmlAttribute.value of + true -> + cmp_attributes(T1,NewAtts2); + _ -> + {error,{mismatching_values_in_attsibutes,A1,A2}} + end; + _ -> + {error,{no_matching_attsibute,A1,in,Atts2}} + end; +cmp_attributes([],_) -> + ok. + +keysearch_delete(Key,N,List) -> + case lists:keysearch(Key,N,List) of + {value,Res} -> + {Res,lists:keydelete(Key,N,List)}; + _ -> + false + end. + + +%% Some test suites use the same testdata ("xmerl_sax_std_SUITE" and "xmerl_std_SUITE"), +%% so the data directory is not cloned. This function retrieves the path to +%% the original data directory. + +get_data_dir(Config) -> + Data0 = ?config(data_dir, Config), + {ok,Data,_} = regexp:sub(Data0, "xmerl_sax_std_SUITE", "xmerl_std_SUITE"), + Data. |