| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649 |
- """ Test suite for the fixer modules """
- # Python imports
- import os
- from itertools import chain
- from operator import itemgetter
- # Local imports
- from lib2to3 import pygram, fixer_util
- from lib2to3.tests import support
- class FixerTestCase(support.TestCase):
- # Other test cases can subclass this class and replace "fixer_pkg" with
- # their own.
- def setUp(self, fix_list=None, fixer_pkg="lib2to3", options=None):
- if fix_list is None:
- fix_list = [self.fixer]
- self.refactor = support.get_refactorer(fixer_pkg, fix_list, options)
- self.fixer_log = []
- self.filename = "<string>"
- for fixer in chain(self.refactor.pre_order,
- self.refactor.post_order):
- fixer.log = self.fixer_log
- def _check(self, before, after):
- before = support.reformat(before)
- after = support.reformat(after)
- tree = self.refactor.refactor_string(before, self.filename)
- self.assertEqual(after, str(tree))
- return tree
- def check(self, before, after, ignore_warnings=False):
- tree = self._check(before, after)
- self.assertTrue(tree.was_changed)
- if not ignore_warnings:
- self.assertEqual(self.fixer_log, [])
- def warns(self, before, after, message, unchanged=False):
- tree = self._check(before, after)
- self.assertIn(message, "".join(self.fixer_log))
- if not unchanged:
- self.assertTrue(tree.was_changed)
- def warns_unchanged(self, before, message):
- self.warns(before, before, message, unchanged=True)
- def unchanged(self, before, ignore_warnings=False):
- self._check(before, before)
- if not ignore_warnings:
- self.assertEqual(self.fixer_log, [])
- def assert_runs_after(self, *names):
- fixes = [self.fixer]
- fixes.extend(names)
- r = support.get_refactorer("lib2to3", fixes)
- (pre, post) = r.get_fixers()
- n = "fix_" + self.fixer
- if post and post[-1].__class__.__module__.endswith(n):
- # We're the last fixer to run
- return
- if pre and pre[-1].__class__.__module__.endswith(n) and not post:
- # We're the last in pre and post is empty
- return
- self.fail("Fixer run order (%s) is incorrect; %s should be last."\
- %(", ".join([x.__class__.__module__ for x in (pre+post)]), n))
- class Test_ne(FixerTestCase):
- fixer = "ne"
- def test_basic(self):
- b = """if x <> y:
- pass"""
- a = """if x != y:
- pass"""
- self.check(b, a)
- def test_no_spaces(self):
- b = """if x<>y:
- pass"""
- a = """if x!=y:
- pass"""
- self.check(b, a)
- def test_chained(self):
- b = """if x<>y<>z:
- pass"""
- a = """if x!=y!=z:
- pass"""
- self.check(b, a)
- class Test_has_key(FixerTestCase):
- fixer = "has_key"
- def test_1(self):
- b = """x = d.has_key("x") or d.has_key("y")"""
- a = """x = "x" in d or "y" in d"""
- self.check(b, a)
- def test_2(self):
- b = """x = a.b.c.d.has_key("x") ** 3"""
- a = """x = ("x" in a.b.c.d) ** 3"""
- self.check(b, a)
- def test_3(self):
- b = """x = a.b.has_key(1 + 2).__repr__()"""
- a = """x = (1 + 2 in a.b).__repr__()"""
- self.check(b, a)
- def test_4(self):
- b = """x = a.b.has_key(1 + 2).__repr__() ** -3 ** 4"""
- a = """x = (1 + 2 in a.b).__repr__() ** -3 ** 4"""
- self.check(b, a)
- def test_5(self):
- b = """x = a.has_key(f or g)"""
- a = """x = (f or g) in a"""
- self.check(b, a)
- def test_6(self):
- b = """x = a + b.has_key(c)"""
- a = """x = a + (c in b)"""
- self.check(b, a)
- def test_7(self):
- b = """x = a.has_key(lambda: 12)"""
- a = """x = (lambda: 12) in a"""
- self.check(b, a)
- def test_8(self):
- b = """x = a.has_key(a for a in b)"""
- a = """x = (a for a in b) in a"""
- self.check(b, a)
- def test_9(self):
- b = """if not a.has_key(b): pass"""
- a = """if b not in a: pass"""
- self.check(b, a)
- def test_10(self):
- b = """if not a.has_key(b).__repr__(): pass"""
- a = """if not (b in a).__repr__(): pass"""
- self.check(b, a)
- def test_11(self):
- b = """if not a.has_key(b) ** 2: pass"""
- a = """if not (b in a) ** 2: pass"""
- self.check(b, a)
- class Test_apply(FixerTestCase):
- fixer = "apply"
- def test_1(self):
- b = """x = apply(f, g + h)"""
- a = """x = f(*g + h)"""
- self.check(b, a)
- def test_2(self):
- b = """y = apply(f, g, h)"""
- a = """y = f(*g, **h)"""
- self.check(b, a)
- def test_3(self):
- b = """z = apply(fs[0], g or h, h or g)"""
- a = """z = fs[0](*g or h, **h or g)"""
- self.check(b, a)
- def test_4(self):
- b = """apply(f, (x, y) + t)"""
- a = """f(*(x, y) + t)"""
- self.check(b, a)
- def test_5(self):
- b = """apply(f, args,)"""
- a = """f(*args)"""
- self.check(b, a)
- def test_6(self):
- b = """apply(f, args, kwds,)"""
- a = """f(*args, **kwds)"""
- self.check(b, a)
- # Test that complex functions are parenthesized
- def test_complex_1(self):
- b = """x = apply(f+g, args)"""
- a = """x = (f+g)(*args)"""
- self.check(b, a)
- def test_complex_2(self):
- b = """x = apply(f*g, args)"""
- a = """x = (f*g)(*args)"""
- self.check(b, a)
- def test_complex_3(self):
- b = """x = apply(f**g, args)"""
- a = """x = (f**g)(*args)"""
- self.check(b, a)
- # But dotted names etc. not
- def test_dotted_name(self):
- b = """x = apply(f.g, args)"""
- a = """x = f.g(*args)"""
- self.check(b, a)
- def test_subscript(self):
- b = """x = apply(f[x], args)"""
- a = """x = f[x](*args)"""
- self.check(b, a)
- def test_call(self):
- b = """x = apply(f(), args)"""
- a = """x = f()(*args)"""
- self.check(b, a)
- # Extreme case
- def test_extreme(self):
- b = """x = apply(a.b.c.d.e.f, args, kwds)"""
- a = """x = a.b.c.d.e.f(*args, **kwds)"""
- self.check(b, a)
- # XXX Comments in weird places still get lost
- def test_weird_comments(self):
- b = """apply( # foo
- f, # bar
- args)"""
- a = """f(*args)"""
- self.check(b, a)
- # These should *not* be touched
- def test_unchanged_1(self):
- s = """apply()"""
- self.unchanged(s)
- def test_unchanged_2(self):
- s = """apply(f)"""
- self.unchanged(s)
- def test_unchanged_3(self):
- s = """apply(f,)"""
- self.unchanged(s)
- def test_unchanged_4(self):
- s = """apply(f, args, kwds, extras)"""
- self.unchanged(s)
- def test_unchanged_5(self):
- s = """apply(f, *args, **kwds)"""
- self.unchanged(s)
- def test_unchanged_6(self):
- s = """apply(f, *args)"""
- self.unchanged(s)
- def test_unchanged_6b(self):
- s = """apply(f, **kwds)"""
- self.unchanged(s)
- def test_unchanged_7(self):
- s = """apply(func=f, args=args, kwds=kwds)"""
- self.unchanged(s)
- def test_unchanged_8(self):
- s = """apply(f, args=args, kwds=kwds)"""
- self.unchanged(s)
- def test_unchanged_9(self):
- s = """apply(f, args, kwds=kwds)"""
- self.unchanged(s)
- def test_space_1(self):
- a = """apply( f, args, kwds)"""
- b = """f(*args, **kwds)"""
- self.check(a, b)
- def test_space_2(self):
- a = """apply( f ,args,kwds )"""
- b = """f(*args, **kwds)"""
- self.check(a, b)
- class Test_reload(FixerTestCase):
- fixer = "reload"
- def test(self):
- b = """reload(a)"""
- a = """import importlib\nimportlib.reload(a)"""
- self.check(b, a)
- def test_comment(self):
- b = """reload( a ) # comment"""
- a = """import importlib\nimportlib.reload( a ) # comment"""
- self.check(b, a)
- # PEP 8 comments
- b = """reload( a ) # comment"""
- a = """import importlib\nimportlib.reload( a ) # comment"""
- self.check(b, a)
- def test_space(self):
- b = """reload( a )"""
- a = """import importlib\nimportlib.reload( a )"""
- self.check(b, a)
- b = """reload( a)"""
- a = """import importlib\nimportlib.reload( a)"""
- self.check(b, a)
- b = """reload(a )"""
- a = """import importlib\nimportlib.reload(a )"""
- self.check(b, a)
- def test_unchanged(self):
- s = """reload(a=1)"""
- self.unchanged(s)
- s = """reload(f, g)"""
- self.unchanged(s)
- s = """reload(f, *h)"""
- self.unchanged(s)
- s = """reload(f, *h, **i)"""
- self.unchanged(s)
- s = """reload(f, **i)"""
- self.unchanged(s)
- s = """reload(*h, **i)"""
- self.unchanged(s)
- s = """reload(*h)"""
- self.unchanged(s)
- s = """reload(**i)"""
- self.unchanged(s)
- s = """reload()"""
- self.unchanged(s)
- class Test_intern(FixerTestCase):
- fixer = "intern"
- def test_prefix_preservation(self):
- b = """x = intern( a )"""
- a = """import sys\nx = sys.intern( a )"""
- self.check(b, a)
- b = """y = intern("b" # test
- )"""
- a = """import sys\ny = sys.intern("b" # test
- )"""
- self.check(b, a)
- b = """z = intern(a+b+c.d, )"""
- a = """import sys\nz = sys.intern(a+b+c.d, )"""
- self.check(b, a)
- def test(self):
- b = """x = intern(a)"""
- a = """import sys\nx = sys.intern(a)"""
- self.check(b, a)
- b = """z = intern(a+b+c.d,)"""
- a = """import sys\nz = sys.intern(a+b+c.d,)"""
- self.check(b, a)
- b = """intern("y%s" % 5).replace("y", "")"""
- a = """import sys\nsys.intern("y%s" % 5).replace("y", "")"""
- self.check(b, a)
- # These should not be refactored
- def test_unchanged(self):
- s = """intern(a=1)"""
- self.unchanged(s)
- s = """intern(f, g)"""
- self.unchanged(s)
- s = """intern(*h)"""
- self.unchanged(s)
- s = """intern(**i)"""
- self.unchanged(s)
- s = """intern()"""
- self.unchanged(s)
- class Test_reduce(FixerTestCase):
- fixer = "reduce"
- def test_simple_call(self):
- b = "reduce(a, b, c)"
- a = "from functools import reduce\nreduce(a, b, c)"
- self.check(b, a)
- def test_bug_7253(self):
- # fix_tuple_params was being bad and orphaning nodes in the tree.
- b = "def x(arg): reduce(sum, [])"
- a = "from functools import reduce\ndef x(arg): reduce(sum, [])"
- self.check(b, a)
- def test_call_with_lambda(self):
- b = "reduce(lambda x, y: x + y, seq)"
- a = "from functools import reduce\nreduce(lambda x, y: x + y, seq)"
- self.check(b, a)
- def test_unchanged(self):
- s = "reduce(a)"
- self.unchanged(s)
- s = "reduce(a, b=42)"
- self.unchanged(s)
- s = "reduce(a, b, c, d)"
- self.unchanged(s)
- s = "reduce(**c)"
- self.unchanged(s)
- s = "reduce()"
- self.unchanged(s)
- class Test_print(FixerTestCase):
- fixer = "print"
- def test_prefix_preservation(self):
- b = """print 1, 1+1, 1+1+1"""
- a = """print(1, 1+1, 1+1+1)"""
- self.check(b, a)
- def test_idempotency(self):
- s = """print()"""
- self.unchanged(s)
- s = """print('')"""
- self.unchanged(s)
- def test_idempotency_print_as_function(self):
- self.refactor.driver.grammar = pygram.python_grammar_no_print_statement
- s = """print(1, 1+1, 1+1+1)"""
- self.unchanged(s)
- s = """print()"""
- self.unchanged(s)
- s = """print('')"""
- self.unchanged(s)
- def test_1(self):
- b = """print 1, 1+1, 1+1+1"""
- a = """print(1, 1+1, 1+1+1)"""
- self.check(b, a)
- def test_2(self):
- b = """print 1, 2"""
- a = """print(1, 2)"""
- self.check(b, a)
- def test_3(self):
- b = """print"""
- a = """print()"""
- self.check(b, a)
- def test_4(self):
- # from bug 3000
- b = """print whatever; print"""
- a = """print(whatever); print()"""
- self.check(b, a)
- def test_5(self):
- b = """print; print whatever;"""
- a = """print(); print(whatever);"""
- self.check(b, a)
- def test_tuple(self):
- b = """print (a, b, c)"""
- a = """print((a, b, c))"""
- self.check(b, a)
- # trailing commas
- def test_trailing_comma_1(self):
- b = """print 1, 2, 3,"""
- a = """print(1, 2, 3, end=' ')"""
- self.check(b, a)
- def test_trailing_comma_2(self):
- b = """print 1, 2,"""
- a = """print(1, 2, end=' ')"""
- self.check(b, a)
- def test_trailing_comma_3(self):
- b = """print 1,"""
- a = """print(1, end=' ')"""
- self.check(b, a)
- # >> stuff
- def test_vargs_without_trailing_comma(self):
- b = """print >>sys.stderr, 1, 2, 3"""
- a = """print(1, 2, 3, file=sys.stderr)"""
- self.check(b, a)
- def test_with_trailing_comma(self):
- b = """print >>sys.stderr, 1, 2,"""
- a = """print(1, 2, end=' ', file=sys.stderr)"""
- self.check(b, a)
- def test_no_trailing_comma(self):
- b = """print >>sys.stderr, 1+1"""
- a = """print(1+1, file=sys.stderr)"""
- self.check(b, a)
- def test_spaces_before_file(self):
- b = """print >> sys.stderr"""
- a = """print(file=sys.stderr)"""
- self.check(b, a)
- def test_with_future_print_function(self):
- s = "from __future__ import print_function\n" \
- "print('Hai!', end=' ')"
- self.unchanged(s)
- b = "print 'Hello, world!'"
- a = "print('Hello, world!')"
- self.check(b, a)
- class Test_exec(FixerTestCase):
- fixer = "exec"
- def test_prefix_preservation(self):
- b = """ exec code in ns1, ns2"""
- a = """ exec(code, ns1, ns2)"""
- self.check(b, a)
- def test_basic(self):
- b = """exec code"""
- a = """exec(code)"""
- self.check(b, a)
- def test_with_globals(self):
- b = """exec code in ns"""
- a = """exec(code, ns)"""
- self.check(b, a)
- def test_with_globals_locals(self):
- b = """exec code in ns1, ns2"""
- a = """exec(code, ns1, ns2)"""
- self.check(b, a)
- def test_complex_1(self):
- b = """exec (a.b()) in ns"""
- a = """exec((a.b()), ns)"""
- self.check(b, a)
- def test_complex_2(self):
- b = """exec a.b() + c in ns"""
- a = """exec(a.b() + c, ns)"""
- self.check(b, a)
- # These should not be touched
- def test_unchanged_1(self):
- s = """exec(code)"""
- self.unchanged(s)
- def test_unchanged_2(self):
- s = """exec (code)"""
- self.unchanged(s)
- def test_unchanged_3(self):
- s = """exec(code, ns)"""
- self.unchanged(s)
- def test_unchanged_4(self):
- s = """exec(code, ns1, ns2)"""
- self.unchanged(s)
- class Test_repr(FixerTestCase):
- fixer = "repr"
- def test_prefix_preservation(self):
- b = """x = `1 + 2`"""
- a = """x = repr(1 + 2)"""
- self.check(b, a)
- def test_simple_1(self):
- b = """x = `1 + 2`"""
- a = """x = repr(1 + 2)"""
- self.check(b, a)
- def test_simple_2(self):
- b = """y = `x`"""
- a = """y = repr(x)"""
- self.check(b, a)
- def test_complex(self):
- b = """z = `y`.__repr__()"""
- a = """z = repr(y).__repr__()"""
- self.check(b, a)
- def test_tuple(self):
- b = """x = `1, 2, 3`"""
- a = """x = repr((1, 2, 3))"""
- self.check(b, a)
- def test_nested(self):
- b = """x = `1 + `2``"""
- a = """x = repr(1 + repr(2))"""
- self.check(b, a)
- def test_nested_tuples(self):
- b = """x = `1, 2 + `3, 4``"""
- a = """x = repr((1, 2 + repr((3, 4))))"""
- self.check(b, a)
- class Test_except(FixerTestCase):
- fixer = "except"
- def test_prefix_preservation(self):
- b = """
- try:
- pass
- except (RuntimeError, ImportError), e:
- pass"""
- a = """
- try:
- pass
- except (RuntimeError, ImportError) as e:
- pass"""
- self.check(b, a)
- def test_simple(self):
- b = """
- try:
- pass
- except Foo, e:
- pass"""
- a = """
- try:
- pass
- except Foo as e:
- pass"""
- self.check(b, a)
- def test_simple_no_space_before_target(self):
- b = """
- try:
- pass
- except Foo,e:
- pass"""
- a = """
- try:
- pass
- except Foo as e:
- pass"""
- self.check(b, a)
- def test_tuple_unpack(self):
- b = """
- def foo():
- try:
- pass
- except Exception, (f, e):
- pass
- except ImportError, e:
- pass"""
- a = """
- def foo():
- try:
- pass
- except Exception as xxx_todo_changeme:
- (f, e) = xxx_todo_changeme.args
- pass
- except ImportError as e:
- pass"""
- self.check(b, a)
- def test_multi_class(self):
- b = """
- try:
- pass
- except (RuntimeError, ImportError), e:
- pass"""
- a = """
- try:
- pass
- except (RuntimeError, ImportError) as e:
- pass"""
- self.check(b, a)
- def test_list_unpack(self):
- b = """
- try:
- pass
- except Exception, [a, b]:
- pass"""
- a = """
- try:
- pass
- except Exception as xxx_todo_changeme:
- [a, b] = xxx_todo_changeme.args
- pass"""
- self.check(b, a)
- def test_weird_target_1(self):
- b = """
- try:
- pass
- except Exception, d[5]:
- pass"""
- a = """
- try:
- pass
- except Exception as xxx_todo_changeme:
- d[5] = xxx_todo_changeme
- pass"""
- self.check(b, a)
- def test_weird_target_2(self):
- b = """
- try:
- pass
- except Exception, a.foo:
- pass"""
- a = """
- try:
- pass
- except Exception as xxx_todo_changeme:
- a.foo = xxx_todo_changeme
- pass"""
- self.check(b, a)
- def test_weird_target_3(self):
- b = """
- try:
- pass
- except Exception, a().foo:
- pass"""
- a = """
- try:
- pass
- except Exception as xxx_todo_changeme:
- a().foo = xxx_todo_changeme
- pass"""
- self.check(b, a)
- def test_bare_except(self):
- b = """
- try:
- pass
- except Exception, a:
- pass
- except:
- pass"""
- a = """
- try:
- pass
- except Exception as a:
- pass
- except:
- pass"""
- self.check(b, a)
- def test_bare_except_and_else_finally(self):
- b = """
- try:
- pass
- except Exception, a:
- pass
- except:
- pass
- else:
- pass
- finally:
- pass"""
- a = """
- try:
- pass
- except Exception as a:
- pass
- except:
- pass
- else:
- pass
- finally:
- pass"""
- self.check(b, a)
- def test_multi_fixed_excepts_before_bare_except(self):
- b = """
- try:
- pass
- except TypeError, b:
- pass
- except Exception, a:
- pass
- except:
- pass"""
- a = """
- try:
- pass
- except TypeError as b:
- pass
- except Exception as a:
- pass
- except:
- pass"""
- self.check(b, a)
- def test_one_line_suites(self):
- b = """
- try: raise TypeError
- except TypeError, e:
- pass
- """
- a = """
- try: raise TypeError
- except TypeError as e:
- pass
- """
- self.check(b, a)
- b = """
- try:
- raise TypeError
- except TypeError, e: pass
- """
- a = """
- try:
- raise TypeError
- except TypeError as e: pass
- """
- self.check(b, a)
- b = """
- try: raise TypeError
- except TypeError, e: pass
- """
- a = """
- try: raise TypeError
- except TypeError as e: pass
- """
- self.check(b, a)
- b = """
- try: raise TypeError
- except TypeError, e: pass
- else: function()
- finally: done()
- """
- a = """
- try: raise TypeError
- except TypeError as e: pass
- else: function()
- finally: done()
- """
- self.check(b, a)
- # These should not be touched:
- def test_unchanged_1(self):
- s = """
- try:
- pass
- except:
- pass"""
- self.unchanged(s)
- def test_unchanged_2(self):
- s = """
- try:
- pass
- except Exception:
- pass"""
- self.unchanged(s)
- def test_unchanged_3(self):
- s = """
- try:
- pass
- except (Exception, SystemExit):
- pass"""
- self.unchanged(s)
- class Test_raise(FixerTestCase):
- fixer = "raise"
- def test_basic(self):
- b = """raise Exception, 5"""
- a = """raise Exception(5)"""
- self.check(b, a)
- def test_prefix_preservation(self):
- b = """raise Exception,5"""
- a = """raise Exception(5)"""
- self.check(b, a)
- b = """raise Exception, 5"""
- a = """raise Exception(5)"""
- self.check(b, a)
- def test_with_comments(self):
- b = """raise Exception, 5 # foo"""
- a = """raise Exception(5) # foo"""
- self.check(b, a)
- b = """raise E, (5, 6) % (a, b) # foo"""
- a = """raise E((5, 6) % (a, b)) # foo"""
- self.check(b, a)
- b = """def foo():
- raise Exception, 5, 6 # foo"""
- a = """def foo():
- raise Exception(5).with_traceback(6) # foo"""
- self.check(b, a)
- def test_None_value(self):
- b = """raise Exception(5), None, tb"""
- a = """raise Exception(5).with_traceback(tb)"""
- self.check(b, a)
- def test_tuple_value(self):
- b = """raise Exception, (5, 6, 7)"""
- a = """raise Exception(5, 6, 7)"""
- self.check(b, a)
- def test_tuple_detection(self):
- b = """raise E, (5, 6) % (a, b)"""
- a = """raise E((5, 6) % (a, b))"""
- self.check(b, a)
- def test_tuple_exc_1(self):
- b = """raise (((E1, E2), E3), E4), V"""
- a = """raise E1(V)"""
- self.check(b, a)
- def test_tuple_exc_2(self):
- b = """raise (E1, (E2, E3), E4), V"""
- a = """raise E1(V)"""
- self.check(b, a)
- # These should produce a warning
- def test_string_exc(self):
- s = """raise 'foo'"""
- self.warns_unchanged(s, "Python 3 does not support string exceptions")
- def test_string_exc_val(self):
- s = """raise "foo", 5"""
- self.warns_unchanged(s, "Python 3 does not support string exceptions")
- def test_string_exc_val_tb(self):
- s = """raise "foo", 5, 6"""
- self.warns_unchanged(s, "Python 3 does not support string exceptions")
- # These should result in traceback-assignment
- def test_tb_1(self):
- b = """def foo():
- raise Exception, 5, 6"""
- a = """def foo():
- raise Exception(5).with_traceback(6)"""
- self.check(b, a)
- def test_tb_2(self):
- b = """def foo():
- a = 5
- raise Exception, 5, 6
- b = 6"""
- a = """def foo():
- a = 5
- raise Exception(5).with_traceback(6)
- b = 6"""
- self.check(b, a)
- def test_tb_3(self):
- b = """def foo():
- raise Exception,5,6"""
- a = """def foo():
- raise Exception(5).with_traceback(6)"""
- self.check(b, a)
- def test_tb_4(self):
- b = """def foo():
- a = 5
- raise Exception,5,6
- b = 6"""
- a = """def foo():
- a = 5
- raise Exception(5).with_traceback(6)
- b = 6"""
- self.check(b, a)
- def test_tb_5(self):
- b = """def foo():
- raise Exception, (5, 6, 7), 6"""
- a = """def foo():
- raise Exception(5, 6, 7).with_traceback(6)"""
- self.check(b, a)
- def test_tb_6(self):
- b = """def foo():
- a = 5
- raise Exception, (5, 6, 7), 6
- b = 6"""
- a = """def foo():
- a = 5
- raise Exception(5, 6, 7).with_traceback(6)
- b = 6"""
- self.check(b, a)
- class Test_throw(FixerTestCase):
- fixer = "throw"
- def test_1(self):
- b = """g.throw(Exception, 5)"""
- a = """g.throw(Exception(5))"""
- self.check(b, a)
- def test_2(self):
- b = """g.throw(Exception,5)"""
- a = """g.throw(Exception(5))"""
- self.check(b, a)
- def test_3(self):
- b = """g.throw(Exception, (5, 6, 7))"""
- a = """g.throw(Exception(5, 6, 7))"""
- self.check(b, a)
- def test_4(self):
- b = """5 + g.throw(Exception, 5)"""
- a = """5 + g.throw(Exception(5))"""
- self.check(b, a)
- # These should produce warnings
- def test_warn_1(self):
- s = """g.throw("foo")"""
- self.warns_unchanged(s, "Python 3 does not support string exceptions")
- def test_warn_2(self):
- s = """g.throw("foo", 5)"""
- self.warns_unchanged(s, "Python 3 does not support string exceptions")
- def test_warn_3(self):
- s = """g.throw("foo", 5, 6)"""
- self.warns_unchanged(s, "Python 3 does not support string exceptions")
- # These should not be touched
- def test_untouched_1(self):
- s = """g.throw(Exception)"""
- self.unchanged(s)
- def test_untouched_2(self):
- s = """g.throw(Exception(5, 6))"""
- self.unchanged(s)
- def test_untouched_3(self):
- s = """5 + g.throw(Exception(5, 6))"""
- self.unchanged(s)
- # These should result in traceback-assignment
- def test_tb_1(self):
- b = """def foo():
- g.throw(Exception, 5, 6)"""
- a = """def foo():
- g.throw(Exception(5).with_traceback(6))"""
- self.check(b, a)
- def test_tb_2(self):
- b = """def foo():
- a = 5
- g.throw(Exception, 5, 6)
- b = 6"""
- a = """def foo():
- a = 5
- g.throw(Exception(5).with_traceback(6))
- b = 6"""
- self.check(b, a)
- def test_tb_3(self):
- b = """def foo():
- g.throw(Exception,5,6)"""
- a = """def foo():
- g.throw(Exception(5).with_traceback(6))"""
- self.check(b, a)
- def test_tb_4(self):
- b = """def foo():
- a = 5
- g.throw(Exception,5,6)
- b = 6"""
- a = """def foo():
- a = 5
- g.throw(Exception(5).with_traceback(6))
- b = 6"""
- self.check(b, a)
- def test_tb_5(self):
- b = """def foo():
- g.throw(Exception, (5, 6, 7), 6)"""
- a = """def foo():
- g.throw(Exception(5, 6, 7).with_traceback(6))"""
- self.check(b, a)
- def test_tb_6(self):
- b = """def foo():
- a = 5
- g.throw(Exception, (5, 6, 7), 6)
- b = 6"""
- a = """def foo():
- a = 5
- g.throw(Exception(5, 6, 7).with_traceback(6))
- b = 6"""
- self.check(b, a)
- def test_tb_7(self):
- b = """def foo():
- a + g.throw(Exception, 5, 6)"""
- a = """def foo():
- a + g.throw(Exception(5).with_traceback(6))"""
- self.check(b, a)
- def test_tb_8(self):
- b = """def foo():
- a = 5
- a + g.throw(Exception, 5, 6)
- b = 6"""
- a = """def foo():
- a = 5
- a + g.throw(Exception(5).with_traceback(6))
- b = 6"""
- self.check(b, a)
- class Test_long(FixerTestCase):
- fixer = "long"
- def test_1(self):
- b = """x = long(x)"""
- a = """x = int(x)"""
- self.check(b, a)
- def test_2(self):
- b = """y = isinstance(x, long)"""
- a = """y = isinstance(x, int)"""
- self.check(b, a)
- def test_3(self):
- b = """z = type(x) in (int, long)"""
- a = """z = type(x) in (int, int)"""
- self.check(b, a)
- def test_unchanged(self):
- s = """long = True"""
- self.unchanged(s)
- s = """s.long = True"""
- self.unchanged(s)
- s = """def long(): pass"""
- self.unchanged(s)
- s = """class long(): pass"""
- self.unchanged(s)
- s = """def f(long): pass"""
- self.unchanged(s)
- s = """def f(g, long): pass"""
- self.unchanged(s)
- s = """def f(x, long=True): pass"""
- self.unchanged(s)
- def test_prefix_preservation(self):
- b = """x = long( x )"""
- a = """x = int( x )"""
- self.check(b, a)
- class Test_execfile(FixerTestCase):
- fixer = "execfile"
- def test_conversion(self):
- b = """execfile("fn")"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'))"""
- self.check(b, a)
- b = """execfile("fn", glob)"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'), glob)"""
- self.check(b, a)
- b = """execfile("fn", glob, loc)"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'), glob, loc)"""
- self.check(b, a)
- b = """execfile("fn", globals=glob)"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'), globals=glob)"""
- self.check(b, a)
- b = """execfile("fn", locals=loc)"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'), locals=loc)"""
- self.check(b, a)
- b = """execfile("fn", globals=glob, locals=loc)"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'), globals=glob, locals=loc)"""
- self.check(b, a)
- def test_spacing(self):
- b = """execfile( "fn" )"""
- a = """exec(compile(open( "fn", "rb" ).read(), "fn", 'exec'))"""
- self.check(b, a)
- b = """execfile("fn", globals = glob)"""
- a = """exec(compile(open("fn", "rb").read(), "fn", 'exec'), globals = glob)"""
- self.check(b, a)
- class Test_isinstance(FixerTestCase):
- fixer = "isinstance"
- def test_remove_multiple_items(self):
- b = """isinstance(x, (int, int, int))"""
- a = """isinstance(x, int)"""
- self.check(b, a)
- b = """isinstance(x, (int, float, int, int, float))"""
- a = """isinstance(x, (int, float))"""
- self.check(b, a)
- b = """isinstance(x, (int, float, int, int, float, str))"""
- a = """isinstance(x, (int, float, str))"""
- self.check(b, a)
- b = """isinstance(foo() + bar(), (x(), y(), x(), int, int))"""
- a = """isinstance(foo() + bar(), (x(), y(), x(), int))"""
- self.check(b, a)
- def test_prefix_preservation(self):
- b = """if isinstance( foo(), ( bar, bar, baz )) : pass"""
- a = """if isinstance( foo(), ( bar, baz )) : pass"""
- self.check(b, a)
- def test_unchanged(self):
- self.unchanged("isinstance(x, (str, int))")
- class Test_dict(FixerTestCase):
- fixer = "dict"
- def test_prefix_preservation(self):
- b = "if d. keys ( ) : pass"
- a = "if list(d. keys ( )) : pass"
- self.check(b, a)
- b = "if d. items ( ) : pass"
- a = "if list(d. items ( )) : pass"
- self.check(b, a)
- b = "if d. iterkeys ( ) : pass"
- a = "if iter(d. keys ( )) : pass"
- self.check(b, a)
- b = "[i for i in d. iterkeys( ) ]"
- a = "[i for i in d. keys( ) ]"
- self.check(b, a)
- b = "if d. viewkeys ( ) : pass"
- a = "if d. keys ( ) : pass"
- self.check(b, a)
- b = "[i for i in d. viewkeys( ) ]"
- a = "[i for i in d. keys( ) ]"
- self.check(b, a)
- def test_trailing_comment(self):
- b = "d.keys() # foo"
- a = "list(d.keys()) # foo"
- self.check(b, a)
- b = "d.items() # foo"
- a = "list(d.items()) # foo"
- self.check(b, a)
- b = "d.iterkeys() # foo"
- a = "iter(d.keys()) # foo"
- self.check(b, a)
- b = """[i for i in d.iterkeys() # foo
- ]"""
- a = """[i for i in d.keys() # foo
- ]"""
- self.check(b, a)
- b = """[i for i in d.iterkeys() # foo
- ]"""
- a = """[i for i in d.keys() # foo
- ]"""
- self.check(b, a)
- b = "d.viewitems() # foo"
- a = "d.items() # foo"
- self.check(b, a)
- def test_unchanged(self):
- for wrapper in fixer_util.consuming_calls:
- s = "s = %s(d.keys())" % wrapper
- self.unchanged(s)
- s = "s = %s(d.values())" % wrapper
- self.unchanged(s)
- s = "s = %s(d.items())" % wrapper
- self.unchanged(s)
- def test_01(self):
- b = "d.keys()"
- a = "list(d.keys())"
- self.check(b, a)
- b = "a[0].foo().keys()"
- a = "list(a[0].foo().keys())"
- self.check(b, a)
- def test_02(self):
- b = "d.items()"
- a = "list(d.items())"
- self.check(b, a)
- def test_03(self):
- b = "d.values()"
- a = "list(d.values())"
- self.check(b, a)
- def test_04(self):
- b = "d.iterkeys()"
- a = "iter(d.keys())"
- self.check(b, a)
- def test_05(self):
- b = "d.iteritems()"
- a = "iter(d.items())"
- self.check(b, a)
- def test_06(self):
- b = "d.itervalues()"
- a = "iter(d.values())"
- self.check(b, a)
- def test_07(self):
- s = "list(d.keys())"
- self.unchanged(s)
- def test_08(self):
- s = "sorted(d.keys())"
- self.unchanged(s)
- def test_09(self):
- b = "iter(d.keys())"
- a = "iter(list(d.keys()))"
- self.check(b, a)
- def test_10(self):
- b = "foo(d.keys())"
- a = "foo(list(d.keys()))"
- self.check(b, a)
- def test_11(self):
- b = "for i in d.keys(): print i"
- a = "for i in list(d.keys()): print i"
- self.check(b, a)
- def test_12(self):
- b = "for i in d.iterkeys(): print i"
- a = "for i in d.keys(): print i"
- self.check(b, a)
- def test_13(self):
- b = "[i for i in d.keys()]"
- a = "[i for i in list(d.keys())]"
- self.check(b, a)
- def test_14(self):
- b = "[i for i in d.iterkeys()]"
- a = "[i for i in d.keys()]"
- self.check(b, a)
- def test_15(self):
- b = "(i for i in d.keys())"
- a = "(i for i in list(d.keys()))"
- self.check(b, a)
- def test_16(self):
- b = "(i for i in d.iterkeys())"
- a = "(i for i in d.keys())"
- self.check(b, a)
- def test_17(self):
- b = "iter(d.iterkeys())"
- a = "iter(d.keys())"
- self.check(b, a)
- def test_18(self):
- b = "list(d.iterkeys())"
- a = "list(d.keys())"
- self.check(b, a)
- def test_19(self):
- b = "sorted(d.iterkeys())"
- a = "sorted(d.keys())"
- self.check(b, a)
- def test_20(self):
- b = "foo(d.iterkeys())"
- a = "foo(iter(d.keys()))"
- self.check(b, a)
- def test_21(self):
- b = "print h.iterkeys().next()"
- a = "print iter(h.keys()).next()"
- self.check(b, a)
- def test_22(self):
- b = "print h.keys()[0]"
- a = "print list(h.keys())[0]"
- self.check(b, a)
- def test_23(self):
- b = "print list(h.iterkeys().next())"
- a = "print list(iter(h.keys()).next())"
- self.check(b, a)
- def test_24(self):
- b = "for x in h.keys()[0]: print x"
- a = "for x in list(h.keys())[0]: print x"
- self.check(b, a)
- def test_25(self):
- b = "d.viewkeys()"
- a = "d.keys()"
- self.check(b, a)
- def test_26(self):
- b = "d.viewitems()"
- a = "d.items()"
- self.check(b, a)
- def test_27(self):
- b = "d.viewvalues()"
- a = "d.values()"
- self.check(b, a)
- def test_28(self):
- b = "[i for i in d.viewkeys()]"
- a = "[i for i in d.keys()]"
- self.check(b, a)
- def test_29(self):
- b = "(i for i in d.viewkeys())"
- a = "(i for i in d.keys())"
- self.check(b, a)
- def test_30(self):
- b = "iter(d.viewkeys())"
- a = "iter(d.keys())"
- self.check(b, a)
- def test_31(self):
- b = "list(d.viewkeys())"
- a = "list(d.keys())"
- self.check(b, a)
- def test_32(self):
- b = "sorted(d.viewkeys())"
- a = "sorted(d.keys())"
- self.check(b, a)
- class Test_xrange(FixerTestCase):
- fixer = "xrange"
- def test_prefix_preservation(self):
- b = """x = xrange( 10 )"""
- a = """x = range( 10 )"""
- self.check(b, a)
- b = """x = xrange( 1 , 10 )"""
- a = """x = range( 1 , 10 )"""
- self.check(b, a)
- b = """x = xrange( 0 , 10 , 2 )"""
- a = """x = range( 0 , 10 , 2 )"""
- self.check(b, a)
- def test_single_arg(self):
- b = """x = xrange(10)"""
- a = """x = range(10)"""
- self.check(b, a)
- def test_two_args(self):
- b = """x = xrange(1, 10)"""
- a = """x = range(1, 10)"""
- self.check(b, a)
- def test_three_args(self):
- b = """x = xrange(0, 10, 2)"""
- a = """x = range(0, 10, 2)"""
- self.check(b, a)
- def test_wrap_in_list(self):
- b = """x = range(10, 3, 9)"""
- a = """x = list(range(10, 3, 9))"""
- self.check(b, a)
- b = """x = foo(range(10, 3, 9))"""
- a = """x = foo(list(range(10, 3, 9)))"""
- self.check(b, a)
- b = """x = range(10, 3, 9) + [4]"""
- a = """x = list(range(10, 3, 9)) + [4]"""
- self.check(b, a)
- b = """x = range(10)[::-1]"""
- a = """x = list(range(10))[::-1]"""
- self.check(b, a)
- b = """x = range(10) [3]"""
- a = """x = list(range(10)) [3]"""
- self.check(b, a)
- def test_xrange_in_for(self):
- b = """for i in xrange(10):\n j=i"""
- a = """for i in range(10):\n j=i"""
- self.check(b, a)
- b = """[i for i in xrange(10)]"""
- a = """[i for i in range(10)]"""
- self.check(b, a)
- def test_range_in_for(self):
- self.unchanged("for i in range(10): pass")
- self.unchanged("[i for i in range(10)]")
- def test_in_contains_test(self):
- self.unchanged("x in range(10, 3, 9)")
- def test_in_consuming_context(self):
- for call in fixer_util.consuming_calls:
- self.unchanged("a = %s(range(10))" % call)
- class Test_xrange_with_reduce(FixerTestCase):
- def setUp(self):
- super(Test_xrange_with_reduce, self).setUp(["xrange", "reduce"])
- def test_double_transform(self):
- b = """reduce(x, xrange(5))"""
- a = """from functools import reduce
- reduce(x, range(5))"""
- self.check(b, a)
- class Test_raw_input(FixerTestCase):
- fixer = "raw_input"
- def test_prefix_preservation(self):
- b = """x = raw_input( )"""
- a = """x = input( )"""
- self.check(b, a)
- b = """x = raw_input( '' )"""
- a = """x = input( '' )"""
- self.check(b, a)
- def test_1(self):
- b = """x = raw_input()"""
- a = """x = input()"""
- self.check(b, a)
- def test_2(self):
- b = """x = raw_input('')"""
- a = """x = input('')"""
- self.check(b, a)
- def test_3(self):
- b = """x = raw_input('prompt')"""
- a = """x = input('prompt')"""
- self.check(b, a)
- def test_4(self):
- b = """x = raw_input(foo(a) + 6)"""
- a = """x = input(foo(a) + 6)"""
- self.check(b, a)
- def test_5(self):
- b = """x = raw_input(invite).split()"""
- a = """x = input(invite).split()"""
- self.check(b, a)
- def test_6(self):
- b = """x = raw_input(invite) . split ()"""
- a = """x = input(invite) . split ()"""
- self.check(b, a)
- def test_8(self):
- b = "x = int(raw_input())"
- a = "x = int(input())"
- self.check(b, a)
- class Test_funcattrs(FixerTestCase):
- fixer = "funcattrs"
- attrs = ["closure", "doc", "name", "defaults", "code", "globals", "dict"]
- def test(self):
- for attr in self.attrs:
- b = "a.func_%s" % attr
- a = "a.__%s__" % attr
- self.check(b, a)
- b = "self.foo.func_%s.foo_bar" % attr
- a = "self.foo.__%s__.foo_bar" % attr
- self.check(b, a)
- def test_unchanged(self):
- for attr in self.attrs:
- s = "foo(func_%s + 5)" % attr
- self.unchanged(s)
- s = "f(foo.__%s__)" % attr
- self.unchanged(s)
- s = "f(foo.__%s__.foo)" % attr
- self.unchanged(s)
- class Test_xreadlines(FixerTestCase):
- fixer = "xreadlines"
- def test_call(self):
- b = "for x in f.xreadlines(): pass"
- a = "for x in f: pass"
- self.check(b, a)
- b = "for x in foo().xreadlines(): pass"
- a = "for x in foo(): pass"
- self.check(b, a)
- b = "for x in (5 + foo()).xreadlines(): pass"
- a = "for x in (5 + foo()): pass"
- self.check(b, a)
- def test_attr_ref(self):
- b = "foo(f.xreadlines + 5)"
- a = "foo(f.__iter__ + 5)"
- self.check(b, a)
- b = "foo(f().xreadlines + 5)"
- a = "foo(f().__iter__ + 5)"
- self.check(b, a)
- b = "foo((5 + f()).xreadlines + 5)"
- a = "foo((5 + f()).__iter__ + 5)"
- self.check(b, a)
- def test_unchanged(self):
- s = "for x in f.xreadlines(5): pass"
- self.unchanged(s)
- s = "for x in f.xreadlines(k=5): pass"
- self.unchanged(s)
- s = "for x in f.xreadlines(*k, **v): pass"
- self.unchanged(s)
- s = "foo(xreadlines)"
- self.unchanged(s)
- class ImportsFixerTests:
- def test_import_module(self):
- for old, new in self.modules.items():
- b = "import %s" % old
- a = "import %s" % new
- self.check(b, a)
- b = "import foo, %s, bar" % old
- a = "import foo, %s, bar" % new
- self.check(b, a)
- def test_import_from(self):
- for old, new in self.modules.items():
- b = "from %s import foo" % old
- a = "from %s import foo" % new
- self.check(b, a)
- b = "from %s import foo, bar" % old
- a = "from %s import foo, bar" % new
- self.check(b, a)
- b = "from %s import (yes, no)" % old
- a = "from %s import (yes, no)" % new
- self.check(b, a)
- def test_import_module_as(self):
- for old, new in self.modules.items():
- b = "import %s as foo_bar" % old
- a = "import %s as foo_bar" % new
- self.check(b, a)
- b = "import %s as foo_bar" % old
- a = "import %s as foo_bar" % new
- self.check(b, a)
- def test_import_from_as(self):
- for old, new in self.modules.items():
- b = "from %s import foo as bar" % old
- a = "from %s import foo as bar" % new
- self.check(b, a)
- def test_star(self):
- for old, new in self.modules.items():
- b = "from %s import *" % old
- a = "from %s import *" % new
- self.check(b, a)
- def test_import_module_usage(self):
- for old, new in self.modules.items():
- b = """
- import %s
- foo(%s.bar)
- """ % (old, old)
- a = """
- import %s
- foo(%s.bar)
- """ % (new, new)
- self.check(b, a)
- b = """
- from %s import x
- %s = 23
- """ % (old, old)
- a = """
- from %s import x
- %s = 23
- """ % (new, old)
- self.check(b, a)
- s = """
- def f():
- %s.method()
- """ % (old,)
- self.unchanged(s)
- # test nested usage
- b = """
- import %s
- %s.bar(%s.foo)
- """ % (old, old, old)
- a = """
- import %s
- %s.bar(%s.foo)
- """ % (new, new, new)
- self.check(b, a)
- b = """
- import %s
- x.%s
- """ % (old, old)
- a = """
- import %s
- x.%s
- """ % (new, old)
- self.check(b, a)
- class Test_imports(FixerTestCase, ImportsFixerTests):
- fixer = "imports"
- from ..fixes.fix_imports import MAPPING as modules
- def test_multiple_imports(self):
- b = """import urlparse, cStringIO"""
- a = """import urllib.parse, io"""
- self.check(b, a)
- def test_multiple_imports_as(self):
- b = """
- import copy_reg as bar, HTMLParser as foo, urlparse
- s = urlparse.spam(bar.foo())
- """
- a = """
- import copyreg as bar, html.parser as foo, urllib.parse
- s = urllib.parse.spam(bar.foo())
- """
- self.check(b, a)
- class Test_imports2(FixerTestCase, ImportsFixerTests):
- fixer = "imports2"
- from ..fixes.fix_imports2 import MAPPING as modules
- class Test_imports_fixer_order(FixerTestCase, ImportsFixerTests):
- def setUp(self):
- super(Test_imports_fixer_order, self).setUp(['imports', 'imports2'])
- from ..fixes.fix_imports2 import MAPPING as mapping2
- self.modules = mapping2.copy()
- from ..fixes.fix_imports import MAPPING as mapping1
- for key in ('dbhash', 'dumbdbm', 'dbm', 'gdbm'):
- self.modules[key] = mapping1[key]
- def test_after_local_imports_refactoring(self):
- for fix in ("imports", "imports2"):
- self.fixer = fix
- self.assert_runs_after("import")
- class Test_urllib(FixerTestCase):
- fixer = "urllib"
- from ..fixes.fix_urllib import MAPPING as modules
- def test_import_module(self):
- for old, changes in self.modules.items():
- b = "import %s" % old
- a = "import %s" % ", ".join(map(itemgetter(0), changes))
- self.check(b, a)
- def test_import_from(self):
- for old, changes in self.modules.items():
- all_members = []
- for new, members in changes:
- for member in members:
- all_members.append(member)
- b = "from %s import %s" % (old, member)
- a = "from %s import %s" % (new, member)
- self.check(b, a)
- s = "from foo import %s" % member
- self.unchanged(s)
- b = "from %s import %s" % (old, ", ".join(members))
- a = "from %s import %s" % (new, ", ".join(members))
- self.check(b, a)
- s = "from foo import %s" % ", ".join(members)
- self.unchanged(s)
- # test the breaking of a module into multiple replacements
- b = "from %s import %s" % (old, ", ".join(all_members))
- a = "\n".join(["from %s import %s" % (new, ", ".join(members))
- for (new, members) in changes])
- self.check(b, a)
- def test_import_module_as(self):
- for old in self.modules:
- s = "import %s as foo" % old
- self.warns_unchanged(s, "This module is now multiple modules")
- def test_import_from_as(self):
- for old, changes in self.modules.items():
- for new, members in changes:
- for member in members:
- b = "from %s import %s as foo_bar" % (old, member)
- a = "from %s import %s as foo_bar" % (new, member)
- self.check(b, a)
- b = "from %s import %s as blah, %s" % (old, member, member)
- a = "from %s import %s as blah, %s" % (new, member, member)
- self.check(b, a)
- def test_star(self):
- for old in self.modules:
- s = "from %s import *" % old
- self.warns_unchanged(s, "Cannot handle star imports")
- def test_indented(self):
- b = """
- def foo():
- from urllib import urlencode, urlopen
- """
- a = """
- def foo():
- from urllib.parse import urlencode
- from urllib.request import urlopen
- """
- self.check(b, a)
- b = """
- def foo():
- other()
- from urllib import urlencode, urlopen
- """
- a = """
- def foo():
- other()
- from urllib.parse import urlencode
- from urllib.request import urlopen
- """
- self.check(b, a)
- def test_single_import(self):
- b = "from urllib import getproxies"
- a = "from urllib.request import getproxies"
- self.check(b, a)
- def test_import_module_usage(self):
- for old, changes in self.modules.items():
- for new, members in changes:
- for member in members:
- new_import = ", ".join([n for (n, mems)
- in self.modules[old]])
- b = """
- import %s
- foo(%s.%s)
- """ % (old, old, member)
- a = """
- import %s
- foo(%s.%s)
- """ % (new_import, new, member)
- self.check(b, a)
- b = """
- import %s
- %s.%s(%s.%s)
- """ % (old, old, member, old, member)
- a = """
- import %s
- %s.%s(%s.%s)
- """ % (new_import, new, member, new, member)
- self.check(b, a)
- class Test_input(FixerTestCase):
- fixer = "input"
- def test_prefix_preservation(self):
- b = """x = input( )"""
- a = """x = eval(input( ))"""
- self.check(b, a)
- b = """x = input( '' )"""
- a = """x = eval(input( '' ))"""
- self.check(b, a)
- def test_trailing_comment(self):
- b = """x = input() # foo"""
- a = """x = eval(input()) # foo"""
- self.check(b, a)
- def test_idempotency(self):
- s = """x = eval(input())"""
- self.unchanged(s)
- s = """x = eval(input(''))"""
- self.unchanged(s)
- s = """x = eval(input(foo(5) + 9))"""
- self.unchanged(s)
- def test_1(self):
- b = """x = input()"""
- a = """x = eval(input())"""
- self.check(b, a)
- def test_2(self):
- b = """x = input('')"""
- a = """x = eval(input(''))"""
- self.check(b, a)
- def test_3(self):
- b = """x = input('prompt')"""
- a = """x = eval(input('prompt'))"""
- self.check(b, a)
- def test_4(self):
- b = """x = input(foo(5) + 9)"""
- a = """x = eval(input(foo(5) + 9))"""
- self.check(b, a)
- class Test_tuple_params(FixerTestCase):
- fixer = "tuple_params"
- def test_unchanged_1(self):
- s = """def foo(): pass"""
- self.unchanged(s)
- def test_unchanged_2(self):
- s = """def foo(a, b, c): pass"""
- self.unchanged(s)
- def test_unchanged_3(self):
- s = """def foo(a=3, b=4, c=5): pass"""
- self.unchanged(s)
- def test_1(self):
- b = """
- def foo(((a, b), c)):
- x = 5"""
- a = """
- def foo(xxx_todo_changeme):
- ((a, b), c) = xxx_todo_changeme
- x = 5"""
- self.check(b, a)
- def test_2(self):
- b = """
- def foo(((a, b), c), d):
- x = 5"""
- a = """
- def foo(xxx_todo_changeme, d):
- ((a, b), c) = xxx_todo_changeme
- x = 5"""
- self.check(b, a)
- def test_3(self):
- b = """
- def foo(((a, b), c), d) -> e:
- x = 5"""
- a = """
- def foo(xxx_todo_changeme, d) -> e:
- ((a, b), c) = xxx_todo_changeme
- x = 5"""
- self.check(b, a)
- def test_semicolon(self):
- b = """
- def foo(((a, b), c)): x = 5; y = 7"""
- a = """
- def foo(xxx_todo_changeme): ((a, b), c) = xxx_todo_changeme; x = 5; y = 7"""
- self.check(b, a)
- def test_keywords(self):
- b = """
- def foo(((a, b), c), d, e=5) -> z:
- x = 5"""
- a = """
- def foo(xxx_todo_changeme, d, e=5) -> z:
- ((a, b), c) = xxx_todo_changeme
- x = 5"""
- self.check(b, a)
- def test_varargs(self):
- b = """
- def foo(((a, b), c), d, *vargs, **kwargs) -> z:
- x = 5"""
- a = """
- def foo(xxx_todo_changeme, d, *vargs, **kwargs) -> z:
- ((a, b), c) = xxx_todo_changeme
- x = 5"""
- self.check(b, a)
- def test_multi_1(self):
- b = """
- def foo(((a, b), c), (d, e, f)) -> z:
- x = 5"""
- a = """
- def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z:
- ((a, b), c) = xxx_todo_changeme
- (d, e, f) = xxx_todo_changeme1
- x = 5"""
- self.check(b, a)
- def test_multi_2(self):
- b = """
- def foo(x, ((a, b), c), d, (e, f, g), y) -> z:
- x = 5"""
- a = """
- def foo(x, xxx_todo_changeme, d, xxx_todo_changeme1, y) -> z:
- ((a, b), c) = xxx_todo_changeme
- (e, f, g) = xxx_todo_changeme1
- x = 5"""
- self.check(b, a)
- def test_docstring(self):
- b = """
- def foo(((a, b), c), (d, e, f)) -> z:
- "foo foo foo foo"
- x = 5"""
- a = """
- def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z:
- "foo foo foo foo"
- ((a, b), c) = xxx_todo_changeme
- (d, e, f) = xxx_todo_changeme1
- x = 5"""
- self.check(b, a)
- def test_lambda_no_change(self):
- s = """lambda x: x + 5"""
- self.unchanged(s)
- def test_lambda_parens_single_arg(self):
- b = """lambda (x): x + 5"""
- a = """lambda x: x + 5"""
- self.check(b, a)
- b = """lambda(x): x + 5"""
- a = """lambda x: x + 5"""
- self.check(b, a)
- b = """lambda ((((x)))): x + 5"""
- a = """lambda x: x + 5"""
- self.check(b, a)
- b = """lambda((((x)))): x + 5"""
- a = """lambda x: x + 5"""
- self.check(b, a)
- def test_lambda_simple(self):
- b = """lambda (x, y): x + f(y)"""
- a = """lambda x_y: x_y[0] + f(x_y[1])"""
- self.check(b, a)
- b = """lambda(x, y): x + f(y)"""
- a = """lambda x_y: x_y[0] + f(x_y[1])"""
- self.check(b, a)
- b = """lambda (((x, y))): x + f(y)"""
- a = """lambda x_y: x_y[0] + f(x_y[1])"""
- self.check(b, a)
- b = """lambda(((x, y))): x + f(y)"""
- a = """lambda x_y: x_y[0] + f(x_y[1])"""
- self.check(b, a)
- def test_lambda_one_tuple(self):
- b = """lambda (x,): x + f(x)"""
- a = """lambda x1: x1[0] + f(x1[0])"""
- self.check(b, a)
- b = """lambda (((x,))): x + f(x)"""
- a = """lambda x1: x1[0] + f(x1[0])"""
- self.check(b, a)
- def test_lambda_simple_multi_use(self):
- b = """lambda (x, y): x + x + f(x) + x"""
- a = """lambda x_y: x_y[0] + x_y[0] + f(x_y[0]) + x_y[0]"""
- self.check(b, a)
- def test_lambda_simple_reverse(self):
- b = """lambda (x, y): y + x"""
- a = """lambda x_y: x_y[1] + x_y[0]"""
- self.check(b, a)
- def test_lambda_nested(self):
- b = """lambda (x, (y, z)): x + y + z"""
- a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]"""
- self.check(b, a)
- b = """lambda (((x, (y, z)))): x + y + z"""
- a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]"""
- self.check(b, a)
- def test_lambda_nested_multi_use(self):
- b = """lambda (x, (y, z)): x + y + f(y)"""
- a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + f(x_y_z[1][0])"""
- self.check(b, a)
- class Test_methodattrs(FixerTestCase):
- fixer = "methodattrs"
- attrs = ["func", "self", "class"]
- def test(self):
- for attr in self.attrs:
- b = "a.im_%s" % attr
- if attr == "class":
- a = "a.__self__.__class__"
- else:
- a = "a.__%s__" % attr
- self.check(b, a)
- b = "self.foo.im_%s.foo_bar" % attr
- if attr == "class":
- a = "self.foo.__self__.__class__.foo_bar"
- else:
- a = "self.foo.__%s__.foo_bar" % attr
- self.check(b, a)
- def test_unchanged(self):
- for attr in self.attrs:
- s = "foo(im_%s + 5)" % attr
- self.unchanged(s)
- s = "f(foo.__%s__)" % attr
- self.unchanged(s)
- s = "f(foo.__%s__.foo)" % attr
- self.unchanged(s)
- class Test_next(FixerTestCase):
- fixer = "next"
- def test_1(self):
- b = """it.next()"""
- a = """next(it)"""
- self.check(b, a)
- def test_2(self):
- b = """a.b.c.d.next()"""
- a = """next(a.b.c.d)"""
- self.check(b, a)
- def test_3(self):
- b = """(a + b).next()"""
- a = """next((a + b))"""
- self.check(b, a)
- def test_4(self):
- b = """a().next()"""
- a = """next(a())"""
- self.check(b, a)
- def test_5(self):
- b = """a().next() + b"""
- a = """next(a()) + b"""
- self.check(b, a)
- def test_6(self):
- b = """c( a().next() + b)"""
- a = """c( next(a()) + b)"""
- self.check(b, a)
- def test_prefix_preservation_1(self):
- b = """
- for a in b:
- foo(a)
- a.next()
- """
- a = """
- for a in b:
- foo(a)
- next(a)
- """
- self.check(b, a)
- def test_prefix_preservation_2(self):
- b = """
- for a in b:
- foo(a) # abc
- # def
- a.next()
- """
- a = """
- for a in b:
- foo(a) # abc
- # def
- next(a)
- """
- self.check(b, a)
- def test_prefix_preservation_3(self):
- b = """
- next = 5
- for a in b:
- foo(a)
- a.next()
- """
- a = """
- next = 5
- for a in b:
- foo(a)
- a.__next__()
- """
- self.check(b, a, ignore_warnings=True)
- def test_prefix_preservation_4(self):
- b = """
- next = 5
- for a in b:
- foo(a) # abc
- # def
- a.next()
- """
- a = """
- next = 5
- for a in b:
- foo(a) # abc
- # def
- a.__next__()
- """
- self.check(b, a, ignore_warnings=True)
- def test_prefix_preservation_5(self):
- b = """
- next = 5
- for a in b:
- foo(foo(a), # abc
- a.next())
- """
- a = """
- next = 5
- for a in b:
- foo(foo(a), # abc
- a.__next__())
- """
- self.check(b, a, ignore_warnings=True)
- def test_prefix_preservation_6(self):
- b = """
- for a in b:
- foo(foo(a), # abc
- a.next())
- """
- a = """
- for a in b:
- foo(foo(a), # abc
- next(a))
- """
- self.check(b, a)
- def test_method_1(self):
- b = """
- class A:
- def next(self):
- pass
- """
- a = """
- class A:
- def __next__(self):
- pass
- """
- self.check(b, a)
- def test_method_2(self):
- b = """
- class A(object):
- def next(self):
- pass
- """
- a = """
- class A(object):
- def __next__(self):
- pass
- """
- self.check(b, a)
- def test_method_3(self):
- b = """
- class A:
- def next(x):
- pass
- """
- a = """
- class A:
- def __next__(x):
- pass
- """
- self.check(b, a)
- def test_method_4(self):
- b = """
- class A:
- def __init__(self, foo):
- self.foo = foo
- def next(self):
- pass
- def __iter__(self):
- return self
- """
- a = """
- class A:
- def __init__(self, foo):
- self.foo = foo
- def __next__(self):
- pass
- def __iter__(self):
- return self
- """
- self.check(b, a)
- def test_method_unchanged(self):
- s = """
- class A:
- def next(self, a, b):
- pass
- """
- self.unchanged(s)
- def test_shadowing_assign_simple(self):
- s = """
- next = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_assign_tuple_1(self):
- s = """
- (next, a) = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_assign_tuple_2(self):
- s = """
- (a, (b, (next, c)), a) = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_assign_list_1(self):
- s = """
- [next, a] = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_assign_list_2(self):
- s = """
- [a, [b, [next, c]], a] = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_builtin_assign(self):
- s = """
- def foo():
- __builtin__.next = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_builtin_assign_in_tuple(self):
- s = """
- def foo():
- (a, __builtin__.next) = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_builtin_assign_in_list(self):
- s = """
- def foo():
- [a, __builtin__.next] = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_assign_to_next(self):
- s = """
- def foo():
- A.next = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.unchanged(s)
- def test_assign_to_next_in_tuple(self):
- s = """
- def foo():
- (a, A.next) = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.unchanged(s)
- def test_assign_to_next_in_list(self):
- s = """
- def foo():
- [a, A.next] = foo
- class A:
- def next(self, a, b):
- pass
- """
- self.unchanged(s)
- def test_shadowing_import_1(self):
- s = """
- import foo.bar as next
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_import_2(self):
- s = """
- import bar, bar.foo as next
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_import_3(self):
- s = """
- import bar, bar.foo as next, baz
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_import_from_1(self):
- s = """
- from x import next
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_import_from_2(self):
- s = """
- from x.a import next
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_import_from_3(self):
- s = """
- from x import a, next, b
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_import_from_4(self):
- s = """
- from x.a import a, next, b
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_funcdef_1(self):
- s = """
- def next(a):
- pass
- class A:
- def next(self, a, b):
- pass
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_funcdef_2(self):
- b = """
- def next(a):
- pass
- class A:
- def next(self):
- pass
- it.next()
- """
- a = """
- def next(a):
- pass
- class A:
- def __next__(self):
- pass
- it.__next__()
- """
- self.warns(b, a, "Calls to builtin next() possibly shadowed")
- def test_shadowing_global_1(self):
- s = """
- def f():
- global next
- next = 5
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_global_2(self):
- s = """
- def f():
- global a, next, b
- next = 5
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_for_simple(self):
- s = """
- for next in it():
- pass
- b = 5
- c = 6
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_for_tuple_1(self):
- s = """
- for next, b in it():
- pass
- b = 5
- c = 6
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_shadowing_for_tuple_2(self):
- s = """
- for a, (next, c), b in it():
- pass
- b = 5
- c = 6
- """
- self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
- def test_noncall_access_1(self):
- b = """gnext = g.next"""
- a = """gnext = g.__next__"""
- self.check(b, a)
- def test_noncall_access_2(self):
- b = """f(g.next + 5)"""
- a = """f(g.__next__ + 5)"""
- self.check(b, a)
- def test_noncall_access_3(self):
- b = """f(g().next + 5)"""
- a = """f(g().__next__ + 5)"""
- self.check(b, a)
- class Test_nonzero(FixerTestCase):
- fixer = "nonzero"
- def test_1(self):
- b = """
- class A:
- def __nonzero__(self):
- pass
- """
- a = """
- class A:
- def __bool__(self):
- pass
- """
- self.check(b, a)
- def test_2(self):
- b = """
- class A(object):
- def __nonzero__(self):
- pass
- """
- a = """
- class A(object):
- def __bool__(self):
- pass
- """
- self.check(b, a)
- def test_unchanged_1(self):
- s = """
- class A(object):
- def __bool__(self):
- pass
- """
- self.unchanged(s)
- def test_unchanged_2(self):
- s = """
- class A(object):
- def __nonzero__(self, a):
- pass
- """
- self.unchanged(s)
- def test_unchanged_func(self):
- s = """
- def __nonzero__(self):
- pass
- """
- self.unchanged(s)
- class Test_numliterals(FixerTestCase):
- fixer = "numliterals"
- def test_octal_1(self):
- b = """0755"""
- a = """0o755"""
- self.check(b, a)
- def test_long_int_1(self):
- b = """a = 12L"""
- a = """a = 12"""
- self.check(b, a)
- def test_long_int_2(self):
- b = """a = 12l"""
- a = """a = 12"""
- self.check(b, a)
- def test_long_hex(self):
- b = """b = 0x12l"""
- a = """b = 0x12"""
- self.check(b, a)
- def test_comments_and_spacing(self):
- b = """b = 0x12L"""
- a = """b = 0x12"""
- self.check(b, a)
- b = """b = 0755 # spam"""
- a = """b = 0o755 # spam"""
- self.check(b, a)
- def test_unchanged_int(self):
- s = """5"""
- self.unchanged(s)
- def test_unchanged_float(self):
- s = """5.0"""
- self.unchanged(s)
- def test_unchanged_octal(self):
- s = """0o755"""
- self.unchanged(s)
- def test_unchanged_hex(self):
- s = """0xABC"""
- self.unchanged(s)
- def test_unchanged_exp(self):
- s = """5.0e10"""
- self.unchanged(s)
- def test_unchanged_complex_int(self):
- s = """5 + 4j"""
- self.unchanged(s)
- def test_unchanged_complex_float(self):
- s = """5.4 + 4.9j"""
- self.unchanged(s)
- def test_unchanged_complex_bare(self):
- s = """4j"""
- self.unchanged(s)
- s = """4.4j"""
- self.unchanged(s)
- class Test_renames(FixerTestCase):
- fixer = "renames"
- modules = {"sys": ("maxint", "maxsize"),
- }
- def test_import_from(self):
- for mod, (old, new) in list(self.modules.items()):
- b = "from %s import %s" % (mod, old)
- a = "from %s import %s" % (mod, new)
- self.check(b, a)
- s = "from foo import %s" % old
- self.unchanged(s)
- def test_import_from_as(self):
- for mod, (old, new) in list(self.modules.items()):
- b = "from %s import %s as foo_bar" % (mod, old)
- a = "from %s import %s as foo_bar" % (mod, new)
- self.check(b, a)
- def test_import_module_usage(self):
- for mod, (old, new) in list(self.modules.items()):
- b = """
- import %s
- foo(%s, %s.%s)
- """ % (mod, mod, mod, old)
- a = """
- import %s
- foo(%s, %s.%s)
- """ % (mod, mod, mod, new)
- self.check(b, a)
- def XXX_test_from_import_usage(self):
- # not implemented yet
- for mod, (old, new) in list(self.modules.items()):
- b = """
- from %s import %s
- foo(%s, %s)
- """ % (mod, old, mod, old)
- a = """
- from %s import %s
- foo(%s, %s)
- """ % (mod, new, mod, new)
- self.check(b, a)
- class Test_unicode(FixerTestCase):
- fixer = "unicode"
- def test_whitespace(self):
- b = """unicode( x)"""
- a = """str( x)"""
- self.check(b, a)
- b = """ unicode(x )"""
- a = """ str(x )"""
- self.check(b, a)
- b = """ u'h'"""
- a = """ 'h'"""
- self.check(b, a)
- def test_unicode_call(self):
- b = """unicode(x, y, z)"""
- a = """str(x, y, z)"""
- self.check(b, a)
- def test_unichr(self):
- b = """unichr(u'h')"""
- a = """chr('h')"""
- self.check(b, a)
- def test_unicode_literal_1(self):
- b = '''u"x"'''
- a = '''"x"'''
- self.check(b, a)
- def test_unicode_literal_2(self):
- b = """ur'x'"""
- a = """r'x'"""
- self.check(b, a)
- def test_unicode_literal_3(self):
- b = """UR'''x''' """
- a = """R'''x''' """
- self.check(b, a)
- def test_native_literal_escape_u(self):
- b = r"""'\\\u20ac\U0001d121\\u20ac'"""
- a = r"""'\\\\u20ac\\U0001d121\\u20ac'"""
- self.check(b, a)
- b = r"""r'\\\u20ac\U0001d121\\u20ac'"""
- a = r"""r'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- def test_bytes_literal_escape_u(self):
- b = r"""b'\\\u20ac\U0001d121\\u20ac'"""
- a = r"""b'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- b = r"""br'\\\u20ac\U0001d121\\u20ac'"""
- a = r"""br'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- def test_unicode_literal_escape_u(self):
- b = r"""u'\\\u20ac\U0001d121\\u20ac'"""
- a = r"""'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- b = r"""ur'\\\u20ac\U0001d121\\u20ac'"""
- a = r"""r'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- def test_native_unicode_literal_escape_u(self):
- f = 'from __future__ import unicode_literals\n'
- b = f + r"""'\\\u20ac\U0001d121\\u20ac'"""
- a = f + r"""'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- b = f + r"""r'\\\u20ac\U0001d121\\u20ac'"""
- a = f + r"""r'\\\u20ac\U0001d121\\u20ac'"""
- self.check(b, a)
- class Test_filter(FixerTestCase):
- fixer = "filter"
- def test_prefix_preservation(self):
- b = """x = filter( foo, 'abc' )"""
- a = """x = list(filter( foo, 'abc' ))"""
- self.check(b, a)
- b = """x = filter( None , 'abc' )"""
- a = """x = [_f for _f in 'abc' if _f]"""
- self.check(b, a)
- def test_filter_basic(self):
- b = """x = filter(None, 'abc')"""
- a = """x = [_f for _f in 'abc' if _f]"""
- self.check(b, a)
- b = """x = len(filter(f, 'abc'))"""
- a = """x = len(list(filter(f, 'abc')))"""
- self.check(b, a)
- b = """x = filter(lambda x: x%2 == 0, range(10))"""
- a = """x = [x for x in range(10) if x%2 == 0]"""
- self.check(b, a)
- # Note the parens around x
- b = """x = filter(lambda (x): x%2 == 0, range(10))"""
- a = """x = [x for x in range(10) if x%2 == 0]"""
- self.check(b, a)
- # bpo-38871
- b = """filter(lambda x: True if x > 2 else False, [1, 2, 3])"""
- a = """[x for x in [1, 2, 3] if (True if x > 2 else False)]"""
- self.check(b, a)
- def test_filter_trailers(self):
- b = """x = filter(None, 'abc')[0]"""
- a = """x = [_f for _f in 'abc' if _f][0]"""
- self.check(b, a)
- b = """x = len(filter(f, 'abc')[0])"""
- a = """x = len(list(filter(f, 'abc'))[0])"""
- self.check(b, a)
- b = """x = filter(lambda x: x%2 == 0, range(10))[0]"""
- a = """x = [x for x in range(10) if x%2 == 0][0]"""
- self.check(b, a)
- # Note the parens around x
- b = """x = filter(lambda (x): x%2 == 0, range(10))[0]"""
- a = """x = [x for x in range(10) if x%2 == 0][0]"""
- self.check(b, a)
- def test_filter_nochange(self):
- a = """b.join(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """(a + foo(5)).join(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """iter(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """list(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """list(filter(f, 'abc'))[0]"""
- self.unchanged(a)
- a = """set(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """set(filter(f, 'abc')).pop()"""
- self.unchanged(a)
- a = """tuple(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """any(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """all(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """sum(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """sorted(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """sorted(filter(f, 'abc'), key=blah)"""
- self.unchanged(a)
- a = """sorted(filter(f, 'abc'), key=blah)[0]"""
- self.unchanged(a)
- a = """enumerate(filter(f, 'abc'))"""
- self.unchanged(a)
- a = """enumerate(filter(f, 'abc'), start=1)"""
- self.unchanged(a)
- a = """for i in filter(f, 'abc'): pass"""
- self.unchanged(a)
- a = """[x for x in filter(f, 'abc')]"""
- self.unchanged(a)
- a = """(x for x in filter(f, 'abc'))"""
- self.unchanged(a)
- def test_future_builtins(self):
- a = "from future_builtins import spam, filter; filter(f, 'ham')"
- self.unchanged(a)
- b = """from future_builtins import spam; x = filter(f, 'abc')"""
- a = """from future_builtins import spam; x = list(filter(f, 'abc'))"""
- self.check(b, a)
- a = "from future_builtins import *; filter(f, 'ham')"
- self.unchanged(a)
- class Test_map(FixerTestCase):
- fixer = "map"
- def check(self, b, a):
- self.unchanged("from future_builtins import map; " + b, a)
- super(Test_map, self).check(b, a)
- def test_prefix_preservation(self):
- b = """x = map( f, 'abc' )"""
- a = """x = list(map( f, 'abc' ))"""
- self.check(b, a)
- def test_map_trailers(self):
- b = """x = map(f, 'abc')[0]"""
- a = """x = list(map(f, 'abc'))[0]"""
- self.check(b, a)
- b = """x = map(None, l)[0]"""
- a = """x = list(l)[0]"""
- self.check(b, a)
- b = """x = map(lambda x:x, l)[0]"""
- a = """x = [x for x in l][0]"""
- self.check(b, a)
- b = """x = map(f, 'abc')[0][1]"""
- a = """x = list(map(f, 'abc'))[0][1]"""
- self.check(b, a)
- def test_trailing_comment(self):
- b = """x = map(f, 'abc') # foo"""
- a = """x = list(map(f, 'abc')) # foo"""
- self.check(b, a)
- def test_None_with_multiple_arguments(self):
- s = """x = map(None, a, b, c)"""
- self.warns_unchanged(s, "cannot convert map(None, ...) with "
- "multiple arguments")
- def test_map_basic(self):
- b = """x = map(f, 'abc')"""
- a = """x = list(map(f, 'abc'))"""
- self.check(b, a)
- b = """x = len(map(f, 'abc', 'def'))"""
- a = """x = len(list(map(f, 'abc', 'def')))"""
- self.check(b, a)
- b = """x = map(None, 'abc')"""
- a = """x = list('abc')"""
- self.check(b, a)
- b = """x = map(lambda x: x+1, range(4))"""
- a = """x = [x+1 for x in range(4)]"""
- self.check(b, a)
- # Note the parens around x
- b = """x = map(lambda (x): x+1, range(4))"""
- a = """x = [x+1 for x in range(4)]"""
- self.check(b, a)
- b = """
- foo()
- # foo
- map(f, x)
- """
- a = """
- foo()
- # foo
- list(map(f, x))
- """
- self.warns(b, a, "You should use a for loop here")
- def test_map_nochange(self):
- a = """b.join(map(f, 'abc'))"""
- self.unchanged(a)
- a = """(a + foo(5)).join(map(f, 'abc'))"""
- self.unchanged(a)
- a = """iter(map(f, 'abc'))"""
- self.unchanged(a)
- a = """list(map(f, 'abc'))"""
- self.unchanged(a)
- a = """list(map(f, 'abc'))[0]"""
- self.unchanged(a)
- a = """set(map(f, 'abc'))"""
- self.unchanged(a)
- a = """set(map(f, 'abc')).pop()"""
- self.unchanged(a)
- a = """tuple(map(f, 'abc'))"""
- self.unchanged(a)
- a = """any(map(f, 'abc'))"""
- self.unchanged(a)
- a = """all(map(f, 'abc'))"""
- self.unchanged(a)
- a = """sum(map(f, 'abc'))"""
- self.unchanged(a)
- a = """sorted(map(f, 'abc'))"""
- self.unchanged(a)
- a = """sorted(map(f, 'abc'), key=blah)"""
- self.unchanged(a)
- a = """sorted(map(f, 'abc'), key=blah)[0]"""
- self.unchanged(a)
- a = """enumerate(map(f, 'abc'))"""
- self.unchanged(a)
- a = """enumerate(map(f, 'abc'), start=1)"""
- self.unchanged(a)
- a = """for i in map(f, 'abc'): pass"""
- self.unchanged(a)
- a = """[x for x in map(f, 'abc')]"""
- self.unchanged(a)
- a = """(x for x in map(f, 'abc'))"""
- self.unchanged(a)
- def test_future_builtins(self):
- a = "from future_builtins import spam, map, eggs; map(f, 'ham')"
- self.unchanged(a)
- b = """from future_builtins import spam, eggs; x = map(f, 'abc')"""
- a = """from future_builtins import spam, eggs; x = list(map(f, 'abc'))"""
- self.check(b, a)
- a = "from future_builtins import *; map(f, 'ham')"
- self.unchanged(a)
- class Test_zip(FixerTestCase):
- fixer = "zip"
- def check(self, b, a):
- self.unchanged("from future_builtins import zip; " + b, a)
- super(Test_zip, self).check(b, a)
- def test_zip_basic(self):
- b = """x = zip()"""
- a = """x = list(zip())"""
- self.check(b, a)
- b = """x = zip(a, b, c)"""
- a = """x = list(zip(a, b, c))"""
- self.check(b, a)
- b = """x = len(zip(a, b))"""
- a = """x = len(list(zip(a, b)))"""
- self.check(b, a)
- def test_zip_trailers(self):
- b = """x = zip(a, b, c)[0]"""
- a = """x = list(zip(a, b, c))[0]"""
- self.check(b, a)
- b = """x = zip(a, b, c)[0][1]"""
- a = """x = list(zip(a, b, c))[0][1]"""
- self.check(b, a)
- def test_zip_nochange(self):
- a = """b.join(zip(a, b))"""
- self.unchanged(a)
- a = """(a + foo(5)).join(zip(a, b))"""
- self.unchanged(a)
- a = """iter(zip(a, b))"""
- self.unchanged(a)
- a = """list(zip(a, b))"""
- self.unchanged(a)
- a = """list(zip(a, b))[0]"""
- self.unchanged(a)
- a = """set(zip(a, b))"""
- self.unchanged(a)
- a = """set(zip(a, b)).pop()"""
- self.unchanged(a)
- a = """tuple(zip(a, b))"""
- self.unchanged(a)
- a = """any(zip(a, b))"""
- self.unchanged(a)
- a = """all(zip(a, b))"""
- self.unchanged(a)
- a = """sum(zip(a, b))"""
- self.unchanged(a)
- a = """sorted(zip(a, b))"""
- self.unchanged(a)
- a = """sorted(zip(a, b), key=blah)"""
- self.unchanged(a)
- a = """sorted(zip(a, b), key=blah)[0]"""
- self.unchanged(a)
- a = """enumerate(zip(a, b))"""
- self.unchanged(a)
- a = """enumerate(zip(a, b), start=1)"""
- self.unchanged(a)
- a = """for i in zip(a, b): pass"""
- self.unchanged(a)
- a = """[x for x in zip(a, b)]"""
- self.unchanged(a)
- a = """(x for x in zip(a, b))"""
- self.unchanged(a)
- def test_future_builtins(self):
- a = "from future_builtins import spam, zip, eggs; zip(a, b)"
- self.unchanged(a)
- b = """from future_builtins import spam, eggs; x = zip(a, b)"""
- a = """from future_builtins import spam, eggs; x = list(zip(a, b))"""
- self.check(b, a)
- a = "from future_builtins import *; zip(a, b)"
- self.unchanged(a)
- class Test_standarderror(FixerTestCase):
- fixer = "standarderror"
- def test(self):
- b = """x = StandardError()"""
- a = """x = Exception()"""
- self.check(b, a)
- b = """x = StandardError(a, b, c)"""
- a = """x = Exception(a, b, c)"""
- self.check(b, a)
- b = """f(2 + StandardError(a, b, c))"""
- a = """f(2 + Exception(a, b, c))"""
- self.check(b, a)
- class Test_types(FixerTestCase):
- fixer = "types"
- def test_basic_types_convert(self):
- b = """types.StringType"""
- a = """bytes"""
- self.check(b, a)
- b = """types.DictType"""
- a = """dict"""
- self.check(b, a)
- b = """types . IntType"""
- a = """int"""
- self.check(b, a)
- b = """types.ListType"""
- a = """list"""
- self.check(b, a)
- b = """types.LongType"""
- a = """int"""
- self.check(b, a)
- b = """types.NoneType"""
- a = """type(None)"""
- self.check(b, a)
- b = "types.StringTypes"
- a = "(str,)"
- self.check(b, a)
- class Test_idioms(FixerTestCase):
- fixer = "idioms"
- def test_while(self):
- b = """while 1: foo()"""
- a = """while True: foo()"""
- self.check(b, a)
- b = """while 1: foo()"""
- a = """while True: foo()"""
- self.check(b, a)
- b = """
- while 1:
- foo()
- """
- a = """
- while True:
- foo()
- """
- self.check(b, a)
- def test_while_unchanged(self):
- s = """while 11: foo()"""
- self.unchanged(s)
- s = """while 0: foo()"""
- self.unchanged(s)
- s = """while foo(): foo()"""
- self.unchanged(s)
- s = """while []: foo()"""
- self.unchanged(s)
- def test_eq_simple(self):
- b = """type(x) == T"""
- a = """isinstance(x, T)"""
- self.check(b, a)
- b = """if type(x) == T: pass"""
- a = """if isinstance(x, T): pass"""
- self.check(b, a)
- def test_eq_reverse(self):
- b = """T == type(x)"""
- a = """isinstance(x, T)"""
- self.check(b, a)
- b = """if T == type(x): pass"""
- a = """if isinstance(x, T): pass"""
- self.check(b, a)
- def test_eq_expression(self):
- b = """type(x+y) == d.get('T')"""
- a = """isinstance(x+y, d.get('T'))"""
- self.check(b, a)
- b = """type( x + y) == d.get('T')"""
- a = """isinstance(x + y, d.get('T'))"""
- self.check(b, a)
- def test_is_simple(self):
- b = """type(x) is T"""
- a = """isinstance(x, T)"""
- self.check(b, a)
- b = """if type(x) is T: pass"""
- a = """if isinstance(x, T): pass"""
- self.check(b, a)
- def test_is_reverse(self):
- b = """T is type(x)"""
- a = """isinstance(x, T)"""
- self.check(b, a)
- b = """if T is type(x): pass"""
- a = """if isinstance(x, T): pass"""
- self.check(b, a)
- def test_is_expression(self):
- b = """type(x+y) is d.get('T')"""
- a = """isinstance(x+y, d.get('T'))"""
- self.check(b, a)
- b = """type( x + y) is d.get('T')"""
- a = """isinstance(x + y, d.get('T'))"""
- self.check(b, a)
- def test_is_not_simple(self):
- b = """type(x) is not T"""
- a = """not isinstance(x, T)"""
- self.check(b, a)
- b = """if type(x) is not T: pass"""
- a = """if not isinstance(x, T): pass"""
- self.check(b, a)
- def test_is_not_reverse(self):
- b = """T is not type(x)"""
- a = """not isinstance(x, T)"""
- self.check(b, a)
- b = """if T is not type(x): pass"""
- a = """if not isinstance(x, T): pass"""
- self.check(b, a)
- def test_is_not_expression(self):
- b = """type(x+y) is not d.get('T')"""
- a = """not isinstance(x+y, d.get('T'))"""
- self.check(b, a)
- b = """type( x + y) is not d.get('T')"""
- a = """not isinstance(x + y, d.get('T'))"""
- self.check(b, a)
- def test_ne_simple(self):
- b = """type(x) != T"""
- a = """not isinstance(x, T)"""
- self.check(b, a)
- b = """if type(x) != T: pass"""
- a = """if not isinstance(x, T): pass"""
- self.check(b, a)
- def test_ne_reverse(self):
- b = """T != type(x)"""
- a = """not isinstance(x, T)"""
- self.check(b, a)
- b = """if T != type(x): pass"""
- a = """if not isinstance(x, T): pass"""
- self.check(b, a)
- def test_ne_expression(self):
- b = """type(x+y) != d.get('T')"""
- a = """not isinstance(x+y, d.get('T'))"""
- self.check(b, a)
- b = """type( x + y) != d.get('T')"""
- a = """not isinstance(x + y, d.get('T'))"""
- self.check(b, a)
- def test_type_unchanged(self):
- a = """type(x).__name__"""
- self.unchanged(a)
- def test_sort_list_call(self):
- b = """
- v = list(t)
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(t)
- foo(v)
- """
- self.check(b, a)
- b = """
- v = list(foo(b) + d)
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(foo(b) + d)
- foo(v)
- """
- self.check(b, a)
- b = """
- while x:
- v = list(t)
- v.sort()
- foo(v)
- """
- a = """
- while x:
- v = sorted(t)
- foo(v)
- """
- self.check(b, a)
- b = """
- v = list(t)
- # foo
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(t)
- # foo
- foo(v)
- """
- self.check(b, a)
- b = r"""
- v = list( t)
- v.sort()
- foo(v)
- """
- a = r"""
- v = sorted( t)
- foo(v)
- """
- self.check(b, a)
- b = r"""
- try:
- m = list(s)
- m.sort()
- except: pass
- """
- a = r"""
- try:
- m = sorted(s)
- except: pass
- """
- self.check(b, a)
- b = r"""
- try:
- m = list(s)
- # foo
- m.sort()
- except: pass
- """
- a = r"""
- try:
- m = sorted(s)
- # foo
- except: pass
- """
- self.check(b, a)
- b = r"""
- m = list(s)
- # more comments
- m.sort()"""
- a = r"""
- m = sorted(s)
- # more comments"""
- self.check(b, a)
- def test_sort_simple_expr(self):
- b = """
- v = t
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(t)
- foo(v)
- """
- self.check(b, a)
- b = """
- v = foo(b)
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(foo(b))
- foo(v)
- """
- self.check(b, a)
- b = """
- v = b.keys()
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(b.keys())
- foo(v)
- """
- self.check(b, a)
- b = """
- v = foo(b) + d
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(foo(b) + d)
- foo(v)
- """
- self.check(b, a)
- b = """
- while x:
- v = t
- v.sort()
- foo(v)
- """
- a = """
- while x:
- v = sorted(t)
- foo(v)
- """
- self.check(b, a)
- b = """
- v = t
- # foo
- v.sort()
- foo(v)
- """
- a = """
- v = sorted(t)
- # foo
- foo(v)
- """
- self.check(b, a)
- b = r"""
- v = t
- v.sort()
- foo(v)
- """
- a = r"""
- v = sorted(t)
- foo(v)
- """
- self.check(b, a)
- def test_sort_unchanged(self):
- s = """
- v = list(t)
- w.sort()
- foo(w)
- """
- self.unchanged(s)
- s = """
- v = list(t)
- v.sort(u)
- foo(v)
- """
- self.unchanged(s)
- class Test_basestring(FixerTestCase):
- fixer = "basestring"
- def test_basestring(self):
- b = """isinstance(x, basestring)"""
- a = """isinstance(x, str)"""
- self.check(b, a)
- class Test_buffer(FixerTestCase):
- fixer = "buffer"
- def test_buffer(self):
- b = """x = buffer(y)"""
- a = """x = memoryview(y)"""
- self.check(b, a)
- def test_slicing(self):
- b = """buffer(y)[4:5]"""
- a = """memoryview(y)[4:5]"""
- self.check(b, a)
- class Test_future(FixerTestCase):
- fixer = "future"
- def test_future(self):
- b = """from __future__ import braces"""
- a = """"""
- self.check(b, a)
- b = """# comment\nfrom __future__ import braces"""
- a = """# comment\n"""
- self.check(b, a)
- b = """from __future__ import braces\n# comment"""
- a = """\n# comment"""
- self.check(b, a)
- def test_run_order(self):
- self.assert_runs_after('print')
- class Test_itertools(FixerTestCase):
- fixer = "itertools"
- def checkall(self, before, after):
- # Because we need to check with and without the itertools prefix
- # and on each of the three functions, these loops make it all
- # much easier
- for i in ('itertools.', ''):
- for f in ('map', 'filter', 'zip'):
- b = before %(i+'i'+f)
- a = after %(f)
- self.check(b, a)
- def test_0(self):
- # A simple example -- test_1 covers exactly the same thing,
- # but it's not quite as clear.
- b = "itertools.izip(a, b)"
- a = "zip(a, b)"
- self.check(b, a)
- def test_1(self):
- b = """%s(f, a)"""
- a = """%s(f, a)"""
- self.checkall(b, a)
- def test_qualified(self):
- b = """itertools.ifilterfalse(a, b)"""
- a = """itertools.filterfalse(a, b)"""
- self.check(b, a)
- b = """itertools.izip_longest(a, b)"""
- a = """itertools.zip_longest(a, b)"""
- self.check(b, a)
- def test_2(self):
- b = """ifilterfalse(a, b)"""
- a = """filterfalse(a, b)"""
- self.check(b, a)
- b = """izip_longest(a, b)"""
- a = """zip_longest(a, b)"""
- self.check(b, a)
- def test_space_1(self):
- b = """ %s(f, a)"""
- a = """ %s(f, a)"""
- self.checkall(b, a)
- def test_space_2(self):
- b = """ itertools.ifilterfalse(a, b)"""
- a = """ itertools.filterfalse(a, b)"""
- self.check(b, a)
- b = """ itertools.izip_longest(a, b)"""
- a = """ itertools.zip_longest(a, b)"""
- self.check(b, a)
- def test_run_order(self):
- self.assert_runs_after('map', 'zip', 'filter')
- class Test_itertools_imports(FixerTestCase):
- fixer = 'itertools_imports'
- def test_reduced(self):
- b = "from itertools import imap, izip, foo"
- a = "from itertools import foo"
- self.check(b, a)
- b = "from itertools import bar, imap, izip, foo"
- a = "from itertools import bar, foo"
- self.check(b, a)
- b = "from itertools import chain, imap, izip"
- a = "from itertools import chain"
- self.check(b, a)
- def test_comments(self):
- b = "#foo\nfrom itertools import imap, izip"
- a = "#foo\n"
- self.check(b, a)
- def test_none(self):
- b = "from itertools import imap, izip"
- a = ""
- self.check(b, a)
- b = "from itertools import izip"
- a = ""
- self.check(b, a)
- def test_import_as(self):
- b = "from itertools import izip, bar as bang, imap"
- a = "from itertools import bar as bang"
- self.check(b, a)
- b = "from itertools import izip as _zip, imap, bar"
- a = "from itertools import bar"
- self.check(b, a)
- b = "from itertools import imap as _map"
- a = ""
- self.check(b, a)
- b = "from itertools import imap as _map, izip as _zip"
- a = ""
- self.check(b, a)
- s = "from itertools import bar as bang"
- self.unchanged(s)
- def test_ifilter_and_zip_longest(self):
- for name in "filterfalse", "zip_longest":
- b = "from itertools import i%s" % (name,)
- a = "from itertools import %s" % (name,)
- self.check(b, a)
- b = "from itertools import imap, i%s, foo" % (name,)
- a = "from itertools import %s, foo" % (name,)
- self.check(b, a)
- b = "from itertools import bar, i%s, foo" % (name,)
- a = "from itertools import bar, %s, foo" % (name,)
- self.check(b, a)
- def test_import_star(self):
- s = "from itertools import *"
- self.unchanged(s)
- def test_unchanged(self):
- s = "from itertools import foo"
- self.unchanged(s)
- class Test_import(FixerTestCase):
- fixer = "import"
- def setUp(self):
- super(Test_import, self).setUp()
- # Need to replace fix_import's exists method
- # so we can check that it's doing the right thing
- self.files_checked = []
- self.present_files = set()
- self.always_exists = True
- def fake_exists(name):
- self.files_checked.append(name)
- return self.always_exists or (name in self.present_files)
- from lib2to3.fixes import fix_import
- fix_import.exists = fake_exists
- def tearDown(self):
- from lib2to3.fixes import fix_import
- fix_import.exists = os.path.exists
- def check_both(self, b, a):
- self.always_exists = True
- super(Test_import, self).check(b, a)
- self.always_exists = False
- super(Test_import, self).unchanged(b)
- def test_files_checked(self):
- def p(path):
- # Takes a unix path and returns a path with correct separators
- return os.path.pathsep.join(path.split("/"))
- self.always_exists = False
- self.present_files = set(['__init__.py'])
- expected_extensions = ('.py', os.path.sep, '.pyc', '.so', '.sl', '.pyd')
- names_to_test = (p("/spam/eggs.py"), "ni.py", p("../../shrubbery.py"))
- for name in names_to_test:
- self.files_checked = []
- self.filename = name
- self.unchanged("import jam")
- if os.path.dirname(name):
- name = os.path.dirname(name) + '/jam'
- else:
- name = 'jam'
- expected_checks = set(name + ext for ext in expected_extensions)
- expected_checks.add("__init__.py")
- self.assertEqual(set(self.files_checked), expected_checks)
- def test_not_in_package(self):
- s = "import bar"
- self.always_exists = False
- self.present_files = set(["bar.py"])
- self.unchanged(s)
- def test_with_absolute_import_enabled(self):
- s = "from __future__ import absolute_import\nimport bar"
- self.always_exists = False
- self.present_files = set(["__init__.py", "bar.py"])
- self.unchanged(s)
- def test_in_package(self):
- b = "import bar"
- a = "from . import bar"
- self.always_exists = False
- self.present_files = set(["__init__.py", "bar.py"])
- self.check(b, a)
- def test_import_from_package(self):
- b = "import bar"
- a = "from . import bar"
- self.always_exists = False
- self.present_files = set(["__init__.py", "bar" + os.path.sep])
- self.check(b, a)
- def test_already_relative_import(self):
- s = "from . import bar"
- self.unchanged(s)
- def test_comments_and_indent(self):
- b = "import bar # Foo"
- a = "from . import bar # Foo"
- self.check(b, a)
- def test_from(self):
- b = "from foo import bar, baz"
- a = "from .foo import bar, baz"
- self.check_both(b, a)
- b = "from foo import bar"
- a = "from .foo import bar"
- self.check_both(b, a)
- b = "from foo import (bar, baz)"
- a = "from .foo import (bar, baz)"
- self.check_both(b, a)
- def test_dotted_from(self):
- b = "from green.eggs import ham"
- a = "from .green.eggs import ham"
- self.check_both(b, a)
- def test_from_as(self):
- b = "from green.eggs import ham as spam"
- a = "from .green.eggs import ham as spam"
- self.check_both(b, a)
- def test_import(self):
- b = "import foo"
- a = "from . import foo"
- self.check_both(b, a)
- b = "import foo, bar"
- a = "from . import foo, bar"
- self.check_both(b, a)
- b = "import foo, bar, x"
- a = "from . import foo, bar, x"
- self.check_both(b, a)
- b = "import x, y, z"
- a = "from . import x, y, z"
- self.check_both(b, a)
- def test_import_as(self):
- b = "import foo as x"
- a = "from . import foo as x"
- self.check_both(b, a)
- b = "import a as b, b as c, c as d"
- a = "from . import a as b, b as c, c as d"
- self.check_both(b, a)
- def test_local_and_absolute(self):
- self.always_exists = False
- self.present_files = set(["foo.py", "__init__.py"])
- s = "import foo, bar"
- self.warns_unchanged(s, "absolute and local imports together")
- def test_dotted_import(self):
- b = "import foo.bar"
- a = "from . import foo.bar"
- self.check_both(b, a)
- def test_dotted_import_as(self):
- b = "import foo.bar as bang"
- a = "from . import foo.bar as bang"
- self.check_both(b, a)
- def test_prefix(self):
- b = """
- # prefix
- import foo.bar
- """
- a = """
- # prefix
- from . import foo.bar
- """
- self.check_both(b, a)
- class Test_set_literal(FixerTestCase):
- fixer = "set_literal"
- def test_basic(self):
- b = """set([1, 2, 3])"""
- a = """{1, 2, 3}"""
- self.check(b, a)
- b = """set((1, 2, 3))"""
- a = """{1, 2, 3}"""
- self.check(b, a)
- b = """set((1,))"""
- a = """{1}"""
- self.check(b, a)
- b = """set([1])"""
- self.check(b, a)
- b = """set((a, b))"""
- a = """{a, b}"""
- self.check(b, a)
- b = """set([a, b])"""
- self.check(b, a)
- b = """set((a*234, f(args=23)))"""
- a = """{a*234, f(args=23)}"""
- self.check(b, a)
- b = """set([a*23, f(23)])"""
- a = """{a*23, f(23)}"""
- self.check(b, a)
- b = """set([a-234**23])"""
- a = """{a-234**23}"""
- self.check(b, a)
- def test_listcomps(self):
- b = """set([x for x in y])"""
- a = """{x for x in y}"""
- self.check(b, a)
- b = """set([x for x in y if x == m])"""
- a = """{x for x in y if x == m}"""
- self.check(b, a)
- b = """set([x for x in y for a in b])"""
- a = """{x for x in y for a in b}"""
- self.check(b, a)
- b = """set([f(x) - 23 for x in y])"""
- a = """{f(x) - 23 for x in y}"""
- self.check(b, a)
- def test_whitespace(self):
- b = """set( [1, 2])"""
- a = """{1, 2}"""
- self.check(b, a)
- b = """set([1 , 2])"""
- a = """{1 , 2}"""
- self.check(b, a)
- b = """set([ 1 ])"""
- a = """{ 1 }"""
- self.check(b, a)
- b = """set( [1] )"""
- a = """{1}"""
- self.check(b, a)
- b = """set([ 1, 2 ])"""
- a = """{ 1, 2 }"""
- self.check(b, a)
- b = """set([x for x in y ])"""
- a = """{x for x in y }"""
- self.check(b, a)
- b = """set(
- [1, 2]
- )
- """
- a = """{1, 2}\n"""
- self.check(b, a)
- def test_comments(self):
- b = """set((1, 2)) # Hi"""
- a = """{1, 2} # Hi"""
- self.check(b, a)
- # This isn't optimal behavior, but the fixer is optional.
- b = """
- # Foo
- set( # Bar
- (1, 2)
- )
- """
- a = """
- # Foo
- {1, 2}
- """
- self.check(b, a)
- def test_unchanged(self):
- s = """set()"""
- self.unchanged(s)
- s = """set(a)"""
- self.unchanged(s)
- s = """set(a, b, c)"""
- self.unchanged(s)
- # Don't transform generators because they might have to be lazy.
- s = """set(x for x in y)"""
- self.unchanged(s)
- s = """set(x for x in y if z)"""
- self.unchanged(s)
- s = """set(a*823-23**2 + f(23))"""
- self.unchanged(s)
- class Test_sys_exc(FixerTestCase):
- fixer = "sys_exc"
- def test_0(self):
- b = "sys.exc_type"
- a = "sys.exc_info()[0]"
- self.check(b, a)
- def test_1(self):
- b = "sys.exc_value"
- a = "sys.exc_info()[1]"
- self.check(b, a)
- def test_2(self):
- b = "sys.exc_traceback"
- a = "sys.exc_info()[2]"
- self.check(b, a)
- def test_3(self):
- b = "sys.exc_type # Foo"
- a = "sys.exc_info()[0] # Foo"
- self.check(b, a)
- def test_4(self):
- b = "sys. exc_type"
- a = "sys. exc_info()[0]"
- self.check(b, a)
- def test_5(self):
- b = "sys .exc_type"
- a = "sys .exc_info()[0]"
- self.check(b, a)
- class Test_paren(FixerTestCase):
- fixer = "paren"
- def test_0(self):
- b = """[i for i in 1, 2 ]"""
- a = """[i for i in (1, 2) ]"""
- self.check(b, a)
- def test_1(self):
- b = """[i for i in 1, 2, ]"""
- a = """[i for i in (1, 2,) ]"""
- self.check(b, a)
- def test_2(self):
- b = """[i for i in 1, 2 ]"""
- a = """[i for i in (1, 2) ]"""
- self.check(b, a)
- def test_3(self):
- b = """[i for i in 1, 2 if i]"""
- a = """[i for i in (1, 2) if i]"""
- self.check(b, a)
- def test_4(self):
- b = """[i for i in 1, 2 ]"""
- a = """[i for i in (1, 2) ]"""
- self.check(b, a)
- def test_5(self):
- b = """(i for i in 1, 2)"""
- a = """(i for i in (1, 2))"""
- self.check(b, a)
- def test_6(self):
- b = """(i for i in 1 ,2 if i)"""
- a = """(i for i in (1 ,2) if i)"""
- self.check(b, a)
- def test_unchanged_0(self):
- s = """[i for i in (1, 2)]"""
- self.unchanged(s)
- def test_unchanged_1(self):
- s = """[i for i in foo()]"""
- self.unchanged(s)
- def test_unchanged_2(self):
- s = """[i for i in (1, 2) if nothing]"""
- self.unchanged(s)
- def test_unchanged_3(self):
- s = """(i for i in (1, 2))"""
- self.unchanged(s)
- def test_unchanged_4(self):
- s = """[i for i in m]"""
- self.unchanged(s)
- class Test_metaclass(FixerTestCase):
- fixer = 'metaclass'
- def test_unchanged(self):
- self.unchanged("class X(): pass")
- self.unchanged("class X(object): pass")
- self.unchanged("class X(object1, object2): pass")
- self.unchanged("class X(object1, object2, object3): pass")
- self.unchanged("class X(metaclass=Meta): pass")
- self.unchanged("class X(b, arg=23, metclass=Meta): pass")
- self.unchanged("class X(b, arg=23, metaclass=Meta, other=42): pass")
- s = """
- class X:
- def __metaclass__(self): pass
- """
- self.unchanged(s)
- s = """
- class X:
- a[23] = 74
- """
- self.unchanged(s)
- def test_comments(self):
- b = """
- class X:
- # hi
- __metaclass__ = AppleMeta
- """
- a = """
- class X(metaclass=AppleMeta):
- # hi
- pass
- """
- self.check(b, a)
- b = """
- class X:
- __metaclass__ = Meta
- # Bedtime!
- """
- a = """
- class X(metaclass=Meta):
- pass
- # Bedtime!
- """
- self.check(b, a)
- def test_meta(self):
- # no-parent class, odd body
- b = """
- class X():
- __metaclass__ = Q
- pass
- """
- a = """
- class X(metaclass=Q):
- pass
- """
- self.check(b, a)
- # one parent class, no body
- b = """class X(object): __metaclass__ = Q"""
- a = """class X(object, metaclass=Q): pass"""
- self.check(b, a)
- # one parent, simple body
- b = """
- class X(object):
- __metaclass__ = Meta
- bar = 7
- """
- a = """
- class X(object, metaclass=Meta):
- bar = 7
- """
- self.check(b, a)
- b = """
- class X:
- __metaclass__ = Meta; x = 4; g = 23
- """
- a = """
- class X(metaclass=Meta):
- x = 4; g = 23
- """
- self.check(b, a)
- # one parent, simple body, __metaclass__ last
- b = """
- class X(object):
- bar = 7
- __metaclass__ = Meta
- """
- a = """
- class X(object, metaclass=Meta):
- bar = 7
- """
- self.check(b, a)
- # redefining __metaclass__
- b = """
- class X():
- __metaclass__ = A
- __metaclass__ = B
- bar = 7
- """
- a = """
- class X(metaclass=B):
- bar = 7
- """
- self.check(b, a)
- # multiple inheritance, simple body
- b = """
- class X(clsA, clsB):
- __metaclass__ = Meta
- bar = 7
- """
- a = """
- class X(clsA, clsB, metaclass=Meta):
- bar = 7
- """
- self.check(b, a)
- # keywords in the class statement
- b = """class m(a, arg=23): __metaclass__ = Meta"""
- a = """class m(a, arg=23, metaclass=Meta): pass"""
- self.check(b, a)
- b = """
- class X(expression(2 + 4)):
- __metaclass__ = Meta
- """
- a = """
- class X(expression(2 + 4), metaclass=Meta):
- pass
- """
- self.check(b, a)
- b = """
- class X(expression(2 + 4), x**4):
- __metaclass__ = Meta
- """
- a = """
- class X(expression(2 + 4), x**4, metaclass=Meta):
- pass
- """
- self.check(b, a)
- b = """
- class X:
- __metaclass__ = Meta
- save.py = 23
- """
- a = """
- class X(metaclass=Meta):
- save.py = 23
- """
- self.check(b, a)
- class Test_getcwdu(FixerTestCase):
- fixer = 'getcwdu'
- def test_basic(self):
- b = """os.getcwdu"""
- a = """os.getcwd"""
- self.check(b, a)
- b = """os.getcwdu()"""
- a = """os.getcwd()"""
- self.check(b, a)
- b = """meth = os.getcwdu"""
- a = """meth = os.getcwd"""
- self.check(b, a)
- b = """os.getcwdu(args)"""
- a = """os.getcwd(args)"""
- self.check(b, a)
- def test_comment(self):
- b = """os.getcwdu() # Foo"""
- a = """os.getcwd() # Foo"""
- self.check(b, a)
- def test_unchanged(self):
- s = """os.getcwd()"""
- self.unchanged(s)
- s = """getcwdu()"""
- self.unchanged(s)
- s = """os.getcwdb()"""
- self.unchanged(s)
- def test_indentation(self):
- b = """
- if 1:
- os.getcwdu()
- """
- a = """
- if 1:
- os.getcwd()
- """
- self.check(b, a)
- def test_multilation(self):
- b = """os .getcwdu()"""
- a = """os .getcwd()"""
- self.check(b, a)
- b = """os. getcwdu"""
- a = """os. getcwd"""
- self.check(b, a)
- b = """os.getcwdu ( )"""
- a = """os.getcwd ( )"""
- self.check(b, a)
- class Test_operator(FixerTestCase):
- fixer = "operator"
- def test_operator_isCallable(self):
- b = "operator.isCallable(x)"
- a = "callable(x)"
- self.check(b, a)
- def test_operator_sequenceIncludes(self):
- b = "operator.sequenceIncludes(x, y)"
- a = "operator.contains(x, y)"
- self.check(b, a)
- b = "operator .sequenceIncludes(x, y)"
- a = "operator .contains(x, y)"
- self.check(b, a)
- b = "operator. sequenceIncludes(x, y)"
- a = "operator. contains(x, y)"
- self.check(b, a)
- def test_operator_isSequenceType(self):
- b = "operator.isSequenceType(x)"
- a = "import collections.abc\nisinstance(x, collections.abc.Sequence)"
- self.check(b, a)
- def test_operator_isMappingType(self):
- b = "operator.isMappingType(x)"
- a = "import collections.abc\nisinstance(x, collections.abc.Mapping)"
- self.check(b, a)
- def test_operator_isNumberType(self):
- b = "operator.isNumberType(x)"
- a = "import numbers\nisinstance(x, numbers.Number)"
- self.check(b, a)
- def test_operator_repeat(self):
- b = "operator.repeat(x, n)"
- a = "operator.mul(x, n)"
- self.check(b, a)
- b = "operator .repeat(x, n)"
- a = "operator .mul(x, n)"
- self.check(b, a)
- b = "operator. repeat(x, n)"
- a = "operator. mul(x, n)"
- self.check(b, a)
- def test_operator_irepeat(self):
- b = "operator.irepeat(x, n)"
- a = "operator.imul(x, n)"
- self.check(b, a)
- b = "operator .irepeat(x, n)"
- a = "operator .imul(x, n)"
- self.check(b, a)
- b = "operator. irepeat(x, n)"
- a = "operator. imul(x, n)"
- self.check(b, a)
- def test_bare_isCallable(self):
- s = "isCallable(x)"
- t = "You should use 'callable(x)' here."
- self.warns_unchanged(s, t)
- def test_bare_sequenceIncludes(self):
- s = "sequenceIncludes(x, y)"
- t = "You should use 'operator.contains(x, y)' here."
- self.warns_unchanged(s, t)
- def test_bare_operator_isSequenceType(self):
- s = "isSequenceType(z)"
- t = "You should use 'isinstance(z, collections.abc.Sequence)' here."
- self.warns_unchanged(s, t)
- def test_bare_operator_isMappingType(self):
- s = "isMappingType(x)"
- t = "You should use 'isinstance(x, collections.abc.Mapping)' here."
- self.warns_unchanged(s, t)
- def test_bare_operator_isNumberType(self):
- s = "isNumberType(y)"
- t = "You should use 'isinstance(y, numbers.Number)' here."
- self.warns_unchanged(s, t)
- def test_bare_operator_repeat(self):
- s = "repeat(x, n)"
- t = "You should use 'operator.mul(x, n)' here."
- self.warns_unchanged(s, t)
- def test_bare_operator_irepeat(self):
- s = "irepeat(y, 187)"
- t = "You should use 'operator.imul(y, 187)' here."
- self.warns_unchanged(s, t)
- class Test_exitfunc(FixerTestCase):
- fixer = "exitfunc"
- def test_simple(self):
- b = """
- import sys
- sys.exitfunc = my_atexit
- """
- a = """
- import sys
- import atexit
- atexit.register(my_atexit)
- """
- self.check(b, a)
- def test_names_import(self):
- b = """
- import sys, crumbs
- sys.exitfunc = my_func
- """
- a = """
- import sys, crumbs, atexit
- atexit.register(my_func)
- """
- self.check(b, a)
- def test_complex_expression(self):
- b = """
- import sys
- sys.exitfunc = do(d)/a()+complex(f=23, g=23)*expression
- """
- a = """
- import sys
- import atexit
- atexit.register(do(d)/a()+complex(f=23, g=23)*expression)
- """
- self.check(b, a)
- def test_comments(self):
- b = """
- import sys # Foo
- sys.exitfunc = f # Blah
- """
- a = """
- import sys
- import atexit # Foo
- atexit.register(f) # Blah
- """
- self.check(b, a)
- b = """
- import apples, sys, crumbs, larry # Pleasant comments
- sys.exitfunc = func
- """
- a = """
- import apples, sys, crumbs, larry, atexit # Pleasant comments
- atexit.register(func)
- """
- self.check(b, a)
- def test_in_a_function(self):
- b = """
- import sys
- def f():
- sys.exitfunc = func
- """
- a = """
- import sys
- import atexit
- def f():
- atexit.register(func)
- """
- self.check(b, a)
- def test_no_sys_import(self):
- b = """sys.exitfunc = f"""
- a = """atexit.register(f)"""
- msg = ("Can't find sys import; Please add an atexit import at the "
- "top of your file.")
- self.warns(b, a, msg)
- def test_unchanged(self):
- s = """f(sys.exitfunc)"""
- self.unchanged(s)
- class Test_asserts(FixerTestCase):
- fixer = "asserts"
- def test_deprecated_names(self):
- tests = [
- ('self.assert_(True)', 'self.assertTrue(True)'),
- ('self.assertEquals(2, 2)', 'self.assertEqual(2, 2)'),
- ('self.assertNotEquals(2, 3)', 'self.assertNotEqual(2, 3)'),
- ('self.assertAlmostEquals(2, 3)', 'self.assertAlmostEqual(2, 3)'),
- ('self.assertNotAlmostEquals(2, 8)', 'self.assertNotAlmostEqual(2, 8)'),
- ('self.failUnlessEqual(2, 2)', 'self.assertEqual(2, 2)'),
- ('self.failIfEqual(2, 3)', 'self.assertNotEqual(2, 3)'),
- ('self.failUnlessAlmostEqual(2, 3)', 'self.assertAlmostEqual(2, 3)'),
- ('self.failIfAlmostEqual(2, 8)', 'self.assertNotAlmostEqual(2, 8)'),
- ('self.failUnless(True)', 'self.assertTrue(True)'),
- ('self.failUnlessRaises(foo)', 'self.assertRaises(foo)'),
- ('self.failIf(False)', 'self.assertFalse(False)'),
- ]
- for b, a in tests:
- self.check(b, a)
- def test_variants(self):
- b = 'eq = self.assertEquals'
- a = 'eq = self.assertEqual'
- self.check(b, a)
- b = 'self.assertEquals(2, 3, msg="fail")'
- a = 'self.assertEqual(2, 3, msg="fail")'
- self.check(b, a)
- b = 'self.assertEquals(2, 3, msg="fail") # foo'
- a = 'self.assertEqual(2, 3, msg="fail") # foo'
- self.check(b, a)
- b = 'self.assertEquals (2, 3)'
- a = 'self.assertEqual (2, 3)'
- self.check(b, a)
- b = ' self.assertEquals (2, 3)'
- a = ' self.assertEqual (2, 3)'
- self.check(b, a)
- b = 'with self.failUnlessRaises(Explosion): explode()'
- a = 'with self.assertRaises(Explosion): explode()'
- self.check(b, a)
- b = 'with self.failUnlessRaises(Explosion) as cm: explode()'
- a = 'with self.assertRaises(Explosion) as cm: explode()'
- self.check(b, a)
- def test_unchanged(self):
- self.unchanged('self.assertEqualsOnSaturday')
- self.unchanged('self.assertEqualsOnSaturday(3, 5)')
|