diff options
Diffstat (limited to 'lib/xmerl/test/gen_testsuits-2001-01-16.erl')
-rw-r--r-- | lib/xmerl/test/gen_testsuits-2001-01-16.erl | 744 |
1 files changed, 744 insertions, 0 deletions
diff --git a/lib/xmerl/test/gen_testsuits-2001-01-16.erl b/lib/xmerl/test/gen_testsuits-2001-01-16.erl new file mode 100644 index 0000000000..32b4bd836e --- /dev/null +++ b/lib/xmerl/test/gen_testsuits-2001-01-16.erl @@ -0,0 +1,744 @@ +%%%------------------------------------------------------------------- +%%% File : test2.erl +%%% Author : Bertil Karlsson <bertil@finrod> +%%% Description : +%%% +%%% Created : 26 Sep 2006 by Bertil Karlsson <bertil@finrod> +%%%------------------------------------------------------------------- +-module(gen_testsuits-2001-01-16). + +-compile(export_all). +-include_lib("xmerl/include/xmerl.hrl"). + + +%% generate(Suite) generates test suite modules. In those modules are +%% all test cases extracted from the corresponding ".testSet" +%% file. This program must be in the xmlSchema2002-01-16 directory of +%% the unpacked xmlSchema2002-01-16.tar file. The test suite files are +%% created in this directory. +generate(all) -> + generate(nist), + generate(sun), + generate(msx); +generate(nist) -> + io:format("generating test suite source ~p~n", + ["NISTXMLSchema1-0-20020116.testSet"]), + generate("NISTXMLSchema1-0-20020116.testSet"), + io:format("compiling test suite source~n",[]), + {ok,_}=compile:file("xmerl_xsd_NIST2002-01-16_SUITE.erl",[{i,"/view/bertil_xmerl/clearcase/otp/erts/lib/test_server/include/"},{i,"/view/bertil_xmerl/clearcase/otp/erts/lib/xmerl/include/"}]); +generate(sun) -> + io:format("generating test suite source ~p~n", + ["SunXMLSchema1-0-20020116.testSet"]), + generate("SunXMLSchema1-0-20020116.testSet"), + io:format("compiling test suite source~n",[]), + {ok,_}=compile:file("xmerl_xsd_Sun2002-01-16_SUITE.erl",[{i,"/view/bertil_xmerl/clearcase/otp/erts/lib/test_server/include/"},{i,"/view/bertil_xmerl/clearcase/otp/erts/lib/xmerl/include/"}]); +generate(msx) -> + io:format("generating test suite source ~p~n", + ["MSXMLSchema1-0-20020116.testSet"]), + generate("MSXMLSchema1-0-20020116.testSet"), + io:format("compiling test suite source~n",[]), + {ok,_}=compile:file("xmerl_xsd_MS2002-01-16_SUITE.erl",[{i,"/view/bertil_xmerl/clearcase/otp/erts/lib/test_server/include/"},{i,"/view/bertil_xmerl/clearcase/otp/erts/lib/xmerl/include/"}]); +generate(Suite) -> + {E,_} = xmerl_scan:file(Suite), + {ok,FileName} = create_suite_name(xmerl_xpath:string("./@name",E)), + case create_suite_file(FileName) of + {ok,IO} -> + emit_licens_text(IO), + emit_module_header(IO,list_to_atom(filename:rootname(FileName))), + generate2(abbrev(Suite),E,IO); + _ -> + failed + end. +generate2(Suite,E,IO) -> + %% Each testGroup name is a function in the test suite. + TestGroupNames = test_case_names(Suite), + emit_all_function(TestGroupNames,IO), + emit_init_per_suite(IO,Suite), + emit_init_per_testcase(IO), + TestGroups=[X||X=#xmlElement{}<-E#xmlElement.content], + TestGroupGroups = group_testGroups(test_case_prefix(Suite),TestGroups), + generate_test_case_functions(Suite,TestGroupGroups,IO). + +group_testGroups(Prefs,TGs) -> + group_testGroups(Prefs,TGs,[]). +group_testGroups([],[],Acc) -> + lists:reverse(Acc); +group_testGroups(Prefs,TGs,Acc) -> + SplitPrefs = fun([{_,[]}|T],F) -> + F(T,F); + ([{N,[H|T1]}|T2],_) -> + {H,N,[{N,T1}|T2]}; + ([H|T],_) -> + {H,H,T}; + (A,B) -> + io:format("SplitRefs: ~nA: ~p~nB: ~p~nTGs: ~p~n",[A,B,hd(TGs)]), + exit(dummy) + end, + {Pref,TCName,Prefs2} = SplitPrefs(Prefs,SplitPrefs), + Pred = + fun(E) -> + case xmerl_xpath:string("@name",E) of + [#xmlAttribute{value=V}] -> + lists:prefix(Pref,V); + _ -> false + end + end, + {TGG,TGs2}=lists:splitwith(Pred,TGs), +%% case TGG of +%% [] -> +%% io:format("hd(Prefs): ~p~n",[hd(Prefs)]); +%% _ -> +%% ok +%% end, + group_testGroups(Prefs2,TGs2,acc_group({TCName,TGG},Acc)). + +acc_group({Name,TGG},[{Name,AccP}|Acc]) -> + [{Name,AccP++TGG}|Acc]; +acc_group(TGG,Acc) -> + [TGG|Acc]. + +generate_test_case_functions(_Suite,[],IO) -> + %%emit_schema_test(IO), + %%emit_instance_test(IO), + file:close(IO); +generate_test_case_functions(Suite,[{TCName,TGG}|TGGs],IO) -> + emit_test_case_func(true,TCName,comment(TCName,TGG),IO), + generate_test_cases(Suite,TGG,0,0,IO), + generate_test_case_functions(Suite,TGGs,IO). + +generate_test_cases(_,[],SIndex,EIndex,IO) -> + emit_result_list_test(IO,SIndex,EIndex), +%% emit_schema_result_list(IO,SIndex,EIndex), +%% emit_instance_result_list(IO,SIndex,EIndex), + ok; +generate_test_cases(Suite,[El|Els],SIndex,EIndex,IO) -> + SchemaTest = xmerl_xpath:string("schemaTest",El), + InstanceTest = xmerl_xpath:string("instanceTest",El), + SIndex2 = generate_schema_tests(Suite,SchemaTest,IO,SIndex, + any_instance_tests(InstanceTest)), + + EIndex2=generate_instance_tests(InstanceTest,mk_state(SIndex),EIndex,IO), + case {Els,any_tests(SchemaTest,InstanceTest)} of +%% {[],true} -> +%% emit(IO,[".",nl]); +%% {_,true} -> +%% emit(IO,[",",nl]); + _ -> + ok + end, + emit(IO,[nl,nl]), + generate_test_cases(Suite,Els,SIndex2,EIndex2,IO). + + + +%% 0 or 1 schemaTest/ testGroup, but a schemaTest may reference many schemas +generate_schema_tests(_Suite,[],_IO,SIndex,_) -> + SIndex; +generate_schema_tests(Suite,[SchemaTest],IO,SIndex,AnyInstanceTests) -> + case xmerl_xpath:string("current[@status=\"accepted\" or @status=\"stable\"]",SchemaTest) of + [] -> + SIndex; + _ -> + case exclude_case(Suite,xmerl_xpath:string("@name",SchemaTest)) of + true -> + SIndex; + _ -> + Refs = xmerl_xpath:string("schemaDocument/@xlink:href", + SchemaTest), + ExpectedValue = xmerl_xpath:string("expected/@validity", + SchemaTest), + ExpectedReturnValue = + expected_return_value_st(ExpectedValue,SIndex), + generate_schema_validation_call(ExpectedReturnValue, + Refs,0,SIndex, + IO,length(Refs)>1, + AnyInstanceTests) + end + end. + + +generate_schema_validation_call(_RetVal,[],_Num,Sindex,_IO,_,false) -> +%% emit(IO,[RetVal]), + %% emit(IO,[".",nl]), + Sindex; +generate_schema_validation_call(_RetVal,[],_Num,Sindex,_IO,_,true) -> + %% emit(IO,[RetVal]), +% emit(IO,[",",nl]), + Sindex; +generate_schema_validation_call(RetVal,[#xmlAttribute{value=Link}|Refs], + Num,Sindex,IO,ManySchemas,AnyInstanceTests) -> + XsdBase = filename:dirname(Link), +%% FileName = lists:flatten(io_lib:format("filename:join([?config(data_dir,Config), ~p])", [list_to_atom(Link)])), + AccState = + case Num of + 0 -> + ""; + _ -> + ",{state," ++ mk_state(Sindex - 1) ++ "}" + end, + if + Sindex == 0 -> + emit(IO,[indent(2),mk_STResList(0)," = [],",nl,nl]); + true -> + ok + end, + RetState = + if + ManySchemas;AnyInstanceTests -> + mk_state(Sindex); + true -> + "_" + end, +%% emit(IO,[indent(2),"?line ",mk_state(Num)," = xmerl_xsd:process_schema(",nl, +%% indent(25),FileName,",",nl, +%% indent(25),"[{xsdbase,filename:join([?config(data_dir,Config),'", +%% XsdBase,"'])}",AccState,"]),",nl]), + emit(IO,[indent(2),"?line {",mk_STRes(Sindex),",",RetState, + "} = xmerl_xsd_lib:schema_test(Config,", + list_to_atom(Link),",",list_to_atom(XsdBase),",",RetVal,AccState,"),",nl]), + emit(IO,[indent(2),mk_STResList(Sindex+1)," = [",mk_STRes(Sindex),"|", + mk_STResList(Sindex),"],",nl]), + generate_schema_validation_call(RetVal,Refs,Num+1,Sindex+1,IO, + ManySchemas,AnyInstanceTests). + +%% 0 or many instanceTests / testGroup +generate_instance_tests([],_,EI,_IO) -> + EI; +generate_instance_tests([InstanceTest|ITs],State,Num,IO) -> + case xmerl_xpath:string("current[@status=\"accepted\" or @status=\"stable\"]",InstanceTest) of + [] -> + ok; + _ -> + if + Num == 0 -> + emit(IO,[indent(2),mk_ITResList(0)," = [],",nl]); + true -> + ok + end, + [Ref] = xmerl_xpath:string("instanceDocument/@xlink:href",InstanceTest), + ExpectedValue = xmerl_xpath:string("expected/@validity", + InstanceTest), + ExpectedReturnValue = expected_return_value_it(ExpectedValue), + generate_instance_validation_call(ExpectedReturnValue,Ref, + State,Num,IO) + end, + case ITs of + [] -> ok; %%emit(IO,[".",nl]); + _ ->ok% emit(IO,[",",nl]) + end, + generate_instance_tests(ITs,State,Num+1,IO). + +generate_instance_validation_call(ExpectedReturnValue, + #xmlAttribute{value=Link},State,Num,IO) -> + XMLBase = filename:dirname(Link), + %%FileName = filename:basename(Link), +%% FileName = lists:flatten(io_lib:format("filename:join([?config(data_dir,Config), ~p])", [list_to_atom(Link)])), + +%% E = mk_E(Num), + + Res = mk_ITRes(Num), + +%% emit(IO,[indent(2),"?line {",E,",_} = xmerl_scan:file(",FileName,",",nl, +%% indent(32),"[{xmlbase,filename:join([?config(data_dir,Config),'", +%% XMLBase,"'])}]),",nl]), + + emit(IO,[indent(2),"?line ",Res," = xmerl_xsd_lib:instance_test(Config,",list_to_atom(Link),",",list_to_atom(XMLBase),",",ExpectedReturnValue,",",State,"),",nl]), + emit(IO,[indent(2),mk_ITResList(Num+1)," = [",Res,"|",mk_ITResList(Num),"],",nl]). + +%% emit(IO,[indent(2),"?line ",ExpectedReturnValue, +%% " = xmerl_xsd:validate(",E,",[{state,",State,"}])"]). + +any_tests([],[]) -> + false; +any_tests(_,_) -> + true. + +any_instance_tests([]) -> + false; +any_instance_tests(_) -> + true. + +expected_return_value_it([#xmlAttribute{value=Validity}]) -> + case Validity of + "valid" -> + valid; + "invalid" -> + invalid; + _ -> + notKnown + end; +expected_return_value_it([]) -> + "_". + +expected_return_value_st([#xmlAttribute{value=Validity}],_Num) -> +%% RetVal = + case Validity of +%% "valid" -> "#xsd_state{errors=[]}"; +%% "invalid" -> "#xsd_state{errors=[_Err|_Errs]}"; +%% _ -> "#xsd_state{}" +%% end, +%% " ?line " ++ RetVal ++ " = " ++ mk_state(Num). + "valid" -> + valid; + "invalid" -> + invalid; + _ -> + notKnown + end. + +create_suite_name([#xmlAttribute{value=Name}]) -> + FileName = lists:concat(['xmerl_','xsd_',Name,'_SUITE.erl']), + {ok,FileName}; +create_suite_name(_) -> + error. + +create_suite_file(FileName) -> + file:delete(FileName), + case file:open(FileName,[append]) of + {ok,IO} -> {ok,IO}; + _ -> failed + end. + +emit_licens_text(IO) -> + emit(IO,[ +"%% +%% %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% +%%",nl, +"%%",nl, +"%%% Purpose : Test suite for the xmerl application",nl,nl, +"%% Do NOT edit this file. It is generated by the generate_xsd_suite module",nl,"%% For more info read the comments in the header of that file.",nl,nl]). + +emit_module_header(IO,Module) -> + emit(IO,["-module(",{asis,Module},").",nl,nl]), + emit(IO,["-compile(export_all).",nl,nl]), + emit(IO,["-include(",{asis,"test_server.hrl"},").",nl]), + emit(IO,["-include_lib(",{asis,"xmerl/include/xmerl.hrl"},").",nl]), + emit(IO,["-include_lib(",{asis,"xmerl/include/xmerl_xsd.hrl"},").",nl,nl,nl]). + +emit_all_function(TestGroupNames,IO) -> + + emit(IO,["all(suite) -> [",nl]), + emit(IO,[list_to_atom(X)||X<-indent_all(TestGroupNames)]), + emit(IO,["].",nl,nl,nl]). + +emit_init_per_suite(IO,Suite) -> + emit(IO,["%% initialization before the test suite",nl]), + emit(IO,["init_per_suite(Config) ->",nl, + " Dog=test_server:timetrap({minutes,10}),",nl, + " xmerl_xsd_lib:unpack(Config,",Suite,"),",nl, + " {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,",Suite,"),",nl, + " test_server:timetrap_cancel(Dog),",nl, + " [{suite,",Suite,"},{xmerl_error_log,LogFile}|Config].",nl,nl]), + emit(IO,["end_per_suite(Config) ->",nl, + " xmerl_xsd_lib:rmdir(Config,",Suite,"),",nl, + " xmerl_xsd_lib:close_error_log_file(Config),",nl, + " ok.",nl,nl]). + +emit_init_per_testcase(IO) -> + emit(IO,["%% initialization before each testcase",nl]), + emit(IO,["init_per_testcase(TestCase,Config) ->",nl, + indent(2),"Dog=test_server:timetrap({minutes,3}),",nl, + indent(2),"[{testcase,TestCase},{watchdog, Dog}|Config].",nl,nl]), + emit(IO,["%% clean up after each testcase",nl, + "end_per_testcase(_Func,Config) ->",nl, + indent(2),"Dog=?config(watchdog, Config),",nl, + indent(2),"test_server:timetrap_cancel(Dog),",nl, + indent(2),"ok.",nl,nl]). + +emit_test_case_func(false,TestCaseName,_Doc,IO) -> + emit(IO,["%% skipped testcase ",{asis,TestCaseName},".",nl, + "%% There were no schemaTest case or instanceTest case.",nl,nl]); +emit_test_case_func(true,TestCaseName,Doc,IO) -> +%% emit(IO,indent_comment(Doc)), + emit(IO,Doc), + emit(IO,[nl,{asis,list_to_atom(TestCaseName)},"(Config) when is_list(Config) ->",nl]). + + +emit_result_list_test(IO,0,0) -> + emit(IO,[" xmerl_xsd_lib:compare_test_results(Config,[],[]).",nl,nl]); +emit_result_list_test(IO,STI,0) -> + emit(IO,[" xmerl_xsd_lib:compare_test_results(Config,",mk_STResList(STI), + ",[]).",nl,nl]); +emit_result_list_test(IO,0,ITI) -> + emit(IO,[" xmerl_xsd_lib:compare_test_results(Config,[],",mk_ITResList(ITI), + ").",nl,nl]); +emit_result_list_test(IO,STI,ITI) -> + emit(IO,[" xmerl_xsd_lib:compare_test_results(Config,",mk_STResList(STI), + ",",mk_ITResList(ITI),").",nl,nl]). + +emit_schema_result_list(_IO,0,_) -> + ok; +emit_schema_result_list(IO,SIndex,0) -> + emit(IO,[indent(2),"STResults = lists:reverse(",mk_STResList(SIndex),"),",nl]); +emit_schema_result_list(IO,SIndex,_) -> + emit(IO,[indent(2),"STResults = lists:reverse(",mk_STResList(SIndex),"),",nl]). + +emit_instance_result_list(_IO,0,0) -> + ok; +emit_instance_result_list(IO,_,0) -> + emit(IO,[indent(2),"xmerl_xsd_lib:compare_test_results(Config,STResults,[])).",nl]); +emit_instance_result_list(IO,0,I) -> + emit(IO,[indent(2),"xmerl_xsd_lib:compare_test_results(Config,[],lists:reverse(",mk_ITResList(I),")).",nl]); +emit_instance_result_list(IO,_,I) -> +%% emit(IO,indent_all(res_list(0,I))). +%% emit(IO,["ITResults =",nl,"["]++res_list(0,I-1,fun mk_ITRes/1)++["].",nl]). + emit(IO,[indent(2),"xmerl_xsd_lib:compare_test_results(Config,STResults,lists:reverse(",mk_ITResList(I),")).",nl]). + + +emit(IO,[nl|T]) -> + io:format(IO,"~n",[]), + emit(IO,T); +emit(IO,[comma|T]) -> + io:format(IO,",",[]), + emit(IO,T); +emit(IO,[H|T]) -> + print(IO,H), + emit(IO,T); +emit(_,[]) -> + ok. + +print(IO,Str) when is_list(Str) -> + io:format(IO,"~s",[Str]); +print(IO,{asis,Sym}) -> + io:format(IO,"~p",[Sym]); +print(IO,Term) -> + io:format(IO,"~p",[Term]). + +mk_state(I) -> + mk_VarNum("S",I). + +mk_E(Num) -> + mk_VarNum("E",Num). + +mk_VarNum(Var,Num) -> + lists:concat([Var,Num]). + +mk_ITRes(Num) -> + mk_VarNum("ITRes",Num). +mk_STRes(Num) -> + mk_VarNum("STRes",Num). +mk_STResList(Num) -> + mk_VarNum("STResList",Num). +mk_ITResList(Num) -> + mk_VarNum("ITResList",Num). + +res_list(N,N,VariableFun) -> + [VariableFun(N)]; +res_list(M,N,VariableFun) -> + [VariableFun(M),comma|res_list(M+1,N,VariableFun)]. + +indent(I) -> + lists:flatten(lists:duplicate(I," ")). + +indent_all([H|T]) -> + indent_all(T,length(H),[H]). +indent_all([],_Col,Acc) -> + lists:reverse(Acc); +indent_all([H|T],Col,Acc) when is_list(H) -> + case length(H)+Col of + I when I < 80 -> + indent_all(T,I+1,[H,"comma"|Acc]); + _I -> + indent_all(T,length(H),[H,"nl","comma"|Acc]) + end. + +indent_comment(Comment) -> + indent_comment(string:tokens(Comment,"\n\t\s"),3,["%% "]). +indent_comment([],_,Acc) -> + lists:reverse(Acc); +indent_comment([H|T],Col,Acc) -> + case length(H) + Col of + I when I > 80 -> + indent_comment(T,length(H) + 3,[H,"%% ",nl|Acc]); + I -> + indent_comment(T,I + 1,[H," "|Acc]) + end. + +test_case_names(nist) -> + [X||X<-test_case_prefix(nist)]; +test_case_names(msx) -> + [X||X<-lists:map(fun({N,_})->N;(N)when is_list(N) -> N end,test_case_prefix(msx))]; +test_case_names(sun) -> + test_case_prefix(sun). + +abbrev("NISTXMLSchema1-0-20020116.testSet") -> + nist; +abbrev("MSXMLSchema1-0-20020116.testSet") -> + msx; +abbrev(_) -> + sun. +test_case_prefix(msx) -> + ["att","ct","elem","group","idc_","id", + {"mgABCD",["mgA","mgB","mgC","mgD"]}, + {"mgEFG",["mgE","mgF","mgG"]},{"mgHIJ",["mgH","mgI","mgJ"]}, + "mgK",{"mgLM",["mgL","mgM"]},"mgN",{"mgOP",["mgO","mgP"]}, + {"mgQR",["mgQ","mgR"]},"mgS", + {"particlesAB",["particlesA","particlesB"]}, + {"particlesCDE",["particlesC","particlesD","particlesE"]}, + {"particlesFHI",["particlesF","particlesH","particlesI"]}, + "particlesJ", + {"particlesKOSRTQUVW", + ["particlesK","particlesO","particlesS","particlesR","particlesT", + "particlesQ","particlesU","particlesV","particlesW"]}, + {"stABCDE",["stA","stB","stC","stD","stE"]}, + {"stFGH",["stF","stG","stH"]},{"stIJK",["stI","stJ","stK"]}, + "stZ",{"wildABCDEF",["wildA","wildB","wildC","wildD","wildE","wildF"]}, + {"wildGHI",["wildG","wildH","wildI"]}, + {"wildJKLMNQOP",["wildJ","wildK","wildL","wildM","wildN", + "wildQ","wildO","wildP"]},"wildZ"]; +test_case_prefix(nist) -> + ["NISTSchema-anyURI","NISTSchema-base64Binary","NISTSchema-boolean", + "NISTSchema-byte","NISTSchema-date-","NISTSchema-dateTime", + "NISTSchema-decimal","NISTSchema-double","NISTSchema-duration", + "NISTSchema-float","NISTSchema-gDay","NISTSchema-gMonth-", + "NISTSchema-gMonthDay","NISTSchema-gYear-","NISTSchema-gYearMonth", + "NISTSchema-hexBinary","NISTSchema-ID","NISTSchema-int-", + "NISTSchema-integer","NISTSchema-language","NISTSchema-long", + "NISTSchema-Name","NISTSchema-NCName","NISTSchema-negativeInteger", + "NISTSchema-NMTOKEN","NISTSchema-nonNegativeInteger", + "NISTSchema-nonPositiveInteger","NISTSchema-normalizedString", + "NISTSchema-positiveInteger","NISTSchema-QName","NISTSchema-short", + "NISTSchema-string","NISTSchema-time","NISTSchema-token", + "NISTSchema-unsignedByte","NISTSchema-unsignedInt", + "NISTSchema-unsignedLong","NISTSchema-unsignedShort"]; +test_case_prefix(sun) -> + ["Sun-idc001.nogen", "Sun-idc002.e", "Sun-idc002b.e", "Sun-idc003.e", + "Sun-idc004.nogen", "Sun-idc004a.e", "Sun-idc005.nogen", + "Sun-idc006.nogen", "Sun-xsd001", "Sun-xsd002", "Sun-xsd003-1.e", + "Sun-xsd003-2.e", "Sun-xsd003a", "Sun-xsd003b", "Sun-xsd004", + "Sun-xsd005", "Sun-xsd006", "Sun-xsd008", "Sun-xsd011", "Sun-xsd012", + "Sun-xsd013.e", "Sun-xsd014.e", "Sun-xsd015.e", "Sun-xsd016.e", + "Sun-xsd017.e", "Sun-xsd018.e", "Sun-xsd019.e", "Sun-xsd020.e", + "Sun-xsd020-2.e", "Sun-xsd020-3.e", "Sun-xsd020-4.e", "Sun-xsd021", + "Sun-xsd022", "Sun-xsd023.e", "Sun-xsiType1", "Sun-xsiType-block-1", + "Sun-xsiType-block-2", "Sun-xsiType-block-3", "Sun-xsiType-block-4", + "Sun-type-and-subst-1"]. + +comment([$S,$u,$n|_],[TG]) -> + case xmerl_xpath:string("annotation/documentation/text()",TG) of + L=[#xmlText{}|_] -> + ["%% "|[X||#xmlText{value=X}<-L]]; + _ -> + ["%%"] + end; +comment("att",_) -> + ["%% Syntax Checking for Attribute Declaration",nl]; +comment("ct",_) -> + ["%% Syntax Checking for top level complexType Declaration.",nl, + "%% Syntax Checking for simpleContent complexType Declaration.",nl, + "%% Syntax Checking for comlexContent complexType Declaration",nl, + "%% complexType Validation checking",nl, + "%% complexType Schema Component Constraints",nl]; +comment("elem",_) -> + ["%% 3.3.2 XML Representation of Element Declaration.",nl, + "%% 3.3.4 Element Declaration Validation Rules.",nl, + "%% element Validation checking.",nl, + "%% Regular Expression Validation checking.",nl, + "%% Bug Regressions Specs section: 3.3.4",nl]; +comment("group",_) -> + ["%% Syntax Checking Model Group Tests.",nl, + "%% Content Checking Model Group Tests.",nl]; +comment("idc_",_) -> + ["%% 3.11.1 The Identity-constraint Definition Schema Component.",nl]; +comment("id",_) -> + ["%% Identity-constraint Definition Schema Component.",nl, + "%% Identity-constraint Validation Rules.",nl, + "%% Selector identity-constraint xpath bnf.",nl, + "%% Field identity-constraint xpath bnf.",nl, + "%% XPath validation.",nl, + "%% Bug Regressions",nl]; +comment("mgABCD",_) -> + ["%% model groups (ALL).",nl]; +comment("mgEFG",_) -> + ["%% model groups ( sequence ).",nl]; +comment("mgHIJ",_) -> + ["%% model groups ( choice ).",nl]; +comment("mgK",_) -> + ["%% model group validation checking (sequence).",nl]; +comment("mgLM",_) -> + ["%% model group validation checking (choice, all).",nl]; +comment("mgN",_) -> + ["%% Element Sequence Valid.",nl]; +comment("mgOP",_) -> + ["%% All Group Limited.",nl]; +comment("mgQR",_) -> + ["%% Element Declarations Consistent, 3.8.6",nl]; +comment("mgS",_) -> + ["%% Deterministic Sequences.",nl]; +comment("particlesAB",_) -> + ["%% 3.9.1 The Particle Schema Component.",nl]; +comment("particlesCDE",_) -> + ["%% 3.9.4 Particle Validation Rules: Element Sequence Locally Valid.",nl]; +comment("particlesFHI",_) -> + ["%% 3.9.6 Schema Component Constraint: Particle ....",nl]; +comment("particlesJ",_) -> + ["%% 3.9.6 Particle Derivation.",nl]; +comment("particlesKOSRTQUVW",_) -> + ["%% 3.9.6 Particle Restriction.",nl]; +comment("stABCDE",_) -> + ["%% Syntax Checking for simpleType Declaration.",nl]; +comment("stFGH",_) -> + ["%% simpleType Validation checking.",nl]; +comment("stIJK",_) -> + ["%% simpleType Schema Component Constraints.",nl]; +comment("stZ",_) -> + ["%% Bug Regressions.",nl]; +comment("wildABCDEF",_) -> + ["%% Syntax Validation - any.",nl]; +comment("wildGHI",_) -> + ["%% 3.10.4 Wildcard Validation Rules - any.",nl]; +comment("wildJKLMNQOP",_) -> + ["%% Syntax Validation - anyAttribute.",nl]; +comment("wildZ",_) -> + ["%% Bugs - Wildcards.",nl]; +comment("NISTSchema-anyURI",_) -> + ["%% Data type derived by restriction of anyURI by facets",nl]; +comment("NISTSchema-base64Binary",_) -> + ["%% Data type derived by restriction of base64binary by facets",nl]; +comment("NISTSchema-boolean",_) -> + ["%% Data type derived by restriction of boolean by facets",nl]; +comment("NISTSchema-byte",_) -> + ["%% Data type derived by restriction of byte by facets",nl]; +comment("NISTSchema-date-",_) -> + ["%% Data type derived by restriction of date by facets",nl]; +comment("NISTSchema-dateTime",_) -> + ["%% Data type derived by restriction of dateTime by facets",nl]; +comment("NISTSchema-decimal",_) -> + ["%% Data type derived by restriction of decimal by facets",nl]; +comment("NISTSchema-double",_) -> + ["%% Data type derived by restriction of double by facets",nl]; +comment("NISTSchema-duration",_) -> + ["%% Data type derived by restriction of duration by facets",nl]; +comment("NISTSchema-float",_) -> + ["%% Data type derived by restriction of float by facets",nl]; +comment("NISTSchema-gDay",_) -> + ["%% Data type derived by restriction of gDay by facets",nl]; +comment("NISTSchema-gMonth-",_) -> + ["%% Data type derived by restriction of gMonth by facets",nl]; +comment("NISTSchema-gMonthDay",_) -> + ["%% Data type derived by restriction of gMonthDay by facets",nl]; +comment("NISTSchema-gYear-",_) -> + ["%% Data type derived by restriction of gYear by facets",nl]; +comment("NISTSchema-gYearMonth",_) -> + ["%% Data type derived by restriction of gYearMonth by facets",nl]; +comment("NISTSchema-hexBinary",_) -> + ["%% Data type derived by restriction of hexBinary by facets",nl]; +comment("NISTSchema-ID",_) -> + ["%% Data type derived by restriction of ID by facets",nl]; +comment("NISTSchema-int-",_) -> + ["%% Data type derived by restriction of int by facets",nl]; +comment("NISTSchema-integer",_) -> + ["%% Data type derived by restriction of integer by facets",nl]; +comment("NISTSchema-language",_) -> + ["%% Data type derived by restriction of language by facets",nl]; +comment("NISTSchema-long",_) -> + ["%% Data type derived by restriction of long by facets",nl]; +comment("NISTSchema-Name",_) -> + ["%% Data type derived by restriction of Name by facets",nl]; +comment("NISTSchema-NCName",_) -> + ["%% Data type derived by restriction of NCName by facets",nl]; +comment("NISTSchema-negativeInteger",_) -> + ["%% Data type derived by restriction of negativeInteger by facets",nl]; +comment("NISTSchema-NMTOKEN",_) -> + ["%% Data type derived by restriction of NMTOKEN by facets",nl]; +comment("NISTSchema-nonNegativeInteger",_) -> + ["%% Data type derived by restriction of nonNegativeInteger by facets",nl]; +comment("NISTSchema-nonPositiveInteger",_) -> + ["%% Data type derived by restriction of nonPositiveInteger by facets",nl]; +comment("NISTSchema-normalizedString",_) -> + ["%% Data type derived by restriction of normalizedString by facets",nl]; +comment("NISTSchema-positiveInteger",_) -> + ["%% Data type derived by restriction of positiveInteger by facets",nl]; +comment("NISTSchema-QName",_) -> + ["%% Data type derived by restriction of QName by facets",nl]; +comment("NISTSchema-short",_) -> + ["%% Data type derived by restriction of short by facets",nl]; +comment("NISTSchema-string",_) -> + ["%% Data type derived by restriction of string by facets",nl]; +comment("NISTSchema-time",_) -> + ["%% Data type derived by restriction of time by facets",nl]; +comment("NISTSchema-token",_) -> + ["%% Data type derived by restriction of token by facets",nl]; +comment("NISTSchema-unsignedByte",_) -> + ["%% Data type derived by restriction of unsignedByte by facets",nl]; +comment("NISTSchema-unsignedInt",_) -> + ["%% Data type derived by restriction of unsignedInt by facets",nl]; +comment("NISTSchema-unsignedLong",_) -> + ["%% Data type derived by restriction of unsignedLong by facets",nl]; +comment("NISTSchema-unsignedShort",_) -> + ["%% Data type derived by restriction of unsignedShort by facets",nl]. + + +emit_schema_test(IO) -> + emit(IO,["schema_test(Config,FileName,XsdBase,Validity) ->",nl, + indent(3),"{Ok,S} = xmerl_xsd:process_schema(", + "filename:join([?config(data_dir,Config),FileName]),",nl, + indent(25), + "[{xsdbase,filename:join([?config(data_dir,Config),XsdBase])}]),",nl, + indent(3),"case Validity of",nl, + indent(6),valid ," when Ok == ok ->",nl, + indent(9),"{{filename:basename(FileName),S#xsd_state.errors == []},S};", nl, + indent(6),invalid," when Ok == error ->",nl, + indent(9), "{{filename:basename(FileName),true},S};",nl, + indent(6),notKnown," ->",nl, + indent(9),"{{filename:basename(FileName),true},S};",nl, + indent(6),"_ -> {{filename:basename(FileName),false},S}",nl, + indent(3),"end.",nl]), + emit(IO,["schema_test(Config,FileName,XsdBase,Validity,AccState) ->",nl, + indent(3),"{Ok,S2} = xmerl_xsd:process_schema(", + "filename:join([?config(data_dir,Config),FileName]),",nl, + indent(25), + "[{xsdbase,filename:join([?config(data_dir,Config),XsdBase])}, AccState]),",nl, + indent(3),"case Validity of",nl, + indent(6),valid," when Ok == ok ->",nl, + indent(9),"{{filename:basename(FileName),S2#xsd_state.errors == []},S2};", nl, + indent(6),invalid," when Ok == error ->",nl, + indent(9), "{{filename:basename(FileName),true},S2};",nl, + indent(6),notKnown," ->",nl, + indent(9),"{{filename:basename(FileName),true},S2};",nl, + indent(6),"_ -> {{filename:basename(FileName),false},S2}",nl, + indent(3),"end.",nl]). + +emit_instance_test(IO) -> + emit(IO,["instance_test(Config,FileName,XMLBase,Validity,State) ->",nl]), + emit(IO,[indent(3),"{E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),FileName]),",nl, + indent(19),"[{xmlbase,filename:join([?config(data_dir,Config),",nl, + indent(19),"XMLBase])}]),",nl]), + emit(IO,[indent(3),"{VE,S2} = xmerl_xsd:validate(E,[{state,State}]),",nl]), + emit(IO,[indent(3),"case Validity of",nl, + indent(6),"valid when is_record(VE,xmlElement) ->",nl, + indent(9),"{filename:basename(FileName),S2#xsd_state.errors == []};",nl, + indent(6),"invalid when VE == error ->",nl, + indent(9),"{filename:basename(FileName),true};",nl, + indent(6),"notKnown ->",nl, + indent(9),"{filename:basename(FileName),true};",nl, + indent(6),"_ ->",nl, + indent(9),"{filename:basename(FileName),false}",nl, + indent(3),"end.",nl]). +%% emit(IO,[indent(3),"{VE,_} = xmerl_xsd:validate(E,[{state,State}]),",nl]), +%% emit(IO,[indent(3),"{filename:basename(FileName),VE == ExpectedRetVal}."]). + +exclude_case(_Suite,[]) -> + false; +exclude_case(Suite,[#xmlAttribute{value=Name}]) -> + exlude_case(Suite,Name). + +exlude_case(msx,Case) -> + lists:member(Case,["attC002","mgS002","mgS003","mgS004","mgS005"]); +exlude_case(_,_) -> + false. |