1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115 |
- using System.Reflection;
- using System.Text;
- using System.Text.RegularExpressions;
- using Xunit.Abstractions;
- namespace Terminal.Gui.ViewsTests;
- public class TextViewTests
- {
- private static TextView _textView;
- private readonly ITestOutputHelper _output;
- public TextViewTests (ITestOutputHelper output) { _output = output; }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void AllowsReturn_Setting_To_True_Changes_Multiline_To_True_If_It_Is_False ()
- {
- Assert.True (_textView.AllowsReturn);
- Assert.True (_textView.Multiline);
- Assert.Equal (4, _textView.TabWidth);
- Assert.True (_textView.AllowsTab);
- _textView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (
- Environment.NewLine + "TAB to jump between text fields.",
- _textView.Text
- );
- _textView.AllowsReturn = false;
- Assert.False (_textView.AllowsReturn);
- Assert.False (_textView.Multiline);
- Assert.Equal (0, _textView.TabWidth);
- Assert.False (_textView.AllowsTab);
- _textView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (
- Environment.NewLine + "TAB to jump between text fields.",
- _textView.Text
- );
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void AllowsTab_Setting_To_True_Changes_TabWidth_To_Default_If_It_Is_Zero ()
- {
- _textView.TabWidth = 0;
- Assert.Equal (0, _textView.TabWidth);
- Assert.True (_textView.AllowsTab);
- Assert.True (_textView.AllowsReturn);
- Assert.True (_textView.Multiline);
- _textView.AllowsTab = true;
- Assert.True (_textView.AllowsTab);
- Assert.Equal (4, _textView.TabWidth);
- Assert.True (_textView.AllowsReturn);
- Assert.True (_textView.Multiline);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void BackTab_Test_Follow_By_Tab ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Iteration += (s, a) =>
- {
- int width = _textView.Viewport.Width - 1;
- Assert.Equal (30, width + 1);
- Assert.Equal (10, _textView.Height);
- _textView.Text = "";
- for (var i = 0; i < 100; i++)
- {
- _textView.Text += "\t";
- }
- var col = 100;
- int tabWidth = _textView.TabWidth;
- int leftCol = _textView.LeftColumn;
- _textView.MoveEnd ();
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- while (col > 0)
- {
- col--;
- _textView.NewKeyDownEvent (Key.Tab.WithShift);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- Application.Top.Remove (_textView);
- Application.RequestStop ();
- };
- Application.Run (top);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void CanFocus_False_Wont_Focus_With_Mouse ()
- {
- Toplevel top = new ();
- var tv = new TextView { Width = Dim.Fill (), CanFocus = false, ReadOnly = true, Text = "some text" };
- var fv = new FrameView
- {
- Width = Dim.Fill (), Height = Dim.Fill (), CanFocus = false, Title = "I shouldn't get focus"
- };
- fv.Add (tv);
- top.Add (fv);
- Application.Begin (top);
- Assert.False (tv.CanFocus);
- Assert.False (tv.HasFocus);
- Assert.False (fv.CanFocus);
- Assert.False (fv.HasFocus);
- tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
- Assert.Empty (tv.SelectedText);
- Assert.False (tv.CanFocus);
- Assert.False (tv.HasFocus);
- Assert.False (fv.CanFocus);
- Assert.False (fv.HasFocus);
- fv.CanFocus = true;
- tv.CanFocus = true;
- tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
- Assert.Equal ("some ", tv.SelectedText);
- Assert.True (tv.CanFocus);
- Assert.True (tv.HasFocus);
- Assert.True (fv.CanFocus);
- Assert.True (fv.HasFocus);
- fv.CanFocus = false;
- tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked });
- Assert.Equal ("some ", tv.SelectedText); // Setting CanFocus to false don't change the SelectedText
- Assert.True (tv.CanFocus); // v2: CanFocus is not longer automatically changed
- Assert.False (tv.HasFocus);
- Assert.False (fv.CanFocus);
- Assert.False (fv.HasFocus);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Changing_Selection_Or_CursorPosition_Update_SelectedLength_And_SelectedText ()
- {
- _textView.SelectionStartColumn = 2;
- _textView.SelectionStartRow = 0;
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (2, _textView.SelectedLength);
- Assert.Equal ("TA", _textView.SelectedText);
- _textView.CursorPosition = new Point (20, 0);
- Assert.Equal (2, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (18, _textView.SelectedLength);
- Assert.Equal ("B to jump between ", _textView.SelectedText);
- }
- [Fact]
- public void CloseFile_Throws_If_FilePath_Is_Null ()
- {
- var tv = new TextView ();
- Assert.Throws<ArgumentNullException> (() => tv.CloseFile ());
- }
- [Fact]
- public void ContentsChanged_Event_Fires_ClearHistoryChanges ()
- {
- var eventcount = 0;
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 50, Height = 10, Text = text };
- tv.ContentsChanged += (s, e) => { eventcount++; };
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- var expectedEventCount = 1; // for ENTER key
- Assert.Equal (expectedEventCount, eventcount);
- tv.ClearHistoryChanges ();
- expectedEventCount = 2;
- Assert.Equal (expectedEventCount, eventcount);
- }
- [Fact]
- public void ContentsChanged_Event_Fires_LoadStream_By_Calling_HistoryText_Clear ()
- {
- var eventcount = 0;
- var tv = new TextView { Width = 50, Height = 10 };
- tv.ContentsChanged += (s, e) => { eventcount++; };
- var text = "This is the first line.\r\nThis is the second line.\r\n";
- tv.Load (new MemoryStream (Encoding.ASCII.GetBytes (text)));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- Assert.Equal (1, eventcount);
- }
- [Fact]
- [AutoInitShutdown]
- public void ContentsChanged_Event_Fires_On_Init ()
- {
- Application.Iteration += (s, a) => { Application.RequestStop (); };
- var expectedRow = 0;
- var expectedCol = 0;
- var eventcount = 0;
- var tv = new TextView { Width = 50, Height = 10 };
- tv.ContentsChanged += (s, e) =>
- {
- eventcount++;
- Assert.Equal (expectedRow, e.Row);
- Assert.Equal (expectedCol, e.Col);
- };
- var top = new Toplevel ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (1, eventcount);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void ContentsChanged_Event_Fires_On_InsertText ()
- {
- var eventcount = 0;
- var tv = new TextView { Width = 50, Height = 10 };
- tv.CursorPosition = Point.Empty;
- tv.ContentsChanged += (s, e) => { eventcount++; };
- Assert.Equal (0, eventcount);
- tv.InsertText ("a");
- Assert.Equal (1, eventcount);
- tv.CursorPosition = Point.Empty;
- tv.InsertText ("bcd");
- Assert.Equal (4, eventcount);
- tv.InsertText ("e");
- Assert.Equal (5, eventcount);
- tv.InsertText ("\n");
- Assert.Equal (6, eventcount);
- tv.InsertText ("1234");
- Assert.Equal (10, eventcount);
- }
- [Fact]
- public void ContentsChanged_Event_Fires_On_LoadFile_By_Calling_HistoryText_Clear ()
- {
- var eventcount = 0;
- var tv = new TextView { Width = 50, Height = 10 };
- tv.BeginInit ();
- tv.EndInit ();
- tv.ContentsChanged += (s, e) => { eventcount++; };
- var fileName = "textview.txt";
- File.WriteAllText (fileName, "This is the first line.\r\nThis is the second line.\r\n");
- tv.Load (fileName);
- Assert.Equal (1, eventcount);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- }
- [Fact]
- [AutoInitShutdown]
- public void ContentsChanged_Event_Fires_On_Set_Text ()
- {
- Application.Iteration += (s, a) => { Application.RequestStop (); };
- var eventcount = 0;
- var expectedRow = 0;
- var expectedCol = 0;
- var tv = new TextView
- {
- Width = 50,
- Height = 10,
- // you'd think col would be 3, but it's 0 because TextView sets
- // row/col = 0 when you set Text
- Text = "abc"
- };
- tv.ContentsChanged += (s, e) =>
- {
- eventcount++;
- Assert.Equal (expectedRow, e.Row);
- Assert.Equal (expectedCol, e.Col);
- };
- Assert.Equal ("abc", tv.Text);
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Assert.Equal (1, eventcount); // for Initialize
- expectedCol = 0;
- tv.Text = "defg";
- Assert.Equal (2, eventcount); // for set Text = "defg"
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void ContentsChanged_Event_Fires_On_Typing ()
- {
- Application.Iteration += (s, a) => { Application.RequestStop (); };
- var eventcount = 0;
- var expectedRow = 0;
- var expectedCol = 0;
- var tv = new TextView { Width = 50, Height = 10 };
- tv.ContentsChanged += (s, e) =>
- {
- eventcount++;
- Assert.Equal (expectedRow, e.Row);
- Assert.Equal (expectedCol, e.Col);
- };
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Assert.Equal (1, eventcount); // for Initialize
- expectedCol = 0;
- tv.Text = "ay";
- Assert.Equal (2, eventcount);
- expectedCol = 1;
- tv.NewKeyDownEvent (Key.Y.WithShift);
- Assert.Equal (3, eventcount);
- Assert.Equal ("Yay", tv.Text);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void ContentsChanged_Event_Fires_On_Undo_Redo ()
- {
- var eventcount = 0;
- var expectedEventCount = 0;
- _textView.ContentsChanged += (s, e) => { eventcount++; };
- expectedEventCount++;
- _textView.Text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount++;
- Assert.True (_textView.NewKeyDownEvent (Key.Enter));
- Assert.Equal (expectedEventCount, eventcount);
- // Undo
- expectedEventCount++;
- Assert.True (_textView.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (expectedEventCount, eventcount);
- // Redo
- expectedEventCount++;
- Assert.True (_textView.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (expectedEventCount, eventcount);
- // Undo
- expectedEventCount++;
- Assert.True (_textView.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (expectedEventCount, eventcount);
- // Redo
- expectedEventCount++;
- Assert.True (_textView.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (expectedEventCount, eventcount);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void ContentsChanged_Event_Fires_Using_Copy_Or_Cut_Tests ()
- {
- var eventcount = 0;
- _textView.ContentsChanged += (s, e) => { eventcount++; };
- var expectedEventCount = 1;
- // reset
- _textView.Text = TextViewTestsAutoInitShutdown.Txt;
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 3;
- Copy_Or_Cut_And_Paste_With_No_Selection ();
- Assert.Equal (expectedEventCount, eventcount);
- // reset
- expectedEventCount += 1;
- _textView.Text = TextViewTestsAutoInitShutdown.Txt;
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 3;
- Copy_Or_Cut_And_Paste_With_Selection ();
- Assert.Equal (expectedEventCount, eventcount);
- // reset
- expectedEventCount += 1;
- _textView.Text = TextViewTestsAutoInitShutdown.Txt;
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 1;
- Copy_Or_Cut_Not_Null_If_Has_Selection ();
- Assert.Equal (expectedEventCount, eventcount);
- // reset
- expectedEventCount += 1;
- _textView.Text = TextViewTestsAutoInitShutdown.Txt;
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 1;
- Copy_Or_Cut_Null_If_No_Selection ();
- Assert.Equal (expectedEventCount, eventcount);
- // reset
- expectedEventCount += 1;
- _textView.Text = TextViewTestsAutoInitShutdown.Txt;
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 4;
- Copy_Without_Selection ();
- Assert.Equal (expectedEventCount, eventcount);
- // reset
- expectedEventCount += 1;
- _textView.Text = TextViewTestsAutoInitShutdown.Txt;
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 4;
- Copy_Without_Selection ();
- Assert.Equal (expectedEventCount, eventcount);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void ContentsChanged_Event_Fires_Using_Kill_Delete_Tests ()
- {
- var eventcount = 0;
- _textView.ContentsChanged += (s, e) => { eventcount++; };
- var expectedEventCount = 1;
- Kill_Delete_WordForward ();
- Assert.Equal (expectedEventCount, eventcount); // for Initialize
- expectedEventCount += 1;
- Kill_Delete_WordBackward ();
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 2;
- Kill_To_End_Delete_Forwards_Copy_To_The_Clipboard_And_Paste ();
- Assert.Equal (expectedEventCount, eventcount);
- expectedEventCount += 2;
- Kill_To_Start_Delete_Backwards_Copy_To_The_Clipboard_And_Paste ();
- Assert.Equal (expectedEventCount, eventcount);
- }
- [Fact]
- [AutoInitShutdown]
- public void ContentsChanged_Event_NoFires_On_CursorPosition ()
- {
- var eventcount = 0;
- var tv = new TextView { Width = 50, Height = 10 };
- tv.ContentsChanged += (s, e) => { eventcount++; };
- Assert.Equal (0, eventcount);
- tv.CursorPosition = Point.Empty;
- Assert.Equal (0, eventcount);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Copy_Or_Cut_And_Paste_With_No_Selection ()
- {
- _textView.SelectionStartColumn = 20;
- _textView.SelectionStartRow = 0;
- _textView.CursorPosition = new Point (24, 0);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("text", _textView.SelectedText);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.SelectionStartColumn = 0;
- _textView.SelectionStartRow = 0;
- Assert.Equal (new Point (24, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- _textView.IsSelecting = false;
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal (new Point (28, 0), _textView.CursorPosition);
- Assert.False (_textView.IsSelecting);
- Assert.Equal ("TAB to jump between texttext fields.", _textView.Text);
- _textView.SelectionStartColumn = 24;
- _textView.SelectionStartRow = 0;
- _textView.NewKeyDownEvent (Key.W.WithCtrl); // Cut
- Assert.Equal (new Point (24, 0), _textView.CursorPosition);
- Assert.False (_textView.IsSelecting);
- Assert.Equal ("", _textView.SelectedText);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.SelectionStartColumn = 0;
- _textView.SelectionStartRow = 0;
- _textView.IsSelecting = false;
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal (new Point (28, 0), _textView.CursorPosition);
- Assert.False (_textView.IsSelecting);
- Assert.Equal ("TAB to jump between texttext fields.", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Copy_Or_Cut_And_Paste_With_Selection ()
- {
- _textView.SelectionStartColumn = 20;
- _textView.SelectionStartRow = 0;
- _textView.CursorPosition = new Point (24, 0);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("text", _textView.SelectedText);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.SelectionStartColumn = 20;
- _textView.SelectionStartRow = 0;
- _textView.NewKeyDownEvent (Key.W.WithCtrl); // Cut
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Copy_Or_Cut_Not_Null_If_Has_Selection ()
- {
- _textView.SelectionStartColumn = 20;
- _textView.SelectionStartRow = 0;
- _textView.CursorPosition = new Point (24, 0);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("text", _textView.SelectedText);
- _textView.NewKeyDownEvent (Key.W.WithCtrl); // Cut
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Copy_Or_Cut_Null_If_No_Selection ()
- {
- _textView.SelectionStartColumn = 0;
- _textView.SelectionStartRow = 0;
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("", _textView.SelectedText);
- _textView.NewKeyDownEvent (Key.W.WithCtrl); // Cut
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Copy_Paste_Surrogate_Pairs ()
- {
- _textView.Text = "TextView with some more test text. Unicode shouldn't 𝔹Aℝ𝔽!";
- _textView.SelectAll ();
- _textView.Cut ();
- Assert.Equal (
- "TextView with some more test text. Unicode shouldn't 𝔹Aℝ𝔽!",
- Application.Driver?.Clipboard.GetClipboardData ()
- );
- Assert.Equal (string.Empty, _textView.Text);
- _textView.Paste ();
- Assert.Equal ("TextView with some more test text. Unicode shouldn't 𝔹Aℝ𝔽!", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Copy_Without_Selection ()
- {
- _textView.Text = "This is the first line.\nThis is the second line.\n";
- _textView.CursorPosition = new Point (0, _textView.Lines - 1);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}{Environment.NewLine}",
- _textView.Text
- );
- _textView.CursorPosition = new Point (3, 1);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the second line.{Environment.NewLine}{Environment.NewLine}",
- _textView.Text
- );
- Assert.Equal (new Point (3, 2), _textView.CursorPosition);
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the second line.{Environment.NewLine}{Environment.NewLine}",
- _textView.Text
- );
- Assert.Equal (new Point (3, 3), _textView.CursorPosition);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Cursor_Position_Multiline_False_Initialization ()
- {
- Assert.False (_textView.IsInitialized);
- Assert.True (_textView.Multiline);
- _textView.Multiline = false;
- Assert.Equal (32, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void CursorPosition_With_Value_Greater_Than_Text_Length_Changes_To_Text_Length ()
- {
- _textView.CursorPosition = new Point (33, 1);
- Assert.Equal (32, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void CursorPosition_With_Value_Less_Than_Zero_Changes_To_Zero ()
- {
- _textView.CursorPosition = new Point (-1, -1);
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Cut_Not_Allowed_If_ReadOnly_Is_True ()
- {
- _textView.ReadOnly = true;
- _textView.SelectionStartColumn = 20;
- _textView.SelectionStartRow = 0;
- _textView.CursorPosition = new Point (24, 0);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("text", _textView.SelectedText);
- _textView.NewKeyDownEvent (
- Key.W.WithCtrl
- ); // Selecting is set to false after Cut.
- Assert.Equal ("", _textView.SelectedText);
- _textView.ReadOnly = false;
- Assert.False (_textView.IsSelecting);
- _textView.IsSelecting = true; // Needed to set Selecting to true.
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("text", _textView.SelectedText);
- _textView.NewKeyDownEvent (Key.W.WithCtrl); // Cut
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [AutoInitShutdown]
- public void DeleteTextBackwards_WordWrap_False_Return_Undo ()
- {
- const string text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = Dim.Fill (), Height = Dim.Fill (), Text = text };
- string envText = tv.Text;
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Application.RunIteration (ref rs);
- Assert.False (tv.WordWrap);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (3, 0);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (0, 1);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (22, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.This is the second line.
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- while (tv.Text != envText)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Application.RunIteration (ref rs);
- Assert.Equal (envText, tv.Text);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void DeleteTextBackwards_WordWrap_True_Return_Undo ()
- {
- const string text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = Dim.Fill (), Height = Dim.Fill (), Text = text, WordWrap = true };
- string envText = tv.Text;
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Application.RunIteration (ref rs);
- Assert.True (tv.WordWrap);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (3, 0);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (0, 1);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (22, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.This is the second line.
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- while (tv.Text != envText)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Application.RunIteration (ref rs);
- Assert.Equal (envText, tv.Text);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void DeleteTextForwards_WordWrap_False_Return_Undo ()
- {
- const string text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = Dim.Fill (), Height = Dim.Fill (), Text = text };
- string envText = tv.Text;
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Application.RunIteration (ref rs);
- Assert.False (tv.WordWrap);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (2, 0);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (22, 0);
- Assert.Equal (new Point (22, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (22, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.This is the second line.
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- while (tv.Text != envText)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (envText, tv.Text);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void DeleteTextForwards_WordWrap_True_Return_Undo ()
- {
- const string text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = Dim.Fill (), Height = Dim.Fill (), Text = text, WordWrap = true };
- string envText = tv.Text;
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Application.RunIteration (ref rs);
- Assert.True (tv.WordWrap);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (2, 0);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- tv.CursorPosition = new Point (22, 0);
- Assert.Equal (new Point (22, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (22, 0), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.This is the second line.
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Application.RunIteration (ref rs);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Ths is the first line.
- This is the second line.
- ",
- _output
- );
- while (tv.Text != envText)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Application.RunIteration (ref rs);
- Assert.Equal (envText, tv.Text);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void DesiredCursorVisibility_Horizontal_Navigation ()
- {
- var text = "";
- for (var i = 0; i < 12; i++)
- {
- text += $"{i.ToString () [^1]}";
- }
- var tv = new TextView { Width = 10, Height = 10 };
- tv.Text = text;
- var top = new Toplevel ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (0, tv.LeftColumn);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Application.PositionCursor ();
- Assert.Equal (CursorVisibility.Default, tv.CursorVisibility);
- for (var i = 0; i < 12; i++)
- {
- tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledRight });
- Assert.Equal (Math.Min (i + 1, 11), tv.LeftColumn);
- Application.PositionCursor ();
- Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
- Assert.Equal (CursorVisibility.Invisible, cursorVisibility);
- }
- for (var i = 11; i > 0; i--)
- {
- tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledLeft });
- Assert.Equal (i - 1, tv.LeftColumn);
- Application.PositionCursor ();
- Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
- if (i - 1 == 0)
- {
- Assert.Equal (CursorVisibility.Default, cursorVisibility);
- }
- else
- {
- Assert.Equal (CursorVisibility.Invisible, cursorVisibility);
- }
- }
- top.Dispose ();
- Application.Shutdown ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void DesiredCursorVisibility_Vertical_Navigation ()
- {
- var text = "";
- for (var i = 0; i < 12; i++)
- {
- text += $"This is the line {i}\n";
- }
- var tv = new TextView { Width = 10, Height = 10 };
- tv.Text = text;
- var top = new Toplevel ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (0, tv.TopRow);
- Application.PositionCursor ();
- Assert.Equal (CursorVisibility.Default, tv.CursorVisibility);
- for (var i = 0; i < 12; i++)
- {
- tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledDown });
- Application.PositionCursor ();
- Assert.Equal (i + 1, tv.TopRow);
- Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
- Assert.Equal (CursorVisibility.Invisible, cursorVisibility);
- }
- for (var i = 12; i > 0; i--)
- {
- tv.NewMouseEvent (new MouseEventArgs { Flags = MouseFlags.WheeledUp });
- Application.PositionCursor ();
- Assert.Equal (i - 1, tv.TopRow);
- Application.PositionCursor ();
- Application.Driver!.GetCursorVisibility (out CursorVisibility cursorVisibility);
- if (i - 1 == 0)
- {
- Assert.Equal (CursorVisibility.Default, cursorVisibility);
- }
- else
- {
- Assert.Equal (CursorVisibility.Invisible, cursorVisibility);
- }
- }
- top.Dispose ();
- Application.Shutdown ();
- }
- [Fact]
- public void GetRegion_StringFromRunes_Environment_NewLine ()
- {
- var tv = new TextView { Text = $"1{Environment.NewLine}2" };
- Assert.Equal ($"1{Environment.NewLine}2", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- tv.SelectAll ();
- Assert.Equal ($"1{Environment.NewLine}2", tv.Text);
- Assert.Equal ($"1{Environment.NewLine}2", tv.SelectedText);
- }
- [Fact]
- public void HistoryText_ClearHistoryChanges ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- tv.ClearHistoryChanges ();
- Assert.Equal (
- $"{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.False (tv.HasHistoryChanges);
- }
- [Fact]
- public void HistoryText_Exceptions ()
- {
- var ht = new HistoryText ();
- foreach (object ls in Enum.GetValues (typeof (HistoryText.LineStatus)))
- {
- if ((HistoryText.LineStatus)ls != HistoryText.LineStatus.Original)
- {
- Assert.Throws<ArgumentException> (
- () => ht.Add (
- new List<List<Cell>> { new () },
- Point.Empty,
- (HistoryText.LineStatus)ls
- )
- );
- }
- }
- Assert.Null (Record.Exception (() => ht.Add (new List<List<Cell>> { new () }, Point.Empty)));
- }
- [Fact]
- public void HistoryText_IsDirty_HasHistoryChanges ()
- {
- var tv = new TextView ();
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.False (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.D1));
- Assert.Equal ("1", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"1{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.D2));
- Assert.Equal ($"1{Environment.NewLine}2", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal ($"1{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal ("1", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // IsDirty cannot be based on HasHistoryChanges because HasHistoryChanges is greater than 0
- // The only way is comparing from the original text
- Assert.False (tv.IsDirty);
- // Still true because HasHistoryChanges is greater than 0
- Assert.True (tv.HasHistoryChanges);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Changing_On_Middle_Clear_History_Forwards ()
- {
- var tv = new TextView ();
- Assert.True (tv.NewKeyDownEvent (Key.D1));
- Assert.Equal ("1", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.D2));
- Assert.Equal ("12", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.D3));
- Assert.Equal ("123", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("12", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.D4));
- Assert.Equal ("124", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("124", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown (useFakeClipboard: true)]
- public void HistoryText_Undo_Redo_Copy_Without_Selection_Multi_Line_Paste ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.CursorPosition = new Point (23, 0);
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ("This is the first line.", Clipboard.Contents);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (23, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 0), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (23, 1), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Cut_Multi_Line_Another_Selected_Paste ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (17, 0);
- Assert.True (tv.NewKeyDownEvent (Key.W.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- tv.SelectionStartColumn = 12;
- tv.SelectionStartRow = 1;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the first line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the first line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 1), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Cut_Multi_Line_Selected_Paste ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (17, 0);
- Assert.True (tv.NewKeyDownEvent (Key.W.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (11, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal ($"This is the first second line.{Environment.NewLine}This is the third line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the first second line.{Environment.NewLine}This is the third line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Cut_Simple_Paste_Starting ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.W.WithCtrl));
- Assert.Equal ($"This is the line.{Environment.NewLine}This is the third line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- tv.IsSelecting = false;
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"This is the line.{Environment.NewLine}This is the third line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Disabled_On_WordWrap ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.\n";
- var tv = new TextView { Width = 80, Height = 5, Text = text };
- Assert.False (tv.WordWrap);
- tv.WordWrap = true;
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (12, 2);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.A));
- Assert.Equal ($"This is the {Environment.NewLine}athird line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}athird line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Empty_Copy_Without_Selection_Multi_Line_Selected_Paste ()
- {
- var text = "\nThis is the first line.\nThis is the second line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.",
- tv.Text
- );
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}{Environment.NewLine}This is the first line.{Environment.NewLine}This is the second line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Ending_With_Newline_Multi_Line_Selected_Almost_All_Return_And_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.\n";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (12, 2);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.A));
- Assert.Equal ($"This is the {Environment.NewLine}athird line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.{Environment.NewLine}",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (12, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}athird line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.{Environment.NewLine}",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (12, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}third line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine}athird line.{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_First_Line_Selected_Return_And_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (17, 0);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.A));
- Assert.Equal (
- $"This is the {Environment.NewLine}a line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine}a line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine}a line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_KillToEndOfLine ()
- {
- var text = "First line.\nSecond line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.K.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ("First line.", Clipboard.Contents);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.K.WithCtrl));
- Assert.Equal ("Second line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ($"First line.{Environment.NewLine}", Clipboard.Contents);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.K.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", Clipboard.Contents);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("Second line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("Second line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_KillToLeftStart ()
- {
- var text = "First line.\nSecond line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (12, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl.WithShift));
- Assert.Equal ($"First line.{Environment.NewLine}", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ("Second line.", Clipboard.Contents);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl.WithShift));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ($"Second line.{Environment.NewLine}", Clipboard.Contents);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl.WithShift));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ($"Second line.{Environment.NewLine}First line.", Clipboard.Contents);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (12, 1), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_KillWordBackward ()
- {
- var text = "First line.\nSecond line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (12, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (11, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second ", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ("First line", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ("First ", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (6, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("First ", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (6, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("First line", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second ", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (11, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (12, 1), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (11, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second ", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First line", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First ", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (6, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_KillWordForward ()
- {
- var text = "First line.\nSecond line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl));
- Assert.Equal ($"line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl));
- Assert.Equal ("Second line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl));
- Assert.Equal ("line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("Second line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"line.{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}Second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("Second line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_DeleteCharLeft ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var ntimes = 3;
- tv.CursorPosition = new Point (7, 1);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharLeft ();
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 1), tv.CursorPosition);
- tv.CursorPosition = new Point (7, 0);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharLeft ();
- }
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 0), tv.CursorPosition);
- tv.CursorPosition = new Point (7, 2);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharLeft ();
- }
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- switch (i)
- {
- case 0:
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This the third line.",
- tv.Text
- );
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- break;
- case 1:
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This i the third line.",
- tv.Text
- );
- Assert.Equal (new Point (6, 2), tv.CursorPosition);
- break;
- case 2:
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (7, 2), tv.CursorPosition);
- break;
- }
- }
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 2), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- switch (i)
- {
- case 0:
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (5, 0), tv.CursorPosition);
- break;
- case 1:
- Assert.Equal (
- $"This i the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (6, 0), tv.CursorPosition);
- break;
- case 2:
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- break;
- }
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- switch (i)
- {
- case 0:
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (5, 1), tv.CursorPosition);
- break;
- case 1:
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This i the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (6, 1), tv.CursorPosition);
- break;
- case 2:
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- break;
- }
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 0), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_DeleteCharRight ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var ntimes = 3;
- tv.CursorPosition = new Point (7, 1);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharRight ();
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- tv.CursorPosition = new Point (7, 0);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharRight ();
- }
- Assert.Equal (
- $"This ise first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- tv.CursorPosition = new Point (7, 2);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharRight ();
- }
- Assert.Equal (
- $"This ise first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This ise third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 2), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This ise first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 2), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This ise first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This ise first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This ise third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 2), tv.CursorPosition);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var messy = " messy";
- tv.CursorPosition = new Point (7, 1);
- tv.InsertText (messy);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 1), tv.CursorPosition);
- tv.CursorPosition = new Point (7, 0);
- tv.InsertText (messy);
- Assert.Equal (
- $"This is messy the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 0), tv.CursorPosition);
- tv.CursorPosition = new Point (7, 2);
- tv.InsertText (messy);
- Assert.Equal (
- $"This is messy the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is messy the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 2), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is messy the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 2), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 1), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is messy the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 0), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is messy the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is messy the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 2), tv.CursorPosition);
- top.Dispose ();
- }
- [Fact]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_All_Return_And_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl.WithShift));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.A));
- Assert.Equal ($"{Environment.NewLine}a", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}a", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"{Environment.NewLine}a", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_Copy_Simple_Paste_Starting_On_Letter ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ($"first line.{Environment.NewLine}This is the second", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- tv.IsSelecting = false;
- tv.CursorPosition = new Point (17, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the seconfirst line.{Environment.NewLine}This is the secondd line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 1), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the seconfirst line.{Environment.NewLine}This is the secondd line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown (useFakeClipboard: true)]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_Copy_Simple_Paste_Starting_On_Space ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ($"first line.{Environment.NewLine}This is the second", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- tv.IsSelecting = false;
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the secondfirst line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the secondfirst line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_DeleteCharLeft_All ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.False (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl.WithShift));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.SelectedText
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.Equal (70 + Environment.NewLine.Length * 2, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.False (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_DeleteCharRight_All ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.False (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl.WithShift));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.SelectedText
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.Equal (70 + Environment.NewLine.Length * 2, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.False (tv.HasHistoryChanges);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.HasHistoryChanges);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_InsertText ()
- {
- var text =
- $"This is the first line.{Environment.NewLine}This is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var messy = " messy";
- tv.CursorPosition = new Point (7, 0);
- tv.SelectionStartColumn = 11;
- tv.SelectionStartRow = 2;
- Assert.Equal (51 + Environment.NewLine.Length * 2, tv.SelectedLength);
- for (var i = 0; i < messy.Length; i++)
- {
- tv.InsertText (messy [i].ToString ());
- switch (i)
- {
- case 0:
- Assert.Equal ("This is third line.", tv.Text);
- Assert.Equal (new Point (8, 0), tv.CursorPosition);
- break;
- case 1:
- Assert.Equal ("This is m third line.", tv.Text);
- Assert.Equal (new Point (9, 0), tv.CursorPosition);
- break;
- case 2:
- Assert.Equal ("This is me third line.", tv.Text);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- break;
- case 3:
- Assert.Equal ("This is mes third line.", tv.Text);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- break;
- case 4:
- Assert.Equal ("This is mess third line.", tv.Text);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- break;
- case 5:
- Assert.Equal ("This is messy third line.", tv.Text);
- Assert.Equal (new Point (13, 0), tv.CursorPosition);
- break;
- }
- }
- Assert.Equal ("This is messy third line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (13, 0), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (2, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- switch (i)
- {
- case 0:
- Assert.Equal ("This is mess third line.", tv.Text);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- break;
- case 1:
- Assert.Equal ("This is mes third line.", tv.Text);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- break;
- case 2:
- Assert.Equal ("This is me third line.", tv.Text);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- break;
- case 3:
- Assert.Equal ("This is m third line.", tv.Text);
- Assert.Equal (new Point (9, 0), tv.CursorPosition);
- break;
- case 4:
- Assert.Equal ("This is third line.", tv.Text);
- Assert.Equal (new Point (8, 0), tv.CursorPosition);
- break;
- case 5:
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- break;
- }
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (2, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- switch (i)
- {
- case 0:
- Assert.Equal ("This is third line.", tv.Text);
- Assert.Equal (new Point (8, 0), tv.CursorPosition);
- break;
- case 1:
- Assert.Equal ("This is m third line.", tv.Text);
- Assert.Equal (new Point (9, 0), tv.CursorPosition);
- break;
- case 2:
- Assert.Equal ("This is me third line.", tv.Text);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- break;
- case 3:
- Assert.Equal ("This is mes third line.", tv.Text);
- Assert.Equal (new Point (11, 0), tv.CursorPosition);
- break;
- case 4:
- Assert.Equal ("This is mess third line.", tv.Text);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- break;
- case 5:
- Assert.Equal ("This is messy third line.", tv.Text);
- Assert.Equal (new Point (13, 0), tv.CursorPosition);
- break;
- }
- }
- Assert.Equal ("This is messy third line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (13, 0), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (2, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_InsertText_Twice_On_Same_Line ()
- {
- var text = "One\nTwo\nThree";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- tv.SelectionStartColumn = 0;
- tv.SelectionStartRow = 0;
- tv.CursorPosition = new Point (0, 1);
- Assert.Equal (3 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.True (tv.NewKeyDownEvent (Key.D1));
- Assert.Equal ($"1Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- tv.SelectionStartColumn = 1;
- tv.SelectionStartRow = 0;
- tv.CursorPosition = new Point (1, 1);
- Assert.Equal (4 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.True (tv.NewKeyDownEvent (Key.D2));
- Assert.Equal ("12hree", tv.Text);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"1Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"1Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("12hree", tv.Text);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_InsertText_Twice_On_Same_Line_With_End_Line ()
- {
- var text = "One\nTwo\nThree\n";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- tv.SelectionStartColumn = 0;
- tv.SelectionStartRow = 0;
- tv.CursorPosition = new Point (0, 1);
- Assert.Equal (3 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.True (tv.NewKeyDownEvent (Key.D1));
- Assert.Equal ($"1Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- tv.SelectionStartColumn = 1;
- tv.SelectionStartRow = 0;
- tv.CursorPosition = new Point (1, 1);
- Assert.Equal (4 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.True (tv.NewKeyDownEvent (Key.D2));
- Assert.Equal ($"12hree{Environment.NewLine}", tv.Text);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"1Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"1Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"12hree{Environment.NewLine}", tv.Text);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_Selected_With_Empty_Text ()
- {
- var tv = new TextView { Width = 10, Height = 2 };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.O.WithShift));
- Assert.Equal ("O", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.N));
- Assert.Equal ("On", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.E));
- Assert.Equal ("One", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"One{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.T.WithShift));
- Assert.Equal ($"One{Environment.NewLine}T", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.W));
- Assert.Equal ($"One{Environment.NewLine}Tw", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.O));
- Assert.Equal ($"One{Environment.NewLine}Two", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (3, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.T.WithShift));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}T", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.H));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Th", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (2, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thr", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (3, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.E));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thre", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.E));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- tv.SelectionStartColumn = 0;
- tv.SelectionStartRow = 0;
- tv.CursorPosition = new Point (0, 1);
- Assert.Equal (3 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.True (tv.NewKeyDownEvent (Key.D1));
- Assert.Equal ($"1Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- tv.SelectionStartColumn = 1;
- tv.SelectionStartRow = 0;
- tv.CursorPosition = new Point (1, 1);
- Assert.Equal (4 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.True (tv.NewKeyDownEvent (Key.D2));
- Assert.Equal ($"12hree{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- // Undoing
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"1Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thre", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thr", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (3, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Th", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (2, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}T", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (3, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Tw", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}T", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("One", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("On", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("O", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.False (tv.IsDirty);
- // Redoing
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("O", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("On", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("One", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}T", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Tw", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (3, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}T", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Th", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (2, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thr", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (3, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thre", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"1Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"12hree{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.True (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Multi_Line_With_Empty_Text ()
- {
- var tv = new TextView { Width = 10, Height = 2 };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.O.WithShift));
- Assert.Equal ("O", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.N));
- Assert.Equal ("On", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.E));
- Assert.Equal ("One", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"One{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.T.WithShift));
- Assert.Equal ($"One{Environment.NewLine}T", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.W));
- Assert.Equal ($"One{Environment.NewLine}Tw", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.O));
- Assert.Equal ($"One{Environment.NewLine}Two", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (3, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.T.WithShift));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}T", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.H));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Th", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (2, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thr", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (3, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.E));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thre", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.E));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- // Undoing
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thre", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thr", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (3, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Th", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (2, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}T", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (3, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Tw", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}T", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("One", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("On", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("O", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redoing
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("O", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("On", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (2, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("One", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (3, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}T", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (1, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Tw", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (2, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (3, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}T", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Th", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (2, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thr", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (3, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Thre", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"One{Environment.NewLine}Two{Environment.NewLine}Three{Environment.NewLine}", tv.Text);
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- top.Dispose ();
- }
- [Fact]
- public void HistoryText_Undo_Redo_Multiline_Selected_Tab_BackTab ()
- {
- var text = "First line.\nSecond line.\nThird line.";
- var tv = new TextView { Width = 80, Height = 5, Text = text };
- tv.SelectionStartColumn = 6;
- tv.CursorPosition = new Point (6, 2);
- Assert.True (tv.NewKeyDownEvent (Key.Tab));
- Assert.Equal ("First \tline.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Tab.WithShift));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (6, 0), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ("First \tline.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (6, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First \tline.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (7, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First line.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new Point (6, 0), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Multiline_Simples_Tab_BackTab ()
- {
- var text = "First line.\nSecond line.\nThird line.";
- var tv = new TextView { Width = 80, Height = 5, Text = text };
- Assert.True (tv.NewKeyDownEvent (Key.Tab));
- Assert.Equal (
- $"\tFirst line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Tab.WithShift));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"\tFirst line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"\tFirst line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"First line.{Environment.NewLine}Second line.{Environment.NewLine}Third line.", tv.Text);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Setting_Clipboard_Multi_Line_Selected_Paste ()
- {
- var text = "This is the first line.\nThis is the second line.";
- var tv = new TextView { Text = text };
- Clipboard.Contents = "Inserted\nNewLine";
- Assert.Equal ($"This is the first line.{Environment.NewLine}This is the second line.", tv.Text);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"Inserted{Environment.NewLine}NewLineThis is the first line.{Environment.NewLine}This is the second line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal ($"This is the first line.{Environment.NewLine}This is the second line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"Inserted{Environment.NewLine}NewLineThis is the first line.{Environment.NewLine}This is the second line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown (useFakeClipboard: true)]
- public void HistoryText_Undo_Redo_Simple_Copy_Multi_Line_Selected_Paste ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (17, 0);
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal ("first", tv.SelectedText);
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (11, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal ($"This is the first second line.{Environment.NewLine}This is the third line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the first second line.{Environment.NewLine}This is the third line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Single_Line_DeleteCharLeft ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var ntimes = 3;
- tv.CursorPosition = new Point (7, 1);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharLeft ();
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (4, 1), tv.CursorPosition);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Single_Line_DeleteCharRight ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var ntimes = 3;
- tv.CursorPosition = new Point (7, 1);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharRight ();
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This ise second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Single_Line_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var messy = " messy";
- tv.CursorPosition = new Point (7, 1);
- tv.InsertText (messy);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 1), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 1), tv.CursorPosition);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Single_Line_Selected_DeleteCharLeft ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var ntimes = 3;
- tv.CursorPosition = new Point (7, 1);
- tv.SelectionStartColumn = 11;
- tv.SelectionStartRow = 1;
- Assert.Equal (4, tv.SelectedLength);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharLeft ();
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (5, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Single_Line_Selected_DeleteCharRight ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var ntimes = 3;
- tv.CursorPosition = new Point (7, 1);
- tv.SelectionStartColumn = 11;
- tv.SelectionStartRow = 1;
- Assert.Equal (4, tv.SelectedLength);
- for (var i = 0; i < ntimes; i++)
- {
- tv.DeleteCharRight ();
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This isecond line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < ntimes; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This isecond line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown]
- public void HistoryText_Undo_Redo_Single_Line_Selected_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- var messy = " messy";
- tv.CursorPosition = new Point (7, 1);
- tv.SelectionStartColumn = 11;
- tv.SelectionStartRow = 1;
- Assert.Equal (4, tv.SelectedLength);
- tv.InsertText (messy);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (7, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- for (var i = 0; i < messy.Length; i++)
- {
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- }
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is messy second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (13, 1), tv.CursorPosition);
- Assert.Equal (11, tv.SelectionStartColumn);
- Assert.Equal (1, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- top.Dispose ();
- }
- [Fact]
- public void HistoryText_Undo_Redo_Single_Line_Selected_Return ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (17, 0);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Single_Second_Line_Selected_Return ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.SelectionStartRow = 1;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Single_Second_Line_Selected_Return_And_InsertText ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.SelectionStartRow = 1;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.A));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine}a line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine}a line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (0, 2), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the {Environment.NewLine}a line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (4, tv.Lines);
- Assert.Equal (new Point (1, 2), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Three_Line_Selected_Return ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (17, 2);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"This is the {Environment.NewLine} line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine} line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (17, 2), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ($"This is the {Environment.NewLine} line.", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_Two_Line_Selected_Return ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (18, 1);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal (
- $"This is the {Environment.NewLine} line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- }
- [Fact]
- public void HistoryText_Undo_Redo_ApplyCellsAttribute ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Text = text };
- tv.SelectionStartColumn = 12;
- tv.CursorPosition = new Point (18, 1);
- if (Environment.NewLine.Length == 2)
- {
- Assert.Equal (31, tv.SelectedLength);
- }
- else
- {
- Assert.Equal (30, tv.SelectedLength);
- }
- Assert.Equal ($"first line.{Environment.NewLine}This is the second", tv.SelectedText);
- Assert.Equal ($"first line.{Environment.NewLine}This is the second", Cell.ToString (tv.SelectedCellsList));
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- AssertNullAttribute ();
- tv.ApplyCellsAttribute (new (Color.Red, Color.Green));
- AssertRedGreenAttribute ();
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.Equal ($"first line.{Environment.NewLine}This is the second", Cell.ToString (tv.SelectedCellsList));
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- // Undo
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- AssertNullAttribute ();
- Assert.Equal (12, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.Empty (tv.SelectedCellsList);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- Assert.False (tv.IsDirty);
- // Redo
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- AssertRedGreenAttribute ();
- Assert.Equal (12, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.Empty (tv.SelectedCellsList);
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- Assert.True (tv.IsDirty);
- void AssertNullAttribute ()
- {
- tv.GetRegion (out List<List<Cell>> region, 0, 12, 1, 18);
- foreach (List<Cell> cells in region)
- {
- foreach (Cell cell in cells)
- {
- Assert.Null (cell.Attribute);
- }
- }
- }
- void AssertRedGreenAttribute ()
- {
- tv.GetRegion (out List<List<Cell>> region, 0, 12, 1, 18);
- foreach (List<Cell> cells in region)
- {
- foreach (Cell cell in cells)
- {
- Assert.Equal ("[Red,Green]", cell.Attribute.ToString ());
- }
- }
- }
- }
- [Fact]
- public void Internal_Tests ()
- {
- var txt = "This is a text.";
- List<Cell> txtRunes = Cell.StringToCells (txt);
- Assert.Equal (txt.Length, txtRunes.Count);
- Assert.Equal ('T', txtRunes [0].Rune.Value);
- Assert.Equal ('h', txtRunes [1].Rune.Value);
- Assert.Equal ('i', txtRunes [2].Rune.Value);
- Assert.Equal ('s', txtRunes [3].Rune.Value);
- Assert.Equal (' ', txtRunes [4].Rune.Value);
- Assert.Equal ('i', txtRunes [5].Rune.Value);
- Assert.Equal ('s', txtRunes [6].Rune.Value);
- Assert.Equal (' ', txtRunes [7].Rune.Value);
- Assert.Equal ('a', txtRunes [8].Rune.Value);
- Assert.Equal (' ', txtRunes [9].Rune.Value);
- Assert.Equal ('t', txtRunes [10].Rune.Value);
- Assert.Equal ('e', txtRunes [11].Rune.Value);
- Assert.Equal ('x', txtRunes [12].Rune.Value);
- Assert.Equal ('t', txtRunes [13].Rune.Value);
- Assert.Equal ('.', txtRunes [^1].Rune.Value);
- var col = 0;
- Assert.True (TextModel.SetCol (ref col, 80, 79));
- Assert.False (TextModel.SetCol (ref col, 80, 80));
- Assert.Equal (79, col);
- var start = 0;
- var x = 8;
- Assert.Equal (8, TextModel.GetColFromX (txtRunes, start, x));
- Assert.Equal ('a', txtRunes [start + x].Rune.Value);
- start = 1;
- x = 7;
- Assert.Equal (7, TextModel.GetColFromX (txtRunes, start, x));
- Assert.Equal ('a', txtRunes [start + x].Rune.Value);
- Assert.Equal ((15, 15), TextModel.DisplaySize (txtRunes));
- Assert.Equal ((6, 6), TextModel.DisplaySize (txtRunes, 1, 7));
- Assert.Equal (0, TextModel.CalculateLeftColumn (txtRunes, 0, 7, 8));
- Assert.Equal (1, TextModel.CalculateLeftColumn (txtRunes, 0, 8, 8));
- Assert.Equal (2, TextModel.CalculateLeftColumn (txtRunes, 0, 9, 8));
- var tm = new TextModel ();
- tm.AddLine (0, Cell.StringToCells ("This is first line."));
- tm.AddLine (1, Cell.StringToCells ("This is last line."));
- Assert.Equal ((new Point (2, 0), true), tm.FindNextText ("is", out bool gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (5, 0), true), tm.FindNextText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (2, 1), true), tm.FindNextText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (5, 1), true), tm.FindNextText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (2, 0), true), tm.FindNextText ("is", out gaveFullTurn));
- Assert.True (gaveFullTurn);
- tm.ResetContinuousFind (Point.Empty);
- Assert.Equal ((new Point (5, 1), true), tm.FindPreviousText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (2, 1), true), tm.FindPreviousText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (5, 0), true), tm.FindPreviousText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (2, 0), true), tm.FindPreviousText ("is", out gaveFullTurn));
- Assert.False (gaveFullTurn);
- Assert.Equal ((new Point (5, 1), true), tm.FindPreviousText ("is", out gaveFullTurn));
- Assert.True (gaveFullTurn);
- Assert.Equal ((new Point (9, 1), true), tm.ReplaceAllText ("is", false, false, "really"));
- Assert.Equal (Cell.StringToCells ("Threally really first line."), tm.GetLine (0));
- Assert.Equal (Cell.StringToCells ("Threally really last line."), tm.GetLine (1));
- tm = new TextModel ();
- tm.AddLine (0, Cell.StringToCells ("This is first line."));
- tm.AddLine (1, Cell.StringToCells ("This is last line."));
- Assert.Equal ((new Point (5, 1), true), tm.ReplaceAllText ("is", false, true, "really"));
- Assert.Equal (Cell.StringToCells ("This really first line."), tm.GetLine (0));
- Assert.Equal (Cell.StringToCells ("This really last line."), tm.GetLine (1));
- }
- [Fact]
- [AutoInitShutdown (useFakeClipboard: true)]
- public void KeyBindings_Command ()
- {
- var text = "This is the first line.\nThis is the second line.\nThis is the third line.";
- var tv = new TextView { Width = 10, Height = 2, Text = text };
- Toplevel top = new ();
- top.Add (tv);
- Application.Begin (top);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (3, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.ReadOnly);
- Assert.True (tv.CanFocus);
- var g = (SingleWordSuggestionGenerator)tv.Autocomplete.SuggestionGenerator;
- tv.CanFocus = false;
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft));
- tv.CanFocus = true;
- Assert.False (tv.NewKeyDownEvent (Key.CursorLeft));
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl));
- Assert.Equal (2, tv.CurrentRow);
- Assert.Equal (23, tv.CurrentColumn);
- Assert.Equal (tv.CurrentColumn, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.False (tv.NewKeyDownEvent (Key.CursorRight));
- Assert.NotNull (tv.Autocomplete);
- Assert.Empty (g.AllSuggestions);
- Assert.True (tv.NewKeyDownEvent (Key.F.WithShift));
- tv.Draw ();
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.F",
- tv.Text
- );
- Assert.Equal (new Point (24, 2), tv.CursorPosition);
- Assert.Empty (tv.Autocomplete.Suggestions);
- Assert.True (tv.NewKeyDownEvent (Key.Z.WithCtrl));
- tv.Draw ();
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.Empty (tv.Autocomplete.Suggestions);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- tv.Draw ();
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.F",
- tv.Text
- );
- Assert.Equal (new Point (24, 2), tv.CursorPosition);
- Assert.Empty (tv.Autocomplete.Suggestions);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.",
- tv.Text
- );
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- g.AllSuggestions = Regex.Matches (tv.Text, "\\w+")
- .Select (s => s.Value)
- .Distinct ()
- .ToList ();
- Assert.Equal (7, g.AllSuggestions.Count);
- Assert.Equal ("This", g.AllSuggestions [0]);
- Assert.Equal ("is", g.AllSuggestions [1]);
- Assert.Equal ("the", g.AllSuggestions [2]);
- Assert.Equal ("first", g.AllSuggestions [3]);
- Assert.Equal ("line", g.AllSuggestions [4]);
- Assert.Equal ("second", g.AllSuggestions [5]);
- Assert.Equal ("third", g.AllSuggestions [^1]);
- Assert.True (tv.NewKeyDownEvent (Key.F.WithShift));
- tv.Draw ();
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.F",
- tv.Text
- );
- Assert.Equal (new Point (24, 2), tv.CursorPosition);
- Assert.Single (tv.Autocomplete.Suggestions);
- Assert.Equal ("first", tv.Autocomplete.Suggestions [0].Replacement);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (28, 2), tv.CursorPosition);
- Assert.Empty (tv.Autocomplete.Suggestions);
- Assert.False (tv.Autocomplete.Visible);
- g.AllSuggestions = new List<string> ();
- tv.Autocomplete.ClearSuggestions ();
- Assert.Empty (g.AllSuggestions);
- Assert.Empty (tv.Autocomplete.Suggestions);
- Assert.True (tv.NewKeyDownEvent (Key.PageUp));
- Assert.Equal (24, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (24, 1), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (new Key (Key.PageUp)));
- Assert.Equal (23, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (23, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.PageDown));
- Assert.Equal (24, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (23, 1), tv.CursorPosition); // gets the previous length
- Assert.True (tv.NewKeyDownEvent (Key.V.WithCtrl));
- Assert.Equal (28, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (23, 2), tv.CursorPosition); // gets the previous length
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.PageUp.WithShift));
- Assert.Equal (24, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (23, 1), tv.CursorPosition); // gets the previous length
- Assert.Equal (24 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.Equal ($".{Environment.NewLine}This is the third line.", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.PageDown.WithShift));
- Assert.Equal (28, tv.GetCurrentLine ().Count);
- Assert.Equal (new Point (23, 2), tv.CursorPosition); // gets the previous length
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.Home.WithCtrl));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.N.WithCtrl));
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.P.WithCtrl));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.CursorDown));
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.CursorUp));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.CursorDown.WithShift));
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (23 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.Equal ($"This is the first line.{Environment.NewLine}", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.CursorUp.WithShift));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.F.WithCtrl));
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.B.WithCtrl));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight.WithShift));
- Assert.Equal (new Point (1, 0), tv.CursorPosition);
- Assert.Equal (1, tv.SelectedLength);
- Assert.Equal ("T", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft.WithShift));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Delete));
- Assert.Equal (
- $"his is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.D.WithCtrl));
- Assert.Equal (
- $"is is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.End));
- Assert.Equal (
- $"is is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (21, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal (
- $"is is the first line{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (20, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Home));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithShift));
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (19, tv.SelectedLength);
- Assert.Equal ("is is the first lin", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Home.WithShift));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.E.WithCtrl));
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Home));
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.K.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal ("is is the first lin", Clipboard.Contents);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal ("is is the first lin", Clipboard.Contents);
- tv.CursorPosition = Point.Empty;
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl.WithShift));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal ("is is the first lin", Clipboard.Contents);
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal ("is is the first lin", Clipboard.Contents);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl.WithShift));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- tv.ReadOnly = true;
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- tv.ReadOnly = false;
- Assert.True (tv.NewKeyDownEvent (Key.Y.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal (0, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.True (tv.NewKeyDownEvent (Key.Space.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.Equal (19, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.True (tv.NewKeyDownEvent (Key.Space.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal (19, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- tv.SelectionStartColumn = 0;
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (19, tv.SelectedLength);
- Assert.Equal ("is is the first lin", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.Equal (0, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.True (tv.NewKeyDownEvent (Key.C.WithCtrl));
- Assert.Equal (
- $"is is the first lin{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (19, 0), tv.CursorPosition);
- Assert.Equal (19, tv.SelectedLength);
- Assert.Equal ("is is the first lin", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.Equal (0, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.True (tv.NewKeyDownEvent (Key.X.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal (0, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.Equal ("is is the first lin", Clipboard.Contents);
- Assert.True (tv.NewKeyDownEvent (Key.W.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal (0, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.Equal ("", Clipboard.Contents);
- Assert.True (tv.NewKeyDownEvent (Key.X.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.Equal (0, tv.SelectionStartColumn);
- Assert.Equal (0, tv.SelectionStartRow);
- Assert.Equal ("", Clipboard.Contents);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (28, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft.WithShift.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (12, 2), tv.CursorPosition);
- Assert.Equal (6, tv.SelectedLength);
- Assert.Equal ("third ", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (8, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (12, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight.WithShift.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- Assert.Equal (6, tv.SelectedLength);
- Assert.Equal ("third ", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (22, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (23, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (new Point (28, 2), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Home.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third line.first",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Delete.WithCtrl));
- Assert.Equal ($"This is the second line.{Environment.NewLine}This is the third line.first", tv.Text);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithCtrl));
- Assert.Equal ($"This is the second line.{Environment.NewLine}This is the third line.first", tv.Text);
- Assert.Equal (new Point (28, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace.WithCtrl));
- Assert.Equal ($"This is the second line.{Environment.NewLine}This is the third ", tv.Text);
- Assert.Equal (new Point (18, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.AllowsReturn);
- tv.AllowsReturn = false;
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.False (tv.IsSelecting);
- Assert.False (tv.NewKeyDownEvent (Key.Enter)); // Accepted event not handled
- Assert.Equal ($"This is the second line.{Environment.NewLine}This is the third ", tv.Text);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.False (tv.AllowsReturn);
- tv.AllowsReturn = true;
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.Text
- );
- Assert.Equal (new Point (0, 1), tv.CursorPosition);
- Assert.Equal (0, tv.SelectedLength);
- Assert.Equal ("", tv.SelectedText);
- Assert.False (tv.IsSelecting);
- Assert.True (tv.AllowsReturn);
- Assert.True (tv.NewKeyDownEvent (Key.End.WithShift.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.Text
- );
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- Assert.Equal (42 + Environment.NewLine.Length, tv.SelectedLength);
- Assert.Equal ($"This is the second line.{Environment.NewLine}This is the third ", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.Home.WithShift.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.Text
- );
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (Environment.NewLine.Length, tv.SelectedLength);
- Assert.Equal ($"{Environment.NewLine}", tv.SelectedText);
- Assert.True (tv.IsSelecting);
- Assert.True (tv.NewKeyDownEvent (Key.A.WithCtrl));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.Text
- );
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- Assert.Equal (42 + Environment.NewLine.Length * 2, tv.SelectedLength);
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.SelectedText
- );
- Assert.True (tv.IsSelecting);
- Assert.True (tv.Used);
- Assert.True (tv.NewKeyDownEvent (Key.InsertChar));
- Assert.False (tv.Used);
- Assert.True (tv.AllowsTab);
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- tv.AllowsTab = false;
- Assert.False (tv.NewKeyDownEvent (Key.Tab));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.Text
- );
- Assert.False (tv.AllowsTab);
- tv.AllowsTab = true;
- Assert.Equal (new Point (18, 2), tv.CursorPosition);
- Assert.True (tv.IsSelecting);
- tv.IsSelecting = false;
- Assert.True (tv.NewKeyDownEvent (Key.Tab));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third \t",
- tv.Text
- );
- Assert.True (tv.AllowsTab);
- tv.AllowsTab = false;
- Assert.False (tv.NewKeyDownEvent (Key.Tab.WithShift));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third \t",
- tv.Text
- );
- Assert.False (tv.AllowsTab);
- tv.AllowsTab = true;
- Assert.True (tv.NewKeyDownEvent (Key.Tab.WithShift));
- Assert.Equal (
- $"{Environment.NewLine}This is the second line.{Environment.NewLine}This is the third ",
- tv.Text
- );
- Assert.True (tv.AllowsTab);
- Assert.False (tv.NewKeyDownEvent (Key.F6));
- Assert.False (tv.NewKeyDownEvent (Application.NextTabGroupKey));
- Assert.False (tv.NewKeyDownEvent (Key.F6.WithShift));
- Assert.False (tv.NewKeyDownEvent (Application.PrevTabGroupKey));
- Assert.True (tv.NewKeyDownEvent (ContextMenu.DefaultKey));
- Assert.True (tv.ContextMenu != null && tv.ContextMenu.MenuBar.Visible);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Kill_Delete_WordBackward ()
- {
- _textView.Text = "This is the first line.";
- _textView.MoveEnd ();
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- _textView.NewKeyDownEvent (Key.Backspace.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (22, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first line", _textView.Text);
- break;
- case 1:
- Assert.Equal (18, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first ", _textView.Text);
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the ", _textView.Text);
- break;
- case 3:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is ", _textView.Text);
- break;
- case 4:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This ", _textView.Text);
- break;
- case 5:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("", _textView.Text);
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Kill_Delete_WordBackward_Multiline ()
- {
- _textView.Text = "This is the first line.\nThis is the second line.";
- _textView.Width = 4;
- _textView.MoveEnd ();
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- _textView.NewKeyDownEvent (Key.Backspace.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (23, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (
- "This is the first line."
- + Environment.NewLine
- + "This is the second line",
- _textView.Text
- );
- break;
- case 1:
- Assert.Equal (19, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (
- "This is the first line."
- + Environment.NewLine
- + "This is the second ",
- _textView.Text
- );
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (
- "This is the first line."
- + Environment.NewLine
- + "This is the ",
- _textView.Text
- );
- break;
- case 3:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (
- "This is the first line."
- + Environment.NewLine
- + "This is ",
- _textView.Text
- );
- break;
- case 4:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (
- "This is the first line."
- + Environment.NewLine
- + "This ",
- _textView.Text
- );
- break;
- case 5:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first line." + Environment.NewLine, _textView.Text);
- break;
- case 6:
- Assert.Equal (23, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first line.", _textView.Text);
- break;
- case 7:
- Assert.Equal (22, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first line", _textView.Text);
- break;
- case 8:
- Assert.Equal (18, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first ", _textView.Text);
- break;
- case 9:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the ", _textView.Text);
- break;
- case 10:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is ", _textView.Text);
- break;
- case 11:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This ", _textView.Text);
- break;
- case 12:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("", _textView.Text);
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Kill_Delete_WordForward ()
- {
- _textView.Text = "This is the first line.";
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- _textView.NewKeyDownEvent (Key.Delete.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("is the first line.", _textView.Text);
- break;
- case 1:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("the first line.", _textView.Text);
- break;
- case 2:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("first line.", _textView.Text);
- break;
- case 3:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("line.", _textView.Text);
- break;
- case 4:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("", _textView.Text);
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Kill_Delete_WordForward_Multiline ()
- {
- _textView.Text = "This is the first line.\nThis is the second line.";
- _textView.Width = 4;
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- _textView.NewKeyDownEvent (Key.Delete.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (
- "is the first line."
- + Environment.NewLine
- + "This is the second line.",
- _textView.Text
- );
- break;
- case 1:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (
- "the first line."
- + Environment.NewLine
- + "This is the second line.",
- _textView.Text
- );
- break;
- case 2:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (
- "first line."
- + Environment.NewLine
- + "This is the second line.",
- _textView.Text
- );
- break;
- case 3:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (
- "line."
- + Environment.NewLine
- + "This is the second line.",
- _textView.Text
- );
- break;
- case 4:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (
- ""
- + Environment.NewLine
- + "This is the second line.",
- _textView.Text
- );
- break;
- case 5:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the second line.", _textView.Text);
- break;
- case 6:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("is the second line.", _textView.Text);
- break;
- case 7:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("the second line.", _textView.Text);
- break;
- case 8:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("second line.", _textView.Text);
- break;
- case 9:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("line.", _textView.Text);
- break;
- case 10:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("", _textView.Text);
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Kill_To_End_Delete_Forwards_Copy_To_The_Clipboard_And_Paste ()
- {
- _textView.Text = "This is the first line.\nThis is the second line.";
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- switch (iteration)
- {
- case 0:
- _textView.NewKeyDownEvent (Key.K.WithCtrl);
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ($"{Environment.NewLine}This is the second line.", _textView.Text);
- Assert.Equal ("This is the first line.", Clipboard.Contents);
- break;
- case 1:
- _textView.NewKeyDownEvent (
- new Key (
- KeyCode.Delete | KeyCode.CtrlMask | KeyCode.ShiftMask
- )
- );
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the second line.", _textView.Text);
- Assert.Equal ($"This is the first line.{Environment.NewLine}", Clipboard.Contents);
- break;
- case 2:
- _textView.NewKeyDownEvent (Key.K.WithCtrl);
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("", _textView.Text);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.",
- Clipboard.Contents
- );
- // Paste
- _textView.NewKeyDownEvent (Key.Y.WithCtrl);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.",
- _textView.Text
- );
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Kill_To_Start_Delete_Backwards_Copy_To_The_Clipboard_And_Paste ()
- {
- _textView.Text = "This is the first line.\nThis is the second line.";
- _textView.MoveEnd ();
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- switch (iteration)
- {
- case 0:
- _textView.NewKeyDownEvent (Key.Backspace.WithCtrl.WithShift);
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal ($"This is the first line.{Environment.NewLine}", _textView.Text);
- Assert.Equal ("This is the second line.", Clipboard.Contents);
- break;
- case 1:
- _textView.NewKeyDownEvent (
- new Key (
- KeyCode.Backspace | KeyCode.CtrlMask | KeyCode.ShiftMask
- )
- );
- Assert.Equal (23, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("This is the first line.", _textView.Text);
- Assert.Equal ($"This is the second line.{Environment.NewLine}", Clipboard.Contents);
- break;
- case 2:
- _textView.NewKeyDownEvent (Key.Backspace.WithCtrl.WithShift);
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal ("", _textView.Text);
- Assert.Equal (
- $"This is the second line.{Environment.NewLine}This is the first line.",
- Clipboard.Contents
- );
- // Paste inverted
- _textView.NewKeyDownEvent (Key.Y.WithCtrl);
- Assert.Equal (
- $"This is the second line.{Environment.NewLine}This is the first line.",
- _textView.Text
- );
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- public void LeftColumn_Add_One_If_Text_Length_Is_Equal_To_Width ()
- {
- var tv = new TextView { Width = 10, Text = "1234567890" };
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.LeftColumn);
- tv.CursorPosition = new Point (9, 0);
- Assert.Equal (new Point (9, 0), tv.CursorPosition);
- Assert.Equal (0, tv.LeftColumn);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- tv.CursorPosition = new Point (10, 0);
- Assert.Equal (new Point (10, 0), tv.CursorPosition);
- Assert.Equal (1, tv.LeftColumn);
- }
- [Fact]
- public void LoadFile_Throws_If_File_Is_Empty ()
- {
- var result = false;
- var tv = new TextView ();
- Assert.Throws<ArgumentException> (() => result = tv.Load (""));
- Assert.False (result);
- }
- [Fact]
- public void LoadFile_Throws_If_File_Is_Null ()
- {
- var result = false;
- var tv = new TextView ();
- Assert.Throws<ArgumentNullException> (() => result = tv.Load ((string)null));
- Assert.False (result);
- }
- [Fact]
- public void LoadFile_Throws_If_File_Not_Exist ()
- {
- var result = false;
- var tv = new TextView ();
- Assert.Throws<FileNotFoundException> (() => result = tv.Load ("blabla"));
- Assert.False (result);
- }
- [Fact]
- public void LoadStream_CRLF ()
- {
- var text = "This is the first line.\r\nThis is the second line.\r\n";
- var tv = new TextView ();
- tv.Load (new MemoryStream (Encoding.ASCII.GetBytes (text)));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- }
- [Fact]
- public void LoadStream_IsDirty ()
- {
- var text = "Testing";
- using (var stream = new MemoryStream ())
- {
- var writer = new StreamWriter (stream);
- writer.Write (text);
- writer.Flush ();
- stream.Position = 0;
- var tv = new TextView ();
- tv.Load (stream);
- Assert.Equal (7, text.Length);
- Assert.Equal (text.Length, tv.Text.Length);
- Assert.Equal (text, tv.Text);
- Assert.False (tv.IsDirty);
- }
- }
- [Fact]
- public void LoadStream_IsDirty_With_Null_On_The_Text ()
- {
- var text = "Test\0ing";
- using (var stream = new MemoryStream ())
- {
- var writer = new StreamWriter (stream);
- writer.Write (text);
- writer.Flush ();
- stream.Position = 0;
- var tv = new TextView ();
- tv.Load (stream);
- Assert.Equal (8, text.Length);
- Assert.Equal (text.Length, tv.Text.Length);
- Assert.Equal (8, text.Length);
- Assert.Equal (8, tv.Text.Length);
- Assert.Equal (text, tv.Text);
- Assert.False (tv.IsDirty);
- Assert.Equal ((Rune)'\u2400', ((Rune)tv.Text [4]).MakePrintable ());
- }
- }
- [Fact]
- public void LoadStream_LF ()
- {
- var text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView ();
- tv.Load (new MemoryStream (Encoding.ASCII.GetBytes (text)));
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- }
- [Fact]
- public void LoadStream_Stream_Is_Empty ()
- {
- var tv = new TextView ();
- tv.Load (new MemoryStream ());
- Assert.Equal ("", tv.Text);
- }
- [Fact]
- public void LoadStream_Throws_If_Stream_Is_Null ()
- {
- var tv = new TextView ();
- Assert.Throws<ArgumentNullException> (() => tv.Load ((Stream)null));
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Mouse_Button_Shift_Preserves_Selection ()
- {
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- Assert.True (
- _textView.NewMouseEvent (
- new MouseEventArgs { Position = new (12, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
- )
- );
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (12, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("TAB to jump ", _textView.SelectedText);
- Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (12, 0), Flags = MouseFlags.Button1Clicked }));
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (12, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("TAB to jump ", _textView.SelectedText);
- Assert.True (
- _textView.NewMouseEvent (
- new MouseEventArgs { Position = new (19, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
- )
- );
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (19, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("TAB to jump between", _textView.SelectedText);
- Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (19, 0), Flags = MouseFlags.Button1Clicked }));
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (19, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("TAB to jump between", _textView.SelectedText);
- Assert.True (
- _textView.NewMouseEvent (
- new MouseEventArgs { Position = new (24, 0), Flags = MouseFlags.Button1Pressed | MouseFlags.ButtonShift }
- )
- );
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (24, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("TAB to jump between text", _textView.SelectedText);
- Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (24, 0), Flags = MouseFlags.Button1Clicked }));
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (24, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("TAB to jump between text", _textView.SelectedText);
- Assert.True (_textView.NewMouseEvent (new MouseEventArgs { Position = new (24, 0), Flags = MouseFlags.Button1Pressed }));
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (new Point (24, 0), _textView.CursorPosition);
- Assert.True (_textView.IsSelecting);
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [AutoInitShutdown]
- public void MoveDown_By_Setting_CursorPosition ()
- {
- var tv = new TextView { Width = 10, Height = 5 };
- // add 100 lines of wide text to view
- for (var i = 0; i < 100; i++)
- {
- tv.Text += new string ('x', 100) + (i == 99 ? "" : Environment.NewLine);
- }
- Assert.Equal (Point.Empty, tv.CursorPosition);
- tv.CursorPosition = new Point (5, 50);
- Assert.Equal (new Point (5, 50), tv.CursorPosition);
- tv.CursorPosition = new Point (200, 200);
- Assert.Equal (new Point (100, 99), tv.CursorPosition);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Multiline_Setting_Changes_AllowsReturn_AllowsTab_Height_WordWrap ()
- {
- Assert.True (_textView.Multiline);
- Assert.True (_textView.AllowsReturn);
- Assert.Equal (4, _textView.TabWidth);
- Assert.True (_textView.AllowsTab);
- Assert.False (_textView.WordWrap);
- _textView.WordWrap = true;
- Assert.True (_textView.WordWrap);
- _textView.Multiline = false;
- Assert.False (_textView.Multiline);
- Assert.False (_textView.AllowsReturn);
- Assert.Equal (0, _textView.TabWidth);
- Assert.False (_textView.AllowsTab);
- Assert.False (_textView.WordWrap);
- _textView.WordWrap = true;
- Assert.False (_textView.WordWrap);
- _textView.Multiline = true;
- Assert.True (_textView.Multiline);
- Assert.True (_textView.AllowsReturn);
- Assert.Equal (4, _textView.TabWidth);
- Assert.True (_textView.AllowsTab);
- Assert.False (_textView.WordWrap);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Paste_Always_Clear_The_SelectedText ()
- {
- _textView.SelectionStartColumn = 20;
- _textView.SelectionStartRow = 0;
- _textView.CursorPosition = new Point (24, 0);
- _textView.NewKeyDownEvent (Key.C.WithCtrl); // Copy
- Assert.Equal ("text", _textView.SelectedText);
- _textView.NewKeyDownEvent (Key.Y.WithCtrl); // Paste
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- public void ReplaceAllText_Does_Not_Throw_Exception ()
- {
- var textToFind = "hello! hello!";
- var textToReplace = "hello!";
- var tv = new TextView { Width = 20, Height = 3, Text = textToFind };
- Exception exception = Record.Exception (() => tv.ReplaceAllText (textToFind, false, false, textToReplace));
- Assert.Null (exception);
- Assert.Equal (textToReplace, tv.Text);
- }
- [Fact]
- [AutoInitShutdown]
- public void ScrollDownTillCaretOffscreen_ThenType ()
- {
- var tv = new TextView { Width = 10, Height = 5 };
- // add 100 lines of wide text to view
- for (var i = 0; i < 100; i++)
- {
- tv.Text += new string ('x', 100) + Environment.NewLine;
- }
- Assert.Equal (0, tv.CursorPosition.Y);
- tv.ScrollTo (50);
- Assert.Equal (0, tv.CursorPosition.Y);
- tv.NewKeyDownEvent (Key.P);
- }
- [Fact]
- [AutoInitShutdown]
- public void ScrollTo_CursorPosition ()
- {
- var tv = new TextView { Width = 10, Height = 5 };
- // add 100 lines of wide text to view
- for (var i = 0; i < 100; i++)
- {
- tv.Text += new string ('x', 100) + (i == 99 ? "" : Environment.NewLine);
- }
- Assert.Equal (Point.Empty, tv.CursorPosition);
- tv.ScrollTo (50);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- tv.CursorPosition = new Point (tv.LeftColumn, tv.TopRow);
- Assert.Equal (new Point (0, 50), tv.CursorPosition);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Selected_Text_Shows ()
- {
- // Proves #3022 is fixed (TextField selected text does not show in v2)
- var top = new Toplevel ();
- top.Add (_textView);
- RunState rs = Application.Begin (top);
- _textView.CursorPosition = Point.Empty;
- _textView.SelectionStartColumn = 0;
- _textView.SelectionStartRow = 0;
- Attribute [] attributes =
- {
- _textView.ColorScheme.Focus,
- new (_textView.ColorScheme.Focus.Background, _textView.ColorScheme.Focus.Foreground)
- };
- // TAB to jump between text fields.
- TestHelpers.AssertDriverAttributesAre ("0000000", _output, Application.Driver, attributes);
- Assert.Empty (_textView.SelectedCellsList);
- _textView.NewKeyDownEvent (Key.CursorRight.WithCtrl.WithShift);
- Application.RunIteration (ref rs, true);
- Assert.Equal (new Point (4, 0), _textView.CursorPosition);
- // TAB to jump between text fields.
- TestHelpers.AssertDriverAttributesAre ("1111000", _output, Application.Driver, attributes);
- Assert.Equal ("TAB ", Cell.ToString (_textView.SelectedCellsList [^1]));
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Selection_And_CursorPosition_With_Value_Greater_Than_Text_Length_Changes_Both_To_Text_Length ()
- {
- _textView.CursorPosition = new Point (33, 2);
- _textView.SelectionStartColumn = 33;
- _textView.SelectionStartRow = 33;
- Assert.Equal (32, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Selection_With_Empty_Text ()
- {
- _textView = new TextView ();
- _textView.CursorPosition = new Point (2, 0);
- _textView.SelectionStartColumn = 33;
- _textView.SelectionStartRow = 1;
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Selection_With_Value_Greater_Than_Text_Length_Changes_To_Text_Length ()
- {
- _textView.CursorPosition = new Point (2, 0);
- _textView.SelectionStartColumn = 33;
- _textView.SelectionStartRow = 1;
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (30, _textView.SelectedLength);
- Assert.Equal ("B to jump between text fields.", _textView.SelectedText);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Selection_With_Value_Less_Than_Zero_Changes_To_Zero ()
- {
- _textView.SelectionStartColumn = -2;
- _textView.SelectionStartRow = -2;
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- }
- [Fact]
- public void StringToRunes_Slipts_CRLF ()
- {
- var text = "This is the first line.\r\nThis is the second line.\r\n";
- var tv = new TextView ();
- tv.Text = text;
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- }
- [Fact]
- public void StringToRunes_Slipts_LF ()
- {
- var text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView ();
- tv.Text = text;
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Tab_Test_Follow_By_BackTab ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Iteration += (s, a) =>
- {
- int width = _textView.Viewport.Width - 1;
- Assert.Equal (30, width + 1);
- Assert.Equal (10, _textView.Height);
- _textView.Text = "";
- var col = 0;
- var leftCol = 0;
- int tabWidth = _textView.TabWidth;
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- while (col > 0)
- {
- col--;
- _textView.NewKeyDownEvent (Key.Tab.WithShift);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- top.Remove (_textView);
- Application.RequestStop ();
- };
- Application.Run (top);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Tab_Test_Follow_By_BackTab_With_Text ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Iteration += (s, a) =>
- {
- int width = _textView.Viewport.Width - 1;
- Assert.Equal (30, width + 1);
- Assert.Equal (10, _textView.Height);
- var col = 0;
- var leftCol = 0;
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- Assert.Equal (leftCol, _textView.LeftColumn);
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- while (col > 0)
- {
- col--;
- _textView.NewKeyDownEvent (Key.Tab.WithShift);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- top.Remove (_textView);
- Application.RequestStop ();
- };
- Application.Run (top);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Tab_Test_Follow_By_CursorLeft_And_Then_Follow_By_CursorRight ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Iteration += (s, a) =>
- {
- int width = _textView.Viewport.Width - 1;
- Assert.Equal (30, width + 1);
- Assert.Equal (10, _textView.Height);
- _textView.Text = "";
- var col = 0;
- var leftCol = 0;
- int tabWidth = _textView.TabWidth;
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- while (col > 0)
- {
- col--;
- _textView.NewKeyDownEvent (Key.CursorLeft);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.CursorRight);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- top.Remove (_textView);
- Application.RequestStop ();
- };
- Application.Run (top);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Tab_Test_Follow_By_CursorLeft_And_Then_Follow_By_CursorRight_With_Text ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Iteration += (s, a) =>
- {
- int width = _textView.Viewport.Width - 1;
- Assert.Equal (30, width + 1);
- Assert.Equal (10, _textView.Height);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- var col = 0;
- var leftCol = 0;
- int tabWidth = _textView.TabWidth;
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- Assert.Equal (132, _textView.Text.Length);
- while (col > 0)
- {
- col--;
- _textView.NewKeyDownEvent (Key.CursorLeft);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.CursorRight);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- top.Remove (_textView);
- Application.RequestStop ();
- };
- Application.Run (top);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Tab_Test_Follow_By_Home_And_Then_Follow_By_End_And_Then_Follow_By_BackTab_With_Text ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Iteration += (s, a) =>
- {
- int width = _textView.Viewport.Width - 1;
- Assert.Equal (30, width + 1);
- Assert.Equal (10, _textView.Height);
- var col = 0;
- var leftCol = 0;
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- Assert.Equal (leftCol, _textView.LeftColumn);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- Assert.Equal (32, _textView.Text.Length);
- while (col < 100)
- {
- col++;
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- _textView.NewKeyDownEvent (Key.Home);
- col = 0;
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = 0;
- Assert.Equal (leftCol, _textView.LeftColumn);
- _textView.NewKeyDownEvent (Key.End);
- col = _textView.Text.Length;
- Assert.Equal (132, _textView.Text.Length);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- string txt = _textView.Text;
- while (col - 1 > 0 && txt [col - 1] != '\t')
- {
- col--;
- }
- _textView.CursorPosition = new Point (col, 0);
- leftCol = GetLeftCol (leftCol);
- while (col > 0)
- {
- col--;
- _textView.NewKeyDownEvent (Key.Tab.WithShift);
- Assert.Equal (new Point (col, 0), _textView.CursorPosition);
- leftCol = GetLeftCol (leftCol);
- Assert.Equal (leftCol, _textView.LeftColumn);
- }
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- Assert.Equal (32, _textView.Text.Length);
- top.Remove (_textView);
- Application.RequestStop ();
- };
- Application.Run (top);
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void TabWidth_Setting_To_Zero_Keeps_AllowsTab ()
- {
- var top = new Toplevel ();
- top.Add (_textView);
- Application.Begin (top);
- Assert.Equal (4, _textView.TabWidth);
- Assert.True (_textView.AllowsTab);
- Assert.True (_textView.AllowsReturn);
- Assert.True (_textView.Multiline);
- _textView.TabWidth = -1;
- Assert.Equal (0, _textView.TabWidth);
- Assert.True (_textView.AllowsTab);
- Assert.True (_textView.AllowsReturn);
- Assert.True (_textView.Multiline);
- _textView.NewKeyDownEvent (Key.Tab);
- Assert.Equal ("\tTAB to jump between text fields.", _textView.Text);
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- TAB to jump between text field",
- _output
- );
- _textView.TabWidth = 4;
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- TAB to jump between text f",
- _output
- );
- _textView.NewKeyDownEvent (Key.Tab.WithShift);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- Assert.True (_textView.NeedsDraw);
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- TAB to jump between text field",
- _output
- );
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void TextChanged_Event ()
- {
- _textView.TextChanged += (s, e) =>
- {
- if (_textView.Text == "changing")
- {
- Assert.Equal ("changing", _textView.Text);
- _textView.Text = "changed";
- }
- };
- _textView.Text = "changing";
- Assert.Equal ("changed", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void TextChanged_Event_NoFires_OnTyping ()
- {
- var eventcount = 0;
- _textView.TextChanged += (s, e) => { eventcount++; };
- _textView.Text = "ay";
- Assert.Equal (1, eventcount);
- _textView.NewKeyDownEvent (Key.Y.WithShift);
- Assert.Equal (1, eventcount);
- Assert.Equal ("Yay", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void TextView_InsertText_Newline_CRLF ()
- {
- var tv = new TextView { Width = 10, Height = 10 };
- tv.InsertText ("\r\naaa\r\nbbb");
- PlatformID p = Environment.OSVersion.Platform;
- if (p == PlatformID.Win32NT || p == PlatformID.Win32S || p == PlatformID.Win32Windows)
- {
- Assert.Equal ("\r\naaa\r\nbbb", tv.Text);
- }
- else
- {
- Assert.Equal ("\naaa\nbbb", tv.Text);
- }
- Assert.Equal ($"{Environment.NewLine}aaa{Environment.NewLine}bbb", tv.Text);
- var win = new Window ();
- win.Add (tv);
- var top = new Toplevel ();
- top.Add (win);
- Application.Begin (top);
- ((FakeDriver)Application.Driver!).SetBufferSize (15, 15);
- Application.LayoutAndDraw ();
- //this passes
- Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- ┌─────────────┐
- │ │
- │aaa │
- │bbb │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └─────────────┘",
- _output
- );
- Assert.Equal (new Rectangle (0, 0, 15, 15), pos);
- Assert.True (tv.Used);
- tv.Used = false;
- tv.CursorPosition = Point.Empty;
- tv.InsertText ("\r\naaa\r\nbbb");
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- ┌─────────────┐
- │ │
- │aaa │
- │bbb │
- │aaa │
- │bbb │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └─────────────┘",
- _output
- );
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void TextView_InsertText_Newline_LF ()
- {
- var tv = new TextView { Width = 10, Height = 10 };
- tv.InsertText ("\naaa\nbbb");
- PlatformID p = Environment.OSVersion.Platform;
- if (p == PlatformID.Win32NT || p == PlatformID.Win32S || p == PlatformID.Win32Windows)
- {
- Assert.Equal ("\r\naaa\r\nbbb", tv.Text);
- }
- else
- {
- Assert.Equal ("\naaa\nbbb", tv.Text);
- }
- Assert.Equal ($"{Environment.NewLine}aaa{Environment.NewLine}bbb", tv.Text);
- var win = new Window ();
- win.Add (tv);
- var top = new Toplevel ();
- top.Add (win);
- Application.Begin (top);
- ((FakeDriver)Application.Driver!).SetBufferSize (15, 15);
- Application.LayoutAndDraw ();
- //this passes
- Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- ┌─────────────┐
- │ │
- │aaa │
- │bbb │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └─────────────┘",
- _output
- );
- Assert.Equal (new Rectangle (0, 0, 15, 15), pos);
- Assert.True (tv.Used);
- tv.Used = false;
- tv.CursorPosition = Point.Empty;
- tv.InsertText ("\naaa\nbbb");
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- ┌─────────────┐
- │ │
- │aaa │
- │bbb │
- │aaa │
- │bbb │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- │ │
- └─────────────┘",
- _output
- );
- top.Dispose ();
- }
- [Fact]
- public void TextView_MultiLine_But_Without_Tabs ()
- {
- var view = new TextView ();
- // the default for TextView
- Assert.True (view.Multiline);
- view.AllowsTab = false;
- Assert.False (view.AllowsTab);
- Assert.True (view.Multiline);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void TextView_SpaceHandling ()
- {
- var tv = new TextView { Width = 10, Text = " " };
- var ev = new MouseEventArgs { Position = new (0, 0), Flags = MouseFlags.Button1DoubleClicked };
- tv.NewMouseEvent (ev);
- Assert.Equal (1, tv.SelectedLength);
- ev = new MouseEventArgs { Position = new (1, 0), Flags = MouseFlags.Button1DoubleClicked };
- tv.NewMouseEvent (ev);
- Assert.Equal (1, tv.SelectedLength);
- }
- [Fact]
- [AutoInitShutdown]
- public void UnwrappedCursorPosition_Event ()
- {
- var cp = Point.Empty;
- var tv = new TextView
- {
- Width = Dim.Fill (), Height = Dim.Fill (), Text = "This is the first line.\nThis is the second line.\n"
- };
- tv.UnwrappedCursorPosition += (s, e) => { cp = e; };
- var top = new Toplevel ();
- top.Add (tv);
- Application.Begin (top);
- Application.LayoutAndDraw ();
- Assert.False (tv.WordWrap);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (Point.Empty, cp);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.
- ",
- _output
- );
- tv.WordWrap = true;
- tv.CursorPosition = new Point (12, 0);
- tv.Draw ();
- Assert.Equal (new Point (12, 0), tv.CursorPosition);
- Assert.Equal (new Point (12, 0), cp);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.
- ",
- _output
- );
- ((FakeDriver)Application.Driver).SetBufferSize (6, 25);
- tv.SetRelativeLayout (Application.Screen.Size);
- tv.Draw ();
- Assert.Equal (new Point (4, 2), tv.CursorPosition);
- Assert.Equal (new Point (12, 0), cp);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This
- is
- the
- first
-
- line.
- This
- is
- the
- secon
- d
- line.
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- tv.Draw ();
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.Equal (new Point (12, 0), cp);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This
- is
- the
- first
-
- line.
- This
- is
- the
- secon
- d
- line.
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- tv.Draw ();
- Assert.Equal (new Point (1, 3), tv.CursorPosition);
- Assert.Equal (new Point (13, 0), cp);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This
- is
- the
- first
-
- line.
- This
- is
- the
- secon
- d
- line.
- ",
- _output
- );
- Assert.True (tv.NewMouseEvent (new MouseEventArgs { Position = new (0, 3), Flags = MouseFlags.Button1Pressed }));
- tv.Draw ();
- Assert.Equal (new Point (0, 3), tv.CursorPosition);
- Assert.Equal (new Point (13, 0), cp);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This
- is
- the
- first
-
- line.
- This
- is
- the
- secon
- d
- line.
- ",
- _output
- );
- top.Dispose ();
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Used_Is_False ()
- {
- _textView.Used = false;
- _textView.CursorPosition = new Point (10, 0);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.U); // u
- Assert.Equal ("TAB to jumu between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.S); // s
- Assert.Equal ("TAB to jumusbetween text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.E); // e
- Assert.Equal ("TAB to jumuseetween text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.D); // d
- Assert.Equal ("TAB to jumusedtween text fields.", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void Used_Is_True_By_Default ()
- {
- _textView.CursorPosition = new Point (10, 0);
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.U); // u
- Assert.Equal ("TAB to jumup between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.S); // s
- Assert.Equal ("TAB to jumusp between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.E); // e
- Assert.Equal ("TAB to jumusep between text fields.", _textView.Text);
- _textView.NewKeyDownEvent (Key.D); // d
- Assert.Equal ("TAB to jumusedp between text fields.", _textView.Text);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordBackward_Multiline_With_Selection ()
- {
- // 4 3 2 1
- // 87654321098765432109876 54321098765432109876543210-Length
- // 1 2 1 2
- // 01234567890123456789012 0123456789012345678901234
- _textView.Text = "This is the first line.\nThis is the second line.";
- _textView.MoveEnd ();
- _textView.SelectionStartColumn = _textView.CurrentColumn;
- _textView.SelectionStartRow = _textView.CurrentRow;
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- _textView.NewKeyDownEvent (Key.CursorLeft.WithCtrl.WithShift);
- switch (iteration)
- {
- case 0:
- Assert.Equal (23, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (1, _textView.SelectedLength);
- Assert.Equal (".", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (19, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (5, _textView.SelectedLength);
- Assert.Equal ("line.", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (12, _textView.SelectedLength);
- Assert.Equal ("second line.", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (16, _textView.SelectedLength);
- Assert.Equal ("the second line.", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (19, _textView.SelectedLength);
- Assert.Equal ("is the second line.", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (24, _textView.SelectedLength);
- Assert.Equal ("This is the second line.", _textView.SelectedText);
- break;
- case 6:
- Assert.Equal (23, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (24 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal ($"{Environment.NewLine}This is the second line.", _textView.SelectedText);
- break;
- case 7:
- Assert.Equal (22, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (25 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $".{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- case 8:
- Assert.Equal (18, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (29 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"line.{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- case 9:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (35 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"first line.{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- case 10:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (39 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"the first line.{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- case 11:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (42 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"is the first line.{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- case 12:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (24, _textView.SelectionStartColumn);
- Assert.Equal (1, _textView.SelectionStartRow);
- Assert.Equal (47 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordBackward_With_No_Selection ()
- {
- _textView.CursorPosition = new Point (_textView.Text.Length, 0);
- var iteration = 0;
- while (_textView.CursorPosition.X > 0)
- {
- _textView.NewKeyDownEvent (Key.CursorLeft.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (31, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (20, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (7, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (4, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 6:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordBackward_With_No_Selection_And_With_More_Than_Only_One_Whitespace_And_With_Only_One_Letter ()
- {
- // 1 2 3 4 5
- // 0123456789012345678901234567890123456789012345678901234=55 (Length)
- _textView.Text = "TAB t o jump b etween t ext f ields .";
- _textView.CursorPosition = new Point (_textView.Text.Length, 0);
- var iteration = 0;
- while (_textView.CursorPosition.X > 0)
- {
- _textView.NewKeyDownEvent (Key.CursorLeft.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (54, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (48, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (46, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (40, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (38, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (28, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 6:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 7:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 8:
- Assert.Equal (9, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 9:
- Assert.Equal (6, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 10:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordBackward_With_Selection ()
- {
- _textView.CursorPosition = new Point (_textView.Text.Length, 0);
- _textView.SelectionStartColumn = _textView.Text.Length;
- _textView.SelectionStartRow = 0;
- var iteration = 0;
- while (_textView.CursorPosition.X > 0)
- {
- _textView.NewKeyDownEvent (Key.CursorLeft.WithCtrl.WithShift);
- switch (iteration)
- {
- case 0:
- Assert.Equal (31, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (1, _textView.SelectedLength);
- Assert.Equal (".", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (7, _textView.SelectedLength);
- Assert.Equal ("fields.", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (20, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (12, _textView.SelectedLength);
- Assert.Equal ("text fields.", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (20, _textView.SelectedLength);
- Assert.Equal ("between text fields.", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (7, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (25, _textView.SelectedLength);
- Assert.Equal ("jump between text fields.", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (4, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (28, _textView.SelectedLength);
- Assert.Equal ("to jump between text fields.", _textView.SelectedText);
- break;
- case 6:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (32, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (32, _textView.SelectedLength);
- Assert.Equal ("TAB to jump between text fields.", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void
- WordBackward_With_The_Same_Values_For_SelectedStart_And_CursorPosition_And_Not_Starting_At_Beginning_Of_The_Text ()
- {
- _textView.CursorPosition = new Point (10, 0);
- _textView.SelectionStartColumn = 10;
- _textView.SelectionStartRow = 0;
- var iteration = 0;
- while (_textView.CursorPosition.X > 0)
- {
- _textView.NewKeyDownEvent (Key.CursorLeft.WithCtrl.WithShift);
- switch (iteration)
- {
- case 0:
- Assert.Equal (7, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (3, _textView.SelectedLength);
- Assert.Equal ("jum", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (4, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (6, _textView.SelectedLength);
- Assert.Equal ("to jum", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (10, _textView.SelectedLength);
- Assert.Equal ("TAB to jum", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- public void WordBackward_WordForward_Limits_Return_Null ()
- {
- var model = new TextModel ();
- model.LoadString ("Test");
- (int col, int row)? newPos = model.WordBackward (0, 0);
- Assert.Null (newPos);
- newPos = model.WordForward (4, 0);
- Assert.Null (newPos);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordForward_Multiline_With_Selection ()
- {
- // 1 2 3 4
- // 01234567890123456789012 34567890123456789012345678-Length
- // 1 2 1 2
- // 01234567890123456789012 0123456789012345678901234
- _textView.Text = "This is the first line.\nThis is the second line.";
- _textView.SelectionStartColumn = _textView.CurrentColumn;
- _textView.SelectionStartRow = _textView.CurrentRow;
- var iteration = 0;
- var iterationsFinished = false;
- while (!iterationsFinished)
- {
- _textView.NewKeyDownEvent (
- new Key (
- KeyCode.CursorRight | KeyCode.CtrlMask | KeyCode.ShiftMask
- )
- );
- switch (iteration)
- {
- case 0:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (5, _textView.SelectedLength);
- Assert.Equal ("This ", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (8, _textView.SelectedLength);
- Assert.Equal ("This is ", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (12, _textView.SelectedLength);
- Assert.Equal ("This is the ", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (18, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (18, _textView.SelectedLength);
- Assert.Equal ("This is the first ", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (23, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (23, _textView.SelectedLength);
- Assert.Equal ("This is the first line.", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (0, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (23 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal ($"This is the first line.{Environment.NewLine}", _textView.SelectedText);
- break;
- case 6:
- Assert.Equal (5, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (28 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This ",
- _textView.SelectedText
- );
- break;
- case 7:
- Assert.Equal (8, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (31 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is ",
- _textView.SelectedText
- );
- break;
- case 8:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (35 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the ",
- _textView.SelectedText
- );
- break;
- case 9:
- Assert.Equal (19, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (42 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second ",
- _textView.SelectedText
- );
- break;
- case 10:
- Assert.Equal (24, _textView.CursorPosition.X);
- Assert.Equal (1, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (47 + Environment.NewLine.Length, _textView.SelectedLength);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.",
- _textView.SelectedText
- );
- break;
- default:
- iterationsFinished = true;
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordForward_With_No_Selection ()
- {
- _textView.CursorPosition = Point.Empty;
- var iteration = 0;
- while (_textView.CursorPosition.X < _textView.Text.Length)
- {
- _textView.NewKeyDownEvent (Key.CursorRight.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (4, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (7, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (20, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (32, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordForward_With_No_Selection_And_With_More_Than_Only_One_Whitespace_And_With_Only_One_Letter ()
- {
- // 1 2 3 4 5
- // 0123456789012345678901234567890123456789012345678901234=55 (Length)
- _textView.Text = "TAB t o jump b etween t ext f ields .";
- _textView.CursorPosition = Point.Empty;
- var iteration = 0;
- while (_textView.CursorPosition.X < _textView.Text.Length)
- {
- _textView.NewKeyDownEvent (Key.CursorRight.WithCtrl);
- switch (iteration)
- {
- case 0:
- Assert.Equal (6, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (9, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (28, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (38, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 6:
- Assert.Equal (40, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 7:
- Assert.Equal (46, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 8:
- Assert.Equal (48, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 9:
- Assert.Equal (54, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- case 10:
- Assert.Equal (55, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (0, _textView.SelectedLength);
- Assert.Equal ("", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordForward_With_Selection ()
- {
- _textView.CursorPosition = Point.Empty;
- _textView.SelectionStartColumn = 0;
- _textView.SelectionStartRow = 0;
- var iteration = 0;
- while (_textView.CursorPosition.X < _textView.Text.Length)
- {
- _textView.NewKeyDownEvent (
- new Key (
- KeyCode.CursorRight | KeyCode.CtrlMask | KeyCode.ShiftMask
- )
- );
- switch (iteration)
- {
- case 0:
- Assert.Equal (4, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (4, _textView.SelectedLength);
- Assert.Equal ("TAB ", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (7, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (7, _textView.SelectedLength);
- Assert.Equal ("TAB to ", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (12, _textView.SelectedLength);
- Assert.Equal ("TAB to jump ", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (20, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (20, _textView.SelectedLength);
- Assert.Equal ("TAB to jump between ", _textView.SelectedText);
- break;
- case 4:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (25, _textView.SelectedLength);
- Assert.Equal ("TAB to jump between text ", _textView.SelectedText);
- break;
- case 5:
- Assert.Equal (32, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (0, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (32, _textView.SelectedLength);
- Assert.Equal ("TAB to jump between text fields.", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void
- WordForward_With_The_Same_Values_For_SelectedStart_And_CursorPosition_And_Not_Starting_At_Beginning_Of_The_Text ()
- {
- _textView.CursorPosition = new Point (10, 0);
- _textView.SelectionStartColumn = 10;
- _textView.SelectionStartRow = 0;
- var iteration = 0;
- while (_textView.CursorPosition.X < _textView.Text.Length)
- {
- _textView.NewKeyDownEvent (
- new Key (
- KeyCode.CursorRight | KeyCode.CtrlMask | KeyCode.ShiftMask
- )
- );
- switch (iteration)
- {
- case 0:
- Assert.Equal (12, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (2, _textView.SelectedLength);
- Assert.Equal ("p ", _textView.SelectedText);
- break;
- case 1:
- Assert.Equal (20, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (10, _textView.SelectedLength);
- Assert.Equal ("p between ", _textView.SelectedText);
- break;
- case 2:
- Assert.Equal (25, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (15, _textView.SelectedLength);
- Assert.Equal ("p between text ", _textView.SelectedText);
- break;
- case 3:
- Assert.Equal (32, _textView.CursorPosition.X);
- Assert.Equal (0, _textView.CursorPosition.Y);
- Assert.Equal (10, _textView.SelectionStartColumn);
- Assert.Equal (0, _textView.SelectionStartRow);
- Assert.Equal (22, _textView.SelectedLength);
- Assert.Equal ("p between text fields.", _textView.SelectedText);
- break;
- }
- iteration++;
- }
- }
- [Fact]
- [AutoInitShutdown]
- public void WordWrap_Deleting_Backwards ()
- {
- var tv = new TextView { Width = 5, Height = 2, WordWrap = true, Text = "aaaa" };
- var top = new Toplevel ();
- top.Add (tv);
- Application.Begin (top);
- Application.LayoutAndDraw ();
- Assert.Equal (Point.Empty, tv.CursorPosition);
- Assert.Equal (0, tv.LeftColumn);
- TestHelpers.AssertDriverContentsAre (
- @"
- aaaa
- ",
- _output
- );
- tv.CursorPosition = new Point (5, 0);
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.LayoutAndDraw ();
- Assert.Equal (0, tv.LeftColumn);
- TestHelpers.AssertDriverContentsAre (
- @"
- aaa
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.LayoutAndDraw ();
- Assert.Equal (0, tv.LeftColumn);
- TestHelpers.AssertDriverContentsAre (
- @"
- aa
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.LayoutAndDraw ();
- Assert.Equal (0, tv.LeftColumn);
- TestHelpers.AssertDriverContentsAre (
- @"
- a
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.LayoutAndDraw ();
- Assert.Equal (0, tv.LeftColumn);
- TestHelpers.AssertDriverContentsAre (
- @"
- ",
- _output
- );
- Assert.True (tv.NewKeyDownEvent (Key.Backspace));
- Application.LayoutAndDraw ();
- Assert.Equal (0, tv.LeftColumn);
- TestHelpers.AssertDriverContentsAre (
- @"
- ",
- _output
- );
- top.Dispose ();
- }
- [Theory]
- [TextViewTestsAutoInitShutdown]
- [InlineData (KeyCode.Delete)]
- public void WordWrap_Draw_Typed_Keys_After_Text_Is_Deleted (KeyCode del)
- {
- var top = new Toplevel ();
- top.Add (_textView);
- _textView.Text = "Line 1.\nLine 2.";
- _textView.WordWrap = true;
- Application.Begin (top);
- Application.LayoutAndDraw ();
- Assert.True (_textView.WordWrap);
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- Line 1.
- Line 2.",
- _output
- );
- Assert.True (_textView.NewKeyDownEvent (Key.End.WithShift));
- Assert.Equal ("Line 1.", _textView.SelectedText);
- Assert.True (_textView.NewKeyDownEvent (new Key (del)));
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre ("Line 2.", _output);
- Assert.True (_textView.NewKeyDownEvent (Key.H.WithShift));
- Assert.NotEqual (Rectangle.Empty, _textView._needsDrawRect);
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- H
- Line 2.",
- _output
- );
- top.Dispose ();
- }
- [Fact]
- public void WordWrap_Gets_Sets ()
- {
- var tv = new TextView { WordWrap = true };
- Assert.True (tv.WordWrap);
- tv.WordWrap = false;
- Assert.False (tv.WordWrap);
- }
- [Fact]
- [AutoInitShutdown]
- public void WordWrap_Not_Throw_If_Width_Is_Less_Than_Zero ()
- {
- Exception exception = Record.Exception (
- () =>
- {
- var tv = new TextView
- {
- Width = Dim.Fill (),
- Height = Dim.Fill (),
- WordWrap = true,
- Text = "これは、左右のクリップ境界をテストするための非常に長いテキストです。"
- };
- }
- );
- Assert.Null (exception);
- }
- [Fact]
- [AutoInitShutdown]
- public void WordWrap_ReadOnly_CursorPosition_SelectedText_Copy ()
- {
- // 0123456789
- var text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = 11, Height = 9 };
- tv.Text = text;
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- tv.WordWrap = true;
- var top = new Toplevel ();
- top.Add (tv);
- top.Layout ();
- tv.Draw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is
- the first
- line.
- This is
- the
- second
- line.
- ",
- _output
- );
- tv.ReadOnly = true;
- tv.CursorPosition = new Point (6, 2);
- Assert.Equal (new Point (5, 2), tv.CursorPosition);
- top.LayoutSubviews ();
- View.SetClipToScreen ();
- tv.Draw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is
- the first
- line.
- This is
- the second
- line.
- ",
- _output
- );
- tv.SelectionStartRow = 0;
- tv.SelectionStartColumn = 0;
- Assert.Equal ("This is the first line.", tv.SelectedText);
- tv.Copy ();
- Assert.Equal ("This is the first line.", Clipboard.Contents);
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordWrap_True_LoadStream_New_Text ()
- {
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- _textView.WordWrap = true;
- Assert.Equal ("TAB to jump between text fields.", _textView.Text);
- var text = "This is the first line.\nThis is the second line.\n";
- using (var stream = new MemoryStream ())
- {
- var writer = new StreamWriter (stream);
- writer.Write (text);
- writer.Flush ();
- stream.Position = 0;
- _textView.Load (stream);
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- _textView.Text
- );
- Assert.True (_textView.WordWrap);
- }
- }
- [Fact]
- public void WordWrap_True_Text_Always_Returns_Unwrapped ()
- {
- var text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = 10 };
- tv.Text = text;
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- tv.WordWrap = true;
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- }
- [Fact]
- [TextViewTestsAutoInitShutdown]
- public void WordWrap_WrapModel_Output ()
- {
- // 0123456789
- var text = "This is the first line.\nThis is the second line.\n";
- var tv = new TextView { Width = 10, Height = 10 };
- tv.Text = text;
- Assert.Equal (
- $"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}",
- tv.Text
- );
- tv.WordWrap = true;
- var top = new Toplevel ();
- top.Add (tv);
- top.Layout ();
- tv.Draw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is
- the
- first
- line.
- This is
- the
- second
- line.
- ",
- _output
- );
- }
- private int GetLeftCol (int start)
- {
- string [] lines = _textView.Text.Split (Environment.NewLine);
- if (lines == null || lines.Length == 0)
- {
- return 0;
- }
- if (start == _textView.LeftColumn)
- {
- return start;
- }
- if (_textView.LeftColumn == _textView.CurrentColumn)
- {
- return _textView.CurrentColumn;
- }
- int cCol = _textView.CurrentColumn;
- string line = lines [_textView.CurrentRow];
- int lCount = cCol > line.Length - 1 ? line.Length - 1 : cCol;
- int width = _textView.Frame.Width;
- int tabWidth = _textView.TabWidth;
- var sumLength = 0;
- var col = 0;
- for (int i = lCount; i >= 0; i--)
- {
- char r = line [i];
- sumLength += ((Rune)r).GetColumns ();
- if (r == '\t')
- {
- sumLength += tabWidth + 1;
- }
- if (sumLength > width)
- {
- if (col + width == cCol)
- {
- col++;
- }
- break;
- }
- if ((cCol < line.Length && col > 0 && start < cCol && col == start) || cCol - col == width - 1)
- {
- break;
- }
- col = i;
- }
- return col;
- }
- // This class enables test functions annotated with the [InitShutdown] attribute
- // to have a function called before the test function is called and after.
- //
- // This is necessary because a) Application is a singleton and Init/Shutdown must be called
- // as a pair, and b) all unit test functions should be atomic.
- [AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)]
- public class TextViewTestsAutoInitShutdown : AutoInitShutdownAttribute
- {
- public static string Txt = "TAB to jump between text fields.";
- public TextViewTestsAutoInitShutdown () : base (configLocation: ConfigLocations.Default) { }
- public override void After (MethodInfo methodUnderTest)
- {
- _textView = null;
- base.After (methodUnderTest);
- }
- public override void Before (MethodInfo methodUnderTest)
- {
- FakeDriver.FakeBehaviors.UseFakeClipboard = true;
- base.Before (methodUnderTest);
- // 1 2 3
- // 01234567890123456789012345678901=32 (Length)
- byte [] buff = Encoding.Unicode.GetBytes (Txt);
- byte [] ms = new MemoryStream (buff).ToArray ();
- _textView = new TextView { Width = 30, Height = 10, ColorScheme = Colors.ColorSchemes ["Base"] };
- _textView.Text = Encoding.Unicode.GetString (ms);
- }
- }
- [Fact]
- public void HotKey_Command_SetsFocus ()
- {
- var view = new TextView ();
- view.CanFocus = true;
- Assert.False (view.HasFocus);
- view.InvokeCommand (Command.HotKey);
- Assert.True (view.HasFocus);
- }
- [Fact]
- public void HotKey_Command_Does_Not_Accept ()
- {
- var view = new TextView ();
- var accepted = false;
- view.Accepting += OnAccept;
- view.InvokeCommand (Command.HotKey);
- Assert.False (accepted);
- return;
- void OnAccept (object sender, CommandEventArgs e) { accepted = true; }
- }
- [Theory]
- [InlineData (false, 1)]
- [InlineData (true, 1)]
- public void Accepted_Command_Raises_Accepted_Regardles_Of_AllowsReturn (bool allowsReturn, int expectedAcceptEvents)
- {
- var view = new TextView ()
- {
- AllowsReturn = allowsReturn,
- };
- int acceptedEvents = 0;
- view.Accepting += Accept;
- view.InvokeCommand (Command.Accept);
- Assert.Equal (expectedAcceptEvents, acceptedEvents);
- return;
- void Accept (object sender, CommandEventArgs e) { acceptedEvents++; }
- }
- [Theory]
- [InlineData (false, 1)]
- [InlineData (true, 0)]
- public void Enter_Key_Fires_Accepted_BasedOn_AllowsReturn (bool allowsReturn, int expectedAccepts)
- {
- var view = new TextView ()
- {
- Multiline = allowsReturn,
- };
- int accepted = 0;
- view.Accepting += Accept;
- view.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expectedAccepts, accepted);
- return;
- void Accept (object sender, CommandEventArgs e) { accepted++; }
- }
- [Theory]
- [InlineData (false, 1)]
- [InlineData (true, 0)]
- public void Enter_Key_Fires_Accepted_BasedOn_Multiline (bool multiline, int expectedAccepts)
- {
- var view = new TextView ()
- {
- Multiline = multiline,
- };
- int accepted = 0;
- view.Accepting += Accept;
- view.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expectedAccepts, accepted);
- return;
- void Accept (object sender, CommandEventArgs e) { accepted++; }
- }
- [Fact]
- public void Space_Key_Types_Space ()
- {
- var view = new TextView ()
- {
- };
- view.NewKeyDownEvent (Key.Space);
- Assert.Equal (" ", view.Text);
- }
- [Theory]
- [InlineData (false, false, 1, 1)]
- [InlineData (false, true, 1, 0)]
- [InlineData (true, false, 0, 0)]
- [InlineData (true, true, 0, 0)]
- public void Accepted_Event_Handled_Prevents_Default_Button_Accept (bool multiline, bool handleAccept, int expectedAccepts, int expectedButtonAccepts)
- {
- var superView = new Window ();
- var tv = new TextView ()
- {
- Multiline = multiline
- };
- var button = new Button ()
- {
- IsDefault = true,
- };
- superView.Add (tv, button);
- var buttonAccept = 0;
- button.Accepting += ButtonAccept;
- var textViewAccept = 0;
- tv.Accepting += TextViewAccept;
- tv.SetFocus ();
- Assert.True (tv.HasFocus);
- superView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expectedAccepts, textViewAccept);
- Assert.Equal (expectedButtonAccepts, buttonAccept);
- button.SetFocus ();
- superView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expectedAccepts, textViewAccept);
- Assert.Equal (expectedButtonAccepts + 1, buttonAccept);
- return;
- void TextViewAccept (object sender, CommandEventArgs e)
- {
- textViewAccept++;
- e.Cancel = handleAccept;
- }
- void ButtonAccept (object sender, CommandEventArgs e)
- {
- buttonAccept++;
- }
- }
- [Theory]
- [InlineData (true, 0)]
- [InlineData (false, 1)]
- public void Accepted_No_Handler_Enables_Default_Button_Accept (bool multiline, int expectedButtonAccept)
- {
- var superView = new Window ();
- var tv = new TextView ()
- {
- Multiline = multiline
- };
- var button = new Button ()
- {
- IsDefault = true,
- };
- superView.Add (tv, button);
- var buttonAccept = 0;
- button.Accepting += ButtonAccept;
- tv.SetFocus ();
- Assert.True (tv.HasFocus);
- superView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expectedButtonAccept, buttonAccept);
- button.SetFocus ();
- superView.NewKeyDownEvent (Key.Enter);
- Assert.Equal (expectedButtonAccept + 1, buttonAccept);
- return;
- void ButtonAccept (object sender, CommandEventArgs e)
- {
- buttonAccept++;
- }
- }
- [Fact]
- public void Autocomplete_Popup_Added_To_SuperView_On_Init ()
- {
- View superView = new ()
- {
- CanFocus = true,
- };
- TextView t = new ();
- superView.Add (t);
- Assert.Single (superView.Subviews);
- superView.BeginInit ();
- superView.EndInit ();
- Assert.Equal (2, superView.Subviews.Count);
- }
- [Fact]
- public void Autocomplete__Added_To_SuperView_On_Add ()
- {
- View superView = new ()
- {
- CanFocus = true,
- Id = "superView",
- };
- superView.BeginInit ();
- superView.EndInit ();
- Assert.Empty (superView.Subviews);
- TextView t = new ()
- {
- Id = "t"
- };
- superView.Add (t);
- Assert.Equal (2, superView.Subviews.Count);
- }
- [Fact]
- public void Autocomplete_Visible_False_By_Default ()
- {
- View superView = new ()
- {
- CanFocus = true,
- };
- TextView t = new ();
- superView.Add (t);
- superView.BeginInit ();
- superView.EndInit ();
- Assert.Equal (2, superView.Subviews.Count);
- Assert.True (t.Visible);
- Assert.False (t.Autocomplete.Visible);
- }
- [Fact]
- public void Right_CursorAtEnd_WithSelection_ShouldClearSelection ()
- {
- var tv = new TextView
- {
- Text = "Hello",
- };
- tv.SetFocus ();
- tv.NewKeyDownEvent (Key.End.WithShift);
- Assert.Equal (5, tv.CursorPosition.X);
- // When there is selected text and the cursor is at the end of the text field
- Assert.Equal ("Hello", tv.SelectedText);
- // Pressing right should not move focus, instead it should clear selection
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- Assert.Empty (tv.SelectedText);
- // Now that the selection is cleared another right keypress should move focus
- Assert.False (tv.NewKeyDownEvent (Key.CursorRight));
- }
- [Fact]
- public void Left_CursorAtStart_WithSelection_ShouldClearSelection ()
- {
- var tv = new TextView
- {
- Text = "Hello",
- };
- tv.SetFocus ();
- tv.NewKeyDownEvent (Key.CursorRight);
- tv.NewKeyDownEvent (Key.CursorRight);
- Assert.Equal (2, tv.CursorPosition.X);
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft.WithShift));
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft.WithShift));
- // When there is selected text and the cursor is at the start of the text field
- Assert.Equal ("He", tv.SelectedText);
- // Pressing left should not move focus, instead it should clear selection
- Assert.True (tv.NewKeyDownEvent (Key.CursorLeft));
- Assert.Empty (tv.SelectedText);
- // When clearing selected text with left the cursor should be at the start of the selection
- Assert.Equal (0, tv.CursorPosition.X);
- // Now that the selection is cleared another left keypress should move focus
- Assert.False (tv.NewKeyDownEvent (Key.CursorLeft));
- }
- [Fact]
- [AutoInitShutdown]
- public void Draw_Esc_Rune ()
- {
- var tv = new TextView { Width = 5, Height = 1, Text = "\u001b" };
- tv.BeginInit ();
- tv.EndInit ();
- tv.Draw ();
- TestHelpers.AssertDriverContentsWithFrameAre ("\u241b", _output);
- tv.Dispose ();
- }
- [Fact]
- public void Equals_True ()
- {
- var c1 = new Cell ();
- var c2 = new Cell ();
- Assert.True (c1.Equals (c2));
- Assert.True (c2.Equals (c1));
- c1.Rune = new ('a');
- c1.Attribute = new ();
- c2.Rune = new ('a');
- c2.Attribute = new ();
- Assert.True (c1.Equals (c2));
- Assert.True (c2.Equals (c1));
- }
- [Fact]
- [AutoInitShutdown]
- public void CellEventArgs_WordWrap_True ()
- {
- var eventCount = 0;
- List<List<Cell>> text =
- [
- Cell.ToCells (
- "This is the first line.".ToRunes ()
- ),
- Cell.ToCells (
- "This is the second line.".ToRunes ()
- )
- ];
- TextView tv = CreateTextView ();
- tv.DrawNormalColor += textView_DrawColor;
- tv.DrawReadOnlyColor += textView_DrawColor;
- tv.DrawSelectionColor += textView_DrawColor;
- tv.DrawUsedColor += textView_DrawColor;
- void textView_DrawColor (object sender, CellEventArgs e)
- {
- Assert.Equal (e.Line [e.Col], text [e.UnwrappedPosition.Row] [e.UnwrappedPosition.Col]);
- eventCount++;
- }
- tv.Text = $"{Cell.ToString (text [0])}\n{Cell.ToString (text [1])}\n";
- Assert.False (tv.WordWrap);
- var top = new Toplevel ();
- top.Add (tv);
- Application.Begin (top);
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is the first line.
- This is the second line.",
- _output
- );
- tv.Width = 10;
- tv.Height = 25;
- tv.WordWrap = true;
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (
- @"
- This is
- the
- first
- line.
- This is
- the
- second
- line. ",
- _output
- );
- Assert.Equal (eventCount, (text [0].Count + text [1].Count) * 2);
- top.Dispose ();
- }
- [Fact]
- [AutoInitShutdown (configLocation: ConfigLocations.Default)]
- public void Cell_LoadCells_InheritsPreviousAttribute ()
- {
- List<Cell> cells = [];
- foreach (KeyValuePair<string, ColorScheme> color in Colors.ColorSchemes)
- {
- string csName = color.Key;
- foreach (Rune rune in csName.EnumerateRunes ())
- {
- cells.Add (new () { Rune = rune, Attribute = color.Value.Normal });
- }
- cells.Add (new () { Rune = (Rune)'\n', Attribute = color.Value.Focus });
- }
- TextView tv = CreateTextView ();
- tv.Load (cells);
- var top = new Toplevel ();
- top.Add (tv);
- RunState rs = Application.Begin (top);
- Application.LayoutAndDraw ();
- Assert.True (tv.InheritsPreviousAttribute);
- var expectedText = @"
- TopLevel
- Base
- Dialog
- Menu
- Error ";
- TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output);
- Attribute [] attributes =
- {
- // 0
- Colors.ColorSchemes ["TopLevel"].Normal,
- // 1
- Colors.ColorSchemes ["Base"].Normal,
- // 2
- Colors.ColorSchemes ["Dialog"].Normal,
- // 3
- Colors.ColorSchemes ["Menu"].Normal,
- // 4
- Colors.ColorSchemes ["Error"].Normal,
- // 5
- tv.ColorScheme!.Focus
- };
- var expectedColor = @"
- 0000000055
- 1111555555
- 2222225555
- 3333555555
- 4444455555";
- TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes);
- tv.WordWrap = true;
- Application.LayoutAndDraw ();
- TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output);
- TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes);
- tv.CursorPosition = new (6, 2);
- tv.SelectionStartColumn = 0;
- tv.SelectionStartRow = 0;
- Assert.Equal ($"TopLevel{Environment.NewLine}Base{Environment.NewLine}Dialog", tv.SelectedText);
- tv.Copy ();
- tv.IsSelecting = false;
- tv.CursorPosition = new (2, 4);
- tv.Paste ();
- Application.LayoutAndDraw ();
- expectedText = @"
- TopLevel
- Base
- Dialog
- Menu
- ErTopLevel
- Base
- Dialogror ";
- TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output);
- expectedColor = @"
- 0000000055
- 1111555555
- 2222225555
- 3333555555
- 4400000000
- 1111555555
- 2222224445";
- TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes);
- tv.Undo ();
- tv.CursorPosition = new (0, 3);
- tv.SelectionStartColumn = 0;
- tv.SelectionStartRow = 0;
- Assert.Equal (
- $"TopLevel{Environment.NewLine}Base{Environment.NewLine}Dialog{Environment.NewLine}",
- tv.SelectedText
- );
- tv.Copy ();
- tv.IsSelecting = false;
- tv.CursorPosition = new (2, 4);
- tv.Paste ();
- Application.LayoutAndDraw ();
- expectedText = @"
- TopLevel
- Base
- Dialog
- Menu
- ErTopLevel
- Base
- Dialog
- ror ";
- TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output);
- expectedColor = @"
- 0000000055
- 1111555555
- 2222225555
- 3333555555
- 4400000000
- 1111555555
- 2222225555
- 4445555555";
- TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes);
- Application.End (rs);
- top.Dispose ();
- }
- [Fact]
- public void Cell_LoadCells_Without_ColorScheme_Is_Never_Null ()
- {
- List<Cell> cells = new ()
- {
- new() { Rune = new ('T') },
- new() { Rune = new ('e') },
- new() { Rune = new ('s') },
- new() { Rune = new ('t') }
- };
- TextView tv = CreateTextView ();
- var top = new Toplevel ();
- top.Add (tv);
- tv.Load (cells);
- for (var i = 0; i < tv.Lines; i++)
- {
- List<Cell> line = tv.GetLine (i);
- foreach (Cell c in line)
- {
- Assert.NotNull (c.Attribute);
- }
- }
- }
- private TextView CreateTextView () { return new () { Width = 30, Height = 10 }; }
- }
|