diff options
Diffstat (limited to 'lib/xmerl/test/xmerl_xsd_SUITE.erl')
-rw-r--r-- | lib/xmerl/test/xmerl_xsd_SUITE.erl | 1175 |
1 files changed, 1175 insertions, 0 deletions
diff --git a/lib/xmerl/test/xmerl_xsd_SUITE.erl b/lib/xmerl/test/xmerl_xsd_SUITE.erl new file mode 100644 index 0000000000..bbca4cb7aa --- /dev/null +++ b/lib/xmerl/test/xmerl_xsd_SUITE.erl @@ -0,0 +1,1175 @@ +%% +%% %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% +%% +%% +%%% Purpose : Test suite for the ASN.1 application + +-module(xmerl_xsd_SUITE). + +-compile(export_all). +%%-export([Function/Arity, ...]). + +-include_lib("test_server/include/test_server.hrl"). +%%-include("xmerl.hrl"). +-include_lib("xmerl/include/xmerl.hrl"). + +-import(xmerl_xsd_type,[check_simpleType/3]). + +all() -> + [{group, type_tests}, {group, facets}, + {group, misc_block_tests}, {group, validation_tests}, + {group, ticket_tests}]. + +groups() -> + [{type_tests, [], + [{group, primitive_datatypes}, + {group, derived_datatypes}]}, + {validation_tests, [], + [{group, xmlSchemaPrimerExamples}, + {group, miscXMLexamples}]}, + {primitive_datatypes, [], + [string, boolean, decimal, float, double, duration, + dateTime, time, date, gYearMonth, gYear, gMonthDay, + gDay, gMonth, hexBinary, base64Binary, anyURI, 'QName', + 'NOTATION']}, + {derived_datatypes, [], + [normalizedString, token, language, 'NMTOKEN', + 'NMTOKENS', 'Name', 'NCName', 'ID', 'IDREF', 'IDREFS', + 'ENTITY', 'ENTITIES', integer, nonPositiveInteger, + negativeInteger, long, int, short, byte, + nonNegativeInteger, unsignedLong, unsignedInt, + unsignedShort, unsignedByte, positiveInteger]}, + {xmlSchemaPrimerExamples, [], + [po, po1, po2, ipo, ipo_redefine, '4Q99']}, + {miscXMLexamples, [], + [small, complexType1, model_group_all, + substitutionGroup, attributeGroup, test_key1, sis1, + sis2, gpx, state2file_file2state, union]}, + {ticket_tests, [], + [ticket_6910, ticket_7165, ticket_7190, ticket_7288, + ticket_7736, ticket_8599]}, + {facets, [], + [length, minLength, maxLength, pattern, enumeration, + whiteSpace, maxInclusive, maxExclusive, minExclusive, + minInclusive, totalDigits, fractionDigits]}, + {misc_block_tests, [], + [compare_dateTime, compare_duration]}]. + +init_per_group(_GroupName, Config) -> + Config. + +end_per_group(_GroupName, Config) -> + Config. + +init_per_testcase(_TestCase,Config) -> + {ok, _} = + file:read_file_info(filename:join([?config(priv_dir,Config)])), + code:add_patha(?config(priv_dir,Config)), + Dog=test_server:timetrap({minutes,10}), + [{watchdog, Dog}|Config]. + +end_per_testcase(_Func,Config) -> + Dog=?config(watchdog, Config), + test_server:timetrap_cancel(Dog), + ok. + + +string(suite) -> []; +string(_Config) -> + %% #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] + Str = [16#9,16#A,16#D,16#20,16#D7FF,16#E000,16#FFFD,16#10000, + 16#10FFFF], + ?line {ok,_} = check_simpleType(string,Str,dummy). + +boolean(suite) -> []; +boolean(_Config) -> + ?line {ok,_} = check_simpleType(boolean,"1",dummy), + ?line {ok,_} = check_simpleType(boolean,"0",dummy), + ?line {ok,_} = check_simpleType(boolean,"true",dummy), + ?line {ok,_} = check_simpleType(boolean,"false",dummy), + ?line {error,_Reason} = check_simpleType(boolean,"gurka",dummy). + +decimal(suite) -> []; +decimal(_Config) -> + ?line {ok,_} = check_simpleType(decimal,"-1.23",dummy), + ?line {ok,_} = check_simpleType(decimal,"12678967.543233",dummy), + ?line {ok,_} = check_simpleType(decimal,"+100000.00",dummy), + ?line {ok,_} = check_simpleType(decimal,"210",dummy). + +float(suite) -> []; +float(_Config) -> + %% -1E4, 1267.43233E12, 12.78e-2, 12 , -0, 0 , INF, -INF, NaN + ?line {ok,_} = check_simpleType(float,"-1E4",dummy), + ?line {ok,_} = check_simpleType(float,"1267.43233E12",dummy), + ?line {ok,_} = check_simpleType(float,"12.78e-2",dummy), + ?line {ok,_} = check_simpleType(float,"12",dummy), + ?line {ok,_} = check_simpleType(float,"-0",dummy), + ?line {ok,_} = check_simpleType(float,"0",dummy), + ?line {ok,_} = check_simpleType(float,"INF",dummy), + ?line {ok,_} = check_simpleType(float,"-INF",dummy), + ?line {ok,_} = check_simpleType(float,"NaN",dummy). + + +double(suite) -> []; +double(_Config) -> + %% -1E4, 1267.43233E12, 12.78e-2, 12 , -0, 0 , INF, -INF, NaN + ?line {ok,_} = check_simpleType(double,"-1E4",dummy), + ?line {ok,_} = check_simpleType(double,"1267.43233E12",dummy), + ?line {ok,_} = check_simpleType(double,"12.78e-2",dummy), + ?line {ok,_} = check_simpleType(double,"12",dummy), + ?line {ok,_} = check_simpleType(double,"-0",dummy), + ?line {ok,_} = check_simpleType(double,"0",dummy), + ?line {ok,_} = check_simpleType(double,"INF",dummy), + ?line {ok,_} = check_simpleType(double,"-INF",dummy), + ?line {ok,_} = check_simpleType(double,"NaN",dummy). + + +duration(suite) -> []; +duration(_Config) -> + %% allowed: P1Y2M3DT10H30M -P120D P1347Y P1347M P1Y2MT2H + %% P0Y1347M P0Y1347M0D -P1347M + %% not allowed: P-1347M P1Y2MT + ?line {ok,_} = check_simpleType(duration,"P1Y2M3DT10H30M",dummy), + ?line {ok,_} = check_simpleType(duration,"-P120D",dummy), + ?line {ok,_} = check_simpleType(duration,"P1347Y",dummy), + ?line {ok,_} = check_simpleType(duration,"P1347M",dummy), + ?line {ok,_} = check_simpleType(duration,"P1Y2MT2H",dummy), + ?line {ok,_} = check_simpleType(duration,"P0Y1347M",dummy), + ?line {ok,_} = check_simpleType(duration,"P0Y1347M0D",dummy), + ?line {ok,_} = check_simpleType(duration,"-P1347M",dummy), + + ?line {error,_} = check_simpleType(duration,"P-1347M",dummy), + ?line {error,_} = check_simpleType(duration,"P1Y2MT",dummy). + +%% '-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)? +dateTime(suite) -> []; +dateTime(_Config) -> + %% 2002-10-10T12:00:00-05:00 + DT1 = "2002-10-10T12:00:00-05:00", + ?line {ok,_} = check_simpleType(dateTime,DT1,dummy), + DT2 = "2002-10-10T17:00:00Z", + ?line {ok,_} = check_simpleType(dateTime,DT2,dummy), + %% plus sign prohibited + DT3 = "+2002-10-10T17:00:00Z", + ?line {error,_Reason3} = check_simpleType(dateTime,DT3,dummy), + %% leading zeros when year are more than four digits prohibited + DT4 = "002002-10-10T17:00:00Z", + ?line {error,_Reason4} = check_simpleType(dateTime,DT4,dummy), + DT5 = "1953-12-31T12:10:10.10+12:00", + ?line {ok,_} = check_simpleType(dateTime,DT5,dummy). + +time(suite) -> []; +time(_Config) -> + %% hh:mm:ss.sss with optional following time zone indicator. + T1 = "13:20:00-05:00", + ?line {ok,_} = check_simpleType(time,T1,dummy), + %% canonical repr. of midnight + T2 = "00:00:00", + ?line {ok,_} = check_simpleType(time,T2,dummy), + T3 = "12:34:56", + ?line {ok,_} = check_simpleType(time,T3,dummy), + T4 = "12:34:56.552", + ?line {ok,_} = check_simpleType(time,T4,dummy), + T5 = "12:34:56.552Z", + ?line {ok,_} = check_simpleType(time,T5,dummy). + +date(suite) -> []; +date(_Config) -> + %% '-'? yyyy '-' mm '-' dd zzzzzz? + %% is + D1 = "2002-10-10+13:00", + ?line {ok,_} = check_simpleType(date,D1,dummy), + D2 = "2002-10-09-11:00", + ?line {ok,_} = check_simpleType(date,D2,dummy), + + D12 = "+2002-13-09-11:00", + ?line {error,_Reason12} = check_simpleType(date,D12,dummy), + D13 = "2002-13-09-11:00", + ?line {error,_Reason13} = check_simpleType(date,D13,dummy), + D14 = "2002-12-39-11:00", + ?line {error,_Reason14} = check_simpleType(date,D14,dummy). + +gYearMonth(suite) -> []; +gYearMonth(_Config) -> + %% '-'? yyyy '-' mm zzzzzz? + GYM1 = "1955-10", + ?line {ok,_} = check_simpleType(gYearMonth,GYM1,dummy), + GYM2 = "-1955-10", + ?line {ok,_} = check_simpleType(gYearMonth,GYM2,dummy), + GYM3 = "1955-10Z", + ?line {ok,_} = check_simpleType(gYearMonth,GYM3,dummy), + GYM4 = "0055-10+10:00", + ?line {ok,_} = check_simpleType(gYearMonth,GYM4,dummy), + GYM5 = "0955-10Z", + ?line {ok,_} = check_simpleType(gYearMonth,GYM5,dummy), + GYM6 = "-11955-01", + ?line {ok,_} = check_simpleType(gYearMonth,GYM6,dummy), + + ?line {error,_} = check_simpleType(gYearMonth,"+2000-10",dummy), + ?line {error,_} = check_simpleType(gYearMonth,"2000-00",dummy), + ?line {error,_} = check_simpleType(gYearMonth,"2000-10+10:70",dummy). + +gYear(suite) -> []; +gYear(_Config) -> + %% '-'? yyyy zzzzzz? + ?line {ok,_} = check_simpleType(gYear,"2000",dummy), + ?line {ok,_} = check_simpleType(gYear,"2000-11:30",dummy), + ?line {ok,_} = check_simpleType(gYear,"-2000",dummy), + ?line {error,_} = check_simpleType(gYear,"0000",dummy). + +gMonthDay(suite) -> []; +gMonthDay(_Config) -> + %% mm '-' dd zzzzzz? + ?line {ok,_} = check_simpleType(gMonthDay,"--05-03",dummy), + ?line {ok,_} = check_simpleType(gMonthDay,"--05-03Z",dummy), + ?line {error,_} = check_simpleType(gMonthDay,"05-00",dummy), + ?line {error,_} = check_simpleType(gMonthDay,"00-03",dummy), + ?line {error,_} = check_simpleType(gMonthDay,"-05-03",dummy). + +gDay(suite) -> []; +gDay(_Config) -> + %% dd zzzzzz? + ?line {ok,_} = check_simpleType(gDay,"---05",dummy), + ?line {ok,_} = check_simpleType(gDay,"---30+03:00",dummy), + ?line {error,_} = check_simpleType(gDay,"-30+03:00",dummy), + ?line {error,_} = check_simpleType(gDay,"---00+03:00",dummy), + ?line {error,_} = check_simpleType(gDay,"---40+03:00",dummy), + ?line {error,_} = check_simpleType(gDay,"05",dummy). + +gMonth(suite) -> []; +gMonth(_Config) -> + %% mm zzzzzz? + ?line {ok,_} = check_simpleType(gMonth,"--05",dummy), + ?line {ok,_} = check_simpleType(gMonth,"--10+03:00",dummy), + ?line {error,_} = check_simpleType(gMonth,"-10+03:00",dummy), + ?line {error,_} = check_simpleType(gMonth,"00+03:00",dummy), + ?line {error,_} = check_simpleType(gMonth,"14",dummy), + ?line {error,_} = check_simpleType(gMonth,"05",dummy). + + +hexBinary(suite) -> []; +hexBinary(_Config) -> + %% an even number of hexadecimal digits ([0-9a-fA-F]). + ?line {ok,_} = check_simpleType(hexBinary,"05",dummy), + ?line {ok,_} = check_simpleType(hexBinary,"aF",dummy), + ?line {ok,_} = check_simpleType(hexBinary, + "0123456789abcdefABCDEF",dummy), + ?line {error,_} = check_simpleType(hexBinary, + "0123456789absdefABCDEF",dummy), + ?line {error,_} = check_simpleType(hexBinary,"aF5",dummy), + ?line {error,_} = check_simpleType(hexBinary,"aFG",dummy). + +base64Binary(suite) -> []; +base64Binary(_Config) -> + %% a-z, A-Z, 0-9, the plus sign (+), the forward slash (/) and the + %% equal sign (=), together with the characters defined in [XML + %% 1.0 (Second Edition)] as white space.(16#9, 16#A, 16#D, 16#20) + ?line {ok,_} = check_simpleType(base64Binary,"05+/AA==",dummy), + ?line {ok,_} = check_simpleType(base64Binary,"05+/AA= =",dummy), + ?line {ok,_} = check_simpleType(base64Binary,"05+/A A= =",dummy), + ?line {ok,_} = check_simpleType(base64Binary,"05+/ AA= =",dummy), + ?line {error,_} = check_simpleType(base64Binary,"05+/AA== ",dummy), + B64B1 = "AbCd GhZz 09w=", + ?line {ok,_} = check_simpleType(base64Binary,B64B1,dummy), + B64B2 = "AbCd GhZ9 0z8 =", + ?line {ok,_} = check_simpleType(base64Binary,B64B2,dummy), + ?line {ok,_} = check_simpleType(base64Binary,"0z8 =",dummy), + ErrB641 = "AbCd GZ9 0z8 =", + ?line {error,_} = check_simpleType(base64Binary,ErrB641,dummy). + +anyURI(suite) -> []; +anyURI(_Config) -> + URI1 = "ftp://ftp.is.co.za/rfc/rfc1808.txt", + URI2 = "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles", + URI3 = "http://www.math.uio.no/faq/compression-faq/part1.html", + URI4 = "mailto:[email protected]", + URI5 = "news:comp.infosystems.www.servers.unix", + URI6 = "telnet://melvyl.ucop.edu/", + ?line ok=ok_loop(anyURI,[URI1,URI2,URI3,URI4,URI5,URI6]). + + +'QName'(suite) -> []; +'QName'(_Config) -> + %% QName ::= (Prefix ':')? LocalPart + %% Prefix ::= NCName + %% LocalPart ::= NCName + ?line {ok,_} = check_simpleType('QName',"abc:def",dummy), + ?line {ok,_} = check_simpleType('QName',"abc",dummy), + ?line {ok,_} = check_simpleType('QName',"abc:def:ijk",dummy). + +'NOTATION'(suite) -> []; +'NOTATION'(_Config) -> + ?line {ok,_} = check_simpleType('NOTATION',"abc:def",dummy), + ?line {ok,_} = check_simpleType('NOTATION',"abc",dummy), + ?line {ok,_} = check_simpleType('NOTATION',"abc:def:ijk",dummy). + +normalizedString(suite) -> []; +normalizedString(_Config) -> + %% not contain the carriage return (#xD), line feed (#xA) nor tab + %% (#x9) characters. + NStr1 = "this string is ok with extra space between characters", + NotNStr1 = "this string is not normalized \t", + NotNStr2 = "neither is this \n string", + NotNStr3 = "or this \r string", + ?line {ok,_} = check_simpleType(normalizedString,NStr1,dummy), + ?line ok=error_loop(normalizedString,[NotNStr1,NotNStr2,NotNStr3]). + +token(suite) -> []; +token(_Config) -> + %% not contain the carriage return (#xD), line feed (#xA) nor tab + %% (#x9) characters, that have no leading or trailing spaces + %% (#x20) and that have no internal sequences of two or more + %% spaces. + T1 = "this string is tokenized with only single space between characters", + NotT1 = "this string is not ok with extra space between characters", + NotT2 = " neither leading space", + NotT3 = "nor trailing space ", + NotT4 = "tabs not \t allowed", + NotT5 = "newlines not allowed\n", + NotT6 = "or \r (carriage return)", + ?line {ok,_} = check_simpleType(token,T1,dummy), + ?line ok=error_loop(token,[NotT1,NotT2,NotT3,NotT4,NotT5,NotT6]). + +language(suite) -> []; +language(_Config) -> + %% strings that conform to the pattern + %% [a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})* + L = "Abra-cadabra-123", + NotL1 = "Abra123-cadabra!", + NotL2 = "Abra-", + NotL3 = "Abracadabra", + NotL4 = "Abra-cadabrrra", + ?line {ok,_} = check_simpleType(language,L,dummy), + ?line ok=error_loop(language,[NotL1,NotL2,NotL3,NotL4]). + +'NMTOKEN'(suite) -> []; +'NMTOKEN'(_Config) -> + N = "name:withoutspace", + NotN1 = "name with space", + NotN2 = "namewith#strang/chars)", + ?line {ok,_} = check_simpleType('NMTOKEN',N,dummy), + ?line {error,_} = check_simpleType('NMTOKEN',NotN1,dummy), + ?line {error,_} = check_simpleType('NMTOKEN',NotN2,dummy). + +'NMTOKENS'(suite) -> []; +'NMTOKENS'(_Config) -> + N1 = "name1 name:2 name:three", + NotN1 = "name na%me", + ?line {ok,_} = check_simpleType('NMTOKENS',N1,dummy), + ?line {error,_} = check_simpleType('NMTOKENS',NotN1,dummy). + +'Name'(suite) -> []; +'Name'(_Config) -> + ?line {ok,_} = check_simpleType('Name',"_valid_Name",dummy). + +'NCName'(suite) -> []; +'NCName'(_Config) -> + ?line {ok,_} = check_simpleType('NCName',"_valid_Name",dummy). + +'ID'(suite) -> []; +'ID'(_Config) -> + ?line {ok,_} = check_simpleType('ID',"_valid_Name",dummy). + +'IDREF'(suite) -> []; +'IDREF'(_Config) -> + ?line {ok,_} = check_simpleType('IDREF',"_valid_Name",dummy). + +'IDREFS'(suite) -> []; +'IDREFS'(_Config) -> + ?line {ok,_} = check_simpleType('IDREFS',"_valid_Name Name2",dummy). + +'ENTITY'(suite) -> []; +'ENTITY'(_Config) -> + ?line {ok,_} = check_simpleType('ENTITY',"_valid_Name",dummy). + +'ENTITIES'(suite) -> []; +'ENTITIES'(_Config) -> + ?line {ok,_} = check_simpleType('ENTITIES',"name name3",dummy). + +integer(suite) -> []; +integer(_Config) -> + IntList = ["-1", "0", "12678967543233", "+100000"], + ?line ok = ok_loop(integer,IntList), + ?line {error,_} = check_simpleType(integer,"1.3",dummy). + +nonPositiveInteger(suite) -> []; +nonPositiveInteger(_Config) -> + NPIList = ["0", "-12678967543233", "-100000"], + ?line ok = ok_loop(nonPositiveInteger,NPIList), + ?line {error,_} = check_simpleType(nonPositiveInteger,"1",dummy). + +negativeInteger(suite) -> []; +negativeInteger(_Config) -> + NIList = ["-1", "-12678967543233", "-100000"], + ?line ok = ok_loop(negativeInteger,NIList), + ?line {error,_} = check_simpleType(negativeInteger,"1",dummy), + ?line {error,_} = check_simpleType(negativeInteger,"0",dummy). + +long(suite) -> []; +long(_Config) -> + L = ["9223372036854775807","-9223372036854775808","-1", "0", + "12678967543233", "+100000"], + ?line ok = ok_loop(long,L), + Err = ["9223372036854775808","-9223372036854775809"], + ?line ok = error_loop(long,Err). + +int(suite) -> []; +int(_Config) -> + L = ["2147483647", "-2147483648", "-1", "0", "126789675", "+100000"], + ?line ok = ok_loop(int,L), + Err = ["2147483648", "-2147483649"], + ?line ok = error_loop(int,Err). + +short(suite) -> []; +short(_Config) -> + L = ["32767", "-32768", "-1", "0", "12678", "+10000"], + ?line ok = ok_loop(short,L), + Err = ["32768", "-32769"], + ?line ok = error_loop(short,Err). + +byte(suite) -> []; +byte(_Config) -> + L = ["-1", "0", "126", "+100", "127", "-128"], + ?line ok = ok_loop(byte,L), + Err = ["128", "-129"], + ?line ok = error_loop(byte,Err). + +nonNegativeInteger(suite) -> []; +nonNegativeInteger(_Config) -> + L = ["1", "0", "12678967543233", "+100000"], + ?line ok = ok_loop(nonNegativeInteger,L), + ?line {error,_} = check_simpleType(nonNegativeInteger,"-1",dummy). + +unsignedLong(suite) -> []; +unsignedLong(_Config) -> + L = ["0", "12678967543233", "100000", "18446744073709551615"], + ?line ok = ok_loop(unsignedLong,L), + Err = ["-1","18446744073709551616"], + ?line ok = error_loop(unsignedLong,Err). + +unsignedInt(suite) -> []; +unsignedInt(_Config) -> + L = ["4294967295", "0", "1267896754", "100000"], + ?line ok = ok_loop(unsignedInt,L), + Err = ["-1","4294967296"], + ?line ok = error_loop(unsignedInt,Err). + +unsignedShort(suite) -> []; +unsignedShort(_Config) -> + L = ["65535", "0", "12678", "10000"], + ?line ok = ok_loop(unsignedShort,L), + Err = ["-1","65536"], + ?line ok = error_loop(unsignedShort,Err). + +unsignedByte(suite) -> []; +unsignedByte(_Config) -> + L = ["255", "0", "126", "100"], + ?line ok = ok_loop(unsignedByte,L), + Err = ["-1","256"], + ?line ok = error_loop(unsignedByte,Err). + +positiveInteger(suite) -> []; +positiveInteger(_Config) -> + L = ["1", "12678967543233", "+100000"], + ?line ok = ok_loop(positiveInteger,L), + Err = ["-1","0"], + ?line ok = error_loop(positiveInteger,Err). + + + +ok_loop(_Type,[]) -> + ok; +ok_loop(Type,[H|T]) -> + ?line {ok,_} = check_simpleType(Type,H,dummy), + ok_loop(Type,T). + +error_loop(_T,[]) -> + ok; +error_loop(Type,[H|T]) -> + ?line {error,_} = check_simpleType(Type,H,dummy), + error_loop(Type,T). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Testing facets +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +length(suite) -> []; +length(_Config) -> + ?line {ok,"string"} = + (xmerl_xsd_type:facet_fun(string,{length,"6"}))("string"), + ?line {error,{length,12,should_be,6}} = + (xmerl_xsd_type:facet_fun(string,{length,"6"}))("stringstring"), + ok. + +minLength(suite) -> []; +minLength(_Config) -> + ?line {ok,"string"} = + (xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("string"), + ?line {error,{minLength,3,should_at_least_be,6}} = + (xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("str"), + ok. + +maxLength(suite) -> []; +maxLength(_Config) -> + ?line {ok,"string"} = + (xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("string"), + ?line {error,{maxLength,12,should_not_be_more_than,6}} = + (xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("stringstring"), + ok. + +pattern(suite) -> []; +pattern(_Config) -> + RE1 = "[a-z]{5}", + ?line {ok,"calle"} = + (xmerl_xsd_type:facet_fun(string,{pattern,RE1})) + ("calle"), + ?line {error,{pattern_mismatch,"cal",RE1}} = + (xmerl_xsd_type:facet_fun(string,{pattern,RE1})) + ("cal"), + RE2 = "[A-Z]{2}\\d\\s\\d[A-Z]{2}", + ?line {ok,"AY2 3BC"} = + (xmerl_xsd_type:facet_fun(string,{pattern,RE2})) + ("AY2 3BC"), + ?line {error,{pattern_mismatch,"AY23BC",RE2}} = + (xmerl_xsd_type:facet_fun(string,{pattern,RE2})) + ("AY23BC"). + +enumeration(suite) -> []; +enumeration(_Config) -> + ?line {ok,"tomat"} = + (xmerl_xsd_type:facet_fun(string,{enumeration,["gurka","tomat","sallad"]}))("tomat"), + ?line {error,{enumeration,"morot",should_be_one_of,["gurka","tomat","sallad"]}} = + (xmerl_xsd_type:facet_fun(string,{enumeration,["gurka","tomat","sallad"]}))("morot"), + ok. + +whiteSpace(suite) -> []; +whiteSpace(_Config) -> + ?line {ok,"gur ka"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"collapse"}))(" gur\tka "), + ?line {ok," gur ka "} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"replace"}))(" gur\nka\t"), + ?line {ok," gurk\na\t"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"preserve"}))(" gurk\na\t"), + ok. + +maxInclusive(suite) -> []; +maxInclusive(_Config) -> + ?line {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} = + (xmerl_xsd_type:facet_fun(integer,{maxInclusive,"2"}))("3"), + + ?line {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} = + (xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"2"}))("3"), + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"2.234"}))("2.235"), + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"-2.222"}))("-2.221"), + + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(double,{maxInclusive,"2.333"}))("INF"), + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(double,{maxInclusive,"1E3"}))("1001"), + + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(float,{maxInclusive,"-0.1"}))("-0"), + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(float,{maxInclusive,"0"}))("0.01"), + + ?line {ok,"3"} = (xmerl_xsd_type:facet_fun(integer,{maxInclusive,"3"}))("3"), + + ?line {ok,"+100000.00"} = + (xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"1E6"}))("+100000.00"), + ?line {ok,"12678967.543222"} = + (xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"12678967.543233"}))("12678967.543222"), + + ?line {ok,"3.2E-11"} = + (xmerl_xsd_type:facet_fun(double,{maxInclusive,"2E-10"}))("3.2E-11"), + ?line {ok,"10E20"} = + (xmerl_xsd_type:facet_fun(double,{maxInclusive,"INF"}))("10E20"), + ?line {ok,"0.127"} = + (xmerl_xsd_type:facet_fun(double,{maxInclusive,"12.78e-2"}))("0.127"), + + ?line {ok,"1267.43233E12"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"1267.43233E12"}))("1267.43233E12"), + ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"33E-25"}))("34E-26"), + + ?line {ok,"2007-10-26T12:00:00+03:00"} = + (xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T12:00:00+03:00"), + ?line {ok,"2007-10-26T11:00:00+03:00"} = + (xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T11:00:00+03:00"), + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T12:00:00"), + + ?line {ok,"P1Y2M3DT10H30M"} = + (xmerl_xsd_type:facet_fun(duration,{maxInclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"), + ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(duration,{maxInclusive,"P1Y2M3DT10H"}))("P1Y2M3DT10H30M"), + ok. + +maxExclusive(suite) -> []; +maxExclusive(_Config) -> + ?line {error,{maxExclusive,"2",not_less_than,"2"}} = + (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"2"}))("2"), + ?line {error,{maxExclusive,"-19999",not_less_than,"-20000"}} = + (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"-20000"}))("-19999"), + + ?line {error,{maxExclusive,"3.0000",not_less_than,"2.9999"}} = + (xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"2.9999"}))("3.0000"), + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"2.234"}))("2.234"), + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"-2.22222222"}))("-2.22222222"), + + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(double,{maxExclusive,"2.333E23"}))("INF"), + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(double,{maxExclusive,"1E3"}))("1000"), + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(double,{maxExclusive,"1E-13"}))("0.999E-12"), + + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(float,{maxExclusive,"-0.1"}))("-0.01E1"), + ?line {error,{maxExclusive,_,not_less_than,_}} = + (xmerl_xsd_type:facet_fun(float,{maxExclusive,"-1E-1"}))("-0"), + + ?line {ok,"-4"} = (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"3"}))("-4"), + + ?line {ok,"+100000.00"} = + (xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"1E6"}))("+100000.00"), + %% must support 18 digits + ?line {ok,"12678967.5432323456"} = + (xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"12678967.5432323457"}))("12678967.5432323456"), + + ?line {ok,"3.2E-11"} = + (xmerl_xsd_type:facet_fun(double,{maxExclusive,"2E-10"}))("3.2E-11"), + ?line {ok,"10E20"} = + (xmerl_xsd_type:facet_fun(double,{maxExclusive,"INF"}))("10E20"), + ?line {ok,"0.127"} = + (xmerl_xsd_type:facet_fun(double,{maxExclusive,"12.78e-2"}))("0.127"), + + ?line {ok,"1267.43233E11"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"1267.43233E12"}))("1267.43233E11"), + ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"33E-25"}))("34E-26"), + + ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{maxExclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"), + + ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{maxExclusive,"2006-09-06T19:17:46Z"}))("2006-09-06T19:17:45Z"), + ok. + +minExclusive(suite) -> []; +minExclusive(_Config) -> + ?line {error,{minExclusive,"2",not_greater_than,"2"}} = + (xmerl_xsd_type:facet_fun(integer,{minExclusive,"2"}))("2"), + ?line {error,{minExclusive,"-20001",not_greater_than,"-20000"}} = + (xmerl_xsd_type:facet_fun(integer,{minExclusive,"-20000"}))("-20001"), + + ?line {error,{minExclusive,"2.9999",not_greater_than,"2.9999"}} = + (xmerl_xsd_type:facet_fun(decimal,{minExclusive,"2.9999"}))("2.9999"), + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(decimal,{minExclusive,"-123456789.123456788"}))("-123456789.123456789"), + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(decimal,{minExclusive,"-2.222222000"}))("-2.22222222"), + + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(double,{minExclusive,"INF"}))("2.333E23"), + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(double,{minExclusive,"1E3"}))("1000"), + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(double,{minExclusive,"1E-13"}))("0.999E-14"), + + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(float,{minExclusive,"-0.1"}))("-0.01E1"), + ?line {error,{minExclusive,_,not_greater_than,_}} = + (xmerl_xsd_type:facet_fun(float,{minExclusive,"-0"}))("-1E-1"), + + ?line {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minExclusive,"-3"}))("4"), + + ?line {ok,"+1000001.00"} = + (xmerl_xsd_type:facet_fun(decimal,{minExclusive,"1E6"}))("+1000001.00"), + %% must support 18 digits + ?line {ok,"12678967.5432323456"} = + (xmerl_xsd_type:facet_fun(decimal,{minExclusive,"12678967.54323234555"}))("12678967.5432323456"), + + ?line {ok,"3.2E-11"} = + (xmerl_xsd_type:facet_fun(double,{minExclusive,"2E-12"}))("3.2E-11"), + ?line {ok,"10E20"} = + (xmerl_xsd_type:facet_fun(double,{minExclusive,"-INF"}))("10E20"), + ?line {ok,"0.1279"} = + (xmerl_xsd_type:facet_fun(double,{minExclusive,"12.78e-2"}))("0.1279"), + + ?line {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"1267.43233E12"}))("126743.233E11"), + ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"33E-27"}))("34E-26"), + + ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minExclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"), + + ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minExclusive,"2006-09-06T19:17:44Z"}))("2006-09-06T19:17:45Z"), + ok. + +minInclusive(suite) -> []; +minInclusive(_Config) -> + ?line {error,{minInclusive,"1",not_greater_than_or_equal_with,"2"}} = + (xmerl_xsd_type:facet_fun(integer,{minInclusive,"2"}))("1"), + ?line {error,{minInclusive,"-20001",not_greater_than_or_equal_with, + "-20000"}} = + (xmerl_xsd_type:facet_fun(integer,{minInclusive,"-20000"}))("-20001"), + + ?line {error,{minInclusive,"2.9999",not_greater_than_or_equal_with, + "2.99999"}} = + (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"2.99999"}))("2.9999"), + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"-123456789.123456788"}))("-123456789.123456789"), + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"-2.222222000"}))("-2.22222222"), + + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(double,{minInclusive,"2.333E23"}))("-INF"), + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(double,{minInclusive,"1E3"}))("100"), + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(double,{minInclusive,"1E-13"}))("0.999E-14"), + + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(float,{minInclusive,"-0.1"}))("-0.1E1"), + ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} = + (xmerl_xsd_type:facet_fun(float,{minInclusive,"-0"}))("-1E-1"), + ?line {error,_}=(xmerl_xsd_type:facet_fun(float,{minInclusive,"10E-10"}))("10E-11"), + + ?line {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minInclusive,"-3"}))("4"), + + ?line {ok,"+1000000.00"} = + (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"1E6"}))("+1000000.00"), + %% must support 18 digits + ?line {ok,"12678967.5432323456"} = + (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"12678967.54323234555"}))("12678967.5432323456"), + + ?line {ok,"3.2E-11"} = + (xmerl_xsd_type:facet_fun(double,{minInclusive,"2E-12"}))("3.2E-11"), + ?line {ok,"10E20"} = + (xmerl_xsd_type:facet_fun(double,{minInclusive,"-INF"}))("10E20"), + ?line {ok,"0.1279"} = + (xmerl_xsd_type:facet_fun(double,{minInclusive,"12.78e-2"}))("0.1279"), + + ?line {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"1267.43233E12"}))("126743.233E11"), + ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"33E-27"}))("34E-26"), + ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"340E-27"}))("34E-26"), + + ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minInclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"), + + ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minInclusive,"2006-09-06T19:17:45Z"}))("2006-09-06T19:17:45Z"), + ok. + +totalDigits(suite) -> []; +totalDigits(_Config) -> + ?line {error,{totalDigits,4,to_many_digits}} = + (xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("3456"), + ?line {error,{totalDigits,4,to_many_digits}} = + (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"3"}))("00345.600"), + + ?line {ok,"555"} = + (xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("555"), + ?line {ok,"555"} = + (xmerl_xsd_type:facet_fun(integer,{totalDigits,"7"}))("555"), + ?line {ok,"555.555"} = + (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555"), + ?line {ok,"555.555000000"} = + (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555000000"), + ok. + +fractionDigits(suite) -> []; +fractionDigits(_Config) -> + ?line {error,{fractionDigits,3,to_many_digits_in,"555.555000000"}} = + (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"2"}))("555.555000000"), + ?line {error,{fractionDigits,6,to_many_digits_in,"555.555001"}} = + (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.555001"), + + ?line {ok,"555.55500"} = + (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.55500"), + ?line {ok,"555"} = + (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555"), + ?line {ok,"555.000"} = + (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"0"}))("555.000"), + + ?line {ok,"555"} = + (xmerl_xsd_type:facet_fun(integer,{fractionDigits,"0"}))("555"), + ok. + +%% some block testing of dateTime and duration comparisons +compare_dateTime(suite) -> []; +compare_dateTime(_Config) -> + %% comparison results according to table in section 3.2.7.4 of XML + %% Schema part 2 + ?line lt = xmerl_xsd_type:compare_dateTime("2000-01-15T00:00:00", + "2000-02-15T00:00:00"), + ?line gt = xmerl_xsd_type:compare_dateTime("2000-02-15T00:00:00", + "2000-01-15T00:00:00"), + + ?line lt = xmerl_xsd_type:compare_dateTime("2000-01-15T12:00:00", + "2000-01-16T12:00:00Z"), + ?line gt = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z", + "2000-01-15T12:00:00"), + + ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-01T12:00:00", + "1999-12-31T23:00:00Z"), + ?line indefinite = xmerl_xsd_type:compare_dateTime("1999-12-31T23:00:00Z", + "2000-01-01T12:00:00"), + + ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00", + "2000-01-16T12:00:00Z"), + ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z", + "2000-01-16T12:00:00"), + + ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T00:00:00", + "2000-01-16T12:00:00Z"), + ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z", + "2000-01-16T00:00:00"), + + %% example in appendix E.1 in XML Schema part 2. + ?line {2001,4,17,19,23,17.3000,{pos,0,0}} = + xmerl_xsd_type:add_duration2dateTime("2000-01-12T12:13:14Z", + "P1Y3M5DT7H10M3.3S"). + +compare_duration(suite) -> []; +compare_duration(_Config) -> + %% order relations according to section 3.2.6.2 in XML Schema + %% part2. + ?line gt = xmerl_xsd_type:compare_durations("P1Y","P364D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P1Y","P365D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P1Y","P366D"), + ?line lt = xmerl_xsd_type:compare_durations("P1Y","P367D"), + + ?line gt = xmerl_xsd_type:compare_durations("P1M","P27D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P28D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P29D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P30D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P31D"), + ?line lt = xmerl_xsd_type:compare_durations("P1M","P32D"), + + ?line gt = xmerl_xsd_type:compare_durations("P5M","P149D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P150D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P151D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P152D"), + ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P153D"), + ?line lt = xmerl_xsd_type:compare_durations("P5M","P154D"). + + +po(suite) -> []; +po(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "po.xml"]),[]), + ?line {E,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po.xsd"]),E,[]). + +po1(suite) -> []; +po1(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "po1.xml"]),[]), + ?line {E2,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1.xsd"]),E,[]), + ?line ok = xmerl_test_lib:cmp_element(E,E2). + +po2(suite) -> []; +po2(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "po2.xml"]),[]), + ?line {E2,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1.xsd"]),E,[]), + ?line ok = xmerl_test_lib:cmp_element(E,E2). + +ipo(suite) -> []; +ipo(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "ipo.xml"]),[]), + ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "ipo.xsd"]),E,[]), + ?line ok = xmerl_test_lib:cmp_element(E,VE). + +ipo_redefine(suite) -> []; +ipo_redefine(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "ipo_redefine.xml"]),[]), + ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "ipo_redefine.xsd"]),E,[]), + ?line ok = xmerl_test_lib:cmp_element(E,VE). + +'4Q99'(suite) -> []; +'4Q99'(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "4Q99.xml"]),[]), + %% the import in report.xsd lacks schemaLocation, so the imported + %% namespace definitions have to be loaded separately. + ?line {ok,S} = + xmerl_xsd:process_schema(filename:join([?config(data_dir,Config), + "ipo.xsd"])), + ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "report.xsd"]),E,[{state,S}]), + ?line ok = xmerl_test_lib:cmp_element(E,VE), + + %% report2.xsd has an import element with a schemaLocation attribute + ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "report2.xsd"]),E,[]). + +small(suite) -> []; +small(Config) -> + ?line {E=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "small.xml"]),[]), + ?line {VE=#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "small.xsd"]),E,[]), + ?line #xmlElement{attributes=Atts,content=C} = VE, + ?line C = E#xmlElement.content, + %% The attribute orderStatus with default value was absent in small.xml + + %% Test of validation "on the fly" when parsing XML. + ?line {VE,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "small.xml"]), + [{validation,schema}, + {schemaLocation,[{"small",filename:join(?config(data_dir,Config),"small.xsd")}]}]), + ?line {VE,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "small.xml"]), + [{validation,schema}]), + ?line true = lists:keymember(orderStatus,#xmlAttribute.name,Atts). + +complexType1(suite) -> []; +complexType1(Config) -> + ?line {E1=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "complexTypes1.xml"]),[]), + ?line {VE1=#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "complexTypes.xsd"]),E1,[]), + ?line ok = xmerl_test_lib:cmp_element(E1,VE1), + + ?line {E2=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "complexTypes2.xml"]),[]), + ?line {VE2=#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "complexTypes.xsd"]),E2,[]), + ?line ok = xmerl_test_lib:cmp_element(E2,VE2). + +model_group_all(suite) -> []; +model_group_all(Config) -> + ?line {E=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "po1.xml"]),[]), + ?line {E,_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1_all.xsd"]),E,[]), + + ?line {E1=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "po1_all1.xml"]),[]), + ?line {E1,_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1_all.xsd"]),E1,[]), + + ?line {E2=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "po1_all2.xml"]),[]), + ?line {E2,_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1_all.xsd"]),E2,[]), + + ?line {E3=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "po1_all_err1.xml"]),[]), + ?line {error,_Reason1} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1_all.xsd"]),E3,[]), + + + ?line {E4=#xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "po1_all_err2.xml"]),[]), + ?line {error,_Reason2} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po1_all.xsd"]),E4,[]). + +substitutionGroup(suite) -> []; +substitutionGroup(Config) -> + ?line {E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "ipo_substGroup.xml"]),[]), + ?line {E,_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "ipo_substGroup.xsd"]),E,[]). +attributeGroup(suite) -> []; +attributeGroup(Config) -> + ?line {E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "po_attrGroup.xml"]),[]), + ?line {E,_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "po_attrGroup.xsd"]),E,[]). +test_key1(suite) -> []; +test_key1(Config) -> + ?line {E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "vehicle2.xml"]),[]), + ?line {E,_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "vehicle.xsd"]),E,[]), + + ?line {E2,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "vehicle.xml"]),[]), + ?line {error,L2} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "vehicle.xsd"]),E2,[]), + ?line 10 = erlang:length(L2), + + ?line {E3 = #xmlElement{},_} = + xmerl_scan:file(filename:join([?config(data_dir,Config), + "vehicle3.xml"]),[]), + ?line {E3 = #xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "vehicle.xsd"]),E3,[]). + +sis1(suite) -> []; +sis1(Config) -> + ?line {E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config),sis, + "instance.xml"]),[]), + ?line {#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis, + "IntegratedSite.xsd"]),E,[]). +sis2(suite) -> []; +sis2(Config) -> + ?line {BS_E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config),sis, + "bs_mim.xml"]),[]), + ?line {SW_E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config),sis, + "swm_mim.xml"]),[]), + ?line {HW_E,_} = + xmerl_scan:file(filename:join([?config(data_dir,Config),sis, + "hwm_mim.xml"]),[]), + + ?line {#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis, + "mim.xsd"]),BS_E,[]), + ?line {#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis, + "mim.xsd"]),SW_E,[]), + ?line {#xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis, + "mim.xsd"]),HW_E,[]). + +gpx(suite) -> []; +gpx(Config) -> +% case application:start(inets) of +% ok -> +% http:set_options([{proxy, {{"www-proxy.ericsson.se", 8080}, +% ["localhost"]}}]), +% URI = "http://www.topografix.com/GPX/Private/TopoGrafix/0/2/topografix.xsd", +% case http:request(get, {URI, []}, [], []) of +% {ok,{{_Version, 200, _ReasonPhrase}, _Headers, _Body}} -> +% XML = filename:join([?config(data_dir,Config),gpx, +% "clementine_loop.gpx"]), +% ?line {E=#xmlElement{},_} = xmerl_scan:file(XML), +% code:add_patha(filename:join([?config(data_dir,Config), +% "../proprietary"])), +% Schema = filename:join([?config(data_dir,Config),gpx, +% "gpx.xsd"]), +% ?line {E,_} = +% xmerl_xsd:process_validate(Schema,E, +% [{fetch_fun,fun mylib:fetch/2}]); +% _ -> +% {skip,no_connection} +% end; +% _ -> +% {skip,no_connection} +% end. + {skip,["GPS eXchange Format is skipped for now"]}. + +state2file_file2state(suite) -> []; +state2file_file2state(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "po.xml"]),[]), + ?line {ok,S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"po.xsd"])), + ?line {E,_} = xmerl_xsd:validate(E,S), + ?line ok = xmerl_xsd:state2file(S), + ?line {ok,S} = xmerl_xsd:file2state(filename:join([?config(data_dir,Config),"po.xss"])), + ?line {E,_} = xmerl_xsd:validate(E,S), + + ?line ok = xmerl_xsd:state2file(S,filename:join([?config(data_dir,Config),"po_state"])), + ?line {ok,S} = xmerl_xsd:file2state(filename:join([?config(data_dir,Config),"po_state.xss"])), + + ?line {E,_} = xmerl_xsd:validate(E,S). + + +union(suite) -> []; +union(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "instance.xml"])), + + ?line {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),"measCollec.xsd"]),E). + + +ticket_6910(suite) -> []; +ticket_6910(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + sis,"dummy_action_mim.xml"])), + ?line {_E2 = #xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + sis,"mim2.xsd"]),E). +ticket_7165(suite) -> []; +ticket_7165(Config) -> + %% The validation option seems not to work + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "ticket_7288.xml"]), + [{validation, schema}]), + %% The option xsdbase gave {error, enoent}. + ?line {ok,_} = xmerl_xsd:process_schema("CxDataType_Rel5.xsd", [{xsdbase, ?config(data_dir,Config)}]). + + + +ticket_7190(suite) -> []; +ticket_7190(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), + "int.xml"])), + ?line {_E2 = #xmlElement{},_} = + xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), + "simple_int.xsd"]),E). +ticket_7288(suite) -> []; +ticket_7288(Config) -> + %% The schema table in the state where deleted by xmerl_xsd:validate if there was an error. + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),"ticket_7288.xml"])), + + ?line {ok,S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"CxDataType_Rel5.xsd"])), + + ?line {error, EL} = xmerl_xsd:validate(E, S), + + ?line {error, EL} = xmerl_xsd:validate(E, S). + +ticket_7736(suite) -> []; +ticket_7736(Config) -> + DataDir = ?config(data_dir,Config), + ?line {ok, State } = + xmerl_xsd:process_schema(filename:join([DataDir,"enum_bug.xsd"])), + + ?line {Entity ,_} = + xmerl_scan:file(filename:join([DataDir,"enum_bug.xml"])), + + ?line {#xmlElement{},_} = xmerl_xsd:validate(Entity, State). + +ticket_8599(suite) -> []; +ticket_8599(Config) -> + ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),"ticket_8599.xml"])), + + ?line {ok, S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"ticket_8599.xsd"])), + + ?line {{xmlElement,persons,persons,_,_,_,_,_,_,_,_,_},_GlobalState} = xmerl_xsd:validate(E, S). + |