| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408 |
- using System.Text;
- namespace Terminal.Gui.ViewsTests;
- public class TextViewTests
- {
- [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]
- 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]
- 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 (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 (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 (TextEditingLineStatus)))
- {
- if ((TextEditingLineStatus)ls != TextEditingLineStatus.Original)
- {
- Assert.Throws<ArgumentException> (
- () => ht.Add (
- new List<List<Cell>> (),
- Point.Empty,
- (TextEditingLineStatus)ls
- )
- );
- }
- }
- Assert.Null (Record.Exception (() => ht.Add (new () { 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 (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 (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 (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 (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 (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 (1, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.D2));
- Assert.Equal ("12", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new (2, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.D3));
- Assert.Equal ("123", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new (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 (2, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.D4));
- Assert.Equal ("124", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new (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 (3, 0), 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 (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 (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 (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 (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 (1, 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (1, 1), 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (10, 0), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.R.WithCtrl));
- Assert.Equal ("First ", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new (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 ($"{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);
- 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 (".", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (Point.Empty, tv.CursorPosition);
- 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 ($".{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 ($"{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);
- 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_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 (23, 2), tv.CursorPosition);
- Assert.True (tv.NewKeyDownEvent (Key.Enter));
- Assert.Equal ($"{Environment.NewLine}", tv.Text);
- Assert.Equal (2, tv.Lines);
- Assert.Equal (new (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 (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 (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 (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 (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 (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 (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 (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 (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 (1, 1), 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 (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 (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 (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 (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_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 (6, 2);
- Assert.True (tv.NewKeyDownEvent (Key.Tab));
- Assert.Equal ("First \tline.", tv.Text);
- Assert.Equal (1, tv.Lines);
- Assert.Equal (new (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 (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 (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 (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 (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 (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 (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 (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 (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]
- 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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,None]", 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 ();
- 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]
- 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 (9, 0);
- Assert.Equal (new (9, 0), tv.CursorPosition);
- Assert.Equal (0, tv.LeftColumn);
- Assert.True (tv.NewKeyDownEvent (Key.CursorRight));
- tv.CursorPosition = new (10, 0);
- Assert.Equal (new (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]
- 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]
- 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]
- 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]
- public void WordBackward_WordForward_Limits_Return_Null ()
- {
- var model = new TextModel ();
- model.LoadString ("Test");
- (int col, int row)? newPos = model.WordBackward (0, 0, false);
- Assert.Null (newPos);
- newPos = model.WordForward (4, 0, false);
- Assert.Null (newPos);
- }
- [Fact]
- public void WordWrap_Gets_Sets ()
- {
- var tv = new TextView { WordWrap = true };
- Assert.True (tv.WordWrap);
- tv.WordWrap = false;
- Assert.False (tv.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]
- 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
- };
- var 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
- };
- var 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
- };
- var 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.Handled = 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]
- 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]
- public void Cell_LoadCells_Without_Scheme_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);
- }
- }
- }
- [Theory]
- [InlineData ("", false, "")]
- [InlineData ("", true, "")]
- [InlineData (" ", false, "")]
- [InlineData (" ", true, "")]
- [InlineData (" ", false, "")]
- [InlineData (" ", true, "")]
- [InlineData ("a", false, "")]
- [InlineData ("a", true, "")]
- [InlineData ("a ", false, "")]
- [InlineData ("a ", true, "")]
- [InlineData (" a ", false, "a ", "")]
- [InlineData (" a ", true, "a ", "")]
- [InlineData (" H1 ", false, "H1 ", "")]
- [InlineData (" H1 ", true, "H1 ", "")]
- [InlineData ("a$", false, "$", "")]
- [InlineData ("a$", true, "$", "")]
- [InlineData ("a$#", false, "$#", "")]
- [InlineData ("a$#", true, "$#", "#", "")]
- [InlineData (" a$# ", false, "a$# ", "$# ", "")]
- [InlineData (" a$# ", true, "a$# ", "$# ", "# ", "")]
- [InlineData ("\"$schema\"", false, "schema\"", "\"", "")]
- [InlineData ("\"$schema\"", true, "$schema\"", "schema\"", "\"", "")]
- [InlineData ("\": \"", false, "\"", "")]
- [InlineData ("\": \"", true, "\"", "")]
- [InlineData ("\"$schema\": \"", false, "schema\": \"", "\": \"", "\"", "")]
- [InlineData ("\"$schema\": \"", true, "$schema\": \"", "schema\": \"", "\": \"", "\"", "")]
- [InlineData ("1ºªA", false, "")]
- [InlineData ("1ºªA", true, "")]
- [InlineData (
- "ºª\\!\"#%&/()?'«»*;,:._-@{[]}]|$=+´`~^<>£€¨",
- false,
- "\\!\"#%&/()?'«»*;,:._-@{[]}]|$=+´`~^<>£€¨",
- "")]
- [InlineData (
- "ºª\\!\"#%&/()?'«»*;,:._-@{[]}]|$=+´`~^<>£€¨",
- true,
- "\\!\"#%&/()?'«»*;,:._-@{[]}]|$=+´`~^<>£€¨",
- "|$=+´`~^<>£€¨",
- "")]
- [InlineData (
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- false,
- "\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- " \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "\"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "\"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- ".github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- ".io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- ".Gui/schemas/tui-config-schema.json\"\r\n}",
- "Gui/schemas/tui-config-schema.json\"\r\n}",
- "/schemas/tui-config-schema.json\"\r\n}",
- "schemas/tui-config-schema.json\"\r\n}",
- "/tui-config-schema.json\"\r\n}",
- "tui-config-schema.json\"\r\n}",
- "-config-schema.json\"\r\n}",
- "config-schema.json\"\r\n}",
- "-schema.json\"\r\n}",
- "schema.json\"\r\n}",
- ".json\"\r\n}",
- "json\"\r\n}",
- "\"\r\n}",
- "\r\n}",
- "}",
- "")]
- [InlineData (
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- true,
- "\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- " \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "\"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "\"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- ".github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- ".io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- "Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- ".Gui/schemas/tui-config-schema.json\"\r\n}",
- "Gui/schemas/tui-config-schema.json\"\r\n}",
- "/schemas/tui-config-schema.json\"\r\n}",
- "schemas/tui-config-schema.json\"\r\n}",
- "/tui-config-schema.json\"\r\n}",
- "tui-config-schema.json\"\r\n}",
- "-config-schema.json\"\r\n}",
- "config-schema.json\"\r\n}",
- "-schema.json\"\r\n}",
- "schema.json\"\r\n}",
- ".json\"\r\n}",
- "json\"\r\n}",
- "\"\r\n}",
- "\r\n}",
- "}",
- "")]
- public void WordForward_WordWrap_False_True (string text, bool useSameRuneType, params string [] expectedText)
- {
- TextView tv = CreateTextView ();
- tv.UseSameRuneTypeForWords = useSameRuneType;
- ProcessDeleteWithCtrl ();
- tv.WordWrap = true;
- ProcessDeleteWithCtrl ();
- void ProcessDeleteWithCtrl ()
- {
- tv.Text = text;
- var idx = 0;
- while (!string.IsNullOrEmpty (tv.Text))
- {
- tv.NewKeyDownEvent (Key.Delete.WithCtrl);
- Assert.Equal (expectedText [idx].Replace ("\r\n", Environment.NewLine), tv.Text);
- idx++;
- }
- }
- }
- [Theory]
- [InlineData ("", false, "")]
- [InlineData ("", true, "")]
- [InlineData (" ", false, "")]
- [InlineData (" ", true, "")]
- [InlineData (" ", false, "")]
- [InlineData (" ", true, "")]
- [InlineData ("a", false, "")]
- [InlineData ("a", true, "")]
- [InlineData ("a ", false, "")]
- [InlineData ("a ", true, "")]
- [InlineData (" a ", false, " ", "")]
- [InlineData (" a ", true, " ", "")]
- [InlineData (" H1 ", false, " ", "")]
- [InlineData (" H1 ", true, " ", "")]
- [InlineData ("a$", false, "a", "")]
- [InlineData ("a$", true, "a", "")]
- [InlineData ("a$#", false, "a", "")]
- [InlineData ("a$#", true, "a$", "a", "")]
- [InlineData (" a$# ", false, " a", " ", "")]
- [InlineData (" a$# ", true, " a$", " a", " ", "")]
- [InlineData ("\"$schema\"", false, "\"$schema", "\"$", "")]
- [InlineData ("\"$schema\"", true, "\"$schema", "\"$", "\"", "")]
- [InlineData ("\"$schema\": \"", false, "\"$schema\": ", "\"$schema", "\"$", "")]
- [InlineData ("\"$schema\": \"", true, "\"$schema\": ", "\"$schema", "\"$", "\"", "")]
- [InlineData ("1ºªA", false, "")]
- [InlineData ("1ºªA", true, "")]
- [InlineData (
- "ºª\\!\"#%&/()?'«»*;,:._-@{[]}]|$=+´`~^<>£€¨",
- false,
- "ºª",
- "")]
- [InlineData (
- "ºª\\!\"#%&/()?'«»*;,:._-@{[]}]|$=+´`~^<>£€¨",
- true,
- "ºª\\!\"#%&/()?'«»*;,:._-@{[]}]",
- "ºª",
- "")]
- [InlineData (
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- false,
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/",
- "{\r\n \"$schema\": \"https://gui-cs.github.io",
- "{\r\n \"$schema\": \"https://gui-cs.github.",
- "{\r\n \"$schema\": \"https://gui-cs.github",
- "{\r\n \"$schema\": \"https://gui-cs.",
- "{\r\n \"$schema\": \"https://gui-cs",
- "{\r\n \"$schema\": \"https://gui-",
- "{\r\n \"$schema\": \"https://gui",
- "{\r\n \"$schema\": \"https://",
- "{\r\n \"$schema\": \"https",
- "{\r\n \"$schema\": \"",
- "{\r\n \"$schema\": ",
- "{\r\n \"$schema",
- "{\r\n \"$",
- "{\r\n ",
- "{\r\n",
- "{",
- "")]
- [InlineData (
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n}",
- true,
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"\r\n",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json\"",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.json",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema.",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-schema",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config-",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-config",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui-",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/tui",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas/",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/schemas",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui/",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.Gui",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal.",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/Terminal",
- "{\r\n \"$schema\": \"https://gui-cs.github.io/",
- "{\r\n \"$schema\": \"https://gui-cs.github.io",
- "{\r\n \"$schema\": \"https://gui-cs.github.",
- "{\r\n \"$schema\": \"https://gui-cs.github",
- "{\r\n \"$schema\": \"https://gui-cs.",
- "{\r\n \"$schema\": \"https://gui-cs",
- "{\r\n \"$schema\": \"https://gui-",
- "{\r\n \"$schema\": \"https://gui",
- "{\r\n \"$schema\": \"https://",
- "{\r\n \"$schema\": \"https",
- "{\r\n \"$schema\": \"",
- "{\r\n \"$schema\": ",
- "{\r\n \"$schema",
- "{\r\n \"$",
- "{\r\n \"",
- "{\r\n ",
- "{\r\n",
- "{",
- "")]
- public void WordBackward_WordWrap_False_True (string text, bool useSameRuneType, params string [] expectedText)
- {
- TextView tv = CreateTextView ();
- tv.UseSameRuneTypeForWords = useSameRuneType;
- ProcessBackspaceWithCtrl ();
- tv.WordWrap = true;
- ProcessBackspaceWithCtrl ();
- void ProcessBackspaceWithCtrl ()
- {
- tv.Text = text;
- tv.MoveEnd ();
- var idx = 0;
- while (!string.IsNullOrEmpty (tv.Text))
- {
- tv.NewKeyDownEvent (Key.Backspace.WithCtrl);
- Assert.Equal (expectedText [idx].Replace ("\r\n", Environment.NewLine), tv.Text);
- idx++;
- }
- }
- }
- [Theory]
- [InlineData ("", 0, false, "")]
- [InlineData ("", 0, true, "")]
- [InlineData ("a", 0, false, "a")]
- [InlineData ("a", 0, true, "a")]
- [InlineData ("a:", 0, false, "a")]
- [InlineData ("a:", 0, true, "a")]
- [InlineData ("a:", 1, false, ":")]
- [InlineData ("a:", 1, true, ":")]
- [InlineData ("a ", 0, false, "a ")]
- [InlineData ("a ", 0, true, "a")]
- [InlineData ("a ", 1, false, "a ")]
- [InlineData ("a ", 1, true, "a")]
- [InlineData ("a b", 0, false, "a ")]
- [InlineData ("a b", 0, true, "a")]
- [InlineData ("a b", 1, false, "a ")]
- [InlineData ("a b", 1, true, "a")]
- [InlineData ("a b ", 2, false, "b ")]
- [InlineData ("a b ", 2, true, "b")]
- [InlineData ("a b ", 3, false, "b ")]
- [InlineData ("a b ", 3, true, "b")]
- [InlineData (" a b ", 0, false, " ")]
- [InlineData (" a b ", 0, true, " ")]
- [InlineData (" a b ", 2, false, " ")]
- [InlineData (" a b ", 2, true, " ")]
- [InlineData (" a b ", 3, false, " ")]
- [InlineData (" a b ", 3, true, " ")]
- [InlineData (" H1$you ", 2, false, "H1")]
- [InlineData (" H1$you ", 2, true, "H1")]
- [InlineData (" H1$you ", 3, false, "$&#")]
- [InlineData (" H1$you ", 3, true, "$&#")]
- [InlineData (" H1$you ", 4, false, "$&#")]
- [InlineData (" H1$you ", 4, true, "$&#")]
- [InlineData (" H1$you ", 5, false, "$&#")]
- [InlineData (" H1$you ", 5, true, "$&#")]
- [InlineData (" H1$you ", 6, false, "2you ")]
- [InlineData (" H1$you ", 6, true, "2you")]
- public void ProcessDoubleClickSelection_False_True (string text, int col, bool selectWordOnly, string expectedText)
- {
- TextView tv = CreateTextView ();
- tv.Text = text;
- tv.SelectWordOnlyOnDoubleClick = selectWordOnly;
- Assert.True (tv.NewMouseEvent (new () { Position = new (col, 0), Flags = MouseFlags.Button1DoubleClicked }));
- Assert.Equal (expectedText, tv.SelectedText);
- }
- private TextView CreateTextView () { return new () { Width = 30, Height = 10 }; }
- }
|