m CEc@sdZdkZdkZdklZlZdZdZdZdfdYZ dZ d efd YZ d Z e d joeid dndS(sTests of ZConfig schemas.N(sTestBases CONFIG_BASEcCst|iS(N(tstrtvaluetupper(R((t8/data/zmath/zope/lib/python/ZConfig/tests/test_schema.pyt uppercasescCs t|S(N(t MySectionR(R((Rt appsectionscCs|iS(N(tsectiontfoo(R((Rtget_foosRcBstZdZRS(NcCs ||_dS(N(Rtselftconf(R R((Rt__init__!s(t__name__t __module__R (((RR scCs t|i}|i|S(N(tlistRtgetSectionAttributestLtsort(RR((Rtget_section_attributes%s tSchemaTestCasecBsWtZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCRS(Bs)Tests of the basic schema support itself.cCsX|id}|it|d|it|d|iti|i ddS(Ns icCs|dS(Ni(tschema(R((Rt2sR( R tload_schema_textRt assertEqualtlent assertRaisest IndexErrortZConfigtConfigurationErrortgetinfo(R R((Rttest_minimal_schema.s    cCs)|idd\}}|i|dS(Ns simple.xmls simple.conf(R t load_bothRR t_verifySimpleConf(R R R((Rt test_simple6scCs|i}||id||id||id||id|i}||i ||i ||i ||i ||i ||i dS(Ntabci f12.02i(R RteqR tvar1tint_vart float_vartneg_inttassert_tcheckt true_var_1t true_var_2t true_var_3t false_var_1t false_var_2t false_var_3(R R R$R*((RR!:s     cCstd}|id||||f}|i|d}|i}||i d||i d||i dddg||i d d dg|t |d d d dgdS(Ns .uppercases abc abc not lower case s a qwerty c upp c er c case tQWERTYtABCtUPPtERtCASEtNOTtLOWERtatbtctd(R tdtnameR RRtload_config_textR RR$R8R9R:R;R(R R R<R$R((Rttest_app_datatypeIs     cCsw|idt}|i|d}|it|t|ii }|it|t|i |ii ddS(Ns-
s sample 42 i*( R RR RR=R R)t isinstanceRtsectto1Rtsample(R RAR R((Rttest_app_sectiontypehs   cCsm|id}|i|d}|i|idj |i|idj |i t |ddgdS(Ns
s
ts1ts2( R RRR=R R)RDtNoneRERR(R R R((Rttest_empty_sections{s  cCs|id}|i|d}|i}||iiiid||iiid||iid|t |dg|t |iddg|t |iiddg|t |iiidgdS(NsK
s key sect3-value key sect2-value s type1-values sect2-values sect3-valueR@tkey( R RRR=R RR$R@RHR(R R$R R((Rttest_deeply_nested_sectionss       cCs0|id}|i|ddd}g}|ihd|i<d|i<|i|ddg|gg}|ihdd<d|i<|i||g|i|i ddg|i|i d dg|i|i d d d g|i|i g|it|d dddgdS(Ns 1 2 3 4 5 s a foo a bar c 41 c 42 c 43 t num_handlersiR#tDEFRtbarii)i*i+R8R9R:R;(R RRR=R RthandlerstappendRRFR8R9R:R;R(R RR R((Rttest_multivalued_keyss %"cCs/|id}|iti|i|ddS(Nsi t(R RRRRRR=(R R((Rttest_multikey_requireds cCs/|id}|iti|i|ddS(Ns RP(R RRRRRR=(R R((Rttest_multisection_requireds cCs/|id}|iti|i|ddS(Nsd RP(R RRRRRR=(R R((Rttest_key_required_but_missings cCs/|id}|iti|i|ddS(Ns
RP(R RRRRRR=(R R((Rt!test_section_required_but_missings cCs|iti|iddS(Ns text (R RRt SchemaErrorR(R ((Rttest_key_default_elementscCs|id}|i|ddd}|it|ddg|iti |i hdt <dt <d t <|iti |i hdS( Ns s{ a foo b bar RJiR8R9R#R2tdef( R RRR=R RRRRRRMtid(R R R((Rttest_bad_handler_maps s   ( cCs|id}|i|ddd}g}|ihd|i<d|i<d|i<|i}|i }|i ||||gdS(NsY
s RJiR8R9R:( R RRR=R RRMRNt sect_outertoutert sect_innertinnerR(R R[RR]R R((Rttest_handler_orderings 1  cCsA|id}|iti|i|d|i|d}dS(Ns 
sb s (R RRRRRR=R (R R R((Rttest_duplicate_section_names4s   cCs|iti|iddS(Ns (R RRRUR(R ((Rt#test_disallowed_duplicate_attributeIscCs|iti|iddS(Ns(R RRRUR(R ((Rttest_unknown_datatype_nameQs cCs|id}|id}|i|i|id}|i|i |i|id|j|id}|i|i |i|id|j|i t i |id|i||j |i |d}|i}|t|dg|t|id||idid ||id id ||id id ||idid|i|idi|j|i|id i|j|i|id i|j|i|idi|jdS(Ns" This is an abstract section type. tgrouptt1tt2s k1 value1 k2 value2 tgiitdefault1itvalue1itdefault2itvalue2(R RRtgettypettR)t isabstractRct getsubtypeRdRRRR=R RR$RRRetk1tk2tgetSectionDefinition(R RdRkR RcR$R((Rttest_load_abstracttypeUs0     cCs|id}|id}|i|id|idj|i|d}|i |i i d|i t |dg|i t |i gdS(Ns
Rbtextrastthing( R RRRjtabstypeR)RmR=R RRstgetSectionTypeR(R RtR R((Rttest_abstracttype_extensions%cCs6|iti|id|iti|iddS(Ns s (R RRRUR(R ((Rt"test_abstracttype_extension_errorsscCsZ|id}|i|d}|i|ihdd<|it|dgdS(Ns s some-key 42ssome-keyi*tkeymap(R RRR=R RRxR(R R R((Rttest_arbitrary_keyscCsG|id}|i|d}|i|ihdddg<dS(Ns s some-key 42 some-key 43 ssome-keyi*i+(R RRR=R RRx(R R R((Rt test_arbitrary_multikey_requireds  cCsc|id}|i|d}|i|iihdddg<|it|dgdS(Ns
s some-key 42 some-key 43 ssome-keyt42t43tstuff( R RRR=R RR}RxR(R R R((Rt test_arbitrary_multikey_optionals   %cCs;|id}|i|d}|i|iihdS(Ns
s (R RRR=R RR}Rx(R R R((Rt&test_arbitrary_multikey_optional_emptyscCsS|id}|i|d}|i|ihdddg<ddg<dS(Ns! value-a1 value-a2 value-b RPR8svalue-a1svalue-a2R9svalue-b(R RRR=R RRx(R R R((Rt%test_arbitrary_multikey_with_defaultss cCs|iti|iddS(Ns value-a1 (R RRRUR(R ((Rt,test_arbitrary_multikey_with_unkeyed_defaults cCsJ|id}|i|d}|i|ihdd<dd<dS(Ns value-a value-b RPR8svalue-aR9svalue-b(R RRR=R RRx(R R R((Rt test_arbitrary_key_with_defaultsscCs|iti|iddS(Ns value-a1 (R RRRUR(R ((Rt'test_arbitrary_key_with_unkeyed_defaults cCs|id}|i|d}|i|id|i|id|i|ihdd<|it |ddd gdS( Ns s some-key 42 k2 3 tv1issome-keyi*RnRoRx( R RRR=R RRnRoRxR(R R R((Rttest_arbitrary_keys_with_others s  cCs/|id}|iti|i|ddS(Nsx s# empty config file(R RRRRRR=(R R((Rttest_arbitrary_key_missings cCs|iti|iddS(Ns (R RRRUR(R ((Rttest_arbitrary_key_bad_schema(scCsa|id}|i|ig|id}|i}|i|i|dgdS(Ns library.xmls
tused(R t load_schemaRRtgetrequiredtypesRRR(R RR((Rttest_getrequiredtypes0s   cCsg|id}|i}|i|i|ddg|id}|i|idgdS(Ns library.xmlstype-astype-bs
tunused(R RRtgetunusedtypesRRRR(R RR((Rttest_getunusedtypes?s   cCsJ|idd\}}|i}g}||_|i|i|jdS(Ns simple.xmls simple.conf(R R RR temptytorigtnewR)(R RRR R((Rttest_section_value_mutationNs   cCs;|id}|i|d}|i|iiddS(Ns
sR(R RRR=R RtattrRH(R R R((Rttest_simple_anonymous_sectionUscCs;|id}|i|d}|i|iiddS(Ns
sR(R RRR=R RRRH(R R R((Rt*test_simple_anonymous_section_without_nameascCsp|id}|i|d}|i|iid|i|iid|i t i |i|ddS(Ns
s Rtnames( R RRR=R RRRHtgetSectionNameRRR(R R R((Rttest_simple_anynamed_sectionns  cCs%|id}|i|d}dS(Nsq
s (R RRR=R (R R R((Rt test_nested_abstract_sectiontypes cCs%|id}|i|d}dS(Nsh
s (R RRR=R (R R R((Rt-test_nested_abstract_sectiontype_without_names cCsid}||d}|d|d|d|d|d|d|d |d dS( Nsp %s cCs'||}|iti|i|dS(N(ttemplateRsttextR RRRUR(RsR RR((RR*s  s&s+s+s0s3
s/
s8s4(RR R*(R R*R((Rttest_reserved_attribute_prefixs       cCs|id}|id}|i|d}|i|id|i|i i d|it |ddg|it |i dgdS( Nsp
Rkss tkey-defaults skey-defaultRttkeytskey( R RRRjRkR=R RRRRR(R RkR R((Rttest_sectiontype_as_schemas cCsd}d}|idd|}|i|d|}|i|i||i|i d|i|d|}|i|i||i|i ddS( Nsfile:///tmp/fake-url-1.xmlsfile:///tmp/fake-url-2.xmls~ turlRPis # comment key splat i( t schema_urlt config_urlR RRtget_data_conversion_errorteRRtlineno(R RRRR((Rttest_datatype_conversion_errors  cCsJy|i||d|Wntij o }|SnX|iddS(NRs$expected ZConfig.DataConversionError( R R=RtsrcRRtDataConversionErrorRtfail(R RRRR((RRs  cCs>|id}|i|d}|it|iddS(Ns s i(R RRR=R RRtthings(R R R((Rttest_numeric_section_namescCs|id}|i|d}|i}||iid||ii d|t |dg|t |iddgdS(Ns8
s k1 k1-value k2 k2-value sk1-valuesk2-valuetsRnRo( R RRR=R RR$RRnRoR(R R$R R((Rttest_sectiontype_extensions   cCsO|iti|id|iti|id|iti|iddS(Ns s s (R RRRUR(R ((Rt!test_sectiontype_extension_errors s  cCsp|id}|i|d}|i|iid|i|iid|it|iddgdS(Nsc
si foo bar Foo BAR RLtBARtFooR( R RRR=R RRRR(R R R((Rt test_sectiontype_derived_keytype#s   cCs|id}|i|d}|iii}|i |i |d d g|i ii}|i |i |d g|i t |dd gdS( Ns
s ident1 foo Ident2 bar EXAMPLE.COM foo tIdent2RLtident1Rs example.comtbasetderived(Rsbar(Rsfoo(s example.comsfoo( R RRR=R RtmaptitemsRRRRR(R RR R((Rt!test_sectiontype_override_keytype:s    cCsW|id}|i|d}|iii}|i|i |ddgdS( Nsi 42 24
sRLt24RR{(sbarR(sfoos42( R RRR=R R@tmappingRRR(R RR R((Rt#test_keytype_applies_to_default_keyWs   cCs|iti|iddS(Nsi 42 24
(R RRRUR(R ((Rt,test_duplicate_default_key_checked_in_schemahs  cCs|iti|iddS(Ns/ 42 42
(R RRRUR(R ((Rt8test_default_keys_rechecked_clash_in_derived_sectiontypevs cCs|id}|i|d}|iii}|i|i |ddgfddgfg|i ii}|i|i |dddgfgdS(Nsx 42 42
s4 RR{R( R RRR=R RRRRRR@(R RR@R R((Rt=test_default_keys_rechecked_dont_clash_in_derived_sectiontypes   ( cCs8|id}|i|d}|i|iddS(NsS
sO foo bar RL(R RRR=R Rtsplat(R R R((Rt#test_sectiontype_inherited_datatypes  cCs|id}|i|d}|i}|it|d|i}|i |i|d d g|i t i |i|ddS( Ns s5host.example.com 127.0.0.1 www.example.org 127.0.0.2 ishost.example.coms 127.0.0.1swww.example.orgs 127.0.0.2sabc. 127.0.0.1(shost.example.coms 127.0.0.1(swww.example.orgs 127.0.0.2(R RRR=R ttableRRRRRRRR(R RR RR((Rttest_schema_keytypes      cCs|id}|i|d}|i|id|i|id|it|ddg|i t i |i|d|i t i |iddS( Ns sFoo Foo-value foo foo-value s foo-values Foo-valueRRs FOO frob s ( R RRR=R RRRRRRRRU(R R R((Rttest_keytype_identifiers    cCs|iddS(Ns(R R(R ((Rttest_datatype_casesensitivityscCs6|idttf}|i|i|ddS(Ns
s simple.conf(R Rt CONFIG_BASERR!t load_config(R R((Rttest_simple_extendsscCs!|iti|idtdS(Ns&(R RRRURR(R ((Rttest_extends_fragment_failures cCs|idttfdS(Ns
(R RR(R ((Rttest_multi_extends_implicit_OKscCs|idttfdS(Ns
(R RR(R ((Rt'test_multi_extends_explicit_datatype_OKscCs|idtttfdS(Ns
(R RRR (R ((Rt&test_multi_extends_explicit_keytype_OK scCs'|iti|idttfdS(NsX (R RRRURR(R ((Rt$test_multi_extends_datatype_conflicts cCs'|iti|idttfdS(NsV (R RRRURR(R ((Rt#test_multi_extends_keytype_conflicts cCs|iti|iddS(Ns foo bar (R RRRUR(R ((Rt#test_multiple_descriptions_is_errors (DR Rt__doc__RR"R!R>RCRGRIRORQRRRSRTRVRYR^R_R`RaRqRvRwRyRzR~RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR(((RR+s        ' &      3                                 cCs titS(N(tunittestt makeSuiteR(((Rt test_suite(st__main__t defaultTestR(RRRtZConfig.tests.supporttTestBaseRRRR RRRRR tmain( RRRRRRRRRR R((Rt?s