m Ec@s*dZdkZdkZdklZdkZdkZeiZde_dkl Z dk l Z l Z l Z ee_deifdYZdZd efd YZd efd YZd efdYZdZedjo1eieZeieodpdndS(s+Tests for the HTMLTALParser code generator.N(sutilscOsdS(N(tNone(tatk((t;/data/zmath/zope/lib/python/TAL/tests/test_htmltalparser.pyts(s HTMLTALParser(s TAL_VERSIONsTALErrors METALErrort TestCaseBasecBs\tZdZdZdefd gZgZdZhdZghdZ e dZ RS( NttversiontmodethtmlcCs|ox|oq|d\}}|d\}}|ido=|ido-|d t|d|dg|dSqn||S(Niitrawtexti(tp1tp2top1targs1top2targs2t startswithR (tselfR R R RRR((Rt_merge-s  1cCsti}|i|i||i|i\}}|i |i |}|i ||i }|i||jdti|dti||i||jdti|dti|dS(Ns Program: s Expected: sMacros: (t HTMLTALParsertparsert parseStringRtprologuetsourcetepiloguetgetCodet got_programt got_macrosRtinitial_programtprogramt final_programtassert_tpprinttpformattmacros(RRRR#RRR((Rt _run_check7s %cCsIti}|i||i\}}ti|ti|dS(N(RRRRRRRR!(RRRR#RRR((Rt _get_checkDs    cCs#||d}|i||dS(NcCs+ti}|i|i||idS(N(RRRRRRR(RRR((RtparseLs (RRR&t assertRaisestexc(RRR(R&((Rt _should_errorKs(smodeR ( t__name__t __module__RRt TAL_VERSIONRRRR$R%tTALErrorR)(((RR&s cCsRd|jo+d|t||iddffSnd|t|ffSdS(s0Compile raw text to the appropriate instruction.s t rawtextColumnit rawtextOffsetN(tstlentrfind(R0((RR Rs +tHTMLTALParserTestCasescBsbtZdZdZdZdZdZdZdZdZ d Z d Z RS( NcCs|idtdgdS(Ns,My Title</html>s6���<html a="b" b="c" c="d"><title>My Title(RR$R (R((Rtcheck_code_simple_identity\scCs6|idtdg|idtdgdS(Nss)s*
sH
(RR$R (R((Rt check_code_implied_list_closingsbscCs6|idtdg|idtdgdS(NsF

text
head
cell s}

text

cell
head
cell
cell
s8
cell
cell
sL
cell
cell
(RR$R (R((Rt!check_code_implied_table_closingsks  cCs#|d}|iti|dS(NcCs|idgdS(Ns(RR$(R((Rtcheckys(RR7R'Rt NestingError(RR7((Rtcheck_code_bad_nestingxs cCsStdg}|id||id||id||id|dS(Nsssss(R toutputRR$(RR:((Rtcheck_code_attr_syntax}s cCs6|idtdg|idtdgdS(Ns's+s s(RR$R (R((Rtcheck_code_attr_valuesscCsh|idtdg|idtdg|idtdg|idtdgdS( Ns!s s ss ss s(RR$R (R((Rt"check_code_attr_entity_replacementscCs|idtdgdS(Nss(RR$R (R((Rtcheck_code_attr_funky_namesscCs|idtdgdS(Ns (RR$R (R((Rtcheck_code_pcdata_entityrefscCs|idtdgdS(Nss(RR$R (R((Rtcheck_code_short_endtagss( R*R+R4R5R6R9R;R<R=R>R?R@(((RR3Zs      tMETALGeneratorTestCasescBs5tZdZdZdZdZdZRS(NcCs|idgdS(NR(RR$(R((Rt check_nullscCsl|iddd gfftdg}dd fd d|ffg}hd|<}|id ||dS(NtstartTagtpsmetal:define-macrotMtmetalsbooh

t setPositioniit defineMacros"

booh

(smetal:define-macroRERF(ii(RRR tmacroRR#R$(RRIRR#((Rtcheck_define_macros(c CsM|iddd fdddhdd dgfftd gffgdS(Ns

booh

RGiituseMacroREs$M$RCRDsmetal:use-macroRFsbooh

(ii(smetal:use-macroREsmetal(RR$R (R((Rtcheck_use_macrosc Cs|idddgfftdddfd d dd dgfftdgfftdg}ddfdd|ffg}hd|<}|id||dS(NRCRDsmetal:define-macroRERFtfooRGiit defineSlottStspansmetal:define-slots spamsbar

iRHsK

foospambar

(smetal:define-macroREsmetal(ii(smetal:define-slotROsmetal(ii(RRR RIRR#R$(RRIRR#((Rtcheck_define_slots d  cCs|idddfdddhdd d dgfftd gfoospambar

RGiiRKREs$M$RORCRPsmetal:fill-slotRFs spamRDsmetal:use-macroRMitfillSlotsbar

(ii(smetal:fill-slotROsmetal(smetal:use-macroREsmetal(ii(smetal:fill-slotROsmetal(RR$R (R((Rtcheck_fill_slots (R*R+RBRJRLRQRS(((RRAs   tTALGeneratorTestCasescBsgtZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$d$Z%d%Z&d&Z'd'Z(RS((NcCs|idgdS(NR(RR$(R((RRBsc Cs\|idddfdhdd

RGiit beginScopes tal:definesxyzzy string:spamtsetLocaltxyzzys $string:spam$RCRDttaltendScopes

(ii(sxyzzys $string:spam$(s tal:definesxyzzy string:spamRX(RR$R (R((Rtcheck_define_1sc Cs\|idddfdhdd

RGiiRUs tal:defineslocal xyzzy string:spamRVRWs $string:spam$RCRDRXRYs

(ii(sxyzzys $string:spam$(s tal:defineslocal xyzzy string:spamstal(RR$R (R((Rtcheck_define_2sc Cs\|idddfdhdd

RGiiRUs tal:definesglobal xyzzy string:spamt setGlobalRWs $string:spam$RCRDRXRYs

(ii(sxyzzys $string:spam$(s tal:definesglobal xyzzy string:spamstal(RR$R (R((Rtcheck_define_3sc Cse|idddfdhdd

RGiiRUs tal:definesx string:spam; y xRVtxs $string:spam$tys$x$RCRDRXRYs

(ii(R^s $string:spam$(R_s$x$(s tal:definesx string:spam; y xstal(RR$R (R((Rtcheck_define_4sc Cse|idddfdhdd

RGiiRUs tal:definesx string:;;;;; y xRVR^s $string:;;$R_s$x$RCRDRXRYs

(ii(R^s $string:;;$(R_s$x$(s tal:definesx string:;;;;; y xstal(RR$R (R((Rtcheck_define_5sc Csn|idddfdhdd

RGiiRUs tal:defines$x string:spam; global y x; local z yRVR^s $string:spam$R\R_s$x$tzs$y$RCRDRXRYs

(ii(R^s $string:spam$(R_s$x$(Rbs$y$(s tal:defines$x string:spam; global y x; local z ystal(RR$R (R((Rtcheck_define_6&sc Cst|idtdddfdhddfoo

s

RGiiRUs tal:conditionspython:1t conditions $python:1$RCRPRXsfooRYs

(ii(s tal:conditionspython:1stal(RR$R (R((Rtcheck_condition5sc Csk|idddfdhddbar

RGiiRUs tal:contents string:fooRCRDRXt insertTexts $string:foo$tbarRYs

(ii(s tal:contents string:foostal(RR$R (R((Rtcheck_content_1Bsc Csk|idddfdhddbar

RGiiRUs tal:contentstext string:fooRCRDRXRfs $string:foo$RgRYs

(ii(s tal:contentstext string:foostal(RR$R (R((Rtcheck_content_2Lsc Csn|idddfdhddbar

RGiiRUs tal:contentsstructure string:
RCRDRXtinsertStructures $string:
$RgRYs

(ii(s tal:contentsstructure string:
stal(RR$R (R((Rtcheck_content_3VscCs}|idddfdhddbar

RGiiRUs tal:replaces string:footoptTagRDRRCRXRfs $string:foo$RgRY(ii(s tal:replaces string:foostal(RR$RR (R((Rtcheck_replace_1bscCs}|idddfdhddbar

RGiiRUs tal:replacestext string:fooRlRDRRCRXRfs $string:foo$R/RgiRY(ii(s tal:replacestext string:foostal(sbari(RR$R(R((Rtcheck_replace_2pscCs|idddfdhddbar

RGiiRUs tal:replacesstructure string:
RlRDRRCRXRjs $string:
$R/RgiRY(ii(s tal:replacesstructure string:
stal(sbari(RR$R(R((Rtcheck_replace_3~scCs|idddfdhdddummy

RGiiRUs tal:repeatsx python:(1,2,3)tloopR^s$python:(1,2,3)$RCRDRXi!s tal:replaceRlRPRRfs$x$tdummyRYs

(ii(s tal:repeatsx python:(1,2,3)stal(ii!(s tal:replaceR^stal(RR$RR (R((Rt check_repeats cCsn|idddfdhdd<dd <d d linkRGiiRUstal:attributess+href string:http://www.zope.org; x string:ytnameRgthrefRMRCRtreplaces$string:http://www.zope.org$s name="bar"RXR^tinserts $string:y$RYslink(ii(Rtsfoosreplaces$string:http://www.zope.org$iN(snames name="bar"(stal:attributess+href string:http://www.zope.org; x string:ystal(R^Nsinserts $string:y$iN(RR$RR (R((Rtcheck_attributes_1s cCs|idddfdhdd<dd duh

RGiiRUstal:attributesssrc string:foo.pngs tal:replacesstructure string:RlRDRRCRXRjs$string:$tsrcs$string:foo.png$tduhRY(ii(s tal:replacesstructure string:stal(stal:attributesssrc string:foo.pngstal(RR$RtFalseR (R((Rtcheck_attributes_2s c Cs|idddfdhdd<dd okay

RGiiRUs tal:contenttnotHeres tal:on-errors string:errortonErrorRCRDRXRfs $notHere$tokays

s$string:error$RY(ii(s tal:on-errors string:errorstal(s tal:contentR|stal(s tal:on-errors string:errorstal(s tal:contentR|stal(RR$R (R((Rtcheck_on_error_1s cCs|idddfdhdd<dd okay

RGiiRUs tal:replaceR|s tal:on-errors string:errorR}RlRDRRCRXRfs $notHere$R/R~is$string:error$s

RY(ii(s tal:on-errors string:errorstal(s tal:replacesnotHerestal(sokayi(s tal:on-errors string:errorstal(s tal:replacesnotHerestal(RR$RR (R((Rtcheck_on_error_2s cCs!|id|idtdS(Ns)s3(RR)t METALError(R((Rtcheck_dup_attrs  cCsj|id|id|id|id|idx"tiD]}|id|qKWdS(Ns

s

s

s%

s

s<%s tal:content='string:foo'>(RR)RtEMPTY_HTML_TAGSttag(RR((Rtcheck_tal_errorss      cCsZt}|idd||idddd||id||id|dS(Nis!

xxx

ss

ss

s

(RR(RR)(RR(((Rtcheck_metal_errorss cCs|idddfdhdd<ddRGiiRUtaltRMsi18n:attributesRCtimgRuti18nRYs/foos alt foo ; barRgRvsz(ii(RsfoosreplaceNiN(si18n:attributesRR(ii(RsfoosreplaceNisfoo(si18n:attributess alt foo ; barR(sbarNsinsertNiN(RR$RR)(R((Rtcheck_i18n_attributessRU cCs|id|iddS(Ns%s(RR)(R((Rttest_i18n_name_bad_name)s cCs|id|iddS(Ns"s"(RR)(R((Rt"test_i18n_attributes_repeated_attr-s cCs|idddfdhddReplace this This is a translated string And another translated string RGiiRUsi18n:translateRRCRPRtinsertTranslationR/s Replace thisi trawtextBeginScopes itmsgidR.sThis is a translated stringiisAnd another translated stringRY(ii(si18n:translateRsi18n(s Replace thisi (ii(si18n:translateRsi18n(sThis is a translated stringi(ii(si18n:translateRsi18n(sAnd another translated stringi(s i(RR$(R((Rtcheck_i18n_translate1scCs|idddfdhddreplaceable

content

RGiiRUsi18n:translateRRCRPRRR/s replaceable i i$s tal:replacesstr:hereRlRDRXRfs $str:here$tcontentRYR.s (ii(si18n:translateRsi18n(s replaceable i (ii$(s tal:replacesstr:herestal(s i(RR$RR (R((Rt$check_i18n_translate_with_nested_talJscCsp|iddd"fdhdd was born in . RGiiRUsi18n:translateRRCRPRRRs is i18n:nameRss tal:replaces str:Lomaxt i18nVariableRlt startEndTagRXRfs $str:Lomax$s was born in itcountrysstr:Antarcticas$str:Antarctica$RYR.s. s (ii(si18n:translateRsi18n(ii(s tal:replaces str:Lomaxstal(s i18n:namesnamesi18n(ii(s tal:replacesstr:Antarcticastal(s i18n:nameRsi18n(s. i(s i(RR$RRz(R((Rtcheck_i18n_namecscCs|idddfdhddThis is text for .RGiiRUsi18n:translateRRCtdivRRR/sThis is text for ii(s tal:contentRgs i18n:nametbar_nameRRPRXRfs$bar$siRYt.si(ii(si18n:translateRsi18n(sThis is text for i(ii((si18n:translateRsi18n(s tal:contentsbarstal(s i18n:nameRsi18n(si(Ri(si(RR$R(R((Rttest_i18n_name_with_contents cCs(|idddfdhdd Jim was born in the USA. RGiiRUsi18n:translateRRCRPRRRs is i18n:nameRsRR/s Jimi sis was born in iRsthe USARYR.s. s (ii(si18n:translateRsi18n(ii(s i18n:namesnamesi18n(s Jimi (si(ii(s i18n:namescountrysi18n(sthe USAi(si(s. i(s i(RR$RRz(R((Rtcheck_i18n_name_implicit_valuesc Csw|idddfdhdd<dd<d dRGiitbeginI18nContexttdomaintmydomainRttargetRUs i18n:domainRRPRRYtendI18nContext(ii(s i18n:domainRsi18n(RR$R(R((Rtcheck_i18n_context_domainsc Csw|idddfdhdd<dd <d dRGiiRRtenRtdefaultRRUs i18n:sourceRRPRRYR(ii(s i18n:sourceRsi18n(RR$R(R((Rtcheck_i18n_context_sourcesc Cs|idddfdhdd<dd <d d RGiiRRRRtruRRRUs i18n:sources i18n:targetRRPRRYR(ii(s i18n:sourcesensi18n(s i18n:targetRsi18n(RR$(R((Rt check_i18n_context_source_targetscCsd}|i|ddfdddhdd d dgfftd g
spam
RGiiRKREs$M$RORCRsmetal:fill-slotRFs spamRRRRRRUs i18n:domainsmetal:use-macroRi0RRRYsR(ii(smetal:fill-slotROsmetal(smetal:use-macroREsmetal(s i18n:domainsmydomainsi18n(ii0(smetal:fill-slotROsmetal(ttextRR$R R(RR((Rt!check_i18n_context_in_define_slotsc Csz|idddfdhdd<dd 2:32 pm RGiiRUsi18n:translatettimefmts i18n:datashere/currentTimeRCRPRRR/s2:32 pmis$here/currentTime$RYR.s (ii(s i18n:datashere/currentTimesi18n(si18n:translateRsi18n(s2:32 pmi(s i(RR$(R((Rtcheck_i18n_data scCs|iddd fdhddAt the tone the time will be 2:32 pm... beep! RGiiRUsi18n:translateRRCRRRRsAt the tone the time will be is i18n:datashere/currentTimes i18n:namettimeRRRPR/s2:32 pmis$here/currentTime$sRYs ... beep!i R.s (ii(si18n:translateRsi18n(ii(s i18n:datashere/currentTimesi18n(si18n:translatestimefmtsi18n(s i18n:nameRsi18n(s2:32 pmi(si(s ... beep!i (s i(RR$RRz(R((Rtcheck_i18n_data_with_name3s cCs|idddfdhdd Job #NN RGiiRUsi18n:translatetjobnumRCRPRRRs Job #i is i18n:names tal:replacescontext/@@object_nameRRlRRXRfs$context/@@object_name$R/tNNRYR.s (ii(si18n:translateRsi18n(ii (s tal:replacescontext/@@object_namestal(s i18n:nameRsi18n(Ri(s i(RR$RRz(R((Rt#check_i18n_explicit_msgid_with_name\scCs.|iddd)fdhddYour contact email address is recorded as
user@host.com

RGiiRUsi18n:translatetverifyRCRDRRRs.Your contact email address is recorded as iis i18n:nametemailRRPs iRtsmailto:user@example.coms tal:contentsrequest/submitterRshref="mailto:user@example.com"RXRfs$request/submitter$R/s user@host.comi RYssiR.s s

(ii(si18n:translateRsi18n(ii(s i18n:nameRsi18n(ii(shrefshref="mailto:user@example.com"(s tal:contentsrequest/submitterstal(s user@host.comi (si(si(s i(s

i(RR$RRz(R((Rt"check_i18n_name_around_tal_contentscCs|iddd$fdhddYour contact email address is recorded as user@host.com

RGiiRUsi18n:translateRRCRDRRRs.Your contact email address is recorded as iiRtsmailto:user@example.coms i18n:nameRs tal:contentsrequest/submitterRRshref="mailto:user@example.com"RXRfs$request/submitter$R/s user@host.comi sRYR.s s

(ii(si18n:translatesverifysi18n(ii(shrefshref="mailto:user@example.com"(s tal:contentsrequest/submitterstal(s i18n:namesemailsi18n(s user@host.comi (si(s i(s

i(RR$R(R((Rt check_i18n_name_with_tal_contents()R*R+RBRZR[R]R`RaRcReRhRiRkRmRnRoRrRwR{RRRRRRRRRRRRRRRRRRRRRR(((RRTsN                 ; ! $   ) ' /cCs[ti}|ititd|ititd|ititd|S(Ntcheck_(tunittestt TestSuitetsuitetaddTestt makeSuiteR3RART(R((Rt test_suites  t__main__ii(t__doc__R!tsyst TAL.teststutilsRtwarningst showwarningtTALRt TAL.TALDefsR,R-RtTestCaseRR R3RARTRR*t run_suiteterrstexit(R R3RRRTRR,RR!R-RRRRRARR((Rt?s*         , S>