Best Python code snippet using localstack_python
SyntaxAndOutput.py
Source:SyntaxAndOutput.py  
...125    #_useNewStyleCompilation = False126    _extraCompileKwArgs = None127    def searchList(self):128        return self._searchList129    def verify(self, input, expectedOutput,130               inputEncoding=None,131               outputEncoding=None,132               convertEOLs=Unspecified):133        if self._EOLreplacement:134            if convertEOLs is Unspecified:135                convertEOLs = self.convertEOLs136            if convertEOLs:137                input = input.replace('\n', self._EOLreplacement)138                expectedOutput = expectedOutput.replace('\n', self._EOLreplacement)139        self._input = input140        if self._useNewStyleCompilation:141            extraKwArgs = self._extraCompileKwArgs or {}142            143            templateClass = Template.compile(144                source=input,145                compilerSettings=self._getCompilerSettings(),146                keepRefToGeneratedCode=True,147                **extraKwArgs148                )149            moduleCode = templateClass._CHEETAH_generatedModuleCode150            self.template = templateObj = templateClass(searchList=self.searchList())151        else:152            self.template = templateObj = Template(153                input,154                searchList=self.searchList(),155                compilerSettings=self._getCompilerSettings(),156                )157            moduleCode = templateObj._CHEETAH_generatedModuleCode158        if self.DEBUGLEV >= 1:159            print moduleCode160        try:161            try:162                output = templateObj.respond() # rather than __str__, because of unicode163                if outputEncoding:164                    output = output.decode(outputEncoding)165                assert output==expectedOutput, self._outputMismatchReport(output, expectedOutput)166            except:167                #print >>sys.stderr, moduleCode168                raise169        finally:170            templateObj.shutdown()171    def _getCompilerSettings(self):172        return {}173            174    def _outputMismatchReport(self, output, expectedOutput):175        if self._debugEOLReplacement and self._EOLreplacement:176            EOLrepl = self._EOLreplacement177            marker = '*EOL*'178            return self.report % {'template': self._input.replace(EOLrepl,marker),179                                  'expected': expectedOutput.replace(EOLrepl,marker),180                                  'actual': output.replace(EOLrepl,marker),181                                  'end': '(end)'}182        else:183            return self.report % {'template': self._input,184                                  'expected': expectedOutput,185                                  'actual': output,186                                  'end': '(end)'}187        188    def genClassCode(self):189        if hasattr(self, 'template'):190            return self.template.generatedClassCode()191    def genModuleCode(self):192        if hasattr(self, 'template'):193            return self.template.generatedModuleCode()194##################################################195## TEST CASE CLASSES196class EmptyTemplate(OutputTest):197    convertEOLs = False198    def test1(self):199        """an empty string for the template"""200        201        warnings.filterwarnings('error',202                                'You supplied an empty string for the source!',203                                UserWarning)204        try:205            self.verify("", "")206        except UserWarning:207            pass208        else:209            self.fail("Should warn about empty source strings.")210        211        try:212            self.verify("#implements foo", "")213        except NotImplementedError:214            pass215        else:216            self.fail("This should barf about respond() not being implemented.")217        self.verify("#implements respond", "")218        self.verify("#implements respond(foo=1234)", "")219class Backslashes(OutputTest):220    convertEOLs = False221    def setUp(self):222        fp = open('backslashes.txt','w')223        fp.write(r'\ #LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')224        fp.flush()225        fp.close226    227    def tearDown(self):228        if os.path.exists('backslashes.txt'):229            os.remove('backslashes.txt')230        231    def test1(self):232        """ a single \\ using rawstrings"""233        self.verify(r"\ ",234                    r"\ ")235    def test2(self):236        """ a single \\ using rawstrings and lots of lines"""237        self.verify(r"\ " + "\n\n\n\n\n\n\n\n\n",238                    r"\ " + "\n\n\n\n\n\n\n\n\n")239    def test3(self):240        """ a single \\ without using rawstrings"""241        self.verify("\ \ ",242                    "\ \ ")243    def test4(self):244        """ single line from an apache conf file"""245        self.verify(r'#LogFormat "%h %l %u %t \"%r\" %>s %b"',246                    r'#LogFormat "%h %l %u %t \"%r\" %>s %b"')247    def test5(self):248        """ single line from an apache conf file with many NEWLINES249        The NEWLINES are used to make sure that MethodCompiler.commitStrConst()250        is handling long and short strings in the same fashion.  It uses251        triple-quotes for strings with lots of \\n in them and repr(theStr) for252        shorter strings with only a few newlines."""253        254        self.verify(r'#LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n',255                    r'#LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')256    def test6(self):257        """ test backslash handling in an included file"""258        self.verify(r'#include "backslashes.txt"',259                    r'\ #LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')260    def test7(self):261        """ a single \\ without using rawstrings plus many NEWLINES"""262        self.verify("\ \ " + "\n\n\n\n\n\n\n\n\n",263                    "\ \ " + "\n\n\n\n\n\n\n\n\n")264    def test8(self):265        """ single line from an apache conf file with single quotes and many NEWLINES 266        """267        268        self.verify(r"""#LogFormat '%h %l %u %t \"%r\" %>s %b'""" + '\n\n\n\n\n\n\n',269                    r"""#LogFormat '%h %l %u %t \"%r\" %>s %b'""" + '\n\n\n\n\n\n\n')270        271class NonTokens(OutputTest):272    def test1(self):273        """dollar signs not in Cheetah $vars"""274        self.verify("$ $$ $5 $. $ test",275                    "$ $$ $5 $. $ test")276    def test2(self):277        """hash not in #directives"""278        self.verify("# \# #5 ",279                    "# # #5 ")280    def test3(self):281        """escapted comments"""282        self.verify("  \##escaped comment  ",283                    "  ##escaped comment  ")284    def test4(self):285        """escapted multi-line comments"""286        self.verify("  \#*escaped comment \n*#  ",287                    "  #*escaped comment \n*#  ")288    def test5(self):289        """1 dollar sign"""290        self.verify("$",291                    "$")292    def _X_test6(self):293        """1 dollar sign followed by hash"""294        self.verify("\n$#\n",295                    "\n$#\n")296    def test6(self):297        """1 dollar sign followed by EOL Slurp Token"""298        if DEFAULT_COMPILER_SETTINGS['EOLSlurpToken']:299            self.verify("\n$%s\n"%DEFAULT_COMPILER_SETTINGS['EOLSlurpToken'],300                        "\n$")301        else:302            self.verify("\n$#\n",303                        "\n$#\n")304            305class Comments_SingleLine(OutputTest):306    def test1(self):307        """## followed by WS"""308        self.verify("##    ",309                    "")310    def test2(self):311        """## followed by NEWLINE"""312        self.verify("##\n",313                    "")314    def test3(self):315        """## followed by text then NEWLINE"""316        self.verify("## oeuao aoe uaoe \n",317                    "")318    def test4(self):319        """## gobbles leading WS"""320        self.verify("    ## oeuao aoe uaoe \n",321                    "")322    def test5(self):323        """## followed by text then NEWLINE, + leading WS"""324        self.verify("    ## oeuao aoe uaoe \n",325                    "")326    def test6(self):327        """## followed by EOF"""328        self.verify("##",329                    "")330        331    def test7(self):332        """## followed by EOF with leading WS"""333        self.verify("    ##",334                    "")335        336    def test8(self):337        """## gobble line338        with text on previous and following lines"""339        self.verify("line1\n   ## aoeu 1234   \nline2",340                    "line1\nline2")341    def test9(self):342        """## don't gobble line343        with text on previous and following lines"""344        self.verify("line1\n 12 ## aoeu 1234   \nline2",345                    "line1\n 12 \nline2")346    def test10(self):347        """## containing $placeholders348        """349        self.verify("##$a$b $c($d)",350                    "")351    def test11(self):352        """## containing #for directive353        """354        self.verify("##for $i in range(15)",355                    "")356class Comments_MultiLine_NoGobble(OutputTest):357    """358    Multiline comments used to not gobble whitespace.  They do now, but this can359    be turned off with a compilerSetting    360    """361    def _getCompilerSettings(self):362        return {'gobbleWhitespaceAroundMultiLineComments':False}363    def test1(self):364        """#* *# followed by WS365        Shouldn't gobble WS366        """367        self.verify("#* blarg *#   ",368                    "   ")369        370    def test2(self):371        """#* *# preceded and followed by WS372        Shouldn't gobble WS373        """374        self.verify("   #* blarg *#   ",375                    "      ")376        377    def test3(self):378        """#* *# followed by WS, with NEWLINE379        Shouldn't gobble WS380        """381        self.verify("#* \nblarg\n *#   ",382                    "   ")383        384    def test4(self):385        """#* *# preceded and followed by WS, with NEWLINE386        Shouldn't gobble WS387        """388        self.verify("   #* \nblarg\n *#   ",389                    "      ")390class Comments_MultiLine(OutputTest):391    """392    Note: Multiline comments don't gobble whitespace!393    """394    395    def test1(self):396        """#* *# followed by WS397        Should gobble WS398        """399        self.verify("#* blarg *#   ",400                    "")401        402    def test2(self):403        """#* *# preceded and followed by WS404        Should gobble WS405        """406        self.verify("   #* blarg *#   ",407                    "")408        409    def test3(self):410        """#* *# followed by WS, with NEWLINE411        Shouldn't gobble WS412        """413        self.verify("#* \nblarg\n *#   ",414                    "")415        416    def test4(self):417        """#* *# preceded and followed by WS, with NEWLINE418        Shouldn't gobble WS419        """420        self.verify("   #* \nblarg\n *#   ",421                    "")422    def test5(self):423        """#* *# containing nothing 424        """425        self.verify("#**#",426                    "")427        428    def test6(self):429        """#* *# containing only NEWLINES430        """431        self.verify("  #*\n\n\n\n\n\n\n\n*#  ",432                    "")433    def test7(self):434        """#* *# containing $placeholders435        """436        self.verify("#* $var $var(1234*$c) *#",437                    "")438        439    def test8(self):440        """#* *# containing #for directive441        """442        self.verify("#* #for $i in range(15) *#",443                    "")444    def test9(self):445        """ text around #* *# containing #for directive446        """447        self.verify("foo\nfoo bar #* #for $i in range(15) *# foo\n",448                    "foo\nfoo bar  foo\n")449    def test9(self):450        """ text around #* *# containing #for directive and trailing whitespace451        which should be gobbled452        """453        self.verify("foo\nfoo bar #* #for $i in range(15) *#   \ntest",454                    "foo\nfoo bar \ntest")455    def test10(self):456        """ text around #* *# containing #for directive and newlines: trailing whitespace457        which should be gobbled.458        """459        self.verify("foo\nfoo bar #* \n\n#for $i in range(15) \n\n*#   \ntest",460                    "foo\nfoo bar \ntest")461class Placeholders(OutputTest):462    def test1(self):463        """1 placeholder"""464        self.verify("$aStr", "blarg")465        466    def test2(self):467        """2 placeholders"""468        self.verify("$aStr $anInt", "blarg 1")469    def test3(self):470        """2 placeholders, back-to-back"""471        self.verify("$aStr$anInt", "blarg1")472    def test4(self):473        """1 placeholder enclosed in ()"""474        self.verify("$(aStr)", "blarg")475        476    def test5(self):477        """1 placeholder enclosed in {}"""478        self.verify("${aStr}", "blarg")479    def test6(self):480        """1 placeholder enclosed in []"""481        self.verify("$[aStr]", "blarg")482    def test7(self):483        """1 placeholder enclosed in () + WS484        Test to make sure that $(<WS><identifier>.. matches485        """486        self.verify("$( aStr   )", "blarg")487    def test8(self):488        """1 placeholder enclosed in {} + WS"""489        self.verify("${ aStr   }", "blarg")490    def test9(self):491        """1 placeholder enclosed in [] + WS"""492        self.verify("$[ aStr   ]", "blarg")493    def test10(self):494        """1 placeholder enclosed in () + WS + * cache495        Test to make sure that $*(<WS><identifier>.. matches496        """497        self.verify("$*( aStr   )", "blarg")498    def test11(self):499        """1 placeholder enclosed in {} + WS + *cache"""500        self.verify("$*{ aStr   }", "blarg")501    def test12(self):502        """1 placeholder enclosed in [] + WS + *cache"""503        self.verify("$*[ aStr   ]", "blarg")504    def test13(self):505        """1 placeholder enclosed in {} + WS + *<int>*cache"""506        self.verify("$*5*{ aStr   }", "blarg")507    def test14(self):508        """1 placeholder enclosed in [] + WS + *<int>*cache"""509        self.verify("$*5*[ aStr   ]", "blarg")510    def test15(self):511        """1 placeholder enclosed in {} + WS + *<float>*cache"""512        self.verify("$*0.5d*{ aStr   }", "blarg")513    def test16(self):514        """1 placeholder enclosed in [] + WS + *<float>*cache"""515        self.verify("$*.5*[ aStr   ]", "blarg")516    def test17(self):517        """1 placeholder + *<int>*cache"""518        self.verify("$*5*aStr", "blarg")519    def test18(self):520        """1 placeholder *<float>*cache"""521        self.verify("$*0.5h*aStr", "blarg")522    def test19(self):523        """1 placeholder surrounded by single quotes and multiple newlines"""524        self.verify("""'\n\n\n\n'$aStr'\n\n\n\n'""",525                    """'\n\n\n\n'blarg'\n\n\n\n'""")526    def test20(self):527        """silent mode $!placeholders """528        self.verify("$!aStr$!nonExistant$!*nonExistant$!{nonExistant}", "blarg")529        try:530            self.verify("$!aStr$nonExistant",531            "blarg")532        except NotFound:533            pass534        else:535            self.fail('should raise NotFound exception')536    def test21(self):537        """Make sure that $*caching is actually working"""538        namesStr = 'You Me Them Everyone'539        names = namesStr.split()540        tmpl = Template.compile('#for name in $names: $name ', baseclass=dict)541        assert str(tmpl({'names':names})).strip()==namesStr542        tmpl = tmpl.subclass('#for name in $names: $*name ')543        assert str(tmpl({'names':names}))=='You '*len(names)544        tmpl = tmpl.subclass('#for name in $names: $*1*name ')545        assert str(tmpl({'names':names}))=='You '*len(names)546        tmpl = tmpl.subclass('#for name in $names: $*1*(name) ')547        assert str(tmpl({'names':names}))=='You '*len(names)548        if versionTuple > (2,2):549            tmpl = tmpl.subclass('#for name in $names: $*1*(name) ')550            assert str(tmpl(names=names))=='You '*len(names)551class Placeholders_Vals(OutputTest):552    convertEOLs = False553    def test1(self):554        """string"""555        self.verify("$aStr", "blarg")556    def test2(self):557        """string - with whitespace"""558        self.verify(" $aStr ", " blarg ")559    def test3(self):560        """empty string - with whitespace"""561        self.verify("$emptyString", "")562    def test4(self):563        """int"""564        self.verify("$anInt", "1")565    def test5(self):566        """float"""567        self.verify("$aFloat", "1.5")568    def test6(self):569        """list"""570        self.verify("$aList", "['item0', 'item1', 'item2']")571    def test7(self):572        """None573        The default output filter is ReplaceNone.574        """575        self.verify("$none", "")576    def test8(self):577        """True, False578        """579        self.verify("$True $False", "%s %s"%(repr(True), repr(False)))580    def test9(self):581        """$_582        """583        self.verify("$_('foo')", "Translated: foo")584class PlaceholderStrings(OutputTest):585    def test1(self):586        """some c'text $placeholder text' strings"""587        self.verify("$str(c'$aStr')", "blarg")588    def test2(self):589        """some c'text $placeholder text' strings"""590        self.verify("$str(c'$aStr.upper')", "BLARG")591    def test3(self):592        """some c'text $placeholder text' strings"""593        self.verify("$str(c'$(aStr.upper.replace(c\"A$str()\",\"\"))')", "BLRG")594    def test4(self):595        """some c'text $placeholder text' strings"""596        self.verify("#echo $str(c'$(aStr.upper)')", "BLARG")597    def test5(self):598        """some c'text $placeholder text' strings"""599        self.verify("#if 1 then $str(c'$(aStr.upper)') else 0", "BLARG")600    def test6(self):601        """some c'text $placeholder text' strings"""602        self.verify("#if 1\n$str(c'$(aStr.upper)')#slurp\n#else\n0#end if", "BLARG")603    def test7(self):604        """some c'text $placeholder text' strings"""605        self.verify("#def foo(arg=c'$(\"BLARG\")')\n"606                    "$arg#slurp\n"607                    "#end def\n"608                    "$foo()$foo(c'$anInt')#slurp",609                    610                    "BLARG1")611class UnicodeStrings(OutputTest):612    def test1(self):613        """unicode data in placeholder614        """615        #self.verify(u"$unicodeData", defaultTestNameSpace['unicodeData'], outputEncoding='utf8')616        self.verify(u"$unicodeData", defaultTestNameSpace['unicodeData'])617    def test2(self):618        """unicode data in body619        """620        self.verify(u"aoeu12345\u1234", u"aoeu12345\u1234")621        #self.verify(u"#encoding utf8#aoeu12345\u1234", u"aoeu12345\u1234")622class EncodingDirective(OutputTest):623    def test1(self):624        """basic #encoding """625        self.verify("#encoding utf-8\n1234",626                    "1234")627    def test2(self):628        """basic #encoding """629        self.verify("#encoding ascii\n1234",630                    "1234")631    def test3(self):632        """basic #encoding """633        self.verify("#encoding utf-8\n\xe1\x88\xb4",634                    u'\u1234', outputEncoding='utf8')635    def test4(self):636        """basic #encoding """637        self.verify("#encoding ascii\n\xe1\x88\xb4",638                    "\xe1\x88\xb4")639    def test5(self):640        """basic #encoding """641        self.verify("#encoding latin-1\nAndr\202",642                    u'Andr\202', outputEncoding='latin-1')643class UnicodeDirective(OutputTest):644    def test1(self):645        """basic #unicode """646        self.verify("#unicode utf-8\n1234",647                    u"1234")648        649        self.verify("#unicode ascii\n1234",650                    u"1234")651        self.verify("#unicode latin-1\n1234",652                    u"1234")653        self.verify("#unicode latin-1\n1234ü",654                    u"1234ü")655        self.verify("#unicode: latin-1\n1234ü",656                    u"1234ü")657        self.verify("#  unicode  : latin-1\n1234ü",658                    u"1234ü")659        self.verify(u"#unicode latin-1\n1234ü",660                    u"1234ü")661        self.verify("#encoding latin-1\n1234ü",662                    "1234ü")663class Placeholders_Esc(OutputTest):664    convertEOLs = False665    def test1(self):666        """1 escaped placeholder"""667        self.verify("\$var",668                    "$var")669    670    def test2(self):671        """2 escaped placeholders"""672        self.verify("\$var \$_",673                    "$var $_")674    def test3(self):675        """2 escaped placeholders - back to back"""676        self.verify("\$var\$_",677                    "$var$_")678    def test4(self):679        """2 escaped placeholders - nested"""680        self.verify("\$var(\$_)",681                    "$var($_)")682    def test5(self):683        """2 escaped placeholders - nested and enclosed"""684        self.verify("\$(var(\$_)",685                    "$(var($_)")686class Placeholders_Calls(OutputTest):687    def test1(self):688        """func placeholder - no ()"""689        self.verify("$aFunc",690                    "Scooby")691    def test2(self):692        """func placeholder - with ()"""693        self.verify("$aFunc()",694                    "Scooby")695    def test3(self):696        r"""func placeholder - with (\n\n)"""697        self.verify("$aFunc(\n\n)",698                    "Scooby", convertEOLs=False)699    def test4(self):700        r"""func placeholder - with (\n\n) and $() enclosure"""701        self.verify("$(aFunc(\n\n))",702                    "Scooby", convertEOLs=False)703    def test5(self):704        r"""func placeholder - with (\n\n) and ${} enclosure"""705        self.verify("${aFunc(\n\n)}",706                    "Scooby", convertEOLs=False)707        708    def test6(self):709        """func placeholder - with (int)"""710        self.verify("$aFunc(1234)",711                    "1234")712    def test7(self):713        r"""func placeholder - with (\nint\n)"""714        self.verify("$aFunc(\n1234\n)",715                    "1234", convertEOLs=False)716    def test8(self):717        """func placeholder - with (string)"""718        self.verify("$aFunc('aoeu')",719                    "aoeu")720        721    def test9(self):722        """func placeholder - with ('''string''')"""723        self.verify("$aFunc('''aoeu''')",724                    "aoeu")725    def test10(self):726        r"""func placeholder - with ('''\nstring\n''')"""727        self.verify("$aFunc('''\naoeu\n''')",728                    "\naoeu\n")729    def test11(self):730        r"""func placeholder - with ('''\nstring'\n''')"""731        self.verify("$aFunc('''\naoeu'\n''')",732                    "\naoeu'\n")733    def test12(self):734        r'''func placeholder - with ("""\nstring\n""")'''735        self.verify('$aFunc("""\naoeu\n""")',736                    "\naoeu\n")737    def test13(self):738        """func placeholder - with (string*int)"""739        self.verify("$aFunc('aoeu'*2)",740                    "aoeuaoeu")741    def test14(self):742        """func placeholder - with (int*int)"""743        self.verify("$aFunc(2*2)",744                    "4")745    def test15(self):746        """func placeholder - with (int*float)"""747        self.verify("$aFunc(2*2.0)",748                    "4.0")749    def test16(self):750        r"""func placeholder - with (int\n*\nfloat)"""751        self.verify("$aFunc(2\n*\n2.0)",752                    "4.0", convertEOLs=False)753    def test17(self):754        """func placeholder - with ($arg=float)"""755        self.verify("$aFunc($arg=4.0)",756                    "4.0")757    def test18(self):758        """func placeholder - with (arg=float)"""759        self.verify("$aFunc(arg=4.0)",760                    "4.0")761    def test19(self):762        """deeply nested argstring, no enclosure"""763        self.verify("$aFunc($arg=$aMeth($arg=$aFunc(1)))",764                    "1")765    def test20(self):766        """deeply nested argstring, no enclosure + with WS"""767        self.verify("$aFunc(  $arg = $aMeth( $arg = $aFunc( 1 ) ) )",768                    "1")769    def test21(self):770        """deeply nested argstring, () enclosure + with WS"""771        self.verify("$(aFunc(  $arg = $aMeth( $arg = $aFunc( 1 ) ) ) )",772                    "1")773        774    def test22(self):775        """deeply nested argstring, {} enclosure + with WS"""776        self.verify("${aFunc(  $arg = $aMeth( $arg = $aFunc( 1 ) ) ) }",777                    "1")778    def test23(self):779        """deeply nested argstring, [] enclosure + with WS"""780        self.verify("$[aFunc(  $arg = $aMeth( $arg = $aFunc( 1 ) ) ) ]",781                    "1")782    def test24(self):783        """deeply nested argstring, () enclosure + *cache"""784        self.verify("$*(aFunc(  $arg = $aMeth( $arg = $aFunc( 1 ) ) ) )",785                    "1")786    def test25(self):787        """deeply nested argstring, () enclosure + *15*cache"""788        self.verify("$*15*(aFunc(  $arg = $aMeth( $arg = $aFunc( 1 ) ) ) )",789                    "1")790    def test26(self):791        """a function call with the Python None kw."""792        self.verify("$aFunc(None)",793                    "")794class NameMapper(OutputTest):795    def test1(self):796        """autocalling"""797        self.verify("$aFunc! $aFunc().",798                    "Scooby! Scooby.")799    def test2(self):800        """nested autocalling"""801        self.verify("$aFunc($aFunc).",802                    "Scooby.")803    def test3(self):804        """list subscription"""805        self.verify("$aList[0]",806                    "item0")807    def test4(self):808        """list slicing"""809        self.verify("$aList[:2]",810                    "['item0', 'item1']")811        812    def test5(self):813        """list slicing and subcription combined"""814        self.verify("$aList[:2][0]",815                    "item0")816    def test6(self):817        """dictionary access - NameMapper style"""818        self.verify("$aDict.one",819                    "item1")820        821    def test7(self):822        """dictionary access - Python style"""823        self.verify("$aDict['one']",824                    "item1")825    def test8(self):826        """dictionary access combined with autocalled string method"""827        self.verify("$aDict.one.upper",828                    "ITEM1")829    def test9(self):830        """dictionary access combined with string method"""831        self.verify("$aDict.one.upper()",832                    "ITEM1")833    def test10(self):834        """nested dictionary access - NameMapper style"""835        self.verify("$aDict.nestedDict.two",836                    "nestedItem2")837        838    def test11(self):839        """nested dictionary access - Python style"""840        self.verify("$aDict['nestedDict']['two']",841                    "nestedItem2")842    def test12(self):843        """nested dictionary access - alternating style"""844        self.verify("$aDict['nestedDict'].two",845                    "nestedItem2")846    def test13(self):847        """nested dictionary access using method - alternating style"""848        self.verify("$aDict.get('nestedDict').two",849                    "nestedItem2")850    def test14(self):851        """nested dictionary access - NameMapper style - followed by method"""852        self.verify("$aDict.nestedDict.two.upper",853                    "NESTEDITEM2")854    def test15(self):855        """nested dictionary access - alternating style - followed by method"""856        self.verify("$aDict['nestedDict'].two.upper",857                    "NESTEDITEM2")858    def test16(self):859        """nested dictionary access - NameMapper style - followed by method, then slice"""860        self.verify("$aDict.nestedDict.two.upper[:4]",861                    "NEST")862    def test17(self):863        """nested dictionary access - Python style using a soft-coded key"""864        self.verify("$aDict[$anObj.meth('nestedDict')].two",865                    "nestedItem2")866    def test18(self):867        """object method access"""868        self.verify("$anObj.meth1",869                    "doo")870    def test19(self):871        """object method access, followed by complex slice"""872        self.verify("$anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ]",873                    "do")874    def test20(self):875        """object method access, followed by a very complex slice876        If it can pass this one, it's safe to say it works!!"""877        self.verify("$( anObj.meth1[0:\n (\n(4/4*2)*2)/$anObj.meth1(2)\n ] )",878                    "do")879    def test21(self):880        """object method access with % in the default arg for the meth.881        This tests a bug that Jeff Johnson found and submitted a patch to SF882        for."""883        884        self.verify("$anObj.methWithPercentSignDefaultArg",885                    "110%")886#class NameMapperDict(OutputTest):887#888#    _searchList = [{"update": "Yabba dabba doo!"}]889#890#    def test1(self):891#        if NameMapper_C_VERSION:892#            return # This feature is not in the C version yet.893#        self.verify("$update", "Yabba dabba doo!")894#895class CacheDirective(OutputTest):896    897    def test1(self):898        r"""simple #cache """899        self.verify("#cache:$anInt",900                    "1")901    def test2(self):902        r"""simple #cache + WS"""903        self.verify("  #cache  \n$anInt#end cache",904                    "1")905    def test3(self):906        r"""simple #cache ... #end cache"""907        self.verify("""#cache id='cache1', timer=150m908$anInt909#end cache910$aStr""",911                    "1\nblarg")912        913    def test4(self):914        r"""2 #cache ... #end cache blocks"""915        self.verify("""#slurp916#def foo917#cache ID='cache1', timer=150m918$anInt919#end cache920#cache id='cache2', timer=15s921 #for $i in range(5)922$i#slurp923 #end for924#end cache925$aStr#slurp926#end def927$foo$foo$foo$foo$foo""",928                    "1\n01234blarg"*5)929    def test5(self):930        r"""nested #cache blocks"""931        self.verify("""#slurp932#def foo      933#cache ID='cache1', timer=150m934$anInt935#cache id='cache2', timer=15s936 #for $i in range(5)937$i#slurp938 #end for939$*(6)#slurp940#end cache941#end cache942$aStr#slurp943#end def944$foo$foo$foo$foo$foo""",945                    "1\n012346blarg"*5)946        947    def test6(self):948        r"""Make sure that partial directives don't match"""949        self.verify("#cache_foo",950                    "#cache_foo")951        self.verify("#cached",952                    "#cached")953class CallDirective(OutputTest):954    955    def test1(self):956        r"""simple #call """957        self.verify("#call int\n$anInt#end call",958                    "1")959        # single line version960        self.verify("#call int: $anInt",961                    "1")962        self.verify("#call int: 10\n$aStr",963                    "10\nblarg")964    def test2(self):965        r"""simple #call + WS"""966        self.verify("#call int\n$anInt  #end call",967                    "1")968    def test3(self):969        r"""a longer #call"""970        self.verify('''\971#def meth(arg)972$arg.upper()#slurp973#end def974#call $meth975$(1234+1) foo#slurp976#end call''',977        "1235 FOO")978    def test4(self):979        r"""#call with keyword #args"""980        self.verify('''\981#def meth(arg1, arg2)982$arg1.upper() - $arg2.lower()#slurp983#end def984#call self.meth985#arg arg1986$(1234+1) foo#slurp987#arg arg2988UPPER#slurp989#end call''',990        "1235 FOO - upper")991    def test5(self):992        r"""#call with single-line keyword #args """993        self.verify('''\994#def meth(arg1, arg2)995$arg1.upper() - $arg2.lower()#slurp996#end def997#call self.meth998#arg arg1:$(1234+1) foo#slurp999#arg arg2:UPPER#slurp1000#end call''',1001        "1235 FOO - upper")1002        1003    def test6(self):1004        """#call with python kwargs and cheetah output for the 1s positional1005        arg"""1006        1007        self.verify('''\1008#def meth(arg1, arg2)1009$arg1.upper() - $arg2.lower()#slurp1010#end def1011#call self.meth arg2="UPPER"1012$(1234+1) foo#slurp1013#end call''',1014        "1235 FOO - upper")1015    def test7(self):1016        """#call with python kwargs and #args"""1017        self.verify('''\1018#def meth(arg1, arg2, arg3)1019$arg1.upper() - $arg2.lower() - $arg3#slurp1020#end def1021#call self.meth arg2="UPPER", arg3=9991022#arg arg1:$(1234+1) foo#slurp1023#end call''',1024        "1235 FOO - upper - 999")1025        1026    def test8(self):1027        """#call with python kwargs and #args, and using a function to get the1028        function that will be called"""1029        self.verify('''\1030#def meth(arg1, arg2, arg3)1031$arg1.upper() - $arg2.lower() - $arg3#slurp1032#end def1033#call getattr(self, "meth") arg2="UPPER", arg3=9991034#arg arg1:$(1234+1) foo#slurp1035#end call''',1036        "1235 FOO - upper - 999")1037    def test9(self):1038        """nested #call directives"""1039        self.verify('''\1040#def meth(arg1)1041$arg1#slurp1042#end def1043#def meth2(x,y)1044$x$y#slurp1045#end def1046##1047#call self.meth10481#slurp1049#call self.meth10502#slurp1051#call self.meth10523#slurp1053#end call 31054#set two = 21055#call self.meth2 y=c"$(10/$two)"1056#arg x10574#slurp1058#end call 41059#end call 21060#end call 1''',1061        "12345")1062class I18nDirective(OutputTest):   1063    def test1(self):1064        r"""simple #call """1065        self.verify("#i18n \n$anInt#end i18n",1066                    "1")1067        1068        # single line version1069        self.verify("#i18n: $anInt",1070                    "1")1071        self.verify("#i18n: 10\n$aStr",1072                    "10\nblarg")1073class CaptureDirective(OutputTest):1074    def test1(self):1075        r"""simple #capture"""1076        self.verify('''\1077#capture cap11078$(1234+1) foo#slurp1079#end capture1080$cap1#slurp1081''',1082        "1235 foo")1083    def test2(self):1084        r"""slightly more complex #capture"""1085        self.verify('''\1086#def meth(arg)1087$arg.upper()#slurp1088#end def1089#capture cap11090$(1234+1) $anInt $meth("foo")#slurp1091#end capture1092$cap1#slurp1093''',1094        "1235 1 FOO")1095class SlurpDirective(OutputTest):1096    def test1(self):1097        r"""#slurp with 1 \n """1098        self.verify("#slurp\n",1099                    "")1100    def test2(self):1101        r"""#slurp with 1 \n, leading whitespace1102        Should gobble"""1103        self.verify("       #slurp\n",1104                    "")1105        1106    def test3(self):1107        r"""#slurp with 1 \n, leading content1108        Shouldn't gobble"""1109        self.verify(" 1234 #slurp\n",1110                    " 1234 ")1111        1112    def test4(self):1113        r"""#slurp with WS then \n, leading content1114        Shouldn't gobble"""1115        self.verify(" 1234 #slurp    \n",1116                    " 1234 ")1117    def test5(self):1118        r"""#slurp with garbage chars then \n, leading content1119        Should eat the garbage"""1120        self.verify(" 1234 #slurp garbage   \n",1121                    " 1234 ")1122class EOLSlurpToken(OutputTest):1123    _EOLSlurpToken = DEFAULT_COMPILER_SETTINGS['EOLSlurpToken']1124    def test1(self):1125        r"""#slurp with 1 \n """1126        self.verify("%s\n"%self._EOLSlurpToken,1127                    "")1128    def test2(self):1129        r"""#slurp with 1 \n, leading whitespace1130        Should gobble"""1131        self.verify("       %s\n"%self._EOLSlurpToken,1132                    "")1133    def test3(self):1134        r"""#slurp with 1 \n, leading content1135        Shouldn't gobble"""1136        self.verify(" 1234 %s\n"%self._EOLSlurpToken,1137                    " 1234 ")1138        1139    def test4(self):1140        r"""#slurp with WS then \n, leading content1141        Shouldn't gobble"""1142        self.verify(" 1234 %s    \n"%self._EOLSlurpToken,1143                    " 1234 ")1144    def test5(self):1145        r"""#slurp with garbage chars then \n, leading content1146        Should NOT eat the garbage"""1147        self.verify(" 1234 %s garbage   \n"%self._EOLSlurpToken,1148                    " 1234 %s garbage   \n"%self._EOLSlurpToken)1149if not DEFAULT_COMPILER_SETTINGS['EOLSlurpToken']:1150    del EOLSlurpToken1151class RawDirective(OutputTest):1152    def test1(self):1153        """#raw till EOF"""1154        self.verify("#raw\n$aFunc().\n\n",1155                    "$aFunc().\n\n")1156    def test2(self):1157        """#raw till #end raw"""1158        self.verify("#raw\n$aFunc().\n#end raw\n$anInt",1159                    "$aFunc().\n1")1160        1161    def test3(self):1162        """#raw till #end raw gobble WS"""1163        self.verify("  #raw  \n$aFunc().\n   #end raw  \n$anInt",1164                    "$aFunc().\n1")1165    def test4(self):1166        """#raw till #end raw using explicit directive closure1167        Shouldn't gobble"""1168        self.verify("  #raw  #\n$aFunc().\n   #end raw  #\n$anInt",1169                    "  \n$aFunc().\n\n1")1170    def test5(self):1171        """single-line short form #raw: """1172        self.verify("#raw: $aFunc().\n\n",1173                    "$aFunc().\n\n")1174        self.verify("#raw: $aFunc().\n$anInt",1175                    "$aFunc().\n1")1176class BreakpointDirective(OutputTest):1177    def test1(self):1178        """#breakpoint part way through source code"""1179        self.verify("$aFunc(2).\n#breakpoint\n$anInt",1180                    "2.\n")1181    def test2(self):1182        """#breakpoint at BOF"""1183        self.verify("#breakpoint\n$anInt",1184                    "")1185    def test3(self):1186        """#breakpoint at EOF"""1187        self.verify("$anInt\n#breakpoint",1188                    "1\n")1189class StopDirective(OutputTest):1190    def test1(self):1191        """#stop part way through source code"""1192        self.verify("$aFunc(2).\n#stop\n$anInt",1193                    "2.\n")1194    def test2(self):1195        """#stop at BOF"""1196        self.verify("#stop\n$anInt",1197                    "")1198    def test3(self):1199        """#stop at EOF"""1200        self.verify("$anInt\n#stop",1201                    "1\n")1202    def test4(self):1203        """#stop in pos test block"""1204        self.verify("""$anInt1205#if 11206inside the if block1207#stop1208#end if1209blarg""",1210        "1\ninside the if block\n")1211    def test5(self):1212        """#stop in neg test block"""1213        self.verify("""$anInt1214#if 01215inside the if block1216#stop1217#end if1218blarg""",1219        "1\nblarg")1220class ReturnDirective(OutputTest):1221    1222    def test1(self):1223        """#return'ing an int """1224        self.verify("""11225$str($test-6)122631227#def test1228#if 11229#return (3   *2)  \1230  + 2 1231#else1232aoeuoaeu1233#end if1234#end def1235""",1236                    "1\n2\n3\n")1237    def test2(self):1238        """#return'ing an string """1239        self.verify("""11240$str($test[1])124131242#def test1243#if 11244#return '123'1245#else1246aoeuoaeu1247#end if1248#end def1249""",1250                    "1\n2\n3\n")1251    def test3(self):1252        """#return'ing an string AND streaming other output via the transaction"""1253        self.verify("""11254$str($test(trans=trans)[1])125531256#def test12571.51258#if 11259#return '123'1260#else1261aoeuoaeu1262#end if1263#end def1264""",1265                    "1\n1.5\n2\n3\n")1266class YieldDirective(OutputTest):1267    convertEOLs = False1268    def test1(self):1269        """simple #yield """1270        1271        src1 = """#for i in range(10)\n#yield i\n#end for"""1272        src2 = """#for i in range(10)\n$i#slurp\n#yield\n#end for"""1273        src3 = ("#def iterator\n"1274               "#for i in range(10)\n#yield i\n#end for\n"1275               "#end def\n"1276               "#for i in $iterator\n$i#end for"1277               )1278        for src in (src1,src2,src3):1279            klass = Template.compile(src, keepRefToGeneratedCode=True)1280            #print klass._CHEETAH_generatedModuleCode1281            iter = klass().respond()1282            output = [str(i) for i in iter]1283            assert ''.join(output)=='0123456789'1284            #print ''.join(output)1285        # @@TR: need to expand this to cover error conditions etc.1286if versionTuple < (2,3):1287    del YieldDirective1288        1289class ForDirective(OutputTest):1290    def test1(self):1291        """#for loop with one local var"""1292        self.verify("#for $i in range(5)\n$i\n#end for",1293                    "0\n1\n2\n3\n4\n")1294        self.verify("#for $i in range(5):\n$i\n#end for",1295                    "0\n1\n2\n3\n4\n")1296        self.verify("#for $i in range(5): ##comment\n$i\n#end for",1297                    "0\n1\n2\n3\n4\n")1298        self.verify("#for $i in range(5) ##comment\n$i\n#end for",1299                    "0\n1\n2\n3\n4\n")1300    def test2(self):1301        """#for loop with WS in loop"""1302        self.verify("#for $i in range(5)\n$i \n#end for",1303                    "0 \n1 \n2 \n3 \n4 \n")1304        1305    def test3(self):1306        """#for loop gobble WS"""1307        self.verify("   #for $i in range(5)   \n$i \n   #end for   ",1308                    "0 \n1 \n2 \n3 \n4 \n")1309    def test4(self):1310        """#for loop over list"""1311        self.verify("#for $i, $j in [(0,1),(2,3)]\n$i,$j\n#end for",1312                    "0,1\n2,3\n")1313        1314    def test5(self):1315        """#for loop over list, with #slurp"""1316        self.verify("#for $i, $j in [(0,1),(2,3)]\n$i,$j#slurp\n#end for",1317                    "0,12,3")1318    def test6(self):1319        """#for loop with explicit closures"""1320        self.verify("#for $i in range(5)#$i#end for#",1321                    "01234")1322    def test7(self):1323        """#for loop with explicit closures and WS"""1324        self.verify("  #for $i in range(5)#$i#end for#  ",1325                    "  01234  ")1326    def test8(self):1327        """#for loop using another $var"""1328        self.verify("  #for $i in range($aFunc(5))#$i#end for#  ",1329                    "  01234  ")1330    def test9(self):1331        """test methods in for loops"""1332        self.verify("#for $func in $listOfLambdas\n$func($anInt)\n#end for",1333                    "1\n1\n1\n")1334    def test10(self):1335        """#for loop over list, using methods of the items"""1336        self.verify("#for i, j in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",1337                    "AA,BB\nCC,DD\n")1338        self.verify("#for $i, $j in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",1339                    "AA,BB\nCC,DD\n")1340    def test11(self):1341        """#for loop over list, using ($i,$j) style target list"""1342        self.verify("#for (i, j) in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",1343                    "AA,BB\nCC,DD\n")1344        self.verify("#for ($i, $j) in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",1345                    "AA,BB\nCC,DD\n")1346    def test12(self):1347        """#for loop over list, using i, (j,k) style target list"""1348        self.verify("#for i, (j, k) in enumerate([('aa','bb'),('cc','dd')])\n$j.upper,$k.upper\n#end for",1349                    "AA,BB\nCC,DD\n")1350        self.verify("#for $i, ($j, $k) in enumerate([('aa','bb'),('cc','dd')])\n$j.upper,$k.upper\n#end for",1351                    "AA,BB\nCC,DD\n")1352    def test13(self):1353        """single line #for"""1354        self.verify("#for $i in range($aFunc(5)): $i",1355                    "01234")1356    def test14(self):1357        """single line #for with 1 extra leading space"""1358        self.verify("#for $i in range($aFunc(5)):  $i",1359                    " 0 1 2 3 4")1360    def test15(self):1361        """2 times single line #for"""1362        self.verify("#for $i in range($aFunc(5)): $i#slurp\n"*2,1363                    "01234"*2)1364    def test16(self):1365        """false single line #for """1366        self.verify("#for $i in range(5): \n$i\n#end for",1367                    "0\n1\n2\n3\n4\n")1368if versionTuple < (2,3):1369    del ForDirective.test121370class RepeatDirective(OutputTest):1371    def test1(self):1372        """basic #repeat"""1373        self.verify("#repeat 3\n1\n#end repeat",1374                    "1\n1\n1\n")1375        self.verify("#repeat 3: \n1\n#end repeat",1376                    "1\n1\n1\n")1377        self.verify("#repeat 3 ##comment\n1\n#end repeat",1378                    "1\n1\n1\n")1379        self.verify("#repeat 3: ##comment\n1\n#end repeat",1380                    "1\n1\n1\n")1381    def test2(self):1382        """#repeat with numeric expression"""1383        self.verify("#repeat 3*3/3\n1\n#end repeat",1384                    "1\n1\n1\n")1385    1386    def test3(self):1387        """#repeat with placeholder"""1388        self.verify("#repeat $numTwo\n1\n#end repeat",1389                    "1\n1\n")1390    1391    def test4(self):1392        """#repeat with placeholder * num"""1393        self.verify("#repeat $numTwo*1\n1\n#end repeat",1394                    "1\n1\n")1395        1396    def test5(self):1397        """#repeat with placeholder and WS"""1398        self.verify("   #repeat $numTwo   \n1\n   #end repeat   ",1399                    "1\n1\n")1400    def test6(self):1401        """single-line #repeat"""1402        self.verify("#repeat $numTwo: 1",1403                    "11")1404        self.verify("#repeat $numTwo: 1\n"*2,1405                    "1\n1\n"*2)1406        #false single-line1407        self.verify("#repeat 3:  \n1\n#end repeat",1408                    "1\n1\n1\n")1409class AttrDirective(OutputTest):1410    def test1(self):1411        """#attr with int"""1412        self.verify("#attr $test = 1234\n$test",1413                    "1234")1414    def test2(self):1415        """#attr with string"""1416        self.verify("#attr $test = 'blarg'\n$test",1417                    "blarg")1418    def test3(self):1419        """#attr with expression"""1420        self.verify("#attr $test = 'blarg'.upper()*2\n$test",1421                    "BLARGBLARG")1422    def test4(self):1423        """#attr with string + WS1424        Should gobble"""1425        self.verify("     #attr $test = 'blarg'   \n$test",1426                    "blarg")1427    def test5(self):1428        """#attr with string + WS + leading text1429        Shouldn't gobble"""1430        self.verify("  --   #attr $test = 'blarg'   \n$test",1431                    "  --   \nblarg")1432class DefDirective(OutputTest):1433    def test1(self):1434        """#def without argstring"""1435        self.verify("#def testMeth\n1234\n#end def\n$testMeth",1436                    "1234\n")1437        self.verify("#def testMeth ## comment\n1234\n#end def\n$testMeth",1438                    "1234\n")1439        self.verify("#def testMeth: ## comment\n1234\n#end def\n$testMeth",1440                    "1234\n")1441    def test2(self):1442        """#def without argstring, gobble WS"""1443        self.verify("   #def testMeth  \n1234\n    #end def   \n$testMeth",1444                    "1234\n")1445    def test3(self):1446        """#def with argstring, gobble WS"""1447        self.verify("  #def testMeth($a=999)   \n1234-$a\n  #end def\n$testMeth",1448                    "1234-999\n")1449    def test4(self):1450        """#def with argstring, gobble WS, string used in call"""1451        self.verify("  #def testMeth($a=999)   \n1234-$a\n  #end def\n$testMeth('ABC')",1452                    "1234-ABC\n")1453    def test5(self):1454        """#def with argstring, gobble WS, list used in call"""1455        self.verify("  #def testMeth($a=999)   \n1234-$a\n  #end def\n$testMeth([1,2,3])",1456                    "1234-[1, 2, 3]\n")1457    def test6(self):1458        """#def with 2 args, gobble WS, list used in call"""1459        self.verify("  #def testMeth($a, $b='default')   \n1234-$a$b\n  #end def\n$testMeth([1,2,3])",1460                    "1234-[1, 2, 3]default\n")1461    def test7(self):1462        """#def with *args, gobble WS"""1463        self.verify("  #def testMeth($*args)   \n1234-$args\n  #end def\n$testMeth",1464                    "1234-()\n")1465    def test8(self):1466        """#def with **KWs, gobble WS"""1467        self.verify("  #def testMeth($**KWs)   \n1234-$KWs\n  #end def\n$testMeth",1468                    "1234-{}\n")1469    def test9(self):1470        """#def with *args + **KWs, gobble WS"""1471        self.verify("  #def testMeth($*args, $**KWs)   \n1234-$args-$KWs\n  #end def\n$testMeth",1472                    "1234-()-{}\n")1473    def test10(self):1474        """#def with *args + **KWs, gobble WS"""1475        self.verify(1476            "  #def testMeth($*args, $**KWs)   \n1234-$args-$KWs.a\n  #end def\n$testMeth(1,2, a=1)",1477            "1234-(1, 2)-1\n")1478    def test11(self):1479        """single line #def with extra WS"""1480        self.verify(1481            "#def testMeth: aoeuaoeu\n- $testMeth -",1482            "- aoeuaoeu -")1483    def test12(self):1484        """single line #def with extra WS and nested $placeholders"""1485        self.verify(1486            "#def testMeth: $anInt $aFunc(1234)\n- $testMeth -",1487            "- 1 1234 -")1488    def test13(self):1489        """single line #def escaped $placeholders"""1490        self.verify(1491            "#def testMeth: \$aFunc(\$anInt)\n- $testMeth -",1492            "- $aFunc($anInt) -")1493    def test14(self):1494        """single line #def 1 escaped $placeholders"""1495        self.verify(1496            "#def testMeth: \$aFunc($anInt)\n- $testMeth -",1497            "- $aFunc(1) -")1498    def test15(self):1499        """single line #def 1 escaped $placeholders + more WS"""1500        self.verify(1501            "#def testMeth    : \$aFunc($anInt)\n- $testMeth -",1502            "- $aFunc(1) -")1503    def test16(self):1504        """multiline #def with $ on methodName"""1505        self.verify("#def $testMeth\n1234\n#end def\n$testMeth",1506                    "1234\n")1507    def test17(self):1508        """single line #def with $ on methodName"""1509        self.verify("#def $testMeth:1234\n$testMeth",1510                    "1234")1511    def test18(self):1512        """single line #def with an argument"""1513        self.verify("#def $testMeth($arg=1234):$arg\n$testMeth",1514                    "1234")1515class DecoratorDirective(OutputTest):1516    def test1(self):1517        """single line #def with decorator"""1518        self.verify("#@ blah", "#@ blah")1519        self.verify("#@23 blah", "#@23 blah")1520        self.verify("#@@TR: comment", "#@@TR: comment")1521        self.verify("#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"1522                    +"#@testdecorator"1523                    +"\n#def $testMeth():1234\n$testMeth",1524                    1525                    "1234")1526        self.verify("#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"1527                    +"#@testdecorator"1528                    +"\n#block $testMeth():1234",1529                    1530                    "1234")1531        try:1532            self.verify(1533                "#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"1534                +"#@testdecorator\n sdf"1535                +"\n#def $testMeth():1234\n$testMeth",                        1536                "1234")1537        except ParseError:1538            pass1539        else:1540            self.fail('should raise a ParseError')1541if versionTuple < (2,4):1542    del DecoratorDirective1543class BlockDirective(OutputTest):1544    def test1(self):1545        """#block without argstring"""1546        self.verify("#block testBlock\n1234\n#end block",1547                    "1234\n")1548        self.verify("#block testBlock ##comment\n1234\n#end block",1549                    "1234\n")1550    def test2(self):1551        """#block without argstring, gobble WS"""1552        self.verify("  #block testBlock   \n1234\n  #end block  ",1553                    "1234\n")1554    def test3(self):1555        """#block with argstring, gobble WS1556        Because blocks can be reused in multiple parts of the template arguments1557        (!!with defaults!!) can be given."""1558        1559        self.verify("  #block testBlock($a=999)   \n1234-$a\n  #end block  ",1560                    "1234-999\n")1561    def test4(self):1562        """#block with 2 args, gobble WS"""1563        self.verify("  #block testBlock($a=999, $b=444)   \n1234-$a$b\n  #end block  ",1564                    "1234-999444\n")1565    def test5(self):1566        """#block with 2 nested blocks1567        Blocks can be nested to any depth and the name of the block is optional1568        for the #end block part: #end block OR #end block [name] """1569        1570        self.verify("""#block testBlock1571this is a test block1572#block outerNest1573outer1574#block innerNest1575inner1576#end block innerNest1577#end block outerNest1578---1579#end block testBlock1580""",1581                    "this is a test block\nouter\ninner\n---\n")1582    def test6(self):1583        """single line #block """1584        self.verify(1585            "#block testMeth: This is my block",1586            "This is my block")1587    def test7(self):1588        """single line #block with WS"""1589        self.verify(1590            "#block testMeth: This is my block",1591            "This is my block")1592    def test8(self):1593        """single line #block 1 escaped $placeholders"""1594        self.verify(1595            "#block testMeth: \$aFunc($anInt)",1596            "$aFunc(1)")1597    def test9(self):1598        """single line #block 1 escaped $placeholders + WS"""1599        self.verify(1600            "#block testMeth: \$aFunc( $anInt )",1601            "$aFunc( 1 )")1602    def test10(self):1603        """single line #block 1 escaped $placeholders + more WS"""1604        self.verify(1605            "#block testMeth  : \$aFunc( $anInt )",1606            "$aFunc( 1 )")1607    def test11(self):1608        """multiline #block $ on argstring"""1609        self.verify("#block $testBlock\n1234\n#end block",1610                    "1234\n")1611    def test12(self):1612        """single line #block with $ on methodName """1613        self.verify(1614            "#block $testMeth: This is my block",1615            "This is my block")1616    def test13(self):1617        """single line #block with an arg """1618        self.verify(1619            "#block $testMeth($arg='This is my block'): $arg",1620            "This is my block")1621    def test14(self):1622        """single line #block with None for content"""1623        self.verify(1624            """#block $testMeth: $None\ntest $testMeth-""",1625            "test -")1626    def test15(self):1627        """single line #block with nothing for content"""1628        self.verify(1629            """#block $testMeth: \nfoo\n#end block\ntest $testMeth-""",1630            "foo\ntest foo\n-")1631class IncludeDirective(OutputTest):1632    def setUp(self):1633        fp = open('parseTest.txt','w')1634        fp.write("$numOne $numTwo")1635        fp.flush()1636        fp.close1637    def tearDown(self):1638        if os.path.exists('parseTest.txt'):1639            os.remove('parseTest.txt')1640    def test1(self):1641        """#include raw of source $emptyString"""1642        self.verify("#include raw source=$emptyString",1643                    "")1644    def test2(self):1645        """#include raw of source $blockToBeParsed"""1646        self.verify("#include raw source=$blockToBeParsed",1647                    "$numOne $numTwo")1648    def test3(self):1649        """#include raw of 'parseTest.txt'"""1650        self.verify("#include raw 'parseTest.txt'",1651                    "$numOne $numTwo")1652    def test4(self):1653        """#include raw of $includeFileName"""1654        self.verify("#include raw $includeFileName",1655                    "$numOne $numTwo")1656    def test5(self):1657        """#include raw of $includeFileName, with WS"""1658        self.verify("       #include raw $includeFileName      ",1659                    "$numOne $numTwo")1660    def test6(self):1661        """#include raw of source= , with WS"""1662        self.verify("       #include raw source='This is my $Source '*2      ",1663                    "This is my $Source This is my $Source ")1664    def test7(self):1665        """#include of $blockToBeParsed"""1666        self.verify("#include source=$blockToBeParsed",1667                    "1 2")1668        1669    def test8(self):1670        """#include of $blockToBeParsed, with WS"""1671        self.verify("   #include source=$blockToBeParsed   ",1672                    "1 2")1673    def test9(self):1674        """#include of 'parseTest.txt', with WS"""1675        self.verify("   #include source=$blockToBeParsed   ",1676                    "1 2")1677    def test10(self):1678        """#include of "parseTest.txt", with WS"""1679        self.verify("   #include source=$blockToBeParsed   ",1680                    "1 2")1681        1682    def test11(self):1683        """#include of 'parseTest.txt', with WS and surrounding text"""1684        self.verify("aoeu\n  #include source=$blockToBeParsed  \naoeu",1685                    "aoeu\n1 2aoeu")1686    def test12(self):1687        """#include of 'parseTest.txt', with WS and explicit closure"""1688        self.verify("  #include source=$blockToBeParsed#  ",1689                    "  1 2  ")1690class SilentDirective(OutputTest):1691    def test1(self):1692        """simple #silent"""1693        self.verify("#silent $aFunc",1694                    "")1695    def test2(self):1696        """simple #silent"""1697        self.verify("#silent $anObj.callIt\n$anObj.callArg",1698                    "1234")1699        self.verify("#silent $anObj.callIt ##comment\n$anObj.callArg",1700                    "1234")1701    def test3(self):1702        """simple #silent"""1703        self.verify("#silent $anObj.callIt(99)\n$anObj.callArg",1704                    "99")1705class SetDirective(OutputTest):1706    def test1(self):1707        """simple #set"""1708        self.verify("#set $testVar = 'blarg'\n$testVar",1709                    "blarg")1710        self.verify("#set testVar = 'blarg'\n$testVar",1711                    "blarg")1712        self.verify("#set testVar = 'blarg'##comment\n$testVar",1713                    "blarg")1714    def test2(self):1715        """simple #set with no WS between operands"""1716        self.verify("#set       $testVar='blarg'",1717                    "")1718    def test3(self):1719        """#set + use of var"""1720        self.verify("#set $testVar = 'blarg'\n$testVar",1721                    "blarg")1722        1723    def test4(self):1724        """#set + use in an #include"""1725        self.verify("#set global $aSetVar = 1234\n#include source=$includeBlock2",1726                    "1 2 1234")1727    def test5(self):1728        """#set with a dictionary"""1729        self.verify(     """#set $testDict = {'one':'one1','two':'two2','three':'three3'}1730$testDict.one1731$testDict.two""",1732                         "one1\ntwo2")1733    def test6(self):1734        """#set with string, then used in #if block"""1735    1736        self.verify("""#set $test='a string'\n#if $test#blarg#end if""",1737                    "blarg")1738    def test7(self):1739        """simple #set, gobble WS"""1740        self.verify("   #set $testVar = 'blarg'   ",1741                    "")1742    def test8(self):1743        """simple #set, don't gobble WS"""1744        self.verify("  #set $testVar = 'blarg'#---",1745                    "  ---")1746    def test9(self):1747        """simple #set with a list"""1748        self.verify("   #set $testVar = [1, 2, 3]  \n$testVar",1749                    "[1, 2, 3]")1750    def test10(self):1751        """simple #set global with a list"""1752        self.verify("   #set global $testVar = [1, 2, 3]  \n$testVar",1753                    "[1, 2, 3]")1754    def test11(self):1755        """simple #set global with a list and *cache1756        Caching only works with global #set vars.  Local vars are not accesible1757        to the cache namespace.1758        """1759        1760        self.verify("   #set global $testVar = [1, 2, 3]  \n$*testVar",1761                    "[1, 2, 3]")1762    def test12(self):1763        """simple #set global with a list and *<int>*cache"""1764        self.verify("   #set global $testVar = [1, 2, 3]  \n$*5*testVar",1765                    "[1, 2, 3]")1766    def test13(self):1767        """simple #set with a list and *<float>*cache"""1768        self.verify("   #set global $testVar = [1, 2, 3]  \n$*.5*testVar",1769                    "[1, 2, 3]")1770    def test14(self):1771        """simple #set without NameMapper on"""1772        self.verify("""#compiler useNameMapper = 0\n#set $testVar = 1 \n$testVar""",1773                    "1")1774    def test15(self):1775        """simple #set without $"""1776        self.verify("""#set testVar = 1 \n$testVar""",1777                    "1")1778    def test16(self):1779        """simple #set global without $"""1780        self.verify("""#set global testVar = 1 \n$testVar""",1781                    "1")1782    def test17(self):1783        """simple #set module without $"""1784        self.verify("""#set module __foo__ = 'bar'\n$__foo__""",1785                    "bar")1786    def test18(self):1787        """#set with i,j=list style assignment"""1788        self.verify("""#set i,j = [1,2]\n$i$j""",1789                    "12")1790        self.verify("""#set $i,$j = [1,2]\n$i$j""",1791                    "12")1792    def test19(self):1793        """#set with (i,j)=list style assignment"""1794        self.verify("""#set (i,j) = [1,2]\n$i$j""",1795                    "12")1796        self.verify("""#set ($i,$j) = [1,2]\n$i$j""",1797                    "12")1798    def test20(self):1799        """#set with i, (j,k)=list style assignment"""1800        self.verify("""#set i, (j,k) = [1,(2,3)]\n$i$j$k""",1801                    "123")1802        self.verify("""#set $i, ($j,$k) = [1,(2,3)]\n$i$j$k""",1803                    "123")1804class IfDirective(OutputTest):1805    def test1(self):1806        """simple #if block"""1807        self.verify("#if 1\n$aStr\n#end if\n",1808                    "blarg\n")1809        self.verify("#if 1:\n$aStr\n#end if\n",1810                    "blarg\n")1811        self.verify("#if 1:   \n$aStr\n#end if\n",1812                    "blarg\n")1813        self.verify("#if 1: ##comment \n$aStr\n#end if\n",1814                        "blarg\n")1815        self.verify("#if 1 ##comment \n$aStr\n#end if\n",1816                        "blarg\n")1817        self.verify("#if 1##for i in range(10)#$i#end for##end if",1818                    '0123456789')1819        self.verify("#if 1: #for i in range(10)#$i#end for",1820                    '0123456789')1821        self.verify("#if 1: #for i in range(10):$i",1822                    '0123456789')1823    def test2(self):1824        """simple #if block, with WS"""1825        self.verify("   #if 1\n$aStr\n  #end if  \n",1826                    "blarg\n")1827    def test3(self):1828        """simple #if block, with WS and explicit closures"""1829        self.verify("   #if 1#\n$aStr\n  #end if #--\n",1830                    "   \nblarg\n  --\n")1831    def test4(self):1832        """#if block using $numOne"""1833        self.verify("#if $numOne\n$aStr\n#end if\n",1834                    "blarg\n")1835    def test5(self):1836        """#if block using $zero"""1837        self.verify("#if $zero\n$aStr\n#end if\n",1838                    "")1839    def test6(self):1840        """#if block using $emptyString"""1841        self.verify("#if $emptyString\n$aStr\n#end if\n",1842                    "")1843    def test7(self):1844        """#if ... #else ... block using a $emptyString"""1845        self.verify("#if $emptyString\n$anInt\n#else\n$anInt - $anInt\n#end if",1846                    "1 - 1\n")1847        1848    def test8(self):1849        """#if ... #elif ... #else ... block using a $emptyString"""1850        self.verify("#if $emptyString\n$c\n#elif $numOne\n$numOne\n#else\n$c - $c\n#end if",1851                    "1\n")1852    def test9(self):1853        """#if 'not' test, with #slurp"""1854        self.verify("#if not $emptyString\n$aStr#slurp\n#end if\n",1855                    "blarg")1856    def test10(self):1857        """#if block using $*emptyString1858        This should barf1859        """1860        try:1861            self.verify("#if $*emptyString\n$aStr\n#end if\n",1862                        "")1863        except ParseError:1864            pass1865        else:1866            self.fail('This should barf')1867    def test11(self):1868        """#if block using invalid top-level $(placeholder) syntax - should barf"""1869        for badSyntax in ("#if $*5*emptyString\n$aStr\n#end if\n",1870                          "#if ${emptyString}\n$aStr\n#end if\n",1871                          "#if $(emptyString)\n$aStr\n#end if\n",1872                          "#if $[emptyString]\n$aStr\n#end if\n",1873                          "#if $!emptyString\n$aStr\n#end if\n",1874                          ):1875            try:1876                self.verify(badSyntax, "")1877            except ParseError:1878                pass1879            else:1880                self.fail('This should barf')1881            1882    def test12(self):1883        """#if ... #else if ... #else ... block using a $emptyString1884        Same as test 8 but using else if instead of elif"""1885        self.verify("#if $emptyString\n$c\n#else if $numOne\n$numOne\n#else\n$c - $c\n#end if",1886                    "1\n")1887    def test13(self):1888        """#if# ... #else # ... block using a $emptyString with """1889        self.verify("#if $emptyString# $anInt#else#$anInt - $anInt#end if",1890                    "1 - 1")1891    def test14(self):1892        """single-line #if: simple"""1893        self.verify("#if $emptyString then 'true' else 'false'",1894                    "false")1895    def test15(self):1896        """single-line #if: more complex"""1897        self.verify("#if $anInt then 'true' else 'false'",1898                    "true")1899    def test16(self):1900        """single-line #if: with the words 'else' and 'then' in the output """1901        self.verify("#if ($anInt and not $emptyString==''' else ''') then $str('then') else 'else'",1902                    "then")1903    def test17(self):1904        """single-line #if:  """1905        self.verify("#if 1: foo\n#if 0: bar\n#if 1: foo",1906                    "foo\nfoo")1907        self.verify("#if 1: foo\n#if 0: bar\n#if 1: foo",1908                    "foo\nfoo")1909    def test18(self):1910        """single-line #if: \n#else: """1911        self.verify("#if 1: foo\n#elif 0: bar",1912                    "foo\n")1913        self.verify("#if 1: foo\n#elif 0: bar\n#else: blarg\n",1914                    "foo\n")1915        self.verify("#if 0: foo\n#elif 0: bar\n#else: blarg\n",1916                    "blarg\n")1917class UnlessDirective(OutputTest):1918    1919    def test1(self):1920        """#unless 1"""1921        self.verify("#unless 1\n 1234 \n#end unless",1922                    "")1923        self.verify("#unless 1:\n 1234 \n#end unless",1924                    "")1925        self.verify("#unless 1: ##comment\n 1234 \n#end unless",1926                    "")1927        self.verify("#unless 1 ##comment\n 1234 \n#end unless",1928                    "")1929    def test2(self):1930        """#unless 0"""1931        self.verify("#unless 0\n 1234 \n#end unless",1932                    " 1234 \n")1933    def test3(self):1934        """#unless $none"""1935        self.verify("#unless $none\n 1234 \n#end unless",1936                    " 1234 \n")1937    def test4(self):1938        """#unless $numTwo"""1939        self.verify("#unless $numTwo\n 1234 \n#end unless",1940                    "")1941    def test5(self):1942        """#unless $numTwo with WS"""1943        self.verify("   #unless $numTwo   \n 1234 \n    #end unless   ",1944                    "")1945    def test6(self):1946        """single-line #unless"""1947        self.verify("#unless 1: 1234", "")1948        self.verify("#unless 0: 1234", "1234")1949        self.verify("#unless 0: 1234\n"*2, "1234\n"*2)1950        1951class PSP(OutputTest):1952    1953    def test1(self):1954        """simple <%= [int] %>"""1955        self.verify("<%= 1234 %>",  "1234")1956    def test2(self):1957        """simple <%= [string] %>"""1958        self.verify("<%= 'blarg' %>", "blarg")1959    def test3(self):1960        """simple <%= None %>"""1961        self.verify("<%= None %>", "")1962    def test4(self):1963        """simple <%= [string] %> + $anInt"""1964        self.verify("<%= 'blarg' %>$anInt", "blarg1")1965    def test5(self):1966        """simple <%= [EXPR] %> + $anInt"""1967        self.verify("<%= ('blarg'*2).upper() %>$anInt", "BLARGBLARG1")1968    def test6(self):1969        """for loop in <%%>"""1970        self.verify("<% for i in range(5):%>1<%end%>", "11111")1971    def test7(self):1972        """for loop in <%%> and using <%=i%>"""1973        self.verify("<% for i in range(5):%><%=i%><%end%>", "01234")1974    def test8(self):1975        """for loop in <% $%> and using <%=i%>"""1976        self.verify("""<% for i in range(5):1977    i=i*2$%><%=i%><%end%>""", "02468")1978    def test9(self):1979        """for loop in <% $%> and using <%=i%> plus extra text"""1980        self.verify("""<% for i in range(5):1981    i=i*2$%><%=i%>-<%end%>""", "0-2-4-6-8-")1982class WhileDirective(OutputTest):1983    def test1(self):1984        """simple #while with a counter"""1985        self.verify("#set $i = 0\n#while $i < 5\n$i#slurp\n#set $i += 1\n#end while",1986                    "01234")1987class ContinueDirective(OutputTest):1988    def test1(self):1989        """#continue with a #while"""1990        self.verify("""#set $i = 01991#while $i < 51992#if $i == 31993  #set $i += 1        1994  #continue1995#end if1996$i#slurp1997#set $i += 11998#end while""",1999        "0124")2000    def test2(self):2001        """#continue with a #for"""2002        self.verify("""#for $i in range(5)2003#if $i == 32004  #continue2005#end if2006$i#slurp2007#end for""",2008        "0124")2009class BreakDirective(OutputTest):2010    def test1(self):2011        """#break with a #while"""2012        self.verify("""#set $i = 02013#while $i < 52014#if $i == 32015  #break2016#end if2017$i#slurp2018#set $i += 12019#end while""",2020        "012")2021    def test2(self):2022        """#break with a #for"""2023        self.verify("""#for $i in range(5)2024#if $i == 32025  #break2026#end if2027$i#slurp2028#end for""",2029        "012")2030class TryDirective(OutputTest):2031    def test1(self):2032        """simple #try 2033        """2034        self.verify("#try\n1234\n#except\nblarg\n#end try",2035                    "1234\n")2036    def test2(self):2037        """#try / #except with #raise2038        """2039        self.verify("#try\n#raise ValueError\n#except\nblarg\n#end try",2040                    "blarg\n")2041        2042    def test3(self):2043        """#try / #except with #raise + WS2044        Should gobble2045        """2046        self.verify("  #try  \n  #raise ValueError \n  #except \nblarg\n  #end try",2047                    "blarg\n")2048    def test4(self):2049        """#try / #except with #raise + WS and leading text2050        2051        Shouldn't gobble2052        """2053        self.verify("--#try  \n  #raise ValueError \n  #except \nblarg\n  #end try#--",2054                    "--\nblarg\n  --")2055    def test5(self):2056        """nested #try / #except with #raise2057        """2058        self.verify(2059"""#try2060  #raise ValueError2061#except2062  #try2063   #raise ValueError2064  #except2065blarg2066  #end try2067#end try""",2068                    "blarg\n")2069class PassDirective(OutputTest):2070    def test1(self):2071        """#pass in a #try / #except block2072        """2073        self.verify("#try\n#raise ValueError\n#except\n#pass\n#end try",2074                    "")2075    def test2(self):2076        """#pass in a #try / #except block + WS2077        """2078        self.verify("  #try  \n  #raise ValueError  \n  #except  \n   #pass   \n   #end try",2079                    "")2080class AssertDirective(OutputTest):2081    def test1(self):2082        """simple #assert 2083        """2084        self.verify("#set $x = 1234\n#assert $x == 1234",2085                    "")2086    def test2(self):2087        """simple #assert that fails2088        """2089        def test(self=self):2090            self.verify("#set $x = 1234\n#assert $x == 999",2091                        ""),2092        self.failUnlessRaises(AssertionError, test)2093        2094    def test3(self):2095        """simple #assert with WS2096        """2097        self.verify("#set $x = 1234\n   #assert $x == 1234   ",2098                    "")2099class RaiseDirective(OutputTest):2100    def test1(self):2101        """simple #raise ValueError2102        Should raise ValueError2103        """2104        def test(self=self):2105            self.verify("#raise ValueError",2106                        ""),2107        self.failUnlessRaises(ValueError, test)2108                              2109    def test2(self):2110        """#raise ValueError in #if block2111        Should raise ValueError2112        """2113        def test(self=self):2114            self.verify("#if 1\n#raise ValueError\n#end if\n",2115                        "")2116        self.failUnlessRaises(ValueError, test)2117    def test3(self):2118        """#raise ValueError in #if block2119        Shouldn't raise ValueError2120        """2121        self.verify("#if 0\n#raise ValueError\n#else\nblarg#end if\n",2122                    "blarg\n")2123class ImportDirective(OutputTest):2124    def test1(self):2125        """#import math2126        """2127        self.verify("#import math",2128                    "")2129    def test2(self):2130        """#import math + WS2131        Should gobble2132        """2133        self.verify("    #import math    ",2134                    "")2135    def test3(self):2136        """#import math + WS + leading text2137        2138        Shouldn't gobble2139        """2140        self.verify("  --  #import math    ",2141                    "  --  ")2142        2143    def test4(self):2144        """#from math import syn2145        """2146        self.verify("#from math import cos",2147                    "")2148    def test5(self):2149        """#from math import cos  + WS2150        Should gobble2151        """2152        self.verify("    #from math import cos  ",2153                    "")2154    def test6(self):2155        """#from math import cos  + WS + leading text2156        Shouldn't gobble2157        """2158        self.verify("  --  #from math import cos  ",2159                    "  --  ")2160    def test7(self):2161        """#from math import cos -- use it2162        """2163        self.verify("#from math import cos\n$cos(0)",2164                    "1.0")2165    def test8(self):2166        """#from math import cos,tan,sin -- and use them2167        """2168        self.verify("#from math import cos, tan, sin\n$cos(0)-$tan(0)-$sin(0)",2169                    "1.0-0.0-0.0")2170    def test9(self):2171        """#import os.path -- use it2172        """2173        2174        self.verify("#import os.path\n$os.path.exists('.')",2175                    repr(True))2176    def test10(self):2177        """#import os.path -- use it with NameMapper turned off2178        """2179        self.verify("""##2180#compiler-settings2181useNameMapper=False2182#end compiler-settings2183#import os.path2184$os.path.exists('.')""",2185                    repr(True))2186    def test11(self):2187        """#from math import *2188        """2189        2190        self.verify("#from math import *\n$pow(1,2) $log10(10)",2191                    "1.0 1.0")2192class CompilerDirective(OutputTest):2193    def test1(self):2194        """overriding the commentStartToken2195        """2196        self.verify("""$anInt##comment2197#compiler commentStartToken = '//'2198$anInt//comment2199""",2200                    "1\n1\n")2201    def test2(self):2202        """overriding and resetting the commentStartToken2203        """2204        self.verify("""$anInt##comment2205#compiler commentStartToken = '//'2206$anInt//comment2207#compiler reset2208$anInt//comment2209""",2210                    "1\n1\n1//comment\n")2211class CompilerSettingsDirective(OutputTest):2212    2213    def test1(self):2214        """overriding the cheetahVarStartToken2215        """2216        self.verify("""$anInt2217#compiler-settings2218cheetahVarStartToken = @2219#end compiler-settings2220@anInt2221#compiler-settings reset2222$anInt2223""",2224                    "1\n1\n1\n")2225    def test2(self):2226        """overriding the directiveStartToken2227        """2228        self.verify("""#set $x = 12342229$x2230#compiler-settings2231directiveStartToken = @2232#end compiler-settings2233@set $x = 12342234$x2235""",2236                    "1234\n1234\n")2237    def test3(self):2238        """overriding the commentStartToken2239        """2240        self.verify("""$anInt##comment2241#compiler-settings2242commentStartToken = //2243#end compiler-settings2244$anInt//comment2245""",2246                    "1\n1\n")2247if sys.platform.startswith('java'):2248    del CompilerDirective2249    del CompilerSettingsDirective2250class ExtendsDirective(OutputTest):2251    def test1(self):2252        """#extends Cheetah.Templates._SkeletonPage"""2253        self.verify("""#from Cheetah.Templates._SkeletonPage import _SkeletonPage2254#extends _SkeletonPage2255#implements respond2256$spacer()2257""",2258                    '<img src="spacer.gif" width="1" height="1" alt="" />\n')2259        self.verify("""#from Cheetah.Templates._SkeletonPage import _SkeletonPage2260#extends _SkeletonPage2261#implements respond(foo=1234)2262$spacer()$foo2263""",2264                    '<img src="spacer.gif" width="1" height="1" alt="" />1234\n')2265    def test2(self):2266        """#extends Cheetah.Templates.SkeletonPage without #import"""2267        self.verify("""#extends Cheetah.Templates.SkeletonPage2268#implements respond2269$spacer()2270""",2271                    '<img src="spacer.gif" width="1" height="1" alt="" />\n')2272    def test3(self):2273        """#extends Cheetah.Templates.SkeletonPage.SkeletonPage without #import"""2274        self.verify("""#extends Cheetah.Templates.SkeletonPage.SkeletonPage2275#implements respond2276$spacer()2277""",2278                    '<img src="spacer.gif" width="1" height="1" alt="" />\n')2279    def test4(self):2280        """#extends with globals and searchList test"""2281        self.verify("""#extends Cheetah.Templates.SkeletonPage2282#set global g="Hello"2283#implements respond2284$g $numOne2285""",2286                    'Hello 1\n')2287class SuperDirective(OutputTest):2288    def test1(self):2289        tmpl1 = Template.compile('''$foo $bar(99)2290        #def foo: this is base foo2291        #def bar(arg): super-$arg''')2292        tmpl2 = tmpl1.subclass('''2293        #implements dummy2294        #def foo2295          #super2296          This is child foo2297          #super(trans=trans)2298          $bar(1234)2299        #end def2300        #def bar(arg): #super($arg)2301        ''')2302        expected = ('this is base foo          '2303                    'This is child foo\nthis is base foo          '2304                    'super-1234\n super-99')2305        assert str(tmpl2()).strip()==expected2306class ImportantExampleCases(OutputTest):2307    def test1(self):2308        """how to make a comma-delimited list"""2309        self.verify("""#set $sep = ''2310#for $letter in $letterList2311$sep$letter#slurp2312#set $sep = ', '2313#end for2314""",2315                    "a, b, c")2316class FilterDirective(OutputTest):2317    convertEOLs=False2318    def _getCompilerSettings(self):2319        return {'useFilterArgsInPlaceholders':True}2320    2321    def test1(self):2322        """#filter Filter2323        """2324        self.verify("#filter Filter\n$none#end filter",2325                    "")2326        self.verify("#filter Filter: $none",2327                    "")2328    def test2(self):2329        """#filter ReplaceNone with WS2330        """2331        self.verify("#filter Filter  \n$none#end filter",2332                    "")2333    def test3(self):2334        """#filter MaxLen -- maxlen of 5"""2335        self.verify("#filter MaxLen  \n${tenDigits, $maxlen=5}#end filter",2336                    "12345")2337    def test4(self):2338        """#filter MaxLen -- no maxlen2339        """2340        self.verify("#filter MaxLen  \n${tenDigits}#end filter",2341                    "1234567890")2342    def test5(self):2343        """#filter WebSafe -- basic usage2344        """2345        self.verify("#filter WebSafe  \n$webSafeTest#end filter",2346                    "abc <=> &")2347    def test6(self):2348        """#filter WebSafe -- also space2349        """2350        self.verify("#filter WebSafe  \n${webSafeTest, $also=' '}#end filter",2351                    "abc <=> &")2352        2353    def test7(self):2354        """#filter WebSafe -- also space, without $ on the args2355        """2356        self.verify("#filter WebSafe  \n${webSafeTest, also=' '}#end filter",2357                    "abc <=> &")2358    def test8(self):2359        """#filter Strip -- trailing newline2360        """2361        self.verify("#filter Strip\n$strip1#end filter",2362                    "strippable whitespace\n")2363    def test9(self):2364        """#filter Strip -- no trailing newine2365        """2366        self.verify("#filter Strip\n$strip2#end filter",2367                    "strippable whitespace")2368    def test10(self):2369        """#filter Strip -- multi-line2370        """2371        self.verify("#filter Strip\n$strip3#end filter",2372                    "strippable whitespace\n1 2  3\n")2373    def test11(self):2374        """#filter StripSqueeze -- canonicalize all whitespace to ' '2375        """2376        self.verify("#filter StripSqueeze\n$strip3#end filter",2377                    "strippable whitespace 1 2 3")2378class EchoDirective(OutputTest):2379    def test1(self):2380        """#echo 12342381        """2382        self.verify("#echo 1234",2383                    "1234")2384class SilentDirective(OutputTest):2385    def test1(self):2386        """#silent 12342387        """2388        self.verify("#silent 1234",2389                    "")2390class ErrorCatcherDirective(OutputTest):2391    pass2392class VarExists(OutputTest):               # Template.varExists()2393    2394    def test1(self):2395        """$varExists('$anInt')2396        """2397        self.verify("$varExists('$anInt')",2398                    repr(True))2399    def test2(self):2400        """$varExists('anInt')2401        """2402        self.verify("$varExists('anInt')",2403                    repr(True))2404    def test3(self):2405        """$varExists('$anInt')2406        """2407        self.verify("$varExists('$bogus')",2408                    repr(False))2409    def test4(self):2410        """$varExists('$anInt') combined with #if false2411        """2412        self.verify("#if $varExists('$bogus')\n1234\n#else\n999\n#end if",2413                    "999\n")2414    def test5(self):2415        """$varExists('$anInt') combined with #if true2416        """2417        self.verify("#if $varExists('$anInt')\n1234\n#else\n999#end if",2418                    "1234\n")2419class GetVar(OutputTest):               # Template.getVar()2420    def test1(self):2421        """$getVar('$anInt')2422        """2423        self.verify("$getVar('$anInt')",2424                    "1")2425    def test2(self):2426        """$getVar('anInt')2427        """2428        self.verify("$getVar('anInt')",2429                    "1")2430    def test3(self):2431        """$self.getVar('anInt')2432        """2433        self.verify("$self.getVar('anInt')",2434                    "1")2435        2436    def test4(self):2437        """$getVar('bogus', 1234)2438        """2439        self.verify("$getVar('bogus',  1234)",2440                    "1234")2441        2442    def test5(self):2443        """$getVar('$bogus', 1234)2444        """2445        self.verify("$getVar('$bogus',  1234)",2446                    "1234")2447class MiscComplexSyntax(OutputTest):2448    def test1(self):2449        """Complex use of {},[] and () in a #set expression2450        ----2451        #set $c = {'A':0}[{}.get('a', {'a' : 'A'}['a'])]2452        $c2453        """2454        self.verify("#set $c = {'A':0}[{}.get('a', {'a' : 'A'}['a'])]\n$c",2455                    "0")2456class CGI(OutputTest):2457    """CGI scripts with(out) the CGI environment and with(out) GET variables.2458    """2459    convertEOLs=False2460    2461    def _beginCGI(self):  2462        os.environ['REQUEST_METHOD'] = "GET"2463    def _endCGI(self):  2464        try:2465            del os.environ['REQUEST_METHOD']2466        except KeyError:2467            pass2468    _guaranteeNoCGI = _endCGI2469    def test1(self):2470        """A regular template."""2471        self._guaranteeNoCGI()2472        source = "#extends Cheetah.Tools.CGITemplate\n" + \2473                 "#implements respond\n" + \2474                 "$cgiHeaders#slurp\n" + \2475                 "Hello, world!" 2476        self.verify(source, "Hello, world!")2477    def test2(self):2478        """A CGI script."""2479        self._beginCGI()2480        source = "#extends Cheetah.Tools.CGITemplate\n" + \2481                 "#implements respond\n" + \2482                 "$cgiHeaders#slurp\n" + \2483                 "Hello, world!" 2484        self.verify(source, "Content-type: text/html\n\nHello, world!")2485        self._endCGI()2486    def test3(self):2487        """A (pseudo) Webware servlet.2488           2489           This uses the Python syntax escape to set2490           self._CHEETAH__isControlledByWebKit.           2491           We could instead do '#silent self._CHEETAH__isControlledByWebKit = True',2492           taking advantage of the fact that it will compile unchanged as long2493           as there's no '$' in the statement.  (It won't compile with an '$'2494           because that would convert to a function call, and you can't assign2495           to a function call.)  Because this isn't really being called from2496           Webware, we'd better not use any Webware services!  Likewise, we'd2497           better not call $cgiImport() because it would be misled.2498        """2499        self._beginCGI()2500        source = "#extends Cheetah.Tools.CGITemplate\n" + \2501                 "#implements respond\n" + \2502                 "<% self._CHEETAH__isControlledByWebKit = True %>#slurp\n" + \2503                 "$cgiHeaders#slurp\n" + \2504                 "Hello, world!"2505        self.verify(source, "Hello, world!")2506        self._endCGI()2507    def test4(self):2508        """A CGI script with a GET variable."""2509        self._beginCGI()2510        os.environ['QUERY_STRING'] = "cgiWhat=world"2511        source = "#extends Cheetah.Tools.CGITemplate\n" + \2512                 "#implements respond\n" + \2513                 "$cgiHeaders#slurp\n" + \2514                 "#silent $webInput(['cgiWhat'])##slurp\n" + \2515                 "Hello, $cgiWhat!"2516        self.verify(source, 2517                    "Content-type: text/html\n\nHello, world!")2518        del os.environ['QUERY_STRING']2519        self._endCGI()2520class WhitespaceAfterDirectiveTokens(OutputTest):2521    def _getCompilerSettings(self):2522        return {'allowWhitespaceAfterDirectiveStartToken':True}2523    def test1(self):2524        self.verify("# for i in range(10): $i",2525                    "0123456789")2526        self.verify("# for i in range(10)\n$i# end for",2527                    "0123456789")2528        self.verify("# for i in range(10)#$i#end for",2529                    "0123456789")2530class DefmacroDirective(OutputTest):2531    def _getCompilerSettings(self):2532        def aMacro(src):2533            return '$aStr'2534        2535        return {'macroDirectives':{'aMacro':aMacro2536                                   }}2537    def test1(self):2538        self.verify("""\2539#defmacro inc: #set @src +=12540#set i = 12541#inc: $i2542$i""",2543                    "2")2544        self.verify("""\2545#defmacro test2546#for i in range(10): @src2547#end defmacro2548#test: $i-foo#slurp2549#for i in range(3): $i""",2550                    "0-foo1-foo2-foo3-foo4-foo5-foo6-foo7-foo8-foo9-foo012")2551        self.verify("""\2552#defmacro test2553#for i in range(10): @src2554#end defmacro2555#test: $i-foo2556#for i in range(3): $i""",2557  "0-foo\n1-foo\n2-foo\n3-foo\n4-foo\n5-foo\n6-foo\n7-foo\n8-foo\n9-foo\n012")2558        self.verify("""\2559#defmacro test: #for i in range(10): @src2560#test: $i-foo#slurp2561-#for i in range(3): $i""",2562                    "0-foo1-foo2-foo3-foo4-foo5-foo6-foo7-foo8-foo9-foo-012")2563        self.verify("""\2564#defmacro test##for i in range(10): @src#end defmacro##slurp2565#test: $i-foo#slurp2566-#for i in range(3): $i""",2567                    "0-foo1-foo2-foo3-foo4-foo5-foo6-foo7-foo8-foo9-foo-012")2568        self.verify("""\2569#defmacro testFoo: nothing2570#defmacro test(foo=1234): #for i in range(10): @src2571#test foo=234: $i-foo#slurp2572-#for i in range(3): $i""",2573                    "0-foo1-foo2-foo3-foo4-foo5-foo6-foo7-foo8-foo9-foo-012")2574        self.verify("""\2575#defmacro testFoo: nothing2576#defmacro test(foo=1234): #for i in range(10): @src@foo2577#test foo='-foo'#$i#end test#-#for i in range(3): $i""",2578                    "0-foo1-foo2-foo3-foo4-foo5-foo6-foo7-foo8-foo9-foo-012")2579        self.verify("""\2580#defmacro testFoo: nothing2581#defmacro test(foo=1234): #for i in range(10): @src.strip()@foo2582#test foo='-foo': $i2583-#for i in range(3): $i""",2584                    "0-foo1-foo2-foo3-foo4-foo5-foo6-foo7-foo8-foo9-foo-012")2585    def test2(self):2586        self.verify("#aMacro: foo",2587                    "blarg")2588        self.verify("#defmacro nested: @macros.aMacro(@src)\n#nested: foo",2589                    "blarg")2590class Indenter(OutputTest):2591    convertEOLs=False2592    2593    source = """2594public class X2595{2596    #for $method in $methods2597        $getMethod($method)2598        2599    #end for2600}2601//end of class2602#def getMethod($method)2603    #indent ++2604    public $getType($method) ${method.Name}($getParams($method.Params));2605    #indent --2606#end def2607#def getParams($params)2608    #indent off2609    #for $counter in $range($len($params))2610        #if $counter == len($params) - 12611                       $params[$counter]#slurp2612        #else:2613                       $params[$counter], 2614        #end if2615    #end for2616    #indent on2617#end def2618#def getType($method)2619    #indent push2620    #indent=02621    #if $method.Type == "VT_VOID"2622        void#slurp2623    #elif $method.Type == "VT_INT"2624        int#slurp2625    #elif $method.Type == "VT_VARIANT"2626        Object#slurp2627    #end if2628    #indent pop2629#end def2630"""2631    control = """2632public class X2633{2634    public void Foo(2635                       _input, 2636                       _output);2637    public int Bar(2638                       _str1, 2639                       str2, 2640                       _str3);2641    public Object Add(2642                       value1, 2643                       value);2644}2645//end of class2646"""2647    def _getCompilerSettings(self):2648        return {'useFilterArgsInPlaceholders':True}2649    def searchList(self):    # Inside Indenter class.2650        class Method:2651            def __init__(self, _name, _type, *_params):2652                self.Name = _name2653                self.Type = _type2654                self.Params = _params2655        methods = [Method("Foo", "VT_VOID", "_input", "_output"),2656                   Method("Bar", "VT_INT", "_str1", "str2", "_str3"),2657                   Method("Add", "VT_VARIANT", "value1", "value")]2658        return [{"methods": methods}]2659    def test1(self):    # Inside Indenter class.2660        self.verify(self.source, self.control)2661##################################################2662## CREATE CONVERTED EOL VERSIONS OF THE TEST CASES2663if OutputTest._useNewStyleCompilation and versionTuple >= (2,3):2664    extraCompileKwArgsForDiffBaseclass = {'baseclass':dict}2665else:2666    extraCompileKwArgsForDiffBaseclass = {'baseclass':object}2667    2668for klass in [var for var in globals().values()2669              if type(var) == types.ClassType and issubclass(var, unittest.TestCase)]:2670    name = klass.__name__        2671    if hasattr(klass,'convertEOLs') and klass.convertEOLs:2672        win32Src = r"class %(name)s_Win32EOL(%(name)s): _EOLreplacement = '\r\n'"%locals()2673        macSrc = r"class %(name)s_MacEOL(%(name)s): _EOLreplacement = '\r'"%locals()2674        #print win32Src...li_boost_shared_ptr_runme.py
Source:li_boost_shared_ptr_runme.py  
1import li_boost_shared_ptr2import gc3debug = False4# simple shared_ptr usage - created in C++5class li_boost_shared_ptr_runme:6    def main(self):7        if (debug):8            print "Started"9        li_boost_shared_ptr.cvar.debug_shared = debug10        # Change loop count to run for a long time to monitor memory11        loopCount = 1  # 500012        for i in range(0, loopCount):13            self.runtest()14        # Expect 1 instance - the one global variable (GlobalValue)15        if (li_boost_shared_ptr.Klass_getTotal_count() != 1):16            raise RuntimeError("Klass.total_count=%s" %17                               li_boost_shared_ptr.Klass.getTotal_count())18        wrapper_count = li_boost_shared_ptr.shared_ptr_wrapper_count()19        if (wrapper_count != li_boost_shared_ptr.NOT_COUNTING):20            # Expect 1 instance - the one global variable (GlobalSmartValue)21            if (wrapper_count != 1):22                raise RuntimeError(23                    "shared_ptr wrapper count=%s" % wrapper_count)24        if (debug):25            print "Finished"26    def runtest(self):27        # simple shared_ptr usage - created in C++28        k = li_boost_shared_ptr.Klass("me oh my")29        val = k.getValue()30        self.verifyValue("me oh my", val)31        self.verifyCount(1, k)32        # simple shared_ptr usage - not created in C++33        k = li_boost_shared_ptr.factorycreate()34        val = k.getValue()35        self.verifyValue("factorycreate", val)36        self.verifyCount(1, k)37        # pass by shared_ptr38        k = li_boost_shared_ptr.Klass("me oh my")39        kret = li_boost_shared_ptr.smartpointertest(k)40        val = kret.getValue()41        self.verifyValue("me oh my smartpointertest", val)42        self.verifyCount(2, k)43        self.verifyCount(2, kret)44        # pass by shared_ptr pointer45        k = li_boost_shared_ptr.Klass("me oh my")46        kret = li_boost_shared_ptr.smartpointerpointertest(k)47        val = kret.getValue()48        self.verifyValue("me oh my smartpointerpointertest", val)49        self.verifyCount(2, k)50        self.verifyCount(2, kret)51        # pass by shared_ptr reference52        k = li_boost_shared_ptr.Klass("me oh my")53        kret = li_boost_shared_ptr.smartpointerreftest(k)54        val = kret.getValue()55        self.verifyValue("me oh my smartpointerreftest", val)56        self.verifyCount(2, k)57        self.verifyCount(2, kret)58        # pass by shared_ptr pointer reference59        k = li_boost_shared_ptr.Klass("me oh my")60        kret = li_boost_shared_ptr.smartpointerpointerreftest(k)61        val = kret.getValue()62        self.verifyValue("me oh my smartpointerpointerreftest", val)63        self.verifyCount(2, k)64        self.verifyCount(2, kret)65        # const pass by shared_ptr66        k = li_boost_shared_ptr.Klass("me oh my")67        kret = li_boost_shared_ptr.constsmartpointertest(k)68        val = kret.getValue()69        self.verifyValue("me oh my", val)70        self.verifyCount(2, k)71        self.verifyCount(2, kret)72        # const pass by shared_ptr pointer73        k = li_boost_shared_ptr.Klass("me oh my")74        kret = li_boost_shared_ptr.constsmartpointerpointertest(k)75        val = kret.getValue()76        self.verifyValue("me oh my", val)77        self.verifyCount(2, k)78        self.verifyCount(2, kret)79        # const pass by shared_ptr reference80        k = li_boost_shared_ptr.Klass("me oh my")81        kret = li_boost_shared_ptr.constsmartpointerreftest(k)82        val = kret.getValue()83        self.verifyValue("me oh my", val)84        self.verifyCount(2, k)85        self.verifyCount(2, kret)86        # pass by value87        k = li_boost_shared_ptr.Klass("me oh my")88        kret = li_boost_shared_ptr.valuetest(k)89        val = kret.getValue()90        self.verifyValue("me oh my valuetest", val)91        self.verifyCount(1, k)92        self.verifyCount(1, kret)93        # pass by pointer94        k = li_boost_shared_ptr.Klass("me oh my")95        kret = li_boost_shared_ptr.pointertest(k)96        val = kret.getValue()97        self.verifyValue("me oh my pointertest", val)98        self.verifyCount(1, k)99        self.verifyCount(1, kret)100        # pass by reference101        k = li_boost_shared_ptr.Klass("me oh my")102        kret = li_boost_shared_ptr.reftest(k)103        val = kret.getValue()104        self.verifyValue("me oh my reftest", val)105        self.verifyCount(1, k)106        self.verifyCount(1, kret)107        # pass by pointer reference108        k = li_boost_shared_ptr.Klass("me oh my")109        kret = li_boost_shared_ptr.pointerreftest(k)110        val = kret.getValue()111        self.verifyValue("me oh my pointerreftest", val)112        self.verifyCount(1, k)113        self.verifyCount(1, kret)114        # null tests115        k = None116        if (li_boost_shared_ptr.smartpointertest(k) != None):117            raise RuntimeError("return was not null")118        if (li_boost_shared_ptr.smartpointerpointertest(k) != None):119            raise RuntimeError("return was not null")120        if (li_boost_shared_ptr.smartpointerreftest(k) != None):121            raise RuntimeError("return was not null")122        if (li_boost_shared_ptr.smartpointerpointerreftest(k) != None):123            raise RuntimeError("return was not null")124        if (li_boost_shared_ptr.nullsmartpointerpointertest(None) != "null pointer"):125            raise RuntimeError("not null smartpointer pointer")126        try:127            li_boost_shared_ptr.valuetest(k)128            raise RuntimeError("Failed to catch null pointer")129        except ValueError:130            pass131        if (li_boost_shared_ptr.pointertest(k) != None):132            raise RuntimeError("return was not null")133        try:134            li_boost_shared_ptr.reftest(k)135            raise RuntimeError("Failed to catch null pointer")136        except ValueError:137            pass138        # $owner139        k = li_boost_shared_ptr.pointerownertest()140        val = k.getValue()141        self.verifyValue("pointerownertest", val)142        self.verifyCount(1, k)143        k = li_boost_shared_ptr.smartpointerpointerownertest()144        val = k.getValue()145        self.verifyValue("smartpointerpointerownertest", val)146        self.verifyCount(1, k)147        # //////////////////////////////// Derived class //////////////////////148        # derived pass by shared_ptr149        k = li_boost_shared_ptr.KlassDerived("me oh my")150        kret = li_boost_shared_ptr.derivedsmartptrtest(k)151        val = kret.getValue()152        self.verifyValue("me oh my derivedsmartptrtest-Derived", val)153        self.verifyCount(2, k)154        self.verifyCount(2, kret)155        # derived pass by shared_ptr pointer156        k = li_boost_shared_ptr.KlassDerived("me oh my")157        kret = li_boost_shared_ptr.derivedsmartptrpointertest(k)158        val = kret.getValue()159        self.verifyValue("me oh my derivedsmartptrpointertest-Derived", val)160        self.verifyCount(2, k)161        self.verifyCount(2, kret)162        # derived pass by shared_ptr ref163        k = li_boost_shared_ptr.KlassDerived("me oh my")164        kret = li_boost_shared_ptr.derivedsmartptrreftest(k)165        val = kret.getValue()166        self.verifyValue("me oh my derivedsmartptrreftest-Derived", val)167        self.verifyCount(2, k)168        self.verifyCount(2, kret)169        # derived pass by shared_ptr pointer ref170        k = li_boost_shared_ptr.KlassDerived("me oh my")171        kret = li_boost_shared_ptr.derivedsmartptrpointerreftest(k)172        val = kret.getValue()173        self.verifyValue("me oh my derivedsmartptrpointerreftest-Derived", val)174        self.verifyCount(2, k)175        self.verifyCount(2, kret)176        # derived pass by pointer177        k = li_boost_shared_ptr.KlassDerived("me oh my")178        kret = li_boost_shared_ptr.derivedpointertest(k)179        val = kret.getValue()180        self.verifyValue("me oh my derivedpointertest-Derived", val)181        self.verifyCount(1, k)182        self.verifyCount(1, kret)183        # derived pass by ref184        k = li_boost_shared_ptr.KlassDerived("me oh my")185        kret = li_boost_shared_ptr.derivedreftest(k)186        val = kret.getValue()187        self.verifyValue("me oh my derivedreftest-Derived", val)188        self.verifyCount(1, k)189        self.verifyCount(1, kret)190        # //////////////////////////////// Derived and base class mixed ///////191        # pass by shared_ptr (mixed)192        k = li_boost_shared_ptr.KlassDerived("me oh my")193        kret = li_boost_shared_ptr.smartpointertest(k)194        val = kret.getValue()195        self.verifyValue("me oh my smartpointertest-Derived", val)196        self.verifyCount(2, k)197        self.verifyCount(2, kret)198        # pass by shared_ptr pointer (mixed)199        k = li_boost_shared_ptr.KlassDerived("me oh my")200        kret = li_boost_shared_ptr.smartpointerpointertest(k)201        val = kret.getValue()202        self.verifyValue("me oh my smartpointerpointertest-Derived", val)203        self.verifyCount(2, k)204        self.verifyCount(2, kret)205        # pass by shared_ptr reference (mixed)206        k = li_boost_shared_ptr.KlassDerived("me oh my")207        kret = li_boost_shared_ptr.smartpointerreftest(k)208        val = kret.getValue()209        self.verifyValue("me oh my smartpointerreftest-Derived", val)210        self.verifyCount(2, k)211        self.verifyCount(2, kret)212        # pass by shared_ptr pointer reference (mixed)213        k = li_boost_shared_ptr.KlassDerived("me oh my")214        kret = li_boost_shared_ptr.smartpointerpointerreftest(k)215        val = kret.getValue()216        self.verifyValue("me oh my smartpointerpointerreftest-Derived", val)217        self.verifyCount(2, k)218        self.verifyCount(2, kret)219        # pass by value (mixed)220        k = li_boost_shared_ptr.KlassDerived("me oh my")221        kret = li_boost_shared_ptr.valuetest(k)222        val = kret.getValue()223        self.verifyValue("me oh my valuetest", val)  # note slicing224        self.verifyCount(1, k)225        self.verifyCount(1, kret)226        # pass by pointer (mixed)227        k = li_boost_shared_ptr.KlassDerived("me oh my")228        kret = li_boost_shared_ptr.pointertest(k)229        val = kret.getValue()230        self.verifyValue("me oh my pointertest-Derived", val)231        self.verifyCount(1, k)232        self.verifyCount(1, kret)233        # pass by ref (mixed)234        k = li_boost_shared_ptr.KlassDerived("me oh my")235        kret = li_boost_shared_ptr.reftest(k)236        val = kret.getValue()237        self.verifyValue("me oh my reftest-Derived", val)238        self.verifyCount(1, k)239        self.verifyCount(1, kret)240        # //////////////////////////////// Overloading tests //////////////////241        # Base class242        k = li_boost_shared_ptr.Klass("me oh my")243        self.verifyValue(li_boost_shared_ptr.overload_rawbyval(k), "rawbyval")244        self.verifyValue(li_boost_shared_ptr.overload_rawbyref(k), "rawbyref")245        self.verifyValue(li_boost_shared_ptr.overload_rawbyptr(k), "rawbyptr")246        self.verifyValue(247            li_boost_shared_ptr.overload_rawbyptrref(k), "rawbyptrref")248        self.verifyValue(249            li_boost_shared_ptr.overload_smartbyval(k), "smartbyval")250        self.verifyValue(251            li_boost_shared_ptr.overload_smartbyref(k), "smartbyref")252        self.verifyValue(253            li_boost_shared_ptr.overload_smartbyptr(k), "smartbyptr")254        self.verifyValue(255            li_boost_shared_ptr.overload_smartbyptrref(k), "smartbyptrref")256        # Derived class257        k = li_boost_shared_ptr.KlassDerived("me oh my")258        self.verifyValue(li_boost_shared_ptr.overload_rawbyval(k), "rawbyval")259        self.verifyValue(li_boost_shared_ptr.overload_rawbyref(k), "rawbyref")260        self.verifyValue(li_boost_shared_ptr.overload_rawbyptr(k), "rawbyptr")261        self.verifyValue(262            li_boost_shared_ptr.overload_rawbyptrref(k), "rawbyptrref")263        self.verifyValue(264            li_boost_shared_ptr.overload_smartbyval(k), "smartbyval")265        self.verifyValue(266            li_boost_shared_ptr.overload_smartbyref(k), "smartbyref")267        self.verifyValue(268            li_boost_shared_ptr.overload_smartbyptr(k), "smartbyptr")269        self.verifyValue(270            li_boost_shared_ptr.overload_smartbyptrref(k), "smartbyptrref")271        # 3rd derived class272        k = li_boost_shared_ptr.Klass3rdDerived("me oh my")273        val = k.getValue()274        self.verifyValue("me oh my-3rdDerived", val)275        self.verifyCount(1, k)276        val = li_boost_shared_ptr.test3rdupcast(k)277        self.verifyValue("me oh my-3rdDerived", val)278        self.verifyCount(1, k)279        # //////////////////////////////// Member variables ///////////////////280        # smart pointer by value281        m = li_boost_shared_ptr.MemberVariables()282        k = li_boost_shared_ptr.Klass("smart member value")283        m.SmartMemberValue = k284        val = k.getValue()285        self.verifyValue("smart member value", val)286        self.verifyCount(2, k)287        kmember = m.SmartMemberValue288        val = kmember.getValue()289        self.verifyValue("smart member value", val)290        self.verifyCount(3, kmember)291        self.verifyCount(3, k)292        del m293        self.verifyCount(2, kmember)294        self.verifyCount(2, k)295        # smart pointer by pointer296        m = li_boost_shared_ptr.MemberVariables()297        k = li_boost_shared_ptr.Klass("smart member pointer")298        m.SmartMemberPointer = k299        val = k.getValue()300        self.verifyValue("smart member pointer", val)301        self.verifyCount(1, k)302        kmember = m.SmartMemberPointer303        val = kmember.getValue()304        self.verifyValue("smart member pointer", val)305        self.verifyCount(2, kmember)306        self.verifyCount(2, k)307        del m308        self.verifyCount(2, kmember)309        self.verifyCount(2, k)310        # smart pointer by reference311        m = li_boost_shared_ptr.MemberVariables()312        k = li_boost_shared_ptr.Klass("smart member reference")313        m.SmartMemberReference = k314        val = k.getValue()315        self.verifyValue("smart member reference", val)316        self.verifyCount(2, k)317        kmember = m.SmartMemberReference318        val = kmember.getValue()319        self.verifyValue("smart member reference", val)320        self.verifyCount(3, kmember)321        self.verifyCount(3, k)322        # The C++ reference refers to SmartMemberValue...323        kmemberVal = m.SmartMemberValue324        val = kmember.getValue()325        self.verifyValue("smart member reference", val)326        self.verifyCount(4, kmemberVal)327        self.verifyCount(4, kmember)328        self.verifyCount(4, k)329        del m330        self.verifyCount(3, kmemberVal)331        self.verifyCount(3, kmember)332        self.verifyCount(3, k)333        # plain by value334        m = li_boost_shared_ptr.MemberVariables()335        k = li_boost_shared_ptr.Klass("plain member value")336        m.MemberValue = k337        val = k.getValue()338        self.verifyValue("plain member value", val)339        self.verifyCount(1, k)340        kmember = m.MemberValue341        val = kmember.getValue()342        self.verifyValue("plain member value", val)343        self.verifyCount(1, kmember)344        self.verifyCount(1, k)345        del m346        self.verifyCount(1, kmember)347        self.verifyCount(1, k)348        # plain by pointer349        m = li_boost_shared_ptr.MemberVariables()350        k = li_boost_shared_ptr.Klass("plain member pointer")351        m.MemberPointer = k352        val = k.getValue()353        self.verifyValue("plain member pointer", val)354        self.verifyCount(1, k)355        kmember = m.MemberPointer356        val = kmember.getValue()357        self.verifyValue("plain member pointer", val)358        self.verifyCount(1, kmember)359        self.verifyCount(1, k)360        del m361        self.verifyCount(1, kmember)362        self.verifyCount(1, k)363        # plain by reference364        m = li_boost_shared_ptr.MemberVariables()365        k = li_boost_shared_ptr.Klass("plain member reference")366        m.MemberReference = k367        val = k.getValue()368        self.verifyValue("plain member reference", val)369        self.verifyCount(1, k)370        kmember = m.MemberReference371        val = kmember.getValue()372        self.verifyValue("plain member reference", val)373        self.verifyCount(1, kmember)374        self.verifyCount(1, k)375        del m376        self.verifyCount(1, kmember)377        self.verifyCount(1, k)378        # null member variables379        m = li_boost_shared_ptr.MemberVariables()380        # shared_ptr by value381        k = m.SmartMemberValue382        if (k != None):383            raise RuntimeError("expected null")384        m.SmartMemberValue = None385        k = m.SmartMemberValue386        if (k != None):387            raise RuntimeError("expected null")388        self.verifyCount(0, k)389        # plain by value390        try:391            m.MemberValue = None392            raise RuntimeError("Failed to catch null pointer")393        except ValueError:394            pass395        # ////////////////////////////////// Global variables /////////////////396        # smart pointer397        kglobal = li_boost_shared_ptr.cvar.GlobalSmartValue398        if (kglobal != None):399            raise RuntimeError("expected null")400        k = li_boost_shared_ptr.Klass("smart global value")401        li_boost_shared_ptr.cvar.GlobalSmartValue = k402        self.verifyCount(2, k)403        kglobal = li_boost_shared_ptr.cvar.GlobalSmartValue404        val = kglobal.getValue()405        self.verifyValue("smart global value", val)406        self.verifyCount(3, kglobal)407        self.verifyCount(3, k)408        self.verifyValue(409            "smart global value", li_boost_shared_ptr.cvar.GlobalSmartValue.getValue())410        li_boost_shared_ptr.cvar.GlobalSmartValue = None411        # plain value412        k = li_boost_shared_ptr.Klass("global value")413        li_boost_shared_ptr.cvar.GlobalValue = k414        self.verifyCount(1, k)415        kglobal = li_boost_shared_ptr.cvar.GlobalValue416        val = kglobal.getValue()417        self.verifyValue("global value", val)418        self.verifyCount(1, kglobal)419        self.verifyCount(1, k)420        self.verifyValue(421            "global value", li_boost_shared_ptr.cvar.GlobalValue.getValue())422        try:423            li_boost_shared_ptr.cvar.GlobalValue = None424            raise RuntimeError("Failed to catch null pointer")425        except ValueError:426            pass427        # plain pointer428        kglobal = li_boost_shared_ptr.cvar.GlobalPointer429        if (kglobal != None):430            raise RuntimeError("expected null")431        k = li_boost_shared_ptr.Klass("global pointer")432        li_boost_shared_ptr.cvar.GlobalPointer = k433        self.verifyCount(1, k)434        kglobal = li_boost_shared_ptr.cvar.GlobalPointer435        val = kglobal.getValue()436        self.verifyValue("global pointer", val)437        self.verifyCount(1, kglobal)438        self.verifyCount(1, k)439        li_boost_shared_ptr.cvar.GlobalPointer = None440        # plain reference441        k = li_boost_shared_ptr.Klass("global reference")442        li_boost_shared_ptr.cvar.GlobalReference = k443        self.verifyCount(1, k)444        kglobal = li_boost_shared_ptr.cvar.GlobalReference445        val = kglobal.getValue()446        self.verifyValue("global reference", val)447        self.verifyCount(1, kglobal)448        self.verifyCount(1, k)449        try:450            li_boost_shared_ptr.cvar.GlobalReference = None451            raise RuntimeError("Failed to catch null pointer")452        except ValueError:453            pass454        # ////////////////////////////////// Templates ////////////////////////455        pid = li_boost_shared_ptr.PairIntDouble(10, 20.2)456        if (pid.baseVal1 != 20 or pid.baseVal2 != 40.4):457            raise RuntimeError("Base values wrong")458        if (pid.val1 != 10 or pid.val2 != 20.2):459            raise RuntimeError("Derived Values wrong")460    def verifyValue(self, expected, got):461        if (expected != got):462            raise RuntimeError(463                "verify value failed. Expected: ", expected, " Got: ", got)464    def verifyCount(self, expected, k):465        got = li_boost_shared_ptr.use_count(k)466        if (expected != got):467            raise RuntimeError(468                "verify use_count failed. Expected: ", expected, " Got: ", got)469runme = li_boost_shared_ptr_runme()...testCli.js
Source:testCli.js  
1/* ***** BEGIN LICENSE BLOCK *****2 * Version: MPL 1.1/GPL 2.0/LGPL 2.13 *4 * The contents of this file are subject to the Mozilla Public License Version5 * 1.1 (the "License"); you may not use this file except in compliance with6 * the License. You may obtain a copy of the License at7 * http://www.mozilla.org/MPL/8 *9 * Software distributed under the License is distributed on an "AS IS" basis,10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License11 * for the specific language governing rights and limitations under the12 * License.13 *14 * The Original Code is Skywriter.15 *16 * The Initial Developer of the Original Code is17 * Mozilla.18 * Portions created by the Initial Developer are Copyright (C) 200919 * the Initial Developer. All Rights Reserved.20 *21 * Contributor(s):22 *   Joe Walker (jwalker@mozilla.com)23 *24 * Alternatively, the contents of this file may be used under the terms of25 * either the GNU General Public License Version 2 or later (the "GPL"), or26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),27 * in which case the provisions of the GPL or the LGPL are applicable instead28 * of those above. If you wish to allow use of your version of this file only29 * under the terms of either the GPL or the LGPL, and not to allow others to30 * use your version of this file under the terms of the MPL, indicate your31 * decision by deleting the provisions above and replace them with the notice32 * and other provisions required by the GPL or the LGPL. If you do not delete33 * the provisions above, a recipient may use your version of this file under34 * the terms of any one of the MPL, the GPL or the LGPL.35 *36 * ***** END LICENSE BLOCK ***** */37define(function(require, exports, module) {38var test = require('cockpit/test/assert').test;39var Status = require('pilot/types').Status;40var settings = require('pilot/settings').settings;41var tokenize = require('cockpit/cli')._tokenize;42var split = require('cockpit/cli')._split;43var CliRequisition = require('cockpit/cli').CliRequisition;44var canon = require('pilot/canon');45var tsvCommandSpec = {46    name: 'tsv',47    params: [48        { name: 'setting', type: 'setting', defaultValue: null },49        { name: 'value', type: 'settingValue', defaultValue: null }50    ],51    exec: function(env, args, request) { }52};53var tsrCommandSpec = {54    name: 'tsr',55    params: [ { name: 'text', type: 'text' } ],56    exec: function(env, args, request) { }57};58exports.testAll = function() {59    canon.addCommand(tsvCommandSpec);60    canon.addCommand(tsrCommandSpec);61    exports.testTokenize();62    exports.testSplit();63    exports.testCli();64    canon.removeCommand(tsvCommandSpec);65    canon.removeCommand(tsrCommandSpec);66    return "testAll Completed";67};68exports.testTokenize = function() {69    var args;70    var cli = new CliRequisition();71    args = cli._tokenize('');72    test.verifyEqual(1, args.length);73    test.verifyEqual('', args[0].text);74    test.verifyEqual(0, args[0].start);75    test.verifyEqual(0, args[0].end);76    test.verifyEqual('', args[0].prefix);77    test.verifyEqual('', args[0].suffix);78    args = cli._tokenize('s');79    test.verifyEqual(1, args.length);80    test.verifyEqual('s', args[0].text);81    test.verifyEqual(0, args[0].start);82    test.verifyEqual(1, args[0].end);83    test.verifyEqual('', args[0].prefix);84    test.verifyEqual('', args[0].suffix);85    args = cli._tokenize(' ');86    test.verifyEqual(1, args.length);87    test.verifyEqual('', args[0].text);88    test.verifyEqual(1, args[0].start);89    test.verifyEqual(1, args[0].end);90    test.verifyEqual(' ', args[0].prefix);91    test.verifyEqual('', args[0].suffix);92    args = cli._tokenize('s s');93    test.verifyEqual(2, args.length);94    test.verifyEqual('s', args[0].text);95    test.verifyEqual(0, args[0].start);96    test.verifyEqual(1, args[0].end);97    test.verifyEqual('', args[0].prefix);98    test.verifyEqual('', args[0].suffix);99    test.verifyEqual('s', args[1].text);100    test.verifyEqual(2, args[1].start);101    test.verifyEqual(3, args[1].end);102    test.verifyEqual(' ', args[1].prefix);103    test.verifyEqual('', args[1].suffix);104    args = cli._tokenize(' 1234  \'12 34\'');105    test.verifyEqual(2, args.length);106    test.verifyEqual('1234', args[0].text);107    test.verifyEqual(1, args[0].start);108    test.verifyEqual(5, args[0].end);109    test.verifyEqual(' ', args[0].prefix);110    test.verifyEqual('', args[0].suffix);111    test.verifyEqual('12 34', args[1].text);112    test.verifyEqual(7, args[1].start);113    test.verifyEqual(14, args[1].end);114    test.verifyEqual('  \'', args[1].prefix);115    test.verifyEqual('\'', args[1].suffix);116    args = cli._tokenize('12\'34 "12 34" \\'); // 12'34 "12 34" \117    test.verifyEqual(3, args.length);118    test.verifyEqual('12\'34', args[0].text);119    test.verifyEqual(0, args[0].start);120    test.verifyEqual(5, args[0].end);121    test.verifyEqual('', args[0].prefix);122    test.verifyEqual('', args[0].suffix);123    test.verifyEqual('12 34', args[1].text);124    test.verifyEqual(6, args[1].start);125    test.verifyEqual(13, args[1].end);126    test.verifyEqual(' "', args[1].prefix);127    test.verifyEqual('"', args[1].suffix);128    test.verifyEqual('\\', args[2].text);129    test.verifyEqual(14, args[2].start);130    test.verifyEqual(15, args[2].end);131    test.verifyEqual(' ', args[2].prefix);132    test.verifyEqual('', args[2].suffix);133    args = cli._tokenize('a\\ b \\t\\n\\r \\\'x\\\" \'d'); // a_b \t\n\r \'x\" 'd134    test.verifyEqual(4, args.length);135    test.verifyEqual('a b', args[0].text);136    test.verifyEqual(0, args[0].start);137    test.verifyEqual(3, args[0].end);138    test.verifyEqual('', args[0].prefix);139    test.verifyEqual('', args[0].suffix);140    test.verifyEqual('\t\n\r', args[1].text);141    test.verifyEqual(4, args[1].start);142    test.verifyEqual(7, args[1].end);143    test.verifyEqual(' ', args[1].prefix);144    test.verifyEqual('', args[1].suffix);145    test.verifyEqual('\'x"', args[2].text);146    test.verifyEqual(8, args[2].start);147    test.verifyEqual(11, args[2].end);148    test.verifyEqual(' ', args[2].prefix);149    test.verifyEqual('', args[2].suffix);150    test.verifyEqual('d', args[3].text);151    test.verifyEqual(13, args[3].start);152    test.verifyEqual(14, args[3].end);153    test.verifyEqual(' \'', args[3].prefix);154    test.verifyEqual('', args[3].suffix);155    return "testTokenize Completed";156};157exports.testSplit = function() {158    var args;159    var cli = new CliRequisition();160    args = cli._tokenize('s');161    cli._split(args);162    test.verifyEqual(1, args.length);163    test.verifyEqual('s', args[0].text);164    test.verifyNull(cli.commandAssignment.value);165    args = cli._tokenize('tsv');166    cli._split(args);167    test.verifyEqual([], args);168    test.verifyEqual('tsv', cli.commandAssignment.value.name);169    args = cli._tokenize('tsv a b');170    cli._split(args);171    test.verifyEqual('tsv', cli.commandAssignment.value.name);172    test.verifyEqual(2, args.length);173    test.verifyEqual('a', args[0].text);174    test.verifyEqual('b', args[1].text);175    // TODO: add tests for sub commands176    return "testSplit Completed";177};178exports.testCli = function() {179    var assign1;180    var assign2;181    var cli = new CliRequisition();182    var debug = true;183    var worst;184    var display;185    var statuses;186    function update(input) {187        cli.update(input);188        if (debug) {189            console.log('####### TEST: typed="' + input.typed +190                    '" cur=' + input.cursor.start +191                    ' cli=', cli);192        }193        worst = cli.getWorstHint();194        display = cli.getAssignmentAt(input.cursor.start).getHint();195        statuses = cli.getInputStatusMarkup().map(function(status) {196          return status.valueOf();197        }).join('');198        if (cli.commandAssignment.value) {199            assign1 = cli.getAssignment(0);200            assign2 = cli.getAssignment(1);201        }202        else {203            assign1 = undefined;204            assign2 = undefined;205        }206    }207    function verifyPredictionsContains(name, predictions) {208        return predictions.every(function(prediction) {209            return name === prediction || name === prediction.name;210        }, this);211    }212    var historyLengthSetting = settings.getSetting('historyLength');213    update({  typed: '', cursor: { start: 0, end: 0 } });214    test.verifyEqual('', statuses);215    test.verifyEqual(Status.INCOMPLETE, display.status);216    test.verifyEqual(0, display.start);217    test.verifyEqual(0, display.end);218    test.verifyEqual(display, worst);219    test.verifyNull(cli.commandAssignment.value);220    update({  typed: ' ', cursor: { start: 1, end: 1 } });221    test.verifyEqual('0', statuses);222    test.verifyEqual(Status.INCOMPLETE, display.status);223    test.verifyEqual(1, display.start);224    test.verifyEqual(1, display.end);225    test.verifyEqual(display, worst);226    test.verifyNull(cli.commandAssignment.value);227    update({  typed: ' ', cursor: { start: 0, end: 0 } });228    test.verifyEqual('0', statuses);229    test.verifyEqual(Status.INCOMPLETE, display.status);230    test.verifyEqual(1, display.start);231    test.verifyEqual(1, display.end);232    test.verifyEqual(display, worst);233    test.verifyNull(cli.commandAssignment.value);234    update({  typed: 't', cursor: { start: 1, end: 1 } });235    test.verifyEqual('1', statuses);236    test.verifyEqual(Status.INCOMPLETE, display.status);237    test.verifyEqual(0, display.start);238    test.verifyEqual(1, display.end);239    test.verifyEqual(display, worst);240    test.verifyTrue(display.predictions.length > 0);241    test.verifyTrue(display.predictions.length < 20); // could break ...242    verifyPredictionsContains('tsv', display.predictions);243    verifyPredictionsContains('tsr', display.predictions);244    test.verifyNull(cli.commandAssignment.value);245    update({  typed: 'tsv', cursor: { start: 3, end: 3 } });246    test.verifyEqual('000', statuses);247    test.verifyEqual(Status.VALID, display.status);248    test.verifyEqual(-1, display.start);249    test.verifyEqual(-1, display.end);250    test.verifyEqual('tsv', cli.commandAssignment.value.name);251    update({  typed: 'tsv ', cursor: { start: 4, end: 4 } });252    test.verifyEqual('0000', statuses);253    test.verifyEqual(Status.VALID, display.status);254    test.verifyEqual(-1, display.start);255    test.verifyEqual(-1, display.end);256    test.verifyEqual('tsv', cli.commandAssignment.value.name);257    update({  typed: 'tsv ', cursor: { start: 2, end: 2 } });258    test.verifyEqual('0000', statuses);259    test.verifyEqual(Status.VALID, display.status);260    test.verifyEqual(0, display.start);261    test.verifyEqual(3, display.end);262    test.verifyEqual('tsv', cli.commandAssignment.value.name);263    update({  typed: 'tsv h', cursor: { start: 5, end: 5 } });264    test.verifyEqual('00001', statuses);265    test.verifyEqual(Status.INCOMPLETE, display.status);266    test.verifyEqual(4, display.start);267    test.verifyEqual(5, display.end);268    test.verifyTrue(display.predictions.length > 0);269    verifyPredictionsContains('historyLength', display.predictions);270    test.verifyEqual('tsv', cli.commandAssignment.value.name);271    test.verifyEqual('h', assign1.arg.text);272    test.verifyEqual(undefined, assign1.value);273    update({  typed: 'tsv historyLengt', cursor: { start: 16, end: 16 } });274    test.verifyEqual('0000111111111111', statuses);275    test.verifyEqual(Status.INCOMPLETE, display.status);276    test.verifyEqual(4, display.start);277    test.verifyEqual(16, display.end);278    test.verifyEqual(1, display.predictions.length);279    verifyPredictionsContains('historyLength', display.predictions);280    test.verifyEqual('tsv', cli.commandAssignment.value.name);281    test.verifyEqual('historyLengt', assign1.arg.text);282    test.verifyEqual(undefined, assign1.value);283    update({ typed:  'tsv historyLengt', cursor: { start: 1, end: 1 } });284    test.verifyEqual('0000222222222222', statuses);285    test.verifyEqual(Status.VALID, display.status);286    test.verifyEqual(0, display.start);287    test.verifyEqual(3, display.end);288    test.verifyEqual(Status.INVALID, worst.status);289    test.verifyEqual(4, worst.start);290    test.verifyEqual(16, worst.end);291    test.verifyEqual(1, worst.predictions.length);292    verifyPredictionsContains('historyLength', worst.predictions);293    test.verifyEqual('tsv', cli.commandAssignment.value.name);294    test.verifyEqual('historyLengt', assign1.arg.text);295    test.verifyEqual(undefined, assign1.value);296    update({ typed:  'tsv historyLengt ', cursor: { start: 17, end: 17 } });297    // TODO: would   '00002222222222220' be better?298    test.verifyEqual('00002222222222222', statuses);299    test.verifyEqual(Status.VALID, display.status);300    test.verifyEqual(-1, display.start);301    test.verifyEqual(-1, display.end);302    test.verifyEqual(Status.INVALID, worst.status);303    test.verifyEqual(4, worst.start);304    test.verifyEqual(16, worst.end);305    test.verifyEqual(1, worst.predictions.length);306    verifyPredictionsContains('historyLength', worst.predictions);307    test.verifyEqual('tsv', cli.commandAssignment.value.name);308    test.verifyEqual('historyLengt', assign1.arg.text);309    test.verifyEqual(undefined, assign1.value);310    update({ typed:  'tsv historyLength', cursor: { start: 17, end: 17 } });311    test.verifyEqual('00000000000000000', statuses);312    test.verifyEqual('tsv', cli.commandAssignment.value.name);313    test.verifyEqual('historyLength', assign1.arg.text);314    test.verifyEqual(historyLengthSetting, assign1.value);315    update({ typed:  'tsv historyLength ', cursor: { start: 18, end: 18 } });316    test.verifyEqual('000000000000000000', statuses);317    test.verifyEqual('tsv', cli.commandAssignment.value.name);318    test.verifyEqual('historyLength', assign1.arg.text);319    test.verifyEqual(historyLengthSetting, assign1.value);320    update({ typed:  'tsv historyLength 6', cursor: { start: 19, end: 19 } });321    test.verifyEqual('0000000000000000000', statuses);322    test.verifyEqual('tsv', cli.commandAssignment.value.name);323    test.verifyEqual('historyLength', assign1.arg.text);324    test.verifyEqual(historyLengthSetting, assign1.value);325    test.verifyEqual('6', assign2.arg.text);326    test.verifyEqual(6, assign2.value);327    test.verifyEqual('number', typeof assign2.value);328    update({ typed:  'tsr', cursor: { start: 3, end: 3 } });329    test.verifyEqual('000', statuses);330    test.verifyEqual('tsr', cli.commandAssignment.value.name);331    test.verifyEqual(undefined, assign1.arg);332    test.verifyEqual(undefined, assign1.value);333    test.verifyEqual(undefined, assign2);334    update({ typed:  'tsr ', cursor: { start: 4, end: 4 } });335    test.verifyEqual('0000', statuses);336    test.verifyEqual('tsr', cli.commandAssignment.value.name);337    test.verifyEqual(undefined, assign1.arg);338    test.verifyEqual(undefined, assign1.value);339    test.verifyEqual(undefined, assign2);340    update({ typed:  'tsr h', cursor: { start: 5, end: 5 } });341    test.verifyEqual('00000', statuses);342    test.verifyEqual('tsr', cli.commandAssignment.value.name);343    test.verifyEqual('h', assign1.arg.text);344    test.verifyEqual('h', assign1.value);345    update({ typed:  'tsr "h h"', cursor: { start: 9, end: 9 } });346    test.verifyEqual('000000000', statuses);347    test.verifyEqual('tsr', cli.commandAssignment.value.name);348    test.verifyEqual('h h', assign1.arg.text);349    test.verifyEqual('h h', assign1.value);350    update({ typed:  'tsr h h h', cursor: { start: 9, end: 9 } });351    test.verifyEqual('000000000', statuses);352    test.verifyEqual('tsr', cli.commandAssignment.value.name);353    test.verifyEqual('h h h', assign1.arg.text);354    test.verifyEqual('h h h', assign1.value);355    // TODO: Add test to see that a command without mandatory param causes INVALID356    return "testCli Completed";357};...gulpfile.js
Source:gulpfile.js  
1'use strict';2var fs = require( 'fs' );3var gulp = require( 'gulp' );4var gutil = require( 'gulp-util' );5var obj_verify = {6	vertices: [],7	normals: [],8	uvs: [],9	facesV: [],10	facesVn: [],11	facesVt: [],12	materials: []13};14obj_verify.vertices.push( [ -1,  1,  1 ] );15obj_verify.vertices.push( [ -1, -1,  1 ] );16obj_verify.vertices.push( [  1, -1,  1 ] );17obj_verify.vertices.push( [  1,  1,  1 ] );18obj_verify.vertices.push( [ -1,  1, -1 ] );19obj_verify.vertices.push( [ -1, -1, -1 ] );20obj_verify.vertices.push( [  1, -1, -1 ] );21obj_verify.vertices.push( [  1,  1, -1 ] );22obj_verify.normals.push( [  0,  0,  1 ] );23obj_verify.normals.push( [  0,  0, -1 ] );24obj_verify.normals.push( [  0,  1,  0 ] );25obj_verify.normals.push( [  0, -1,  0 ] );26obj_verify.normals.push( [  1,  0,  0 ] );27obj_verify.normals.push( [ -1,  0,  0 ] );28obj_verify.uvs.push( [ 0, 1 ] );29obj_verify.uvs.push( [ 1, 1 ] );30obj_verify.uvs.push( [ 1, 0 ] );31obj_verify.uvs.push( [ 0, 0 ] );32obj_verify.facesV.push( [ 1, 2, 3, 4 ] );33obj_verify.facesV.push( [ 8, 7, 6, 5 ] );34obj_verify.facesV.push( [ 4, 3, 7, 8 ] );35obj_verify.facesV.push( [ 5, 1, 4, 8 ] );36obj_verify.facesV.push( [ 5, 6, 2, 1 ] );37obj_verify.facesV.push( [ 2, 6, 7, 3 ] );38obj_verify.facesVn.push( [ 1, 1, 1, 1 ] );39obj_verify.facesVn.push( [ 2, 2, 2, 2 ] );40obj_verify.facesVn.push( [ 5, 5, 5, 5 ] );41obj_verify.facesVn.push( [ 3, 3, 3, 3 ] );42obj_verify.facesVn.push( [ 6, 6, 6, 6 ] );43obj_verify.facesVn.push( [ 4, 4, 4, 4 ] );44obj_verify.facesVt.push( [ 1, 2, 3, 4 ] );45obj_verify.facesVt.push( [ 1, 2, 3, 4 ] );46obj_verify.facesVt.push( [ 1, 2, 3, 4 ] );47obj_verify.facesVt.push( [ 1, 2, 3, 4 ] );48obj_verify.facesVt.push( [ 1, 2, 3, 4 ] );49obj_verify.facesVt.push( [ 1, 2, 3, 4 ] );50obj_verify.materials.push( 'usemtl red' );51obj_verify.materials.push( 'usemtl blue' );52obj_verify.materials.push( 'usemtl green' );53obj_verify.materials.push( 'usemtl lightblue' );54obj_verify.materials.push( 'usemtl orange' );55obj_verify.materials.push( 'usemtl purple' );56function vobjCreateVertices( factor, offsets ) {57	var output = '\n';58	for ( var x, y, z, i = 0, v = obj_verify.vertices, length = v.length; i < length; i++ ) {59		x = v[ i ][ 0 ] * factor + offsets[ 0 ];60		y = v[ i ][ 1 ] * factor + offsets[ 1 ];61		z = v[ i ][ 2 ] * factor + offsets[ 2 ];62		output += 'v ' + x + ' ' + y + ' ' + z + '\n';63	}64	return output;65};66function vobjCreateUvs() {67	var output = '\n';68	for ( var x, y, z, i = 0, vn = obj_verify.uvs, length = vn.length; i < length; i++ ) {69		x = vn[ i ][ 0 ];70		y = vn[ i ][ 1 ];71		output += 'vt ' + x + ' ' + y + '\n';72	}73	return output;74};75function vobjCreateNormals() {76	var output = '\n';77	for ( var x, y, z, i = 0, vn = obj_verify.normals, length = vn.length; i < length; i++ ) {78		x = vn[ i ][ 0 ];79		y = vn[ i ][ 1 ];80		z = vn[ i ][ 2 ];81		output += 'vn ' + x + ' ' + y + ' ' + z + '\n';82	}83	return output;84};85function vobjCreateCubeV( offsets, groups, usemtls ) {86	var output = '\n';87	if ( groups === null || groups.length === 0 ) groups = [ null, null, null, null, null, null ];88	if ( usemtls === null || usemtls.length === 0 ) usemtls = [ null, null, null, null, null, null ];89	for ( var group, usemtl, f0, f1, f2, f3, i = 0, facesV = obj_verify.facesV, length = facesV.length; i < length; i++ ) {90		f0 = facesV[ i ][ 0 ] + offsets[ 0 ];91		f1 = facesV[ i ][ 1 ] + offsets[ 0 ];92		f2 = facesV[ i ][ 2 ] + offsets[ 0 ];93		f3 = facesV[ i ][ 3 ] + offsets[ 0 ];94		group = groups[ i ];95		usemtl = usemtls[ i ];96		if ( group ) output += 'g ' + group + '\n';97		if ( usemtl ) output += 'usemtl ' + usemtl + '\n';98		output += 'f ' + f0 + ' ' + f1 + ' ' + f2 + ' ' + f3 + '\n';99	}100	return output;101};102function vobjCreateCubeVVn( offsets, groups, usemtls ) {103	var output = '\n';104	if ( groups === null || groups.length === 0 ) groups = [ null, null, null, null, null, null ];105	if ( usemtls === null || usemtls.length === 0 ) usemtls = [ null, null, null, null, null, null ];106	for ( var group, usemtl, f0, f1, f2, f3, i = 0, facesV = obj_verify.facesV, facesVn = obj_verify.facesVn; i < 6; i++ ) {107		f0 = facesV[ i ][ 0 ] + offsets[ 0 ] + '//' + ( facesVn[ i ][ 0 ] + offsets[ 1 ] );108		f1 = facesV[ i ][ 1 ] + offsets[ 0 ] + '//' + ( facesVn[ i ][ 1 ] + offsets[ 1 ] );109		f2 = facesV[ i ][ 2 ] + offsets[ 0 ] + '//' + ( facesVn[ i ][ 2 ] + offsets[ 1 ] );110		f3 = facesV[ i ][ 3 ] + offsets[ 0 ] + '//' + ( facesVn[ i ][ 3 ] + offsets[ 1 ] );111		group = groups[ i ];112		usemtl = usemtls[ i ];113		if ( group ) output += 'g ' + group + '\n';114		if ( usemtl ) output += 'usemtl ' + usemtl + '\n';115		output += 'f ' + f0 + ' ' + f1 + ' ' + f2 + ' ' + f3 + '\n';116	}117	return output;118};119function vobjCreateCubeVVt( offsets, groups, usemtls ) {120	var output = '\n';121	if ( groups === null || groups.length === 0 ) groups = [ null, null, null, null, null, null ];122	if ( usemtls === null || usemtls.length === 0 ) usemtls = [ null, null, null, null, null, null ];123	for ( var group, usemtl, f0, f1, f2, f3, i = 0, facesV = obj_verify.facesV, facesVt = obj_verify.facesVt; i < 6; i++ ) {124		f0 = facesV[ i ][ 0 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 0 ] + offsets[ 1 ] );125		f1 = facesV[ i ][ 1 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 1 ] + offsets[ 1 ] );126		f2 = facesV[ i ][ 2 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 2 ] + offsets[ 1 ] );127		f3 = facesV[ i ][ 3 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 3 ] + offsets[ 1 ] );128		group = groups[ i ];129		usemtl = usemtls[ i ];130		if ( group ) output += 'g ' + group + '\n';131		if ( usemtl ) output += 'usemtl ' + usemtl + '\n';132		output += 'f ' + f0 + ' ' + f1 + ' ' + f2 + ' ' + f3 + '\n';133	}134	return output;135};136function vobjCreateCubeVVnVt( offsets, groups, usemtls ) {137	var output = '\n';138	if ( groups === null || groups.length === 0 ) groups = [ null, null, null, null, null, null ];139	if ( usemtls === null || usemtls.length === 0 ) usemtls = [ null, null, null, null, null, null ];140	for ( var group, usemtl, f0, f1, f2, f3, i = 0, facesV = obj_verify.facesV, facesVt = obj_verify.facesVt, facesVn = obj_verify.facesVn; i < 6; i++ ) {141		f0 = facesV[ i ][ 0 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 0 ] + offsets[ 1 ] ) + '/' + ( facesVn[ i ][ 0 ] + offsets[ 2 ] );142		f1 = facesV[ i ][ 1 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 1 ] + offsets[ 1 ] ) + '/' + ( facesVn[ i ][ 1 ] + offsets[ 2 ] );143		f2 = facesV[ i ][ 2 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 2 ] + offsets[ 1 ] ) + '/' + ( facesVn[ i ][ 2 ] + offsets[ 2 ] );144		f3 = facesV[ i ][ 3 ] + offsets[ 0 ] + '/' + ( facesVt[ i ][ 3 ] + offsets[ 1 ] ) + '/' + ( facesVn[ i ][ 3 ] + offsets[ 2 ] );145		group = groups[ i ];146		usemtl = usemtls[ i ];147		if ( group ) output += 'g ' + group + '\n';148		if ( usemtl ) output += 'usemtl ' + usemtl + '\n';149		output += 'f ' + f0 + ' ' + f1 + ' ' + f2 + ' ' + f3 + '\n';150	}151	return output;152};153gulp.task( 'default', function( cb ){154	gutil.log( 'Building: verify.obj' );155	var offsets = [ 0, 0, 0 ];156	var pos = [ -150, 50, 0 ];157	fs.writeFileSync( './verify.obj', '# Verification OBJ created with gulp\n\n' );158	fs.appendFileSync( './verify.obj', 'mtllib verify.mtl\n\n# Cube no materials. Translated x:' + pos[ 0 ] );159	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );160	fs.appendFileSync( './verify.obj', vobjCreateCubeV( offsets, null, null ) );161	pos[ 0 ] += 50;162	offsets[ 0 ] += 8;163	fs.appendFileSync( './verify.obj', '\n\n# Cube with two materials. Translated x:' + pos[ 0 ] );164	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );165	fs.appendFileSync( './verify.obj', vobjCreateCubeV( offsets, null, [ 'orange', null, null, 'purple', null, null ] ) );166	pos[ 0 ] += 50;167	offsets[ 0 ] += 8;168	fs.appendFileSync( './verify.obj', '\n\n# Cube with normals no materials. Translated x:' + pos[ 0 ] );169	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );170	fs.appendFileSync( './verify.obj', vobjCreateNormals() );171	fs.appendFileSync( './verify.obj', vobjCreateCubeVVn( offsets, [ 'cube3', null, null, null, null, null ], [ 'lightblue', null, null, null, null, null ] ) );172	pos[ 0 ] += 50;173	offsets[ 0 ] += 8;174	fs.appendFileSync( './verify.obj', '\n\n# Cube with uvs and red material. Translated x:' + pos[ 0 ] );175	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );176	fs.appendFileSync( './verify.obj', vobjCreateUvs() );177	fs.appendFileSync( './verify.obj', vobjCreateCubeVVt( offsets, null, [ 'red', null, null, null, null, null ] ) );178	pos[ 0 ] += 50;179	offsets[ 0 ] += 8;180	fs.appendFileSync( './verify.obj', '\n\n# cube with uvs and normals and material. Translated x' + pos[ 0 ] );181	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );182	fs.appendFileSync( './verify.obj', vobjCreateCubeVVnVt( offsets, [], [ 'red', null, null, 'blue', null, 'green' ] ) );183	pos[ 0 ] += 50;184	offsets[ 0 ] += 8;185	offsets[ 1 ] += 6;186	fs.appendFileSync( './verify.obj', '\n\n# cube with uvs and normals and two materials and group for every quad. Translated x:' + pos[ 0 ] );187	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );188	fs.appendFileSync( './verify.obj', vobjCreateNormals() );189	fs.appendFileSync( './verify.obj', vobjCreateCubeVVnVt( [ -9, offsets[ 1 ], offsets[ 2 ] ],190		[ 'cube6a', 'cube6b', 'cube6c', 'cube6d', 'cube6e', 'cube6f' ],191		[ 'green', null, null, 'orange', null, null ] ) );192	pos[ 0 ] += 50;193	offsets[ 0 ] += 8;194	fs.appendFileSync( './verify.obj', '\n\n# cube with uvs and normals and six materials and six groups, one for every quad. Translated x:' + pos[ 0 ] );195	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );196	fs.appendFileSync( './verify.obj', vobjCreateCubeVVnVt( offsets,197		[ 'cube6a', 'cube6b', 'cube6c', 'cube6d', 'cube6e', 'cube6f' ],198		[ 'red', 'blue', 'green', 'lightblue', 'orange', 'purple' ] ) );199	pos[ 0 ] += 50;200	offsets[ 0 ] += 8;201	fs.appendFileSync( './verify.obj', '\n\n# Point. Translated x:' + pos[ 0 ] );202	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );203	fs.appendFileSync( './verify.obj', '\np -8 -7 -6 -5 -4 -3 -2 -1\n' );204	pos[ 0 ] += 50;205	offsets[ 0 ] += 8;206	fs.appendFileSync( './verify.obj', '\n\n# Line. Translated x:' + pos[ 0 ] );207	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );208	fs.appendFileSync( './verify.obj', 'l -8 -7 -6 -5 -4 -3 -2 -1 -8 -5 -8 -4 -7 -6 -7 -3 -5 -1 -3 -2 -6 -2 -4 -1\n' );209	pos[ 0 ] += 50;210	offsets[ 0 ] += 8;211	fs.appendFileSync( './verify.obj', '\n\n# Line UV. Translated x:' + pos[ 0 ] );212	fs.appendFileSync( './verify.obj', vobjCreateVertices( 10, pos ) );213	fs.appendFileSync( './verify.obj', '\nl -8/-2 -7/-1 -6/-2 -5/-1\n' );...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
