/// <summary>
        /// Builds a new instance of SourceCodeDisplay.
        /// </summary>
        public SourceCodeDisplay()
        {
            ErrorList errorList = new ErrorList();
            _codeBox = new CodeBox();

            _stacktraceView = errorList;
            _stacktraceView.AutoSelectFirstItem = true;
            _stacktraceView.SelectedItemChanged += new EventHandler(SelectedItemChanged);
            _codeView = _codeBox;

            _btnPlugin = ErrorToolbar.NewStripButton(true, "Display source code context", Resources.ImageSourceCodeDisplay, null);
            _btnSwap = ErrorToolbar.NewStripButton(false, "ReverseOrder item order", Resources.ImageReverseItemOrder, OnClick);

            SplitterBox splitter = new SplitterBox();
            _splitter = splitter;
            _splitter.SplitterDistanceChanged += new EventHandler(_splitter_DistanceChanged);
            _splitter.OrientationChanged += new EventHandler(_splitter_OrientationChanged);

            splitter.Control1 = errorList;
            splitter.Control2 = _codeBox;

            _codeBox.ShowCurrentLine = true;

            return;
        }
        public void SetUp()
        {
            _empty = new ErrorList();
            _filled = new ErrorList();
            _filled.StackTrace =
                "à SomeClass.SomeMethod() dans C:\\folder\\file1.cs:ligne 20\r\n" +
                "à ExternClass.ExternMethod()\r\n" +
                "à AnotherExternClass.AnotherExternMethod()\r\n" +
                "à SomeClass2.SomeMethod2() dans C:\\folder\\file2.cs:ligne 42\r\n" +
                "à SomeClass3.SomeMethod3() dans C:\\folder\\AnotherFile2.cs:ligne 93\r\n";

            _renderer = new DefaultErrorListRenderer();

            Image img = new Bitmap(300, 100);
            _gr = Graphics.FromImage(img);
            
            return;
        }
        public void CanReportInvalidItems()
        {
            ErrorList list = new ErrorList();

            // feeding ErrorList with garbage details should make it
            // fail gracefully.

            list.StackTrace =
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\r\n" +
                "Nam at nisi ut neque sollicitudin ultrices. Sed rhoncus\r\n" +
                "rhoncus arcu. Morbi eu elit ut augue congue luctus. Nullam\r\n" +
                "eu eros. Nunc blandit varius orci. Mauris condimentum diam\r\n" +
                "ac ligula. Nullam ut metus. Maecenas sagittis nibh in nisl.\r\n" +
                "Phasellus rhoncus diam a nulla. Integer vestibulum.\r\n";

            Assert.That(list.Items.Count, Is.EqualTo(1));
            Assert.That(list.Items[0].BaseMethodName, Is.EqualTo("Fail to parse stack trace"));
            Assert.IsFalse(list.Items[0].HasSourceAttachment);

            return;
        }
        public void ListOrderPolicy()
        {
            ErrorList list = new ErrorList();

            // Check ListOrderPolicy behavior when AutoSelectFirstItem is not set

            list.AutoSelectFirstItem = false;
            list.ListOrderPolicy = ErrorListOrderPolicy.ReverseOrder;
            Assert.That(list.ListOrderPolicy, Is.EqualTo(ErrorListOrderPolicy.ReverseOrder));

            list.StackTrace = _trace1;
            Assert.That(list.Items[0].LineNumber, Is.EqualTo(93));
            Assert.That(list.Items[1].LineNumber, Is.EqualTo(42));
            Assert.That(list.Items[2].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[3].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[4].LineNumber, Is.EqualTo(20));

            list.StackTrace = _trace2;
            Assert.That(list.Items[0].LineNumber, Is.EqualTo(42));
            Assert.That(list.Items[1].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[2].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[3].LineNumber, Is.EqualTo(20));

            list.ListOrderPolicy = ErrorListOrderPolicy.InitialOrder;
            Assert.That(list.ListOrderPolicy, Is.EqualTo(ErrorListOrderPolicy.InitialOrder));

            Assert.That(list.Items[0].LineNumber, Is.EqualTo(20));
            Assert.That(list.Items[1].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[2].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[3].LineNumber, Is.EqualTo(42));

            list.StackTrace = _trace1;
            Assert.That(list.Items[0].LineNumber, Is.EqualTo(20));
            Assert.That(list.Items[1].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[2].LineNumber, Is.EqualTo(0));
            Assert.That(list.Items[3].LineNumber, Is.EqualTo(42));
            Assert.That(list.Items[4].LineNumber, Is.EqualTo(93));

            // When the AutoSelectFirstItem flag is set, the selected item
            // is the one the most on top of the list, with source attachment.
            // Where the most on top depends whether the order is kept unchanged
            // or reversed.

            list.AutoSelectFirstItem = true;
            list.ListOrderPolicy = ErrorListOrderPolicy.InitialOrder;
            list.StackTrace = _trace1;
            Assert.That(list.SelectedItem.LineNumber, Is.EqualTo(20));

            list.ListOrderPolicy = ErrorListOrderPolicy.ReverseOrder;
            list.StackTrace = _trace1;
            Assert.That(list.SelectedItem.LineNumber, Is.EqualTo(93));

            return;
        }