Best Python code snippet using tempest_python
menuInteraction.js
Source:menuInteraction.js  
1var setupMenuEvents = function() {2    var getEquation = function() {3        var equation = null;4        if ($('.cursor').length > 0) {5            equation = $('.cursor').parent().data('eqObject').equation;6        } else if ($('.highlight').length > 0) {7            equation = $('.highlight').parent().data('eqObject').equation;8        }9        return equation;10    };11    $(document).on('touchstart mousedown', '#stackedFractionButton', function (e) {12        e.preventDefault();13        e.stopPropagation();14        var equation = getEquation();15        var stackedFractionWrapper = new eqEd.StackedFractionWrapper(equation);16        insertWrapper(stackedFractionWrapper);17    });18    $(document).on('touchstart mousedown', '#superscriptButton', function (e) {19        e.preventDefault();20        e.stopPropagation();21        var equation = getEquation();22        var superscriptWrapper = new eqEd.SuperscriptWrapper(equation);23        insertWrapper(superscriptWrapper);24    });25    $(document).on('touchstart mousedown', '#subscriptButton', function (e) {26        e.preventDefault();27        e.stopPropagation();28        var equation = getEquation();29        var subscriptWrapper = new eqEd.SubscriptWrapper(equation);30        insertWrapper(subscriptWrapper);31    });32    $(document).on('touchstart mousedown', '#superscriptAndSubscriptButton', function (e) {33        e.preventDefault();34        e.stopPropagation();35        var equation = getEquation();36        var superscriptAndSubscriptWrapper = new eqEd.SuperscriptAndSubscriptWrapper(equation);37        insertWrapper(superscriptAndSubscriptWrapper);38    });39    $(document).on('touchstart mousedown', '#squareRootButton', function (e) {40        e.preventDefault();41        e.stopPropagation();42        var equation = getEquation();43        var squareRootWrapper = new eqEd.SquareRootWrapper(equation);44        insertWrapper(squareRootWrapper);45    });46    $(document).on('touchstart mousedown', '#nthRootButton', function (e) {47        e.preventDefault();48        e.stopPropagation();49        var equation = getEquation();50        var nthRootButton = new eqEd.NthRootWrapper(equation);51        insertWrapper(nthRootButton);52    });53    54    $(document).on('touchstart mousedown', '#leftAngleBracketButton', function (e) {55        e.preventDefault();56        e.stopPropagation();57        var equation = getEquation();58        var leftAngleBracketWrapper = new eqEd.BracketWrapper(equation, "leftAngleBracket");59        insertWrapper(leftAngleBracketWrapper);60    });61    $(document).on('touchstart mousedown', '#rightAngleBracketButton', function (e) {62        e.preventDefault();63        e.stopPropagation();64        var equation = getEquation();65        var rightAngleBracketWrapper = new eqEd.BracketWrapper(equation, "rightAngleBracket");66        insertWrapper(rightAngleBracketWrapper);67    });68    $(document).on('touchstart mousedown', '#leftFloorBracketButton', function (e) {69        e.preventDefault();70        e.stopPropagation();71        var equation = getEquation();72        var leftFloorBracketWrapper = new eqEd.BracketWrapper(equation, "leftFloorBracket");73        insertWrapper(leftFloorBracketWrapper);74    });75    $(document).on('touchstart mousedown', '#rightFloorBracketButton', function (e) {76        e.preventDefault();77        e.stopPropagation();78        var equation = getEquation();79        var rightFloorBracketWrapper = new eqEd.BracketWrapper(equation, "rightFloorBracket");80        insertWrapper(rightFloorBracketWrapper);81    });82    $(document).on('touchstart mousedown', '#leftCeilBracketButton', function (e) {83        e.preventDefault();84        e.stopPropagation();85        var equation = getEquation();86        var leftCeilBracketWrapper = new eqEd.BracketWrapper(equation, "leftCeilBracket");87        insertWrapper(leftCeilBracketWrapper);88    });89    $(document).on('touchstart mousedown', '#rightCeilBracketButton', function (e) {90        e.preventDefault();91        e.stopPropagation();92        var equation = getEquation();93        var rightCeilBracketWrapper = new eqEd.BracketWrapper(equation, "rightCeilBracket");94        insertWrapper(rightCeilBracketWrapper);95    });96    $(document).on('touchstart mousedown', '#parenthesesBracketPairButton', function (e) {97        e.preventDefault();98        e.stopPropagation();99        var equation = getEquation();100        var parenthesesBracketPair = new eqEd.BracketPairWrapper(equation, "parenthesisBracket");101        insertWrapper(parenthesesBracketPair);102    });103    $(document).on('touchstart mousedown', '#squareBracketPairButton', function (e) {104        e.preventDefault();105        e.stopPropagation();106        var equation = getEquation();107        var squareBracketPair = new eqEd.BracketPairWrapper(equation, "squareBracket");108        insertWrapper(squareBracketPair);109    });110    $(document).on('touchstart mousedown', '#curlyBracketPairButton', function (e) {111        e.preventDefault();112        e.stopPropagation();113        var equation = getEquation();114        var curlyBracketPair = new eqEd.BracketPairWrapper(equation, "curlyBracket");115        insertWrapper(curlyBracketPair);116    });117    $(document).on('touchstart mousedown', '#angleBracketPairButton', function (e) {118        e.preventDefault();119        e.stopPropagation();120        var equation = getEquation();121        var angleBracketPair = new eqEd.BracketPairWrapper(equation, "angleBracket");122        insertWrapper(angleBracketPair);123    });$(document).on('touchstart mousedown', '#floorBracketPairButton', function (e) {124        e.preventDefault();125        e.stopPropagation();126        var equation = getEquation();127        var floorBracketPair = new eqEd.BracketPairWrapper(equation, "floorBracket");128        insertWrapper(floorBracketPair);129    });130    $(document).on('touchstart mousedown', '#ceilBracketPairButton', function (e) {131        e.preventDefault();132        e.stopPropagation();133        var equation = getEquation();134        var ceilBracketPair = new eqEd.BracketPairWrapper(equation, "ceilBracket");135        insertWrapper(ceilBracketPair);136    });137    $(document).on('touchstart mousedown', '#absValBracketPairButton', function (e) {138        e.preventDefault();139        e.stopPropagation();140        var equation = getEquation();141        var absValBracketPair = new eqEd.BracketPairWrapper(equation, "absValBracket");142        insertWrapper(absValBracketPair);143    });144    $(document).on('touchstart mousedown', '#normBracketPairButton', function (e) {145        e.preventDefault();146        e.stopPropagation();147        var equation = getEquation();148        var normBracketPair = new eqEd.BracketPairWrapper(equation, "normBracket");149        insertWrapper(normBracketPair);150    });151    $(document).on('touchstart mousedown', '#sumBigOperatorButton', function (e) {152        e.preventDefault();153        e.stopPropagation();154        var equation = getEquation();155        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'sum');156        insertWrapper(bigOperator);157    });158    $(document).on('touchstart mousedown', '#sumBigOperatorNoUpperButton', function (e) {159        e.preventDefault();160        e.stopPropagation();161        var equation = getEquation();162        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'sum');163        insertWrapper(bigOperator);164    });165    $(document).on('touchstart mousedown', '#sumBigOperatorNoUpperNoLowerButton', function (e) {166        e.preventDefault();167        e.stopPropagation();168        var equation = getEquation();169        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'sum');170        insertWrapper(bigOperator);171    });172    $(document).on('touchstart mousedown', '#bigCapBigOperatorButton', function (e) {173        e.preventDefault();174        e.stopPropagation();175        var equation = getEquation();176        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'bigCap');177        insertWrapper(bigOperator);178    });179    $(document).on('touchstart mousedown', '#bigCapBigOperatorNoUpperButton', function (e) {180        e.preventDefault();181        e.stopPropagation();182        var equation = getEquation();183        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'bigCap');184        insertWrapper(bigOperator);185    });186    $(document).on('touchstart mousedown', '#bigCapBigOperatorNoUpperNoLowerButton', function (e) {187        e.preventDefault();188        e.stopPropagation();189        var equation = getEquation();190        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'bigCap');191        insertWrapper(bigOperator);192    });193    $(document).on('touchstart mousedown', '#bigCupBigOperatorButton', function (e) {194        e.preventDefault();195        e.stopPropagation();196        var equation = getEquation();197        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'bigCup');198        insertWrapper(bigOperator);199    });200    $(document).on('touchstart mousedown', '#bigCupBigOperatorNoUpperButton', function (e) {201        e.preventDefault();202        e.stopPropagation();203        var equation = getEquation();204        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'bigCup');205        insertWrapper(bigOperator);206    });207    $(document).on('touchstart mousedown', '#bigCupBigOperatorNoUpperNoLowerButton', function (e) {208        e.preventDefault();209        e.stopPropagation();210        var equation = getEquation();211        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'bigCup');212        insertWrapper(bigOperator);213    });214    $(document).on('touchstart mousedown', '#bigSqCapBigOperatorButton', function (e) {215        e.preventDefault();216        e.stopPropagation();217        var equation = getEquation();218        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'bigSqCap');219        insertWrapper(bigOperator);220    });221    $(document).on('touchstart mousedown', '#bigSqCapBigOperatorNoUpperButton', function (e) {222        e.preventDefault();223        e.stopPropagation();224        var equation = getEquation();225        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'bigSqCap');226        insertWrapper(bigOperator);227    });228    $(document).on('touchstart mousedown', '#bigSqCapBigOperatorNoUpperNoLowerButton', function (e) {229        e.preventDefault();230        e.stopPropagation();231        var equation = getEquation();232        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'bigSqCap');233        insertWrapper(bigOperator);234    });235    $(document).on('touchstart mousedown', '#bigSqCupBigOperatorButton', function (e) {236        e.preventDefault();237        e.stopPropagation();238        var equation = getEquation();239        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'bigSqCup');240        insertWrapper(bigOperator);241    });242    $(document).on('touchstart mousedown', '#bigSqCupBigOperatorNoUpperButton', function (e) {243        e.preventDefault();244        e.stopPropagation();245        var equation = getEquation();246        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'bigSqCup');247        insertWrapper(bigOperator);248    });249    $(document).on('touchstart mousedown', '#bigSqCupBigOperatorNoUpperNoLowerButton', function (e) {250        e.preventDefault();251        e.stopPropagation();252        var equation = getEquation();253        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'bigSqCup');254        insertWrapper(bigOperator);255    });256    $(document).on('touchstart mousedown', '#prodBigOperatorButton', function (e) {257        e.preventDefault();258        e.stopPropagation();259        var equation = getEquation();260        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'prod');261        insertWrapper(bigOperator);262    });263    $(document).on('touchstart mousedown', '#prodBigOperatorNoUpperButton', function (e) {264        e.preventDefault();265        e.stopPropagation();266        var equation = getEquation();267        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'prod');268        insertWrapper(bigOperator);269    });270    $(document).on('touchstart mousedown', '#prodBigOperatorNoUpperNoLowerButton', function (e) {271        e.preventDefault();272        e.stopPropagation();273        var equation = getEquation();274        var equation = getEquation();275        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'prod');276        insertWrapper(bigOperator);277    });278    $(document).on('touchstart mousedown', '#coProdBigOperatorButton', function (e) {279        e.preventDefault();280        e.stopPropagation();281        var equation = getEquation();282        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'coProd');283        insertWrapper(bigOperator);284    });285    $(document).on('touchstart mousedown', '#coProdBigOperatorNoUpperButton', function (e) {286        e.preventDefault();287        e.stopPropagation();288        var equation = getEquation();289        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'coProd');290        insertWrapper(bigOperator);291    });292    $(document).on('touchstart mousedown', '#coProdBigOperatorNoUpperNoLowerButton', function (e) {293        e.preventDefault();294        e.stopPropagation();295        var equation = getEquation();296        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'coProd');297        insertWrapper(bigOperator);298    });299    $(document).on('touchstart mousedown', '#bigVeeBigOperatorButton', function (e) {300        e.preventDefault();301        e.stopPropagation();302        var equation = getEquation();303        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'bigVee');304        insertWrapper(bigOperator);305    });306    $(document).on('touchstart mousedown', '#bigVeeBigOperatorNoUpperButton', function (e) {307        e.preventDefault();308        e.stopPropagation();309        var equation = getEquation();310        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'bigVee');311        insertWrapper(bigOperator);312    });313    $(document).on('touchstart mousedown', '#bigVeeBigOperatorNoUpperNoLowerButton', function (e) {314        e.preventDefault();315        e.stopPropagation();316        var equation = getEquation();317        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'bigVee');318        insertWrapper(bigOperator);319    });320    $(document).on('touchstart mousedown', '#bigWedgeBigOperatorButton', function (e) {321        e.preventDefault();322        e.stopPropagation();323        var equation = getEquation();324        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, true, true, 'bigWedge');325        insertWrapper(bigOperator);326    });327    $(document).on('touchstart mousedown', '#bigWedgeBigOperatorNoUpperButton', function (e) {328        e.preventDefault();329        e.stopPropagation();330        var equation = getEquation();331        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, true, 'bigWedge');332        insertWrapper(bigOperator);333    });334    $(document).on('touchstart mousedown', '#bigWedgeBigOperatorNoUpperNoLowerButton', function (e) {335        e.preventDefault();336        e.stopPropagation();337        var equation = getEquation();338        var bigOperator = new eqEd.BigOperatorWrapper(equation, false, false, false, 'bigWedge');339        insertWrapper(bigOperator);340    });341    $(document).on('touchstart mousedown', '#inlineSumBigOperatorButton', function (e) {342        e.preventDefault();343        e.stopPropagation();344        var equation = getEquation();345        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'sum');346        insertWrapper(bigOperator);347    });348    $(document).on('touchstart mousedown', '#inlineSumBigOperatorNoUpperButton', function (e) {349        e.preventDefault();350        e.stopPropagation();351        var equation = getEquation();352        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'sum');353        insertWrapper(bigOperator);354    });355    $(document).on('touchstart mousedown', '#inlineBigCapBigOperatorButton', function (e) {356        e.preventDefault();357        e.stopPropagation();358        var equation = getEquation();359        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'bigCap');360        insertWrapper(bigOperator);361    });362    $(document).on('touchstart mousedown', '#inlineBigCapBigOperatorNoUpperButton', function (e) {363        e.preventDefault();364        e.stopPropagation();365        var equation = getEquation();366        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'bigCap');367        insertWrapper(bigOperator);368    });369    $(document).on('touchstart mousedown', '#inlineBigCupBigOperatorButton', function (e) {370        e.preventDefault();371        e.stopPropagation();372        var equation = getEquation();373        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'bigCup');374        insertWrapper(bigOperator);375    });376    $(document).on('touchstart mousedown', '#inlineBigCupBigOperatorNoUpperButton', function (e) {377        e.preventDefault();378        e.stopPropagation();379        var equation = getEquation();380        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'bigCup');381        insertWrapper(bigOperator);382    });383    $(document).on('touchstart mousedown', '#inlineBigSqCapBigOperatorButton', function (e) {384        e.preventDefault();385        e.stopPropagation();386        var equation = getEquation();387        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'bigSqCap');388        insertWrapper(bigOperator);389    });390    $(document).on('touchstart mousedown', '#inlineBigSqCapBigOperatorNoUpperButton', function (e) {391        e.preventDefault();392        e.stopPropagation();393        var equation = getEquation();394        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'bigSqCap');395        insertWrapper(bigOperator);396    });397    $(document).on('touchstart mousedown', '#inlineBigSqCupBigOperatorButton', function (e) {398        e.preventDefault();399        e.stopPropagation();400        var equation = getEquation();401        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'bigSqCup');402        insertWrapper(bigOperator);403    });404    $(document).on('touchstart mousedown', '#inlineBigSqCupBigOperatorNoUpperButton', function (e) {405        e.preventDefault();406        e.stopPropagation();407        var equation = getEquation();408        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'bigSqCup');409        insertWrapper(bigOperator);410    });411    $(document).on('touchstart mousedown', '#inlineProdBigOperatorButton', function (e) {412        e.preventDefault();413        e.stopPropagation();414        var equation = getEquation();415        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'prod');416        insertWrapper(bigOperator);417    });418    $(document).on('touchstart mousedown', '#inlineProdBigOperatorNoUpperButton', function (e) {419        e.preventDefault();420        e.stopPropagation();421        var equation = getEquation();422        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'prod');423        insertWrapper(bigOperator);424    });425    $(document).on('touchstart mousedown', '#inlineCoProdBigOperatorButton', function (e) {426        e.preventDefault();427        e.stopPropagation();428        var equation = getEquation();429        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'coProd');430        insertWrapper(bigOperator);431    });432    $(document).on('touchstart mousedown', '#inlineCoProdBigOperatorNoUpperButton', function (e) {433        e.preventDefault();434        e.stopPropagation();435        var equation = getEquation();436        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'coProd');437        insertWrapper(bigOperator);438    });439    $(document).on('touchstart mousedown', '#inlineBigVeeBigOperatorButton', function (e) {440        e.preventDefault();441        e.stopPropagation();442        var equation = getEquation();443        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'bigVee');444        insertWrapper(bigOperator);445    });446    $(document).on('touchstart mousedown', '#inlineBigVeeBigOperatorNoUpperButton', function (e) {447        e.preventDefault();448        e.stopPropagation();449        var equation = getEquation();450        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'bigVee');451        insertWrapper(bigOperator);452    });453    $(document).on('touchstart mousedown', '#inlineBigWedgeBigOperatorButton', function (e) {454        e.preventDefault();455        e.stopPropagation();456        var equation = getEquation();457        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, true, true, 'bigWedge');458        insertWrapper(bigOperator);459    });460    $(document).on('touchstart mousedown', '#inlineBigWedgeBigOperatorNoUpperButton', function (e) {461        e.preventDefault();462        e.stopPropagation();463        var equation = getEquation();464        var bigOperator = new eqEd.BigOperatorWrapper(equation, true, false, true, 'bigWedge');465        insertWrapper(bigOperator);466    });467    ////////////////////////////////////////////////////////////////468    $(document).on('touchstart mousedown', '#integralButton', function (e) {469        e.preventDefault();470        e.stopPropagation();471        var equation = getEquation();472        var integralWrapper = new eqEd.IntegralWrapper(equation, false, true, true, 'single');473        insertWrapper(integralWrapper);474    });475    $(document).on('touchstart mousedown', '#integralNoUpperButton', function (e) {476        e.preventDefault();477        e.stopPropagation();478        var equation = getEquation();479        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, true, 'single');480        insertWrapper(integralWrapper);481    });482    $(document).on('touchstart mousedown', '#integralNoUpperNoLowerButton', function (e) {483        e.preventDefault();484        e.stopPropagation();485        var equation = getEquation();486        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, false, 'single');487        insertWrapper(integralWrapper);488    });489    $(document).on('touchstart mousedown', '#doubleIntegralButton', function (e) {490        e.preventDefault();491        e.stopPropagation();492        var equation = getEquation();493        var integralWrapper = new eqEd.IntegralWrapper(equation, false, true, true, 'double');494        insertWrapper(integralWrapper);495    });496    $(document).on('touchstart mousedown', '#doubleIntegralNoUpperButton', function (e) {497        e.preventDefault();498        e.stopPropagation();499        var equation = getEquation();500        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, true, 'double');501        insertWrapper(integralWrapper);502    });503    $(document).on('touchstart mousedown', '#doubleIntegralNoUpperNoLowerButton', function (e) {504        e.preventDefault();505        e.stopPropagation();506        var equation = getEquation();507        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, false, 'double');508        insertWrapper(integralWrapper);509    });510    $(document).on('touchstart mousedown', '#tripleIntegralButton', function (e) {511        e.preventDefault();512        e.stopPropagation();513        var equation = getEquation();514        var integralWrapper = new eqEd.IntegralWrapper(equation, false, true, true, 'triple');515        insertWrapper(integralWrapper);516    });517    $(document).on('touchstart mousedown', '#tripleIntegralNoUpperButton', function (e) {518        e.preventDefault();519        e.stopPropagation();520        var equation = getEquation();521        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, true, 'triple');522        insertWrapper(integralWrapper);523    });524    $(document).on('touchstart mousedown', '#tripleIntegralNoUpperNoLowerButton', function (e) {525        e.preventDefault();526        e.stopPropagation();527        var equation = getEquation();528        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, false, 'triple');529        insertWrapper(integralWrapper);530    });531    $(document).on('touchstart mousedown', '#contourIntegralButton', function (e) {532        e.preventDefault();533        e.stopPropagation();534        var equation = getEquation();535        var integralWrapper = new eqEd.IntegralWrapper(equation, false, true, true, 'singleContour');536        insertWrapper(integralWrapper);537    });538    $(document).on('touchstart mousedown', '#contourIntegralNoUpperButton', function (e) {539        e.preventDefault();540        e.stopPropagation();541        var equation = getEquation();542        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, true, 'singleContour');543        insertWrapper(integralWrapper);544    });545    $(document).on('touchstart mousedown', '#contourIntegralNoUpperNoLowerButton', function (e) {546        e.preventDefault();547        e.stopPropagation();548        var equation = getEquation();549        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, false, 'singleContour');550        insertWrapper(integralWrapper);551    });552    $(document).on('touchstart mousedown', '#contourDoubleIntegralButton', function (e) {553        e.preventDefault();554        e.stopPropagation();555        var equation = getEquation();556        var integralWrapper = new eqEd.IntegralWrapper(equation, false, true, true, 'doubleContour');557        insertWrapper(integralWrapper);558    });559    $(document).on('touchstart mousedown', '#contourDoubleIntegralNoUpperButton', function (e) {560        e.preventDefault();561        e.stopPropagation();562        var equation = getEquation();563        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, true, 'doubleContour');564        insertWrapper(integralWrapper);565    });566    $(document).on('touchstart mousedown', '#contourDoubleIntegralNoUpperNoLowerButton', function (e) {567        e.preventDefault();568        e.stopPropagation();569        var equation = getEquation();570        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, false, 'doubleContour');571        insertWrapper(integralWrapper);572    });573    $(document).on('touchstart mousedown', '#contourTripleIntegralButton', function (e) {574        e.preventDefault();575        e.stopPropagation();576        var equation = getEquation();577        var integralWrapper = new eqEd.IntegralWrapper(equation, false, true, true, 'tripleContour');578        insertWrapper(integralWrapper);579    });580    $(document).on('touchstart mousedown', '#contourTripleIntegralNoUpperButton', function (e) {581        e.preventDefault();582        e.stopPropagation();583        var equation = getEquation();584        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, true, 'tripleContour');585        insertWrapper(integralWrapper);586    });587    $(document).on('touchstart mousedown', '#contourTripleIntegralNoUpperNoLowerButton', function (e) {588        e.preventDefault();589        e.stopPropagation();590        var equation = getEquation();591        var integralWrapper = new eqEd.IntegralWrapper(equation, false, false, false, 'tripleContour');592        insertWrapper(integralWrapper);593    });594    $(document).on('touchstart mousedown', '#inlineIntegralButton', function (e) {595        e.preventDefault();596        e.stopPropagation();597        var equation = getEquation();598        var integralWrapper = new eqEd.IntegralWrapper(equation, true, true, true, 'single');599        insertWrapper(integralWrapper);600    });601    $(document).on('touchstart mousedown', '#inlineIntegralNoUpperButton', function (e) {602        e.preventDefault();603        e.stopPropagation();604        var equation = getEquation();605        var integralWrapper = new eqEd.IntegralWrapper(equation, true, false, true, 'single');606        insertWrapper(integralWrapper);607    });608    $(document).on('touchstart mousedown', '#inlineDoubleIntegralButton', function (e) {609        e.preventDefault();610        e.stopPropagation();611        var equation = getEquation();612        var integralWrapper = new eqEd.IntegralWrapper(equation, true, true, true, 'double');613        insertWrapper(integralWrapper);614    });615    $(document).on('touchstart mousedown', '#inlineDoubleIntegralNoUpperButton', function (e) {616        e.preventDefault();617        e.stopPropagation();618        var equation = getEquation();619        var integralWrapper = new eqEd.IntegralWrapper(equation, true, false, true, 'double');620        insertWrapper(integralWrapper);621    });622    $(document).on('touchstart mousedown', '#inlineTripleIntegralButton', function (e) {623        e.preventDefault();624        e.stopPropagation();625        var equation = getEquation();626        var integralWrapper = new eqEd.IntegralWrapper(equation, true, true, true, 'triple');627        insertWrapper(integralWrapper);628    });629    $(document).on('touchstart mousedown', '#inlineTripleIntegralNoUpperButton', function (e) {630        e.preventDefault();631        e.stopPropagation();632        var equation = getEquation();633        var integralWrapper = new eqEd.IntegralWrapper(equation, true, false, true, 'triple');634        insertWrapper(integralWrapper);635    });636    $(document).on('touchstart mousedown', '#inlineContourIntegralButton', function (e) {637        e.preventDefault();638        e.stopPropagation();639        var equation = getEquation();640        var integralWrapper = new eqEd.IntegralWrapper(equation, true, true, true, 'singleContour');641        insertWrapper(integralWrapper);642    });643    $(document).on('touchstart mousedown', '#inlineContourIntegralNoUpperButton', function (e) {644        e.preventDefault();645        e.stopPropagation();646        var equation = getEquation();647        var integralWrapper = new eqEd.IntegralWrapper(equation, true, false, true, 'singleContour');648        insertWrapper(integralWrapper);649    });650    $(document).on('touchstart mousedown', '#inlineContourDoubleIntegralButton', function (e) {651        e.preventDefault();652        e.stopPropagation();653        var equation = getEquation();654        var integralWrapper = new eqEd.IntegralWrapper(equation, true, true, true, 'doubleContour');655        insertWrapper(integralWrapper);656    });657    $(document).on('touchstart mousedown', '#inlineContourDoubleIntegralNoUpperButton', function (e) {658        e.preventDefault();659        e.stopPropagation();660        var equation = getEquation();661        var integralWrapper = new eqEd.IntegralWrapper(equation, true, false, true, 'doubleContour');662        insertWrapper(integralWrapper);663    });664    $(document).on('touchstart mousedown', '#inlineContourTripleIntegralButton', function (e) {665        e.preventDefault();666        e.stopPropagation();667        var equation = getEquation();668        var integralWrapper = new eqEd.IntegralWrapper(equation, true, true, true, 'tripleContour');669        insertWrapper(integralWrapper);670    });671    $(document).on('touchstart mousedown', '#inlineContourTripleIntegralNoUpperButton', function (e) {672        e.preventDefault();673        e.stopPropagation();674        var equation = getEquation();675        var integralWrapper = new eqEd.IntegralWrapper(equation, true, false, true, 'tripleContour');676        insertWrapper(integralWrapper);677    });678    $(document).on('touchstart mousedown', '#partialDifferentialButton', function (e) {679        e.preventDefault();680        e.stopPropagation();681        var equation = getEquation();682        var differentialWrapper = new eqEd.SymbolWrapper(equation, 'â', "MathJax_Main");683        insertWrapper(differentialWrapper);684    });685    ///////////////////////////////////////////////////////686    $(document).on('touchstart mousedown', '#logButton', function (e) {687        e.preventDefault();688        e.stopPropagation();689        var equation = getEquation();690        var functionWrapper = new eqEd.FunctionWrapper(equation, 'log', "MathJax_Main");691        insertWrapper(functionWrapper);692    });693    $(document).on('touchstart mousedown', '#lnButton', function (e) {694        e.preventDefault();695        e.stopPropagation();696        var equation = getEquation();697        var functionWrapper = new eqEd.FunctionWrapper(equation, 'ln', "MathJax_Main");698        insertWrapper(functionWrapper);699    });700    $(document).on('touchstart mousedown', '#limButton', function (e) {701        e.preventDefault();702        e.stopPropagation();703        var equation = getEquation();704        var functionWrapper = new eqEd.FunctionWrapper(equation, 'lim', "MathJax_Main");705        insertWrapper(functionWrapper);706    });707    $(document).on('touchstart mousedown', '#maxButton', function (e) {708        e.preventDefault();709        e.stopPropagation();710        var equation = getEquation();711        var functionWrapper = new eqEd.FunctionWrapper(equation, 'max', "MathJax_Main");712        insertWrapper(functionWrapper);713    });714    $(document).on('touchstart mousedown', '#minButton', function (e) {715        e.preventDefault();716        e.stopPropagation();717        var equation = getEquation();718        var functionWrapper = new eqEd.FunctionWrapper(equation, 'min', "MathJax_Main");719        insertWrapper(functionWrapper);720    });721    $(document).on('touchstart mousedown', '#supButton', function (e) {722        e.preventDefault();723        e.stopPropagation();724        var equation = getEquation();725        var functionWrapper = new eqEd.FunctionWrapper(equation, 'sup', "MathJax_Main");726        insertWrapper(functionWrapper);727    });728    $(document).on('touchstart mousedown', '#infButton', function (e) {729        e.preventDefault();730        e.stopPropagation();731        var equation = getEquation();732        var functionWrapper = new eqEd.FunctionWrapper(equation, 'inf', "MathJax_Main");733        insertWrapper(functionWrapper);734    });735    $(document).on('touchstart mousedown', '#sinButton', function (e) {736        e.preventDefault();737        e.stopPropagation();738        var equation = getEquation();739        var functionWrapper = new eqEd.FunctionWrapper(equation, 'sin', "MathJax_Main");740        insertWrapper(functionWrapper);741    });742    $(document).on('touchstart mousedown', '#cosButton', function (e) {743        e.preventDefault();744        e.stopPropagation();745        var equation = getEquation();746        var functionWrapper = new eqEd.FunctionWrapper(equation, 'cos', "MathJax_Main");747        insertWrapper(functionWrapper);748    });749    $(document).on('touchstart mousedown', '#tanButton', function (e) {750        e.preventDefault();751        e.stopPropagation();752        var equation = getEquation();753        var functionWrapper = new eqEd.FunctionWrapper(equation, 'tan', "MathJax_Main");754        insertWrapper(functionWrapper);755    });756    $(document).on('touchstart mousedown', '#cotButton', function (e) {757        e.preventDefault();758        e.stopPropagation();759        var equation = getEquation();760        var functionWrapper = new eqEd.FunctionWrapper(equation, 'cot', "MathJax_Main");761        insertWrapper(functionWrapper);762    });763    $(document).on('touchstart mousedown', '#secButton', function (e) {764        e.preventDefault();765        e.stopPropagation();766        var equation = getEquation();767        var functionWrapper = new eqEd.FunctionWrapper(equation, 'sec', "MathJax_Main");768        insertWrapper(functionWrapper);769    });770    $(document).on('touchstart mousedown', '#cscButton', function (e) {771        e.preventDefault();772        e.stopPropagation();773        var equation = getEquation();774        var functionWrapper = new eqEd.FunctionWrapper(equation, 'csc', "MathJax_Main");775        insertWrapper(functionWrapper);776    });777    $(document).on('touchstart mousedown', '#sinhButton', function (e) {778        e.preventDefault();779        e.stopPropagation();780        var equation = getEquation();781        var functionWrapper = new eqEd.FunctionWrapper(equation, 'sinh', "MathJax_Main");782        insertWrapper(functionWrapper);783    });784    $(document).on('touchstart mousedown', '#coshButton', function (e) {785        e.preventDefault();786        e.stopPropagation();787        var equation = getEquation();788        var functionWrapper = new eqEd.FunctionWrapper(equation, 'cosh', "MathJax_Main");789        insertWrapper(functionWrapper);790    });791    $(document).on('touchstart mousedown', '#tanhButton', function (e) {792        e.preventDefault();793        e.stopPropagation();794        var equation = getEquation();795        var functionWrapper = new eqEd.FunctionWrapper(equation, 'tanh', "MathJax_Main");796        insertWrapper(functionWrapper);797    });798    $(document).on('touchstart mousedown', '#cothButton', function (e) {799        e.preventDefault();800        e.stopPropagation();801        var equation = getEquation();802        var functionWrapper = new eqEd.FunctionWrapper(equation, 'coth', "MathJax_Main");803        insertWrapper(functionWrapper);804    });805    $(document).on('touchstart mousedown', '#sechButton', function (e) {806        e.preventDefault();807        e.stopPropagation();808        var equation = getEquation();809        var functionWrapper = new eqEd.FunctionWrapper(equation, 'sech', "MathJax_Main");810        insertWrapper(functionWrapper);811    });812    $(document).on('touchstart mousedown', '#cschButton', function (e) {813        e.preventDefault();814        e.stopPropagation();815        var equation = getEquation();816        var functionWrapper = new eqEd.FunctionWrapper(equation, 'csch', "MathJax_Main");817        insertWrapper(functionWrapper);818    });819    $(document).on('touchstart mousedown', '#limitButton', function (e) {820        e.preventDefault();821        e.stopPropagation();822        var equation = getEquation();823        var limitWrapper = new eqEd.LimitWrapper(equation);824        insertWrapper(limitWrapper);825    });826    $(document).on('touchstart mousedown', '#maxLowerButton', function (e) {827        e.preventDefault();828        e.stopPropagation();829        var equation = getEquation();830        var functionWrapper = new eqEd.FunctionLowerWrapper(equation, 'max', "MathJax_Main");831        insertWrapper(functionWrapper);832    });833    $(document).on('touchstart mousedown', '#minLowerButton', function (e) {834        e.preventDefault();835        e.stopPropagation();836        var equation = getEquation();837        var functionWrapper = new eqEd.FunctionLowerWrapper(equation, 'min', "MathJax_Main");838        insertWrapper(functionWrapper);839    });840    $(document).on('touchstart mousedown', '#logLowerButton', function (e) {841        e.preventDefault();842        e.stopPropagation();843        var equation = getEquation();844        var functionWrapper = new eqEd.LogLowerWrapper(equation);845        insertWrapper(functionWrapper);846    });847    $(document).on('touchstart mousedown', '#matrixButton', function (e) {848        e.preventDefault();849        e.stopPropagation();850        var equation = getEquation();851        $('#rows').blur();852        $('#cols').blur();853        var rows = parseInt($('#rows').val());854        var cols = parseInt($('#cols').val());855        var matrixWrapper = new eqEd.MatrixWrapper(equation, rows, cols, 'center');856        insertWrapper(matrixWrapper);857    });858    $(document).on('touchstart mousedown', '#dotAccentButton', function (e) {859        e.preventDefault();860        e.stopPropagation();861        var equation = getEquation();862        var accentWrapper = new eqEd.AccentWrapper(equation, 'Ë', 'MathJax_Main');863        insertWrapper(accentWrapper);864    });865    $(document).on('touchstart mousedown', '#hatAccentButton', function (e) {866        e.preventDefault();867        e.stopPropagation();868        var equation = getEquation();869        var accentWrapper = new eqEd.AccentWrapper(equation, '^', 'MathJax_Main');870        insertWrapper(accentWrapper);871    });872    $(document).on('touchstart mousedown', '#vectorAccentButton', function (e) {873        e.preventDefault();874        e.stopPropagation();875        var equation = getEquation();876        var accentWrapper = new eqEd.AccentWrapper(equation, 'â', 'MathJax_Main');877        insertWrapper(accentWrapper);878    });879    $(document).on('touchstart mousedown', '#barAccentButton', function (e) {880        e.preventDefault();881        e.stopPropagation();882        var equation = getEquation();883        var accentWrapper = new eqEd.AccentWrapper(equation, '¯', 'MathJax_Main');884        insertWrapper(accentWrapper);885    });886    $(document).on('touchstart mousedown', '#gammaUpperButton', function (e) {887        e.preventDefault();888        e.stopPropagation();889        var equation = getEquation();890        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Î', "MathJax_Main");891        insertWrapper(symbolWrapper);892    });893    $(document).on('touchstart mousedown', '#deltaUpperButton', function (e) {894        e.preventDefault();895        e.stopPropagation();896        var equation = getEquation();897        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Î', "MathJax_Main");898        insertWrapper(symbolWrapper);899    });900    $(document).on('touchstart mousedown', '#thetaUpperButton', function (e) {901        e.preventDefault();902        e.stopPropagation();903        var equation = getEquation();904        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Î', "MathJax_Main");905        insertWrapper(symbolWrapper);906    });907    $(document).on('touchstart mousedown', '#lambdaUpperButton', function (e) {908        e.preventDefault();909        e.stopPropagation();910        var equation = getEquation();911        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Î', "MathJax_Main");912        insertWrapper(symbolWrapper);913    });914    $(document).on('touchstart mousedown', '#xiUpperButton', function (e) {915        e.preventDefault();916        e.stopPropagation();917        var equation = getEquation();918        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Î', "MathJax_Main");919        insertWrapper(symbolWrapper);920    });921    $(document).on('touchstart mousedown', '#piUpperButton', function (e) {922        e.preventDefault();923        e.stopPropagation();924        var equation = getEquation();925        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Π', "MathJax_Main");926        insertWrapper(symbolWrapper);927    });928    $(document).on('touchstart mousedown', '#sigmaUpperButton', function (e) {929        e.preventDefault();930        e.stopPropagation();931        var equation = getEquation();932        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Σ', "MathJax_Main");933        insertWrapper(symbolWrapper);934    });935    $(document).on('touchstart mousedown', '#upsilonUpperButton', function (e) {936        e.preventDefault();937        e.stopPropagation();938        var equation = getEquation();939        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Î¥', "MathJax_Main");940        insertWrapper(symbolWrapper);941    });942    $(document).on('touchstart mousedown', '#phiUpperButton', function (e) {943        e.preventDefault();944        e.stopPropagation();945        var equation = getEquation();946        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Φ', "MathJax_Main");947        insertWrapper(symbolWrapper);948    });949    $(document).on('touchstart mousedown', '#psiUpperButton', function (e) {950        e.preventDefault();951        e.stopPropagation();952        var equation = getEquation();953        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ψ', "MathJax_Main");954        insertWrapper(symbolWrapper);955    });956    $(document).on('touchstart mousedown', '#omegaUpperButton', function (e) {957        e.preventDefault();958        e.stopPropagation();959        var equation = getEquation();960        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ω', "MathJax_Main");961        insertWrapper(symbolWrapper);962    });963    $(document).on('touchstart mousedown', '#alphaButton', function (e) {964        e.preventDefault();965        e.stopPropagation();966        var equation = getEquation();967        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'α', "MathJax_MathItalic");968        insertWrapper(symbolWrapper);969    });970    $(document).on('touchstart mousedown', '#betaButton', function (e) {971        e.preventDefault();972        e.stopPropagation();973        var equation = getEquation();974        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'β', "MathJax_MathItalic");975        insertWrapper(symbolWrapper);976    });977    $(document).on('touchstart mousedown', '#gammaButton', function (e) {978        e.preventDefault();979        e.stopPropagation();980        var equation = getEquation();981        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'γ', "MathJax_MathItalic");982        insertWrapper(symbolWrapper);983    });984    $(document).on('touchstart mousedown', '#deltaButton', function (e) {985        e.preventDefault();986        e.stopPropagation();987        var equation = getEquation();988        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'δ', "MathJax_MathItalic");989        insertWrapper(symbolWrapper);990    });991    $(document).on('touchstart mousedown', '#varEpsilonButton', function (e) {992        e.preventDefault();993        e.stopPropagation();994        var equation = getEquation();995        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ε', "MathJax_MathItalic");996        insertWrapper(symbolWrapper);997    });998    $(document).on('touchstart mousedown', '#epsilonButton', function (e) {999        e.preventDefault();1000        e.stopPropagation();1001        var equation = getEquation();1002        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ϵ', "MathJax_MathItalic");1003        insertWrapper(symbolWrapper);1004    });1005    $(document).on('touchstart mousedown', '#zetaButton', function (e) {1006        e.preventDefault();1007        e.stopPropagation();1008        var equation = getEquation();1009        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ζ', "MathJax_MathItalic");1010        insertWrapper(symbolWrapper);1011    });1012    $(document).on('touchstart mousedown', '#etaButton', function (e) {1013        e.preventDefault();1014        e.stopPropagation();1015        var equation = getEquation();1016        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'η', "MathJax_MathItalic");1017        insertWrapper(symbolWrapper);1018    });1019    $(document).on('touchstart mousedown', '#thetaButton', function (e) {1020        e.preventDefault();1021        e.stopPropagation();1022        var equation = getEquation();1023        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'θ', "MathJax_MathItalic");1024        insertWrapper(symbolWrapper);1025    });1026    $(document).on('touchstart mousedown', '#varThetaButton', function (e) {1027        e.preventDefault();1028        e.stopPropagation();1029        var equation = getEquation();1030        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1031        insertWrapper(symbolWrapper);1032    });1033    $(document).on('touchstart mousedown', '#iotaButton', function (e) {1034        e.preventDefault();1035        e.stopPropagation();1036        var equation = getEquation();1037        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ι', "MathJax_MathItalic");1038        insertWrapper(symbolWrapper);1039    });1040    $(document).on('touchstart mousedown', '#kappaButton', function (e) {1041        e.preventDefault();1042        e.stopPropagation();1043        var equation = getEquation();1044        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'κ', "MathJax_MathItalic");1045        insertWrapper(symbolWrapper);1046    });1047    $(document).on('touchstart mousedown', '#lambdaButton', function (e) {1048        e.preventDefault();1049        e.stopPropagation();1050        var equation = getEquation();1051        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'λ', "MathJax_MathItalic");1052        insertWrapper(symbolWrapper);1053    });1054    $(document).on('touchstart mousedown', '#muButton', function (e) {1055        e.preventDefault();1056        e.stopPropagation();1057        var equation = getEquation();1058        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'μ', "MathJax_MathItalic");1059        insertWrapper(symbolWrapper);1060    });1061    $(document).on('touchstart mousedown', '#nuButton', function (e) {1062        e.preventDefault();1063        e.stopPropagation();1064        var equation = getEquation();1065        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ν', "MathJax_MathItalic");1066        insertWrapper(symbolWrapper);1067    });1068    $(document).on('touchstart mousedown', '#xiButton', function (e) {1069        e.preventDefault();1070        e.stopPropagation();1071        var equation = getEquation();1072        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ξ', "MathJax_MathItalic");1073        insertWrapper(symbolWrapper);1074    });1075    $(document).on('touchstart mousedown', '#piButton', function (e) {1076        e.preventDefault();1077        e.stopPropagation();1078        var equation = getEquation();1079        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1080        insertWrapper(symbolWrapper);1081    });1082    $(document).on('touchstart mousedown', '#varPiButton', function (e) {1083        e.preventDefault();1084        e.stopPropagation();1085        var equation = getEquation();1086        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1087        insertWrapper(symbolWrapper);1088    });1089    $(document).on('touchstart mousedown', '#rhoButton', function (e) {1090        e.preventDefault();1091        e.stopPropagation();1092        var equation = getEquation();1093        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1094        insertWrapper(symbolWrapper);1095    });1096    $(document).on('touchstart mousedown', '#varRhoButton', function (e) {1097        e.preventDefault();1098        e.stopPropagation();1099        var equation = getEquation();1100        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'ϱ', "MathJax_MathItalic");1101        insertWrapper(symbolWrapper);1102    });1103    $(document).on('touchstart mousedown', '#sigmaButton', function (e) {1104        e.preventDefault();1105        e.stopPropagation();1106        var equation = getEquation();1107        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1108        insertWrapper(symbolWrapper);1109    });1110    $(document).on('touchstart mousedown', '#varSigmaButton', function (e) {1111        e.preventDefault();1112        e.stopPropagation();1113        var equation = getEquation();1114        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1115        insertWrapper(symbolWrapper);1116    });1117    $(document).on('touchstart mousedown', '#tauButton', function (e) {1118        e.preventDefault();1119        e.stopPropagation();1120        var equation = getEquation();1121        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1122        insertWrapper(symbolWrapper);1123    });1124    $(document).on('touchstart mousedown', '#upsilonButton', function (e) {1125        e.preventDefault();1126        e.stopPropagation();1127        var equation = getEquation();1128        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï
', "MathJax_MathItalic");1129        insertWrapper(symbolWrapper);1130    });1131    $(document).on('touchstart mousedown', '#varPhiButton', function (e) {1132        e.preventDefault();1133        e.stopPropagation();1134        var equation = getEquation();1135        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1136        insertWrapper(symbolWrapper);1137    });1138    $(document).on('touchstart mousedown', '#phiButton', function (e) {1139        e.preventDefault();1140        e.stopPropagation();1141        var equation = getEquation();1142        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1143        insertWrapper(symbolWrapper);1144    });1145    $(document).on('touchstart mousedown', '#chiButton', function (e) {1146        e.preventDefault();1147        e.stopPropagation();1148        var equation = getEquation();1149        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1150        insertWrapper(symbolWrapper);1151    });1152    $(document).on('touchstart mousedown', '#psiButton', function (e) {1153        e.preventDefault();1154        e.stopPropagation();1155        var equation = getEquation();1156        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1157        insertWrapper(symbolWrapper);1158    });1159    $(document).on('touchstart mousedown', '#omegaButton', function (e) {1160        e.preventDefault();1161        e.stopPropagation();1162        var equation = getEquation();1163        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'Ï', "MathJax_MathItalic");1164        insertWrapper(symbolWrapper);1165    });1166    $(document).on('touchstart mousedown', '#lessThanOrEqualToButton', function (e) {1167        e.preventDefault();1168        e.stopPropagation();1169        var equation = getEquation();1170        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¤', "MathJax_Main");1171        insertWrapper(operatorWrapper);1172    });1173    $(document).on('touchstart mousedown', '#greaterThanOrEqualToButton', function (e) {1174        e.preventDefault();1175        e.stopPropagation();1176        var equation = getEquation();1177        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¥', "MathJax_Main");1178        insertWrapper(operatorWrapper);1179    });1180    $(document).on('touchstart mousedown', '#circleOperatorButton', function (e) {1181        e.preventDefault();1182        e.stopPropagation();1183        var equation = getEquation();1184        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¦', "MathJax_Main");1185        insertWrapper(operatorWrapper);1186    });1187    $(document).on('touchstart mousedown', '#approxEqualToButton', function (e) {1188        e.preventDefault();1189        e.stopPropagation();1190        var equation = getEquation();1191        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â', "MathJax_Main");1192        insertWrapper(operatorWrapper);1193    });1194    $(document).on('touchstart mousedown', '#belongsToButton', function (e) {1195        e.preventDefault();1196        e.stopPropagation();1197        var equation = getEquation();1198        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â', "MathJax_Main");1199        insertWrapper(operatorWrapper);1200    });1201    $(document).on('touchstart mousedown', '#timesButton', function (e) {1202        e.preventDefault();1203        e.stopPropagation();1204        var equation = getEquation();1205        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'Ã', "MathJax_Main");1206        insertWrapper(operatorWrapper);1207    });1208    $(document).on('touchstart mousedown', '#pmButton', function (e) {1209        e.preventDefault();1210        e.stopPropagation();1211        var equation = getEquation();1212        var operatorWrapper = new eqEd.OperatorWrapper(equation, '±', "MathJax_Main");1213        insertWrapper(operatorWrapper);1214    });1215    $(document).on('touchstart mousedown', '#wedgeButton', function (e) {1216        e.preventDefault();1217        e.stopPropagation();1218        var equation = getEquation();1219        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â§', "MathJax_Main");1220        insertWrapper(operatorWrapper);1221    });1222    $(document).on('touchstart mousedown', '#veeButton', function (e) {1223        e.preventDefault();1224        e.stopPropagation();1225        var equation = getEquation();1226        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¨', "MathJax_Main");1227        insertWrapper(operatorWrapper);1228    });1229    $(document).on('touchstart mousedown', '#equivButton', function (e) {1230        e.preventDefault();1231        e.stopPropagation();1232        var equation = getEquation();1233        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¡', "MathJax_Main");1234        insertWrapper(operatorWrapper);1235    });1236    $(document).on('touchstart mousedown', '#congButton', function (e) {1237        e.preventDefault();1238        e.stopPropagation();1239        var equation = getEquation();1240        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â
', "MathJax_Main");1241        insertWrapper(operatorWrapper);1242    });1243    $(document).on('touchstart mousedown', '#neqButton', function (e) {1244        e.preventDefault();1245        e.stopPropagation();1246        var equation = getEquation();1247        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â ', "MathJax_Main");1248        insertWrapper(operatorWrapper);1249    });1250    $(document).on('touchstart mousedown', '#simButton', function (e) {1251        e.preventDefault();1252        e.stopPropagation();1253        var equation = getEquation();1254        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¼', "MathJax_Main");1255        insertWrapper(operatorWrapper);1256    });1257    $(document).on('touchstart mousedown', '#proptoButton', function (e) {1258        e.preventDefault();1259        e.stopPropagation();1260        var equation = getEquation();1261        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â', "MathJax_Main");1262        insertWrapper(operatorWrapper);1263    });1264    $(document).on('touchstart mousedown', '#precButton', function (e) {1265        e.preventDefault();1266        e.stopPropagation();1267        var equation = getEquation();1268        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'âº', "MathJax_Main");1269        insertWrapper(operatorWrapper);1270    });1271    $(document).on('touchstart mousedown', '#precEqButton', function (e) {1272        e.preventDefault();1273        e.stopPropagation();1274        var equation = getEquation();1275        var operatorWrapper = new eqEd.OperatorWrapper(equation, '⪯', "MathJax_Main");1276        insertWrapper(operatorWrapper);1277    });1278    $(document).on('touchstart mousedown', '#subsetButton', function (e) {1279        e.preventDefault();1280        e.stopPropagation();1281        var equation = getEquation();1282        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â', "MathJax_Main");1283        insertWrapper(operatorWrapper);1284    });1285    $(document).on('touchstart mousedown', '#subsetEqButton', function (e) {1286        e.preventDefault();1287        e.stopPropagation();1288        var equation = getEquation();1289        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â', "MathJax_Main");1290        insertWrapper(operatorWrapper);1291    });1292    $(document).on('touchstart mousedown', '#succButton', function (e) {1293        e.preventDefault();1294        e.stopPropagation();1295        var equation = getEquation();1296        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â»', "MathJax_Main");1297        insertWrapper(operatorWrapper);1298    });1299    $(document).on('touchstart mousedown', '#succEqButton', function (e) {1300        e.preventDefault();1301        e.stopPropagation();1302        var equation = getEquation();1303        var operatorWrapper = new eqEd.OperatorWrapper(equation, '⪰', "MathJax_Main");1304        insertWrapper(operatorWrapper);1305    });1306    $(document).on('touchstart mousedown', '#perpButton', function (e) {1307        e.preventDefault();1308        e.stopPropagation();1309        var equation = getEquation();1310        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¥', "MathJax_Main");1311        insertWrapper(operatorWrapper);1312    });1313    $(document).on('touchstart mousedown', '#midButton', function (e) {1314        e.preventDefault();1315        e.stopPropagation();1316        var equation = getEquation();1317        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â£', "MathJax_Main");1318        insertWrapper(operatorWrapper);1319    });1320    $(document).on('touchstart mousedown', '#parallelButton', function (e) {1321        e.preventDefault();1322        e.stopPropagation();1323        var equation = getEquation();1324        var operatorWrapper = new eqEd.OperatorWrapper(equation, 'â¥', "MathJax_Main");1325        insertWrapper(operatorWrapper);1326    });1327    $(document).on('touchstart mousedown', '#colonButton', function (e) {1328        e.preventDefault();1329        e.stopPropagation();1330        var equation = getEquation();1331        var operatorWrapper = new eqEd.OperatorWrapper(equation, ':', "MathJax_Main");1332        insertWrapper(operatorWrapper);1333    });1334    $(document).on('touchstart mousedown', '#partialButton', function (e) {1335        e.preventDefault();1336        e.stopPropagation();1337        var equation = getEquation();1338        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'â', "MathJax_Main");1339        insertWrapper(symbolWrapper);1340    });1341    $(document).on('touchstart mousedown', '#infinityButton', function (e) {1342        e.preventDefault();1343        e.stopPropagation();1344        var equation = getEquation();1345        var symbolWrapper = new eqEd.SymbolWrapper(equation, 'â', "MathJax_Main");1346        insertWrapper(symbolWrapper);1347    });1348};1349$(document).on('click', '.tabs .tab-links a', function(e)  {1350    var currentAttrValue = $(this).attr('href');1351    // Show/Hide Tabs1352    $('.tabs ' + currentAttrValue).show().siblings().hide();1353    // Change/remove current tab to active1354    $(this).parent('li').addClass('active').siblings().removeClass('active');1355    e.preventDefault();...python_object_representation.py
Source:python_object_representation.py  
1#   Copyright 2017-2020 typed_python Authors2#3#   Licensed under the Apache License, Version 2.0 (the "License");4#   you may not use this file except in compliance with the License.5#   You may obtain a copy of the License at6#7#       http://www.apache.org/licenses/LICENSE-2.08#9#   Unless required by applicable law or agreed to in writing, software10#   distributed under the License is distributed on an "AS IS" BASIS,11#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.12#   See the License for the specific language governing permissions and13#   limitations under the License.14import threading15import _thread16from typed_python.compiler.typed_expression import TypedExpression17import typed_python.compiler.native_ast as native_ast18from typed_python.type_function import TypeFunction19from typed_python.compiler.type_wrappers.wrapper import Wrapper20from typed_python.compiler.type_wrappers.compilable_builtin import CompilableBuiltin21from typed_python.compiler.type_wrappers.none_wrapper import NoneWrapper22from typed_python.compiler.type_wrappers.method_descriptor_wrapper import MethodDescriptorWrapper23from typed_python.compiler.type_wrappers.python_type_object_wrapper import PythonTypeObjectWrapper24from typed_python.compiler.type_wrappers.module_wrapper import ModuleWrapper25from typed_python.compiler.type_wrappers.typed_cell_wrapper import TypedCellWrapper26from typed_python.compiler.type_wrappers.unresolved_forward_type_wrapper import UnresolvedForwardTypeWrapper27from typed_python.compiler.type_wrappers.python_free_function_wrapper import PythonFreeFunctionWrapper28from typed_python.compiler.type_wrappers.python_free_object_wrapper import PythonFreeObjectWrapper29from typed_python.compiler.type_wrappers.python_typed_function_wrapper import PythonTypedFunctionWrapper30from typed_python.compiler.type_wrappers.value_wrapper import ValueWrapper31from typed_python.compiler.type_wrappers.tuple_of_wrapper import TupleOfWrapper32from typed_python.compiler.type_wrappers.pointer_to_wrapper import PointerToWrapper, PointerToObjectWrapper33from typed_python.compiler.type_wrappers.ref_to_wrapper import RefToWrapper, RefToObjectWrapper34from typed_python.compiler.type_wrappers.list_of_wrapper import ListOfWrapper35from typed_python.compiler.type_wrappers.isinstance_wrapper import IsinstanceWrapper36from typed_python.compiler.type_wrappers.issubclass_wrapper import IssubclassWrapper37from typed_python.compiler.type_wrappers.subclass_of_wrapper import SubclassOfWrapper38from typed_python.compiler.type_wrappers.one_of_wrapper import OneOfWrapper39from typed_python.compiler.type_wrappers.class_wrapper import ClassWrapper40from typed_python.compiler.type_wrappers.held_class_wrapper import HeldClassWrapper41from typed_python.compiler.type_wrappers.const_dict_wrapper import ConstDictWrapper42from typed_python.compiler.type_wrappers.dict_wrapper import DictWrapper43from typed_python.compiler.type_wrappers.set_wrapper import SetWrapper44from typed_python.compiler.type_wrappers.tuple_wrapper import TupleWrapper, NamedTupleWrapper45from typed_python.compiler.type_wrappers.slice_type_object_wrapper import SliceWrapper46from typed_python.compiler.type_wrappers.alternative_wrapper import makeAlternativeWrapper47from typed_python.compiler.type_wrappers.alternative_wrapper import AlternativeMatcherWrapper48from typed_python.compiler.type_wrappers.bound_method_wrapper import BoundMethodWrapper49from typed_python.compiler.type_wrappers.len_wrapper import LenWrapper50from typed_python.compiler.type_wrappers.hash_wrapper import HashWrapper51from typed_python.compiler.type_wrappers.range_wrapper import range as compilableRange52from typed_python.compiler.type_wrappers.print_wrapper import PrintWrapper53from typed_python.compiler.type_wrappers.super_wrapper import SuperWrapper54from typed_python.compiler.type_wrappers.compiler_introspection_wrappers import (55    IsCompiledWrapper,56    TypeKnownToCompiler,57    LocalVariableTypesKnownToCompiler,58)59from typed_python.compiler.type_wrappers.make_named_tuple_wrapper import MakeNamedTupleWrapper60from typed_python.compiler.type_wrappers.math_wrappers import MathFunctionWrapper61from typed_python.compiler.type_wrappers.builtin_wrappers import BuiltinWrapper62from typed_python.compiler.type_wrappers.bytecount_wrapper import BytecountWrapper63from typed_python.compiler.type_wrappers.arithmetic_wrapper import IntWrapper, FloatWrapper, BoolWrapper64from typed_python.compiler.type_wrappers.string_wrapper import StringWrapper, StringMaketransWrapper65from typed_python.compiler.type_wrappers.bytes_wrapper import BytesWrapper, BytesMaketransWrapper66from typed_python.compiler.type_wrappers.python_object_of_type_wrapper import PythonObjectOfTypeWrapper67from typed_python.compiler.type_wrappers.abs_wrapper import AbsWrapper68from typed_python.compiler.type_wrappers.min_max_wrapper import MinWrapper, MaxWrapper69from typed_python.compiler.type_wrappers.repr_wrapper import ReprWrapper70from types import ModuleType71from typed_python._types import (72    TypeFor, bytecount, prepareArgumentToBePassedToCompiler, allForwardTypesResolved73)74from typed_python import (75    Type, Int32, Int16, Int8, UInt64, UInt32, UInt16,76    UInt8, Float32, makeNamedTuple,77    ListOf, isCompiled,78    typeKnownToCompiler,79    localVariableTypesKnownToCompiler,80    pointerTo, refTo81)82# the type of bound C methods on types.83method_descriptor = type(ListOf(int).append)84_type_to_type_wrapper_cache = {}85def typedPythonTypeToTypeWrapper(t):86    if isinstance(t, Wrapper):87        return t88    if t not in _type_to_type_wrapper_cache:89        _type_to_type_wrapper_cache[t] = _typedPythonTypeToTypeWrapper(t)90    return _type_to_type_wrapper_cache[t]91_concreteWrappers = {92    Int8: IntWrapper(Int8),93    Int16: IntWrapper(Int16),94    Int32: IntWrapper(Int32),95    int: IntWrapper(int),96    UInt8: IntWrapper(UInt8),97    UInt16: IntWrapper(UInt16),98    UInt32: IntWrapper(UInt32),99    UInt64: IntWrapper(UInt64),100    Float32: FloatWrapper(Float32),101    float: FloatWrapper(float),102    bool: BoolWrapper(),103    None: NoneWrapper(),104    type(None): NoneWrapper(),105    str: StringWrapper(),106    bytes: BytesWrapper()107}108def functionIsCompilable(f):109    """Is a python function 'f' compilable?110    Specifically, we try to cordon off the functions we know are not going to compile111    so that we can just represent them as python objects.112    """113    # we know we can't compile standard numpy and scipy functions114    if f.__module__ == "numpy" or f.__module__.startswith("numpy."):115        return False116    if f.__module__ == "scipy" or f.__module__.startswith("scipy."):117        return False118    return True119def _typedPythonTypeToTypeWrapper(t):120    if isinstance(t, Wrapper):121        return t122    if t in _concreteWrappers:123        return _concreteWrappers[t]124    if not hasattr(t, '__typed_python_category__'):125        t = TypeFor(t)126    assert isinstance(t, type), t127    if not allForwardTypesResolved(t):128        return UnresolvedForwardTypeWrapper(t)129    if not hasattr(t, '__typed_python_category__'):130        # this is will be a PythonObjectOfType, but we never actually return such an object131        # to the interpreter132        if t is threading.RLock:133            t = _thread.RLock134        elif t is threading.Lock:135            t = _thread.LockType136        return PythonObjectOfTypeWrapper(t)137    if t.__typed_python_category__ == "Class":138        return ClassWrapper(t)139    if t.__typed_python_category__ == "HeldClass":140        return HeldClassWrapper(t)141    if t.__typed_python_category__ == "Alternative":142        return makeAlternativeWrapper(t)143    if t.__typed_python_category__ == "ConstDict":144        return ConstDictWrapper(t)145    if t.__typed_python_category__ == "Dict":146        return DictWrapper(t)147    if t.__typed_python_category__ == "ConcreteAlternative":148        return makeAlternativeWrapper(t)149    if t.__typed_python_category__ == "NamedTuple":150        return NamedTupleWrapper(t)151    if t.__typed_python_category__ == "Tuple":152        return TupleWrapper(t)153    if t.__typed_python_category__ == "ListOf":154        return ListOfWrapper(t)155    if t.__typed_python_category__ == "PointerTo":156        return PointerToWrapper(t)157    if t.__typed_python_category__ == "RefTo":158        return RefToWrapper(t)159    if t.__typed_python_category__ == "Function":160        return PythonTypedFunctionWrapper(t)161    if t.__typed_python_category__ == "BoundMethod":162        return BoundMethodWrapper(t)163    if t.__typed_python_category__ == "AlternativeMatcher":164        return AlternativeMatcherWrapper(t)165    if t.__typed_python_category__ == "TupleOf":166        return TupleOfWrapper(t)167    if t.__typed_python_category__ == "OneOf":168        return OneOfWrapper(t)169    if t.__typed_python_category__ == "TypedCell":170        return TypedCellWrapper(t)171    if t.__typed_python_category__ == "SubclassOf":172        return SubclassOfWrapper(t)173    if t.__typed_python_category__ == "Value":174        if type(t.Value) in _concreteWrappers or type(t.Value) in (str, int, float, bool):175            return ValueWrapper(t)176        return pythonObjectRepresentation(None, t.Value).expr_type177    if t.__typed_python_category__ == "Set":178        return SetWrapper(t)179    assert False, (t, getattr(t, '__typed_python_category__', None))180def pythonObjectRepresentation(context, f, owningGlobalScopeAndName=None):181    """Create a representation for a python constant.182    Args:183        context - the ExpressionConversionContext184        f - the constant185        owningGlobalScopeAndName - either None, or a pair (dict, name)186            where the object is equivalent to dict[name]187    """188    if isinstance(f, CompilableBuiltin):189        return TypedExpression(context, native_ast.nullExpr, f, False)190    if f is len:191        return TypedExpression(context, native_ast.nullExpr, LenWrapper(), False)192    if f is hash:193        return TypedExpression(context, native_ast.nullExpr, HashWrapper(), False)194    if f is slice:195        return TypedExpression(context, native_ast.nullExpr, SliceWrapper(), False)196    if f is abs:197        return TypedExpression(context, native_ast.nullExpr, AbsWrapper(), False)198    if f is min:199        return TypedExpression(context, native_ast.nullExpr, MinWrapper(), False)200    if f is max:201        return TypedExpression(context, native_ast.nullExpr, MaxWrapper(), False)202    if f is repr:203        return TypedExpression(context, native_ast.nullExpr, ReprWrapper(), False)204    if f is range:205        return pythonObjectRepresentation(context, compilableRange, owningGlobalScopeAndName)206    if f is bytes.maketrans:207        return TypedExpression(context, native_ast.nullExpr, BytesMaketransWrapper(), False)208    if f is str.maketrans:209        return TypedExpression(context, native_ast.nullExpr, StringMaketransWrapper(), False)210    if f is isinstance:211        return TypedExpression(context, native_ast.nullExpr, IsinstanceWrapper(), False)212    if f is issubclass:213        return TypedExpression(context, native_ast.nullExpr, IssubclassWrapper(), False)214    if f is bytecount:215        return TypedExpression(context, native_ast.nullExpr, BytecountWrapper(), False)216    if f is print:217        return TypedExpression(context, native_ast.nullExpr, PrintWrapper(), False)218    if f is super:219        return TypedExpression(context, native_ast.nullExpr, SuperWrapper(), False)220    if f is pointerTo:221        return TypedExpression(context, native_ast.nullExpr, PointerToObjectWrapper(), False)222    if f is refTo:223        return TypedExpression(context, native_ast.nullExpr, RefToObjectWrapper(), False)224    if f is isCompiled:225        return TypedExpression(context, native_ast.nullExpr, IsCompiledWrapper(), False)226    if f is typeKnownToCompiler:227        return TypedExpression(context, native_ast.nullExpr, TypeKnownToCompiler(), False)228    if f is localVariableTypesKnownToCompiler:229        return TypedExpression(context, native_ast.nullExpr, LocalVariableTypesKnownToCompiler(), False)230    if f is makeNamedTuple:231        return TypedExpression(context, native_ast.nullExpr, MakeNamedTupleWrapper(), False)232    if f in MathFunctionWrapper.SUPPORTED_FUNCTIONS:233        return TypedExpression(context, native_ast.nullExpr, MathFunctionWrapper(f), False)234    if f in BuiltinWrapper.SUPPORTED_FUNCTIONS:235        return TypedExpression(context, native_ast.nullExpr, BuiltinWrapper(f), False)236    if f is None:237        return TypedExpression(238            context,239            native_ast.Expression.Constant(240                val=native_ast.Constant.Void()241            ),242            NoneWrapper(),243            False244        )245    if isinstance(f, bool):246        return TypedExpression(247            context,248            native_ast.Expression.Constant(249                val=native_ast.Constant.Int(val=f, bits=1, signed=False)250            ),251            BoolWrapper(),252            False,253            constantValue=f254        )255    if isinstance(f, int):256        return TypedExpression(257            context,258            native_ast.Expression.Constant(259                val=native_ast.Constant.Int(val=f, bits=64, signed=True)260            ),261            IntWrapper(int),262            False,263            constantValue=f264        )265    if isinstance(f, float):266        return TypedExpression(267            context,268            native_ast.Expression.Constant(269                val=native_ast.Constant.Float(val=f, bits=64)270            ),271            FloatWrapper(float),272            False,273            constantValue=f274        )275    if isinstance(f, str):276        return StringWrapper().constant(context, f)277    if isinstance(f, bytes):278        return BytesWrapper().constant(context, f)279    if isinstance(f, type(pythonObjectRepresentation)):280        if functionIsCompilable(f):281            return TypedExpression(282                context,283                native_ast.nullExpr,284                PythonFreeFunctionWrapper(f),285                False286            )287        else:288            return context.constantPyObject(f, owningGlobalScopeAndName)289    if isinstance(f, method_descriptor):290        return TypedExpression(291            context,292            native_ast.nullExpr,293            MethodDescriptorWrapper(f),294            False295        )296    if hasattr(f, '__typed_python_category__') and not isinstance(f, type):297        if f.__typed_python_category__ == "Function":298            f = prepareArgumentToBePassedToCompiler(f)299            if bytecount(f.ClosureType):300                raise Exception(f"Function {f} has nonempty closure {f.ClosureType}")301            return TypedExpression(302                context,303                typedPythonTypeToTypeWrapper(f.ClosureType).getNativeLayoutType().zero(),304                PythonTypedFunctionWrapper(f),305                False306            )307        if f.__typed_python_category__ == "Class":308            # global class instances get held as constants309            return context.constantTypedPythonObject(f, owningGlobalScopeAndName)310    if isinstance(f, type) and issubclass(f, TypeFunction) and len(f.MRO) == 2:311        return TypedExpression(context, native_ast.nullExpr, PythonFreeObjectWrapper(f, False), False)312    if isinstance(f, type):313        return TypedExpression(context, native_ast.nullExpr, PythonTypeObjectWrapper(f), False)314    if isinstance(f, ModuleType):315        return TypedExpression(context, native_ast.nullExpr, ModuleWrapper(f), False)316    if isinstance(f, Type):317        # it's a typed python object at module level scope318        return context.constantTypedPythonObject(f, owningGlobalScopeAndName)319    return context.constantPyObject(f, owningGlobalScopeAndName)320def pythonObjectRepresentationType(f):321    if isinstance(f, str):322        return StringWrapper()323    if isinstance(f, bytes):324        return BytesWrapper()...idl_gen_wrapper.py
Source:idl_gen_wrapper.py  
1# Copyright (c) 2012 The Chromium Authors. All rights reserved.2# Use of this source code is governed by a BSD-style license that can be3# found in the LICENSE file.4"""Base class for generating wrapper functions for PPAPI methods.5"""6from datetime import datetime7import os8import sys9from idl_c_proto import CGen10from idl_generator import Generator11from idl_log import ErrOut, InfoOut, WarnOut12from idl_option import  GetOption13from idl_outfile import IDLOutFile14class PPKind(object):15  @staticmethod16  def ChoosePPFunc(iface, ppb_func, ppp_func):17    name = iface.node.GetName()18    if name.startswith("PPP"):19      return ppp_func20    elif name.startswith("PPB"):21      return ppb_func22    else:23      raise Exception('Unknown PPKind for ' + name)24class Interface(object):25  """Tracks information about a particular interface version.26  - struct_name: the struct type used by the ppapi headers to hold the27  method pointers (the vtable).28  - needs_wrapping: True if a method in the interface needs wrapping.29  - header_file: the name of the header file that defined this interface.30  """31  def __init__(self, interface_node, release, version,32               struct_name, needs_wrapping, header_file):33    self.node = interface_node34    self.release = release35    self.version = version36    self.struct_name = struct_name37    # We may want finer grained filtering (method level), but it is not38    # yet clear how to actually do that.39    self.needs_wrapping = needs_wrapping40    self.header_file = header_file41class WrapperGen(Generator):42  """WrapperGen - An abstract class that generates wrappers for PPAPI methods.43  This generates a wrapper PPB and PPP GetInterface, which directs users44  to wrapper PPAPI methods. Wrapper PPAPI methods may perform arbitrary45  work before invoking the real PPAPI method (supplied by the original46  GetInterface functions).47  Subclasses must implement GenerateWrapperForPPBMethod (and PPP).48  """49  def __init__(self, wrapper_prefix, s1, s2, s3):50    Generator.__init__(self, s1, s2, s3)51    self.wrapper_prefix = wrapper_prefix52    self._skip_opt = False53    self.output_file = None54    self.cgen = CGen()55  def SetOutputFile(self, fname):56    self.output_file = fname57  def GenerateRelease(self, ast, release, options):58    return self.GenerateRange(ast, [release], options)59  @staticmethod60  def GetHeaderName(name):61    """Get the corresponding ppapi .h file from each IDL filename.62    """63    name = os.path.splitext(name)[0] + '.h'64    name = name.replace(os.sep, '/')65    return 'ppapi/c/' + name66  def WriteCopyright(self, out):67    now = datetime.now()68    c = """/* Copyright (c) %s The Chromium Authors. All rights reserved.69 * Use of this source code is governed by a BSD-style license that can be70 * found in the LICENSE file.71 */72/* NOTE: this is auto-generated from IDL */73""" % now.year74    out.Write(c)75  def GetWrapperMetadataName(self):76    return '__%sWrapperInfo' % self.wrapper_prefix77  def GenerateHelperFunctions(self, out):78    """Generate helper functions to avoid dependencies on libc.79    """80    out.Write("""/* Use local strcmp to avoid dependency on libc. */81static int mystrcmp(const char* s1, const char *s2) {82  while (1) {83    if (*s1 == 0) break;84    if (*s2 == 0) break;85    if (*s1 != *s2) break;86    ++s1;87    ++s2;88  }89  return (int)(*s1) - (int)(*s2);90}\n91""")92  def GenerateFixedFunctions(self, out):93    """Write out the set of constant functions (those that do not depend on94    the current Pepper IDL).95    """96    out.Write("""97static PPB_GetInterface __real_PPBGetInterface;98static PPP_GetInterface_Type __real_PPPGetInterface;99void __set_real_%(wrapper_prefix)s_PPBGetInterface(PPB_GetInterface real) {100  __real_PPBGetInterface = real;101}102void __set_real_%(wrapper_prefix)s_PPPGetInterface(PPP_GetInterface_Type real) {103  __real_PPPGetInterface = real;104}105/* Map interface string -> wrapper metadata */106static struct %(wrapper_struct)s *%(wrapper_prefix)sPPBShimIface(107    const char *name) {108  struct %(wrapper_struct)s **next = s_ppb_wrappers;109  while (*next != NULL) {110    if (mystrcmp(name, (*next)->iface_macro) == 0) return *next;111    ++next;112  }113  return NULL;114}115/* Map interface string -> wrapper metadata */116static struct %(wrapper_struct)s *%(wrapper_prefix)sPPPShimIface(117    const char *name) {118  struct %(wrapper_struct)s **next = s_ppp_wrappers;119  while (*next != NULL) {120    if (mystrcmp(name, (*next)->iface_macro) == 0) return *next;121    ++next;122  }123  return NULL;124}125const void *__%(wrapper_prefix)s_PPBGetInterface(const char *name) {126  struct %(wrapper_struct)s *wrapper = %(wrapper_prefix)sPPBShimIface(name);127  if (wrapper == NULL) {128    /* We did not generate a wrapper for this, so return the real interface. */129    return (*__real_PPBGetInterface)(name);130  }131  /* Initialize the real_iface if it hasn't been. The wrapper depends on it. */132  if (wrapper->real_iface == NULL) {133    const void *iface = (*__real_PPBGetInterface)(name);134    if (NULL == iface) return NULL;135    wrapper->real_iface = iface;136  }137  return wrapper->wrapped_iface;138}139const void *__%(wrapper_prefix)s_PPPGetInterface(const char *name) {140  struct %(wrapper_struct)s *wrapper = %(wrapper_prefix)sPPPShimIface(name);141  if (wrapper == NULL) {142    /* We did not generate a wrapper for this, so return the real interface. */143    return (*__real_PPPGetInterface)(name);144  }145  /* Initialize the real_iface if it hasn't been. The wrapper depends on it. */146  if (wrapper->real_iface == NULL) {147    const void *iface = (*__real_PPPGetInterface)(name);148    if (NULL == iface) return NULL;149    wrapper->real_iface = iface;150  }151  return wrapper->wrapped_iface;152}153""" % { 'wrapper_struct' : self.GetWrapperMetadataName(),154        'wrapper_prefix' : self.wrapper_prefix,155        } )156  ############################################################157  def OwnHeaderFile(self):158    """Return the header file that specifies the API of this wrapper.159    We do not generate the header files.  """160    raise Exception('Child class must implement this')161  ############################################################162  def DetermineInterfaces(self, ast, releases):163    """Get a list of interfaces along with whatever metadata we need.164    """165    iface_releases = []166    for filenode in ast.GetListOf('File'):167      # If this file has errors, skip it168      if filenode in self.skip_list:169        if GetOption('verbose'):170          InfoOut.Log('WrapperGen: Skipping %s due to errors\n' %171                      filenode.GetName())172        continue173      file_name = self.GetHeaderName(filenode.GetName())174      ifaces = filenode.GetListOf('Interface')175      for iface in ifaces:176        releases_for_iface = iface.GetUniqueReleases(releases)177        for release in releases_for_iface:178          version = iface.GetVersion(release)179          struct_name = self.cgen.GetStructName(iface, release,180                                                include_version=True)181          needs_wrap = self.InterfaceVersionNeedsWrapping(iface, version)182          if not needs_wrap:183            if GetOption('verbose'):184              InfoOut.Log('Interface %s ver %s does not need wrapping' %185                          (struct_name, version))186          iface_releases.append(187              Interface(iface, release, version,188                        struct_name, needs_wrap, file_name))189    return iface_releases190  def GenerateIncludes(self, iface_releases, out):191    """Generate the list of #include that define the original interfaces.192    """193    self.WriteCopyright(out)194    # First include own header.195    out.Write('#include "%s"\n\n' % self.OwnHeaderFile())196    # Get typedefs for PPB_GetInterface.197    out.Write('#include "%s"\n' % self.GetHeaderName('ppb.h'))198    # Only include headers where *some* interface needs wrapping.199    header_files = set()200    for iface in iface_releases:201      if iface.needs_wrapping:202        header_files.add(iface.header_file)203    for header in sorted(header_files):204      out.Write('#include "%s"\n' % header)205    out.Write('\n')206  def WrapperMethodPrefix(self, iface, release):207    return '%s_%s_%s_' % (self.wrapper_prefix, release, iface.GetName())208  def GenerateWrapperForPPBMethod(self, iface, member):209    result = []210    func_prefix = self.WrapperMethodPrefix(iface.node, iface.release)211    sig = self.cgen.GetSignature(member, iface.release, 'store',212                                 func_prefix, False)213    result.append('static %s {\n' % sig)214    result.append(' while(1) { /* Not implemented */ } \n')215    result.append('}\n')216    return result217  def GenerateWrapperForPPPMethod(self, iface, member):218    result = []219    func_prefix = self.WrapperMethodPrefix(iface.node, iface.release)220    sig = self.cgen.GetSignature(member, iface.release, 'store',221                                 func_prefix, False)222    result.append('static %s {\n' % sig)223    result.append(' while(1) { /* Not implemented */ } \n')224    result.append('}\n')225    return result226  def GenerateWrapperForMethods(self, iface_releases, comments=True):227    """Return a string representing the code for each wrapper method228    (using a string rather than writing to the file directly for testing.)229    """230    result = []231    for iface in iface_releases:232      if not iface.needs_wrapping:233        if comments:234          result.append('/* Not generating wrapper methods for %s */\n\n' %235                        iface.struct_name)236        continue237      if comments:238        result.append('/* Begin wrapper methods for %s */\n\n' %239                      iface.struct_name)240      generator =  PPKind.ChoosePPFunc(iface,241                                       self.GenerateWrapperForPPBMethod,242                                       self.GenerateWrapperForPPPMethod)243      for member in iface.node.GetListOf('Member'):244        # Skip the method if it's not actually in the release.245        if not member.InReleases([iface.release]):246          continue247        result.extend(generator(iface, member))248      if comments:249        result.append('/* End wrapper methods for %s */\n\n' %250                      iface.struct_name)251    return ''.join(result)252  def GenerateWrapperInterfaces(self, iface_releases, out):253    for iface in iface_releases:254      if not iface.needs_wrapping:255        out.Write('/* Not generating wrapper interface for %s */\n\n' %256                  iface.struct_name)257        continue258      out.Write('static const struct %s %s_Wrappers_%s = {\n' % (259          iface.struct_name, self.wrapper_prefix, iface.struct_name))260      methods = []261      for member in iface.node.GetListOf('Member'):262        # Skip the method if it's not actually in the release.263        if not member.InReleases([iface.release]):264          continue265        prefix = self.WrapperMethodPrefix(iface.node, iface.release)266        # Casts are necessary for the PPB_* wrappers because we must267        # cast away "__attribute__((pnaclcall))".  The PPP_* wrappers268        # must match the default calling conventions and so don't have269        # the attribute, so omitting casts for them provides a little270        # extra type checking.271        if iface.node.GetName().startswith('PPB_'):272          cast = '(%s)' % self.cgen.GetSignature(273              member, iface.release, 'return',274              prefix='',275              func_as_ptr=True,276              include_name=False)277        else:278          cast = ''279        methods.append('  .%s = %s&%s%s' % (member.GetName(),280                                            cast,281                                            prefix,282                                            member.GetName()))283      out.Write('  ' + ',\n  '.join(methods) + '\n')284      out.Write('};\n\n')285  def GetWrapperInfoName(self, iface):286    return '%s_WrapperInfo_%s' % (self.wrapper_prefix, iface.struct_name)287  def GenerateWrapperInfoAndCollection(self, iface_releases, out):288    for iface in iface_releases:289      iface_macro = self.cgen.GetInterfaceMacro(iface.node, iface.version)290      if iface.needs_wrapping:291        wrap_iface = '(const void *) &%s_Wrappers_%s' % (self.wrapper_prefix,292                                                         iface.struct_name)293        out.Write("""static struct %s %s = {294  .iface_macro = %s,295  .wrapped_iface = %s,296  .real_iface = NULL297};\n\n""" % (self.GetWrapperMetadataName(),298             self.GetWrapperInfoName(iface),299             iface_macro,300             wrap_iface))301    # Now generate NULL terminated arrays of the above wrapper infos.302    ppb_wrapper_infos = []303    ppp_wrapper_infos = []304    for iface in iface_releases:305      if iface.needs_wrapping:306        appender = PPKind.ChoosePPFunc(iface,307                                       ppb_wrapper_infos.append,308                                       ppp_wrapper_infos.append)309        appender('  &%s' % self.GetWrapperInfoName(iface))310    ppb_wrapper_infos.append('  NULL')311    ppp_wrapper_infos.append('  NULL')312    out.Write(313        'static struct %s *s_ppb_wrappers[] = {\n%s\n};\n\n' %314        (self.GetWrapperMetadataName(), ',\n'.join(ppb_wrapper_infos)))315    out.Write(316        'static struct %s *s_ppp_wrappers[] = {\n%s\n};\n\n' %317        (self.GetWrapperMetadataName(), ',\n'.join(ppp_wrapper_infos)))318  def DeclareWrapperInfos(self, iface_releases, out):319    """The wrapper methods usually need access to the real_iface, so we must320    declare these wrapper infos ahead of time (there is a circular dependency).321    """322    out.Write('/* BEGIN Declarations for all Wrapper Infos */\n\n')323    for iface in iface_releases:324      if iface.needs_wrapping:325        out.Write('static struct %s %s;\n' %326                  (self.GetWrapperMetadataName(),327                   self.GetWrapperInfoName(iface)))328    out.Write('/* END Declarations for all Wrapper Infos. */\n\n')329  def GenerateRange(self, ast, releases, options):330    """Generate shim code for a range of releases.331    """332    # Remember to set the output filename before running this.333    out_filename = self.output_file334    if out_filename is None:335      ErrOut.Log('Did not set filename for writing out wrapper\n')336      return 1337    InfoOut.Log("Generating %s for %s" % (out_filename, self.wrapper_prefix))338    out = IDLOutFile(out_filename)339    # Get a list of all the interfaces along with metadata.340    iface_releases = self.DetermineInterfaces(ast, releases)341    # Generate the includes.342    self.GenerateIncludes(iface_releases, out)343    # Write out static helper functions (mystrcmp).344    self.GenerateHelperFunctions(out)345    # Declare list of WrapperInfo before actual wrapper methods, since346    # they reference each other.347    self.DeclareWrapperInfos(iface_releases, out)348    # Generate wrapper functions for each wrapped method in the interfaces.349    result = self.GenerateWrapperForMethods(iface_releases)350    out.Write(result)351    # Collect all the wrapper functions into interface structs.352    self.GenerateWrapperInterfaces(iface_releases, out)353    # Generate a table of the wrapped interface structs that can be looked up.354    self.GenerateWrapperInfoAndCollection(iface_releases, out)355    # Write out the IDL-invariant functions.356    self.GenerateFixedFunctions(out)357    out.Close()...caching-client-wrapper.ts
Source:caching-client-wrapper.ts  
1import * as chai from 'chai';2import { default as sinon } from 'ts-sinon';3import * as sinonChai from 'sinon-chai';4import 'mocha';5import { CachingClientWrapper } from '../../src/client/caching-client-wrapper';6chai.use(sinonChai);7describe('CachingClientWrapper', () => {8  const expect = chai.expect;9  let cachingClientWrapperUnderTest: CachingClientWrapper;10  let clientWrapperStub: any;11  let redisClientStub: any;12  let idMap: any;13  beforeEach(() => {14    clientWrapperStub = {15      getContactByEmail: sinon.spy(),16      getContactById: sinon.spy(),17      getContactListById: sinon.spy(),18      getContactsInContactListById: sinon.spy(),19      deleteContactByEmail: sinon.spy(),20      deleteContactById: sinon.spy(),21      findWorkflowByName: sinon.spy(),22      createOrUpdateContact: sinon.spy(),23      updateContactById: sinon.spy(),24      enrollContactToWorkflow: sinon.spy(),25      currentContactWorkflows: sinon.spy(),26      isDate: sinon.spy(),27      toDate: sinon.spy(),28      toEpoch: sinon.spy(),29    };30    redisClientStub = {31      get: sinon.spy(),32      setex: sinon.spy(),33      del: sinon.spy(),34    };35    idMap = {36      requestId: '1',37      scenarioId: '2',38      requestorId: '3',39    };40  });41  it('getContactByEmail using original function', (done) => {42    const expectedEmail = 'test@example.com';43    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);44    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns(false);45    cachingClientWrapperUnderTest.getContactByEmail(expectedEmail);46    setTimeout(() => {47      expect(clientWrapperStub.getContactByEmail).to.have.been.calledWith(expectedEmail);48      done();49    });50  });51  it('getContactByEmail using cache', (done) => {52    const expectedEmail = 'test@example.com';53    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);54    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns('"expectedCachedValue"');55    let actualCachedValue: string;56    (async () => {57      actualCachedValue = await cachingClientWrapperUnderTest.getContactByEmail(expectedEmail);58    })();59    setTimeout(() => {60      expect(clientWrapperStub.getContactByEmail).to.not.have.been.called;61      expect(actualCachedValue).to.equal('expectedCachedValue');62      done();63    });64  });65  it('getContactById using original function', (done) => {66    const expectedId = 'test@example.com';67    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);68    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns(false);69    cachingClientWrapperUnderTest.getContactById(expectedId);70    setTimeout(() => {71      expect(clientWrapperStub.getContactById).to.have.been.calledWith(expectedId);72      done();73    });74  });75  it('getContactById using cache', (done) => {76    const expectedId = 'test@example.com';77    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);78    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns('"expectedCachedValue"');79    let actualCachedValue: string;80    (async () => {81      actualCachedValue = await cachingClientWrapperUnderTest.getContactById(expectedId);82    })();83    setTimeout(() => {84      expect(clientWrapperStub.getContactById).to.not.have.been.called;85      expect(actualCachedValue).to.equal('expectedCachedValue');86      done();87    });88  });89  it('getContactsInContactListById using original function', (done) => {90    const expectedId = '123123';91    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);92    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns(false);93    cachingClientWrapperUnderTest.getContactsInContactListById(expectedId);94    setTimeout(() => {95      expect(clientWrapperStub.getContactsInContactListById).to.have.been.calledWith(expectedId);96      done();97    });98  });99  it('getContactsInContactListById using cache', (done) => {100    const expectedId = '123123';101    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);102    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns('"expectedCachedValue"');103    let actualCachedValue: string;104    (async () => {105      actualCachedValue = await cachingClientWrapperUnderTest.getContactsInContactListById(expectedId);106    })();107    setTimeout(() => {108      expect(clientWrapperStub.getContactsInContactListById).to.not.have.been.called;109      expect(actualCachedValue).to.equal('expectedCachedValue');110      done();111    });112  });113  it('deleteContactByEmail', (done) => {114    const expectedEmail = 'test@example.com';115    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);116    cachingClientWrapperUnderTest.clearCache = sinon.spy();117    cachingClientWrapperUnderTest.deleteContactByEmail(expectedEmail);118    setTimeout(() => {119      expect(cachingClientWrapperUnderTest.clearCache).to.have.been.called;120      expect(clientWrapperStub.deleteContactByEmail).to.have.been.calledWith(expectedEmail);121      done();122    });123  });124  it('deleteContactById', (done) => {125    const expectedId = 'test@example.com';126    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);127    cachingClientWrapperUnderTest.clearCache = sinon.spy();128    cachingClientWrapperUnderTest.deleteContactById(expectedId);129    setTimeout(() => {130      expect(cachingClientWrapperUnderTest.clearCache).to.have.been.called;131      expect(clientWrapperStub.deleteContactById).to.have.been.calledWith(expectedId);132      done();133    });134  });135  it('findWorkflowByName using original function', (done) => {136    const name = 'anyName';137    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);138    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns(false);139    cachingClientWrapperUnderTest.findWorkflowByName(name);140    setTimeout(() => {141      expect(clientWrapperStub.findWorkflowByName).to.have.been.calledWith(name);142      done();143    });144  });145  it('findWorkflowByName using cache', (done) => {146    const name = 'anyName';147    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);148    cachingClientWrapperUnderTest.getAsync = sinon.stub().returns('"expectedCachedValue"');149    let actualCachedValue: any;150    (async () => {151      actualCachedValue = await cachingClientWrapperUnderTest.findWorkflowByName(name);152    })();153    setTimeout(() => {154      expect(clientWrapperStub.findWorkflowByName).to.not.have.been.called;155      expect(actualCachedValue).to.equal('expectedCachedValue');156      done();157    });158  });159  it('createOrUpdateContact using original function', (done) => {160    const exampleObj = {a: 1};161    const email = 'any@anyEmail.com'162    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);163    cachingClientWrapperUnderTest.clearCache = sinon.spy();164    cachingClientWrapperUnderTest.createOrUpdateContact(email, exampleObj);165    setTimeout(() => {166      expect(cachingClientWrapperUnderTest.clearCache).to.have.been.called;167      expect(clientWrapperStub.createOrUpdateContact).to.have.been.calledWith(email, exampleObj);168      done();169    });170  })171  it('updateContactById using original function', (done) => {172    const exampleObj = {a: 1};173    const id = 'any@anyEmail.com'174    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);175    cachingClientWrapperUnderTest.clearCache = sinon.spy();176    cachingClientWrapperUnderTest.updateContactById(id, exampleObj);177    setTimeout(() => {178      expect(cachingClientWrapperUnderTest.clearCache).to.have.been.called;179      expect(clientWrapperStub.updateContactById).to.have.been.calledWith(id, exampleObj);180      done();181    });182  })183  it('getCache', (done) => {184    redisClientStub.get = sinon.stub().yields();185    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);186    cachingClientWrapperUnderTest.getCache('expectedKey');187    setTimeout(() => {188      expect(redisClientStub.get).to.have.been.calledWith('expectedKey');189      done();190    });191  });192  it('setCache', (done) => {193    redisClientStub.setex = sinon.stub().yields(); 194    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);195    cachingClientWrapperUnderTest.getCache = sinon.stub().returns(null);196    cachingClientWrapperUnderTest.cachePrefix = 'testPrefix';197    cachingClientWrapperUnderTest.setCache('expectedKey', 'expectedValue');198    setTimeout(() => {199      expect(redisClientStub.setex).to.have.been.calledWith('expectedKey', 55, '"expectedValue"');200      expect(redisClientStub.setex).to.have.been.calledWith('cachekeys|testPrefix', 55, '["expectedKey"]');201      done();202    });203  });204  it('delCache', (done) => {205    redisClientStub.del = sinon.stub().yields();206    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);207    cachingClientWrapperUnderTest.delCache('expectedKey');208    setTimeout(() => {209      expect(redisClientStub.del).to.have.been.calledWith('expectedKey');210      done();211    });212  });213  it('clearCache', (done) => {214    redisClientStub.del = sinon.stub().yields();215    cachingClientWrapperUnderTest = new CachingClientWrapper(clientWrapperStub, redisClientStub, idMap);216    cachingClientWrapperUnderTest.cachePrefix = 'testPrefix';217    cachingClientWrapperUnderTest.getCache = sinon.stub().returns(['testKey1', 'testKey2'])218    cachingClientWrapperUnderTest.clearCache();219    setTimeout(() => {220      expect(redisClientStub.del).to.have.been.calledWith('testKey1');221      expect(redisClientStub.del).to.have.been.calledWith('testKey2');222      expect(redisClientStub.setex).to.have.been.calledWith('cachekeys|testPrefix');223      done();224    });225  });...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!!
