diff --git a/Terminal.Gui/Core/ConsoleDriver.cs b/Terminal.Gui/Core/ConsoleDriver.cs index 86fc62a6f..6967eb962 100644 --- a/Terminal.Gui/Core/ConsoleDriver.cs +++ b/Terminal.Gui/Core/ConsoleDriver.cs @@ -1155,14 +1155,14 @@ namespace Terminal.Gui { public Rune RightBracket = ']'; /// - /// On Segment indicator for meter views (e.g. . + /// Blocks Segment indicator for meter views (e.g. . /// - public Rune OnMeterSegment = '\u258c'; + public Rune BlocksMeterSegment = '\u258c'; /// - /// Off Segment indicator for meter views (e.g. . + /// Continuous Segment indicator for meter views (e.g. . /// - public Rune OffMeterSegement = ' '; + public Rune ContinuousMeterSegment = '\u2588'; /// /// Make the attribute for the foreground and background colors. diff --git a/Terminal.Gui/Views/ProgressBar.cs b/Terminal.Gui/Views/ProgressBar.cs index 65cda41f1..85275139d 100644 --- a/Terminal.Gui/Views/ProgressBar.cs +++ b/Terminal.Gui/Views/ProgressBar.cs @@ -1,5 +1,54 @@ -using System; +using NStack; +using System; namespace Terminal.Gui { + /// + /// Specifies the style that a uses to indicate the progress of an operation. + /// + public enum ProgressBarStyle { + /// + /// Indicates progress by increasing the number of segmented blocks in a . + /// + Blocks, + /// + /// Indicates progress by increasing the size of a smooth, continuous bar in a . + /// + Continuous, + /// + /// Indicates progress by continuously scrolling a block across a in a marquee fashion. + /// + MarqueeBlocks, + /// + /// Indicates progress by continuously scrolling a block across a in a marquee fashion. + /// + MarqueeContinuous + + } + + /// + ///Specifies the format that a uses to indicate the visual presentation. + /// + public enum ProgressBarFormat { + /// + /// A simple visual presentation showing only the progress bar. + /// + Simple, + /// + /// A simple visual presentation showing the progress bar and the percentage. + /// + SimplePlusPercentage, + /// + /// A framed visual presentation showing only the progress bar. + /// + Framed, + /// + /// A framed visual presentation showing the progress bar and the percentage. + /// + FramedPlusPercentage, + /// + /// A framed visual presentation showing all with the progress bar padded. + /// + FramedProgressPadded + } /// /// A Progress Bar view that can indicate progress of an activity visually. @@ -16,7 +65,8 @@ namespace Terminal.Gui { /// public class ProgressBar : View { bool isActivity; - int activityPos, delta; + int [] activityPos; + int delta, padding; /// /// Initializes a new instance of the class, starts in percentage mode with an absolute position and size. @@ -24,17 +74,28 @@ namespace Terminal.Gui { /// Rect. public ProgressBar (Rect rect) : base (rect) { - CanFocus = false; - fraction = 0; + Initialize (rect); } /// /// Initializes a new instance of the class, starts in percentage mode and uses relative layout. /// public ProgressBar () : base () + { + Initialize (Rect.Empty); + } + + void Initialize (Rect rect) { CanFocus = false; fraction = 0; + ColorScheme = new ColorScheme () { + Normal = Application.Driver.MakeAttribute (Color.BrightGreen, Color.Gray), + HotNormal = Colors.Base.Normal + }; + if (rect.IsEmpty) { + Height = 1; + } } float fraction; @@ -46,32 +107,147 @@ namespace Terminal.Gui { public float Fraction { get => fraction; set { - fraction = value; + fraction = Math.Min (value, 1); isActivity = false; SetNeedsDisplay (); } } + ProgressBarStyle progressBarStyle; + + /// + /// Gets/Sets the progress bar style based on the + /// + public ProgressBarStyle ProgressBarStyle { + get => progressBarStyle; + set { + progressBarStyle = value; + switch (value) { + case ProgressBarStyle.Blocks: + SegmentCharacter = Driver.BlocksMeterSegment; + break; + case ProgressBarStyle.Continuous: + SegmentCharacter = Driver.ContinuousMeterSegment; + break; + case ProgressBarStyle.MarqueeBlocks: + SegmentCharacter = Driver.BlocksMeterSegment; + break; + case ProgressBarStyle.MarqueeContinuous: + SegmentCharacter = Driver.ContinuousMeterSegment; + break; + } + SetNeedsDisplay (); + } + } + + private ProgressBarFormat progressBarFormat; + + /// + /// Specifies the format that a uses to indicate the visual presentation. + /// + public ProgressBarFormat ProgressBarFormat { + get => progressBarFormat; + set { + progressBarFormat = value; + switch (progressBarFormat) { + case ProgressBarFormat.Simple: + Height = 1; + break; + case ProgressBarFormat.SimplePlusPercentage: + Height = 2; + break; + case ProgressBarFormat.Framed: + Height = 3; + break; + case ProgressBarFormat.FramedPlusPercentage: + Height = 4; + break; + case ProgressBarFormat.FramedProgressPadded: + Height = 6; + break; + } + SetNeedsDisplay (); + } + } + + private Rune segmentCharacter = Driver.BlocksMeterSegment; + + /// + /// Segment indicator for meter views. + /// + public Rune SegmentCharacter { + get => segmentCharacter; + set { + segmentCharacter = value; + SetNeedsDisplay (); + } + } + + /// + public override ustring Text { + get => GetPercentageText (); + set { + base.Text = SetPercentageText (value); + } + } + + ustring GetPercentageText () + { + switch (progressBarStyle) { + case ProgressBarStyle.Blocks: + case ProgressBarStyle.Continuous: + return $"{fraction * 100:F0}%"; + case ProgressBarStyle.MarqueeBlocks: + case ProgressBarStyle.MarqueeContinuous: + break; + } + + return base.Text; + } + + ustring SetPercentageText (ustring value) + { + switch (progressBarStyle) { + case ProgressBarStyle.Blocks: + case ProgressBarStyle.Continuous: + return $"{fraction * 100:F0}%"; + case ProgressBarStyle.MarqueeBlocks: + case ProgressBarStyle.MarqueeContinuous: + break; + } + + return value; + } + /// /// Notifies the that some progress has taken place. /// /// - /// If the is is percentage mode, it switches to activity - /// mode. If is in activity mode, the marker is moved. + /// If the is percentage mode, it switches to activity + /// mode. If is in activity mode, the marker is moved. /// public void Pulse () { + if (activityPos == null) { + PopulateActivityPos (); + } if (!isActivity) { isActivity = true; - activityPos = 0; delta = 1; } else { - activityPos += delta; - if (activityPos < 0) { - activityPos = 1; + for (int i = 0; i < activityPos.Length; i++) { + activityPos [i] += delta; + } + int fWidth = GetFrameWidth (); + if (activityPos [activityPos.Length - 1] < 0) { + for (int i = 0; i < activityPos.Length; i++) { + activityPos [i] = i - activityPos.Length + 2; + } delta = 1; - } else if (activityPos >= Frame.Width) { - activityPos = Frame.Width - 2; + } else if (activityPos [0] >= fWidth) { + for (int i = 0; i < activityPos.Length; i++) { + activityPos [i] = fWidth + i - 2; + } delta = -1; } } @@ -80,27 +256,97 @@ namespace Terminal.Gui { } /// - public override void Redraw(Rect region) + public override void Redraw (Rect region) { + DrawFrame (); + Driver.SetAttribute (ColorScheme.Normal); - int top = Frame.Width; + int fWidth = GetFrameWidth (); if (isActivity) { - Move (0, 0); - for (int i = 0; i < top; i++) - if (i == activityPos) - Driver.AddRune (Driver.Stipple); + Move (padding, padding); + for (int i = 0; i < fWidth; i++) + if (Array.IndexOf (activityPos, i) != -1) + Driver.AddRune (SegmentCharacter); else Driver.AddRune (' '); } else { - Move (0, 0); - int mid = (int)(fraction * top); + Move (padding, padding); + int mid = (int)(fraction * fWidth); int i; - for (i = 0; i < mid; i++) - Driver.AddRune (Driver.Stipple); - for (; i < top; i++) + for (i = 0; i < mid & i < fWidth; i++) + Driver.AddRune (SegmentCharacter); + for (; i < fWidth; i++) Driver.AddRune (' '); } + + DrawText (fWidth); + } + + int GetFrameWidth () + { + switch (progressBarFormat) { + case ProgressBarFormat.Simple: + case ProgressBarFormat.SimplePlusPercentage: + break; + case ProgressBarFormat.Framed: + case ProgressBarFormat.FramedPlusPercentage: + return Frame.Width - 2; + case ProgressBarFormat.FramedProgressPadded: + return Frame.Width - 2 - padding; + } + + return Frame.Width; + } + + void DrawText (int fWidth) + { + switch (progressBarFormat) { + case ProgressBarFormat.Simple: + case ProgressBarFormat.Framed: + break; + case ProgressBarFormat.SimplePlusPercentage: + case ProgressBarFormat.FramedPlusPercentage: + case ProgressBarFormat.FramedProgressPadded: + var tf = new TextFormatter () { + Alignment = TextAlignment.Centered, + Text = Text + }; + var row = padding + (progressBarFormat == ProgressBarFormat.FramedProgressPadded + ? 2 : 1); + Move (padding, row); + var rect = new Rect (padding, row, fWidth, Frame.Height); + tf?.Draw (ViewToScreen (rect), ColorScheme.HotNormal, ColorScheme.HotNormal); + break; + } + } + + void DrawFrame () + { + switch (progressBarFormat) { + case ProgressBarFormat.Simple: + case ProgressBarFormat.SimplePlusPercentage: + padding = 0; + break; + case ProgressBarFormat.Framed: + case ProgressBarFormat.FramedPlusPercentage: + padding = 1; + Application.Driver.DrawWindowFrame (ViewToScreen (Bounds), padding, padding, padding, padding, true); + break; + case ProgressBarFormat.FramedProgressPadded: + padding = 2; + Application.Driver.DrawWindowFrame (ViewToScreen (Bounds), padding, padding, padding, padding + 1, true); + Application.Driver.DrawWindowFrame (ViewToScreen (Bounds), padding - 1, padding - 1, padding - 1, padding - 1, true); + break; + } + } + + void PopulateActivityPos () + { + activityPos = new int [Math.Min (Frame.Width / 3, 5)]; + for (int i = 0; i < activityPos.Length; i++) { + activityPos [i] = i - activityPos.Length + 1; + } } /// diff --git a/UICatalog/Scenarios/ProgressBarStyles.cs b/UICatalog/Scenarios/ProgressBarStyles.cs new file mode 100644 index 000000000..1d016b9fd --- /dev/null +++ b/UICatalog/Scenarios/ProgressBarStyles.cs @@ -0,0 +1,134 @@ +using System; +using System.Linq; +using System.Threading; +using Terminal.Gui; + +namespace UICatalog { + [ScenarioMetadata (Name: "ProgressBar Styles", Description: "Shows the ProgressBar Styles")] + [ScenarioCategory ("Controls")] + [ScenarioCategory ("MainLoop")] + class ProgressBarStyles : Scenario { + private Timer _fractionTimer; + private Timer _pulseTimer; + private const uint _timerTick = 100; + + public override void Setup () + { + const float fractionStep = 0.01F; + const int pbWidth = 20; + + var pbFormatEnum = Enum.GetValues (typeof (ProgressBarFormat)).Cast ().ToList (); + + var rbPBFormat = new RadioGroup (pbFormatEnum.Select (e => NStack.ustring.Make (e.ToString ())).ToArray ()) { + X = Pos.Center (), + Y = 1 + }; + Win.Add (rbPBFormat); + + var label = new Label ("Blocks") { + X = Pos.Center (), + Y = Pos.Bottom (rbPBFormat) + 1 + }; + Win.Add (label); + + var blocksPB = new ProgressBar () { + X = Pos.Center (), + Y = Pos.Y (label) + 1, + Width = pbWidth + }; + Win.Add (blocksPB); + + label = new Label ("Continuous") { + X = Pos.Center (), + Y = Pos.Bottom (blocksPB) + 1 + }; + Win.Add (label); + + var continuousPB = new ProgressBar () { + X = Pos.Center (), + Y = Pos.Y (label) + 1, + Width = pbWidth, + ProgressBarStyle = ProgressBarStyle.Continuous + }; + Win.Add (continuousPB); + + var button = new Button ("Start timer") { + X = Pos.Center (), + Y = Pos.Bottom (continuousPB) + 1 + }; + button.Clicked += () => { + if (_fractionTimer == null) { + button.CanFocus = false; + blocksPB.Fraction = 0; + continuousPB.Fraction = 0; + float fractionSum = 0; + _fractionTimer = new Timer ((_) => { + fractionSum += fractionStep; + blocksPB.Fraction = fractionSum; + continuousPB.Fraction = fractionSum; + if (fractionSum > 1) { + _fractionTimer.Dispose (); + _fractionTimer = null; + button.CanFocus = true; + } + Application.MainLoop.Driver.Wakeup (); + }, null, 0, _timerTick); + } + }; + Win.Add (button); + + label = new Label ("Marquee Blocks") { + X = Pos.Center (), + Y = Pos.Y (button) + 3 + }; + Win.Add (label); + + var marqueesBlocksPB = new ProgressBar () { + X = Pos.Center (), + Y = Pos.Y (label) + 1, + Width = pbWidth, + ProgressBarStyle = ProgressBarStyle.MarqueeBlocks + }; + Win.Add (marqueesBlocksPB); + + label = new Label ("Marquee Continuous") { + X = Pos.Center (), + Y = Pos.Bottom (marqueesBlocksPB) + 1 + }; + Win.Add (label); + + var marqueesContinuousPB = new ProgressBar () { + X = Pos.Center (), + Y = Pos.Y (label) + 1, + Width = pbWidth, + ProgressBarStyle = ProgressBarStyle.MarqueeContinuous + }; + Win.Add (marqueesContinuousPB); + + rbPBFormat.SelectedItemChanged += (e) => { + blocksPB.ProgressBarFormat = (ProgressBarFormat)e.SelectedItem; + continuousPB.ProgressBarFormat = (ProgressBarFormat)e.SelectedItem; + marqueesBlocksPB.ProgressBarFormat = (ProgressBarFormat)e.SelectedItem; + marqueesContinuousPB.ProgressBarFormat = (ProgressBarFormat)e.SelectedItem; + }; + + _pulseTimer = new Timer ((_) => { + marqueesBlocksPB.Text = marqueesContinuousPB.Text = DateTime.Now.TimeOfDay.ToString (); + marqueesBlocksPB.Pulse (); + marqueesContinuousPB.Pulse (); + Application.MainLoop.Driver.Wakeup (); + }, null, 0, 300); + + Top.Unloaded += Top_Unloaded; + + void Top_Unloaded () + { + if (_pulseTimer != null) { + _pulseTimer.Dispose (); + _pulseTimer = null; + Top.Unloaded -= Top_Unloaded; + } + } + } + } +} \ No newline at end of file diff --git a/UnitTests/ProgressBarTests.cs b/UnitTests/ProgressBarTests.cs new file mode 100644 index 000000000..c8531a446 --- /dev/null +++ b/UnitTests/ProgressBarTests.cs @@ -0,0 +1,848 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Terminal.Gui.Views { + public class ProgressBarTests { + [Fact] + [AutoInitShutdown] + public void Default_Contructor () + { + var pb = new ProgressBar (); + + Assert.False (pb.CanFocus); + Assert.Equal (0, pb.Fraction); + Assert.Equal (new Attribute (Color.BrightGreen, Color.Gray), + new Attribute (pb.ColorScheme.Normal.Foreground, pb.ColorScheme.Normal.Background)); + Assert.Equal (Colors.Base.Normal, pb.ColorScheme.HotNormal); + Assert.Equal (1, pb.Height); + Assert.Equal (ProgressBarStyle.Blocks, pb.ProgressBarStyle); + Assert.Equal (ProgressBarFormat.Simple, pb.ProgressBarFormat); + Assert.Equal (Application.Driver.BlocksMeterSegment, pb.SegmentCharacter); + } + + [Fact] + [AutoInitShutdown] + public void ProgressBarStyle_Setter () + { + var driver = ((FakeDriver)Application.Driver); + + var pb = new ProgressBar (); + + pb.ProgressBarStyle = ProgressBarStyle.Blocks; + Assert.Equal (driver.BlocksMeterSegment, pb.SegmentCharacter); + + pb.ProgressBarStyle = ProgressBarStyle.Continuous; + Assert.Equal (driver.ContinuousMeterSegment, pb.SegmentCharacter); + + pb.ProgressBarStyle = ProgressBarStyle.MarqueeBlocks; + Assert.Equal (driver.BlocksMeterSegment, pb.SegmentCharacter); + + pb.ProgressBarStyle = ProgressBarStyle.MarqueeContinuous; + Assert.Equal (driver.ContinuousMeterSegment, pb.SegmentCharacter); + } + + [Fact] + [AutoInitShutdown] + public void ProgressBarFormat_Setter () + { + var pb = new ProgressBar (); + + pb.ProgressBarFormat = ProgressBarFormat.Simple; + Assert.Equal (1, pb.Height); + + pb.ProgressBarFormat = ProgressBarFormat.SimplePlusPercentage; + Assert.Equal (2, pb.Height); + + pb.ProgressBarFormat = ProgressBarFormat.Framed; + Assert.Equal (3, pb.Height); + + pb.ProgressBarFormat = ProgressBarFormat.FramedPlusPercentage; + Assert.Equal (4, pb.Height); + + pb.ProgressBarFormat = ProgressBarFormat.FramedProgressPadded; + Assert.Equal (6, pb.Height); + } + + [Fact] + [AutoInitShutdown] + public void ProgressBarFormat_MarqueeBlocks_MarqueeContinuous_Setter () + { + var driver = ((FakeDriver)Application.Driver); + + var pb1 = new ProgressBar () { ProgressBarStyle = ProgressBarStyle.MarqueeBlocks }; + var pb2 = new ProgressBar () { ProgressBarStyle = ProgressBarStyle.MarqueeContinuous }; + + pb1.ProgressBarFormat = ProgressBarFormat.Simple; + Assert.Equal (ProgressBarFormat.Simple, pb1.ProgressBarFormat); + Assert.Equal (1, pb1.Height); + pb2.ProgressBarFormat = ProgressBarFormat.Simple; + Assert.Equal (ProgressBarFormat.Simple, pb2.ProgressBarFormat); + Assert.Equal (1, pb2.Height); + + pb1.ProgressBarFormat = ProgressBarFormat.SimplePlusPercentage; + Assert.Equal (ProgressBarFormat.SimplePlusPercentage, pb1.ProgressBarFormat); + Assert.Equal (2, pb1.Height); + pb2.ProgressBarFormat = ProgressBarFormat.SimplePlusPercentage; + Assert.Equal (ProgressBarFormat.SimplePlusPercentage, pb2.ProgressBarFormat); + Assert.Equal (2, pb2.Height); + + pb1.ProgressBarFormat = ProgressBarFormat.Framed; + Assert.Equal (ProgressBarFormat.Framed, pb1.ProgressBarFormat); + Assert.Equal (3, pb1.Height); + pb2.ProgressBarFormat = ProgressBarFormat.Framed; + Assert.Equal (ProgressBarFormat.Framed, pb2.ProgressBarFormat); + Assert.Equal (3, pb2.Height); + + pb1.ProgressBarFormat = ProgressBarFormat.FramedPlusPercentage; + Assert.Equal (ProgressBarFormat.FramedPlusPercentage, pb1.ProgressBarFormat); + Assert.Equal (4, pb1.Height); + pb2.ProgressBarFormat = ProgressBarFormat.FramedPlusPercentage; + Assert.Equal (ProgressBarFormat.FramedPlusPercentage, pb2.ProgressBarFormat); + Assert.Equal (4, pb2.Height); + + pb1.ProgressBarFormat = ProgressBarFormat.FramedProgressPadded; + Assert.Equal (ProgressBarFormat.FramedProgressPadded, pb1.ProgressBarFormat); + Assert.Equal (6, pb1.Height); + pb2.ProgressBarFormat = ProgressBarFormat.FramedProgressPadded; + Assert.Equal (ProgressBarFormat.FramedProgressPadded, pb2.ProgressBarFormat); + Assert.Equal (6, pb2.Height); + } + + [Fact] + [AutoInitShutdown] + public void Text_Setter_Not_Marquee () + { + var pb = new ProgressBar () { Fraction = 0.25F}; + + pb.ProgressBarFormat = ProgressBarFormat.Simple; + pb.Text = "blabla"; + Assert.Equal ("25%", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.SimplePlusPercentage; + pb.Text = "bleble"; + Assert.Equal ("25%", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.Framed; + Assert.Equal ("25%", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.FramedPlusPercentage; + Assert.Equal ("25%", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.FramedProgressPadded; + Assert.Equal ("25%", pb.Text); + } + + [Fact] + [AutoInitShutdown] + public void Text_Setter_Marquee () + { + var pb = new ProgressBar () { Fraction = 0.25F, ProgressBarStyle = ProgressBarStyle.MarqueeBlocks }; + + pb.ProgressBarFormat = ProgressBarFormat.Simple; + pb.Text = "blabla"; + Assert.Equal ("blabla", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.SimplePlusPercentage; + pb.Text = "bleble"; + Assert.Equal ("bleble", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.Framed; + Assert.Equal ("bleble", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.FramedPlusPercentage; + Assert.Equal ("bleble", pb.Text); + + pb.ProgressBarFormat = ProgressBarFormat.FramedProgressPadded; + Assert.Equal ("bleble", pb.Text); + } + + [Fact] + [AutoInitShutdown] + public void Pulse_Redraw () + { + var driver = ((FakeDriver)Application.Driver); + + var pb = new ProgressBar () { + Width = 15, + ProgressBarStyle = ProgressBarStyle.MarqueeBlocks + }; + + for (int i = 0; i < 38; i++) { + pb.Pulse (); + pb.Redraw (pb.Bounds); + if (i == 0) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 1) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 2) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 3) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 4) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 5) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 6) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 7) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 8) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 9) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 10) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 11) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 12) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 13) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 14) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 15) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 16) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 17) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 18) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 19) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 20) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 21) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 22) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 14, 0]); + } else if (i == 23) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 24) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 25) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 26) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 27) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 28) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 29) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 30) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 31) { + Assert.Equal (' ', (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 32) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 33) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 34) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 35) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 36) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } else if (i == 37) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 6, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 7, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 8, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 9, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 10, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 11, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 12, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 13, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 14, 0]); + } + } + } + + [Fact] + [AutoInitShutdown] + public void Fraction_Redraw () + { + var driver = ((FakeDriver)Application.Driver); + + var pb = new ProgressBar () { + Width = 5 + }; + + for (int i = 0; i <= pb.Frame.Width; i++) { + pb.Fraction += 0.2F; + pb.Redraw (pb.Bounds); + if (i == 0) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + } else if (i == 1) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + } else if (i == 2) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + } else if (i == 3) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + } else if (i == 4) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + } else if (i == 5) { + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 0, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 1, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 2, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 3, 0]); + Assert.Equal (driver.BlocksMeterSegment, (double)driver.Contents [0, 4, 0]); + Assert.Equal (' ', (double)driver.Contents [0, 5, 0]); + } + } + } + } +}